-rw-r--r-- | noncore/settings/appearance2/appearance.cpp | 25 | ||||
-rw-r--r-- | noncore/settings/appearance2/sample.cpp | 4 | ||||
-rw-r--r-- | noncore/settings/appearance2/sample.h | 2 |
3 files changed, 18 insertions, 13 deletions
diff --git a/noncore/settings/appearance2/appearance.cpp b/noncore/settings/appearance2/appearance.cpp index 2f3ba74..e9e0ad9 100644 --- a/noncore/settings/appearance2/appearance.cpp +++ b/noncore/settings/appearance2/appearance.cpp | |||
@@ -391,70 +391,72 @@ QWidget *Appearance::createAdvancedTab ( QWidget *parent, Config &cfg ) | |||
391 | 391 | ||
392 | m_tabstyle_bottom = new QRadioButton( tr( "Bottom" ), tab, "tabposbottom" ); | 392 | m_tabstyle_bottom = new QRadioButton( tr( "Bottom" ), tab, "tabposbottom" ); |
393 | btngrp-> insert ( m_tabstyle_bottom ); | 393 | btngrp-> insert ( m_tabstyle_bottom ); |
394 | gridLayout-> addWidget( m_tabstyle_bottom, 1, 2 ); | 394 | gridLayout-> addWidget( m_tabstyle_bottom, 1, 2 ); |
395 | QWhatsThis::add( m_tabstyle_bottom, tr( "Click here so that tabs appear at the bottom of the window." ) ); | 395 | QWhatsThis::add( m_tabstyle_bottom, tr( "Click here so that tabs appear at the bottom of the window." ) ); |
396 | 396 | ||
397 | m_tabstyle_top-> setChecked ( tabtop ); | 397 | m_tabstyle_top-> setChecked ( tabtop ); |
398 | m_tabstyle_bottom-> setChecked ( !tabtop ); | 398 | m_tabstyle_bottom-> setChecked ( !tabtop ); |
399 | 399 | ||
400 | m_original_tabstyle = style; | 400 | m_original_tabstyle = style; |
401 | m_original_tabpos = tabtop; | 401 | m_original_tabpos = tabtop; |
402 | 402 | ||
403 | return tab; | 403 | return tab; |
404 | } | 404 | } |
405 | 405 | ||
406 | 406 | ||
407 | Appearance::Appearance( QWidget* parent, const char* name, WFlags ) | 407 | Appearance::Appearance( QWidget* parent, const char* name, WFlags ) |
408 | : QDialog ( parent, name, true, WStyle_ContextHelp ) | 408 | : QDialog ( parent, name, true, WStyle_ContextHelp ) |
409 | { | 409 | { |
410 | setCaption( tr( "Appearance" ) ); | 410 | setCaption( tr( "Appearance" ) ); |
411 | 411 | ||
412 | Config config( "qpe" ); | 412 | Config config( "qpe" ); |
413 | config.setGroup( "Appearance" ); | 413 | config.setGroup( "Appearance" ); |
414 | 414 | ||
415 | QVBoxLayout *top = new QVBoxLayout ( this, 3, 3 ); | 415 | QVBoxLayout *top = new QVBoxLayout ( this, 3, 3 ); |
416 | 416 | ||
417 | m_sample = new SampleWindow ( this ); | 417 | m_sample = new SampleWindow ( this ); |
418 | m_sample-> setDecoration ( new DefaultWindowDecoration ( )); | 418 | m_sample-> setDecoration ( new DefaultWindowDecoration ( )); |
419 | QWhatsThis::add( m_sample, tr( "This is a preview window. Look here to see your new appearance as options are changed." ) ); | 419 | QWhatsThis::add( m_sample, tr( "This is a preview window. Look here to see your new appearance as options are changed." ) ); |
420 | 420 | ||
421 | OTabWidget* tw = new OTabWidget ( this, "tabwidget", OTabWidget::Global, OTabWidget::Bottom ); | 421 | OTabWidget* tw = new OTabWidget ( this, "tabwidget", OTabWidget::Global, OTabWidget::Bottom ); |
422 | QWidget *styletab; | 422 | QWidget *styletab; |
423 | 423 | ||
424 | tw-> addTab ( styletab = createStyleTab ( tw, config ), "appearance/style.png", tr( "Style" )); | 424 | m_color_list = 0; |
425 | tw-> addTab ( createFontTab ( tw, config ), "appearance/font.png", tr( "Font" )); | 425 | |
426 | tw-> addTab ( createColorTab ( tw, config ), "appearance/color.png", tr( "Colors" ) ); | 426 | tw-> addTab ( styletab = createStyleTab ( tw, config ), "appearance/style", tr( "Style" )); |
427 | tw-> addTab ( createDecoTab ( tw, config ), "appearance/deco.png", tr( "Windows" ) ); | 427 | tw-> addTab ( createFontTab ( tw, config ), "appearance/font", tr( "Font" )); |
428 | tw-> addTab ( m_advtab = createAdvancedTab ( tw, config ), "appearance/advanced.png", tr( "Advanced" ) ); | 428 | tw-> addTab ( createColorTab ( tw, config ), "appearance/color", tr( "Colors" ) ); |
429 | tw-> addTab ( createDecoTab ( tw, config ), "appearance/deco", tr( "Windows" ) ); | ||
430 | tw-> addTab ( m_advtab = createAdvancedTab ( tw, config ), "appearance/advanced", tr( "Advanced" ) ); | ||
429 | 431 | ||
430 | top-> addWidget ( tw, 10 ); | 432 | top-> addWidget ( tw, 10 ); |
431 | top-> addWidget ( m_sample, 1 ); | 433 | top-> addWidget ( m_sample, 1 ); |
432 | 434 | ||
433 | tw-> setCurrentTab ( styletab ); | 435 | tw-> setCurrentTab ( styletab ); |
434 | connect ( tw, SIGNAL( currentChanged ( QWidget * )), this, SLOT( tabChanged ( QWidget * ))); | 436 | connect ( tw, SIGNAL( currentChanged ( QWidget * )), this, SLOT( tabChanged ( QWidget * ))); |
435 | 437 | ||
436 | m_style_changed = m_font_changed = m_color_changed = m_deco_changed = false; | 438 | m_style_changed = m_font_changed = m_color_changed = m_deco_changed = false; |
437 | } | 439 | } |
438 | 440 | ||
439 | Appearance::~Appearance() | 441 | Appearance::~Appearance() |
440 | { | 442 | { |
441 | } | 443 | } |
442 | 444 | ||
443 | void Appearance::tabChanged ( QWidget *w ) | 445 | void Appearance::tabChanged ( QWidget *w ) |
444 | { | 446 | { |
445 | if ( w == m_advtab ) { | 447 | if ( w == m_advtab ) { |
446 | m_sample-> hide ( ); | 448 | m_sample-> hide ( ); |
447 | updateGeometry ( ); // shouldn't be necessary ... | 449 | updateGeometry ( ); // shouldn't be necessary ... |
448 | } | 450 | } |
449 | else | 451 | else |
450 | m_sample-> show ( ); | 452 | m_sample-> show ( ); |
451 | } | 453 | } |
452 | 454 | ||
453 | void Appearance::accept ( ) | 455 | void Appearance::accept ( ) |
454 | { | 456 | { |
455 | bool newtabpos = m_tabstyle_top-> isChecked ( ); | 457 | bool newtabpos = m_tabstyle_top-> isChecked ( ); |
456 | int newtabstyle = m_tabstyle_list-> currentItem ( ); | 458 | int newtabstyle = m_tabstyle_list-> currentItem ( ); |
457 | 459 | ||
458 | Config config ( "qpe" ); | 460 | Config config ( "qpe" ); |
459 | config. setGroup ( "Appearance" ); | 461 | config. setGroup ( "Appearance" ); |
460 | 462 | ||
@@ -499,68 +501,71 @@ void Appearance::accept ( ) | |||
499 | int fl = 0; | 501 | int fl = 0; |
500 | fl |= ( it-> noStyle ( ) ? 0x01 : 0 ); | 502 | fl |= ( it-> noStyle ( ) ? 0x01 : 0 ); |
501 | fl |= ( it-> noFont ( ) ? 0x02 : 0 ); | 503 | fl |= ( it-> noFont ( ) ? 0x02 : 0 ); |
502 | fl |= ( it-> noDeco ( ) ? 0x04 : 0 ); | 504 | fl |= ( it-> noDeco ( ) ? 0x04 : 0 ); |
503 | exceptstr = QString::number ( fl, 32 ); | 505 | exceptstr = QString::number ( fl, 32 ); |
504 | exceptstr.append( it-> pattern ( )); | 506 | exceptstr.append( it-> pattern ( )); |
505 | sl << exceptstr; | 507 | sl << exceptstr; |
506 | } | 508 | } |
507 | config. writeEntry ( "NoStyle", sl, ';' ); | 509 | config. writeEntry ( "NoStyle", sl, ';' ); |
508 | config. writeEntry ( "ForceStyle", m_force-> isChecked ( )); | 510 | config. writeEntry ( "ForceStyle", m_force-> isChecked ( )); |
509 | 511 | ||
510 | config. write ( ); // need to flush the config info first | 512 | config. write ( ); // need to flush the config info first |
511 | Global::applyStyle ( ); | 513 | Global::applyStyle ( ); |
512 | 514 | ||
513 | if ( QMessageBox::warning ( this, tr( "Restart" ), tr( "Do you want to restart %1 now?" ). arg ( ODevice::inst ( )-> system ( ) == System_Zaurus ? "Qtopia" : "Opie" ), tr( "Yes" ), tr( "No" ), 0, 0, 1 ) == 0 ) { | 515 | if ( QMessageBox::warning ( this, tr( "Restart" ), tr( "Do you want to restart %1 now?" ). arg ( ODevice::inst ( )-> system ( ) == System_Zaurus ? "Qtopia" : "Opie" ), tr( "Yes" ), tr( "No" ), 0, 0, 1 ) == 0 ) { |
514 | QCopEnvelope e( "QPE/System", "restart()" ); | 516 | QCopEnvelope e( "QPE/System", "restart()" ); |
515 | } | 517 | } |
516 | 518 | ||
517 | QDialog::accept ( ); | 519 | QDialog::accept ( ); |
518 | } | 520 | } |
519 | 521 | ||
520 | void Appearance::done ( int r ) | 522 | void Appearance::done ( int r ) |
521 | { | 523 | { |
522 | QDialog::done ( r ); | 524 | QDialog::done ( r ); |
523 | close ( ); | 525 | close ( ); |
524 | } | 526 | } |
525 | 527 | ||
526 | 528 | ||
527 | void Appearance::styleClicked ( int index ) | 529 | void Appearance::styleClicked ( int index ) |
528 | { | 530 | { |
529 | StyleListItem *sli = (StyleListItem *) m_style_list-> item ( index ); | 531 | StyleListItem *sli = (StyleListItem *) m_style_list-> item ( index ); |
530 | m_style_settings-> setEnabled ( sli ? sli-> hasSettings ( ) : false ); | 532 | m_style_settings-> setEnabled ( sli ? sli-> hasSettings ( ) : false ); |
531 | 533 | ||
532 | if ( m_sample && sli && sli-> style ( )) | 534 | if ( m_sample && sli && sli-> style ( )) { |
533 | m_sample-> setStyle2 ( sli-> style ( )); | 535 | int ci = m_color_list ? m_color_list-> currentItem ( ) : -1; |
534 | 536 | ||
537 | m_sample-> setStyle2 ( sli-> style ( ), ci < 0 ? palette ( ) : ((ColorListItem *) m_color_list-> item ( ci ))-> palette ( )); | ||
538 | } | ||
539 | |||
535 | m_style_changed |= ( index != m_original_style ); | 540 | m_style_changed |= ( index != m_original_style ); |
536 | } | 541 | } |
537 | 542 | ||
538 | void Appearance::styleSettingsClicked ( ) | 543 | void Appearance::styleSettingsClicked ( ) |
539 | { | 544 | { |
540 | StyleListItem *item = (StyleListItem *) m_style_list-> item ( m_style_list-> currentItem ( )); | 545 | StyleListItem *item = (StyleListItem *) m_style_list-> item ( m_style_list-> currentItem ( )); |
541 | 546 | ||
542 | if ( item && item-> hasSettings ( )) { | 547 | if ( item && item-> hasSettings ( )) { |
543 | QDialog *d = new QDialog ( this, "SETTINGS-DLG", true ); | 548 | QDialog *d = new QDialog ( this, "SETTINGS-DLG", true ); |
544 | QVBoxLayout *vbox = new QVBoxLayout ( d, 3, 0 ); | 549 | QVBoxLayout *vbox = new QVBoxLayout ( d, 3, 0 ); |
545 | 550 | ||
546 | QWidget *w = item-> settings ( d ); | 551 | QWidget *w = item-> settings ( d ); |
547 | 552 | ||
548 | if ( w ) { | 553 | if ( w ) { |
549 | vbox-> addWidget ( w ); | 554 | vbox-> addWidget ( w ); |
550 | 555 | ||
551 | d-> setCaption ( w-> caption ( )); | 556 | d-> setCaption ( w-> caption ( )); |
552 | 557 | ||
553 | d-> showMaximized ( ); | 558 | d-> showMaximized ( ); |
554 | bool accepted = ( d-> exec ( ) == QDialog::Accepted ); | 559 | bool accepted = ( d-> exec ( ) == QDialog::Accepted ); |
555 | 560 | ||
556 | if ( item-> setSettings ( accepted )) | 561 | if ( item-> setSettings ( accepted )) |
557 | m_style_changed = true; | 562 | m_style_changed = true; |
558 | } | 563 | } |
559 | delete d; | 564 | delete d; |
560 | } | 565 | } |
561 | } | 566 | } |
562 | 567 | ||
563 | void Appearance::decoClicked ( int index ) | 568 | void Appearance::decoClicked ( int index ) |
564 | { | 569 | { |
565 | DecoListItem *dli = (DecoListItem *) m_deco_list-> item ( index ); | 570 | DecoListItem *dli = (DecoListItem *) m_deco_list-> item ( index ); |
566 | 571 | ||
diff --git a/noncore/settings/appearance2/sample.cpp b/noncore/settings/appearance2/sample.cpp index 6bbed4b..b3a9d48 100644 --- a/noncore/settings/appearance2/sample.cpp +++ b/noncore/settings/appearance2/sample.cpp | |||
@@ -80,72 +80,72 @@ private: | |||
80 | SampleWindow::SampleWindow( QWidget *parent ) : QWidget(parent), iface(0) | 80 | SampleWindow::SampleWindow( QWidget *parent ) : QWidget(parent), iface(0) |
81 | { | 81 | { |
82 | init(); | 82 | init(); |
83 | } | 83 | } |
84 | 84 | ||
85 | QSize SampleWindow::sizeHint() const | 85 | QSize SampleWindow::sizeHint() const |
86 | { | 86 | { |
87 | return container->sizeHint() + QSize( 10, 35 ); | 87 | return container->sizeHint() + QSize( 10, 35 ); |
88 | } | 88 | } |
89 | 89 | ||
90 | void SampleWindow::setFont( const QFont &f ) | 90 | void SampleWindow::setFont( const QFont &f ) |
91 | { | 91 | { |
92 | QWidget::setFont( f ); | 92 | QWidget::setFont( f ); |
93 | popup->setFont( f ); | 93 | popup->setFont( f ); |
94 | QTimer::singleShot ( 0, this, SLOT( fixGeometry ( ))); | 94 | QTimer::singleShot ( 0, this, SLOT( fixGeometry ( ))); |
95 | } | 95 | } |
96 | 96 | ||
97 | static void setStyleRecursive ( QWidget *w, QStyle *s ) | 97 | static void setStyleRecursive ( QWidget *w, QStyle *s ) |
98 | { | 98 | { |
99 | w->setStyle( s ); | 99 | w->setStyle( s ); |
100 | QObjectList *childObjects=(QObjectList*)w->children(); | 100 | QObjectList *childObjects=(QObjectList*)w->children(); |
101 | if ( childObjects ) { | 101 | if ( childObjects ) { |
102 | QObject * o; | 102 | QObject * o; |
103 | for(o=childObjects->first();o!=0;o=childObjects->next()) { | 103 | for(o=childObjects->first();o!=0;o=childObjects->next()) { |
104 | if( o->isWidgetType() ) { | 104 | if( o->isWidgetType() ) { |
105 | setStyleRecursive((QWidget *)o,s); | 105 | setStyleRecursive((QWidget *)o,s); |
106 | } | 106 | } |
107 | } | 107 | } |
108 | } | 108 | } |
109 | } | 109 | } |
110 | 110 | ||
111 | 111 | ||
112 | void SampleWindow::setStyle2 ( QStyle *sty ) | 112 | void SampleWindow::setStyle2 ( QStyle *sty, const QPalette &pal ) |
113 | { | 113 | { |
114 | typedef void (QStyle::*QDrawMenuBarItemImpl) (QPainter *, int, int, int, int, QMenuItem *, QColorGroup &, bool, bool); | 114 | typedef void (QStyle::*QDrawMenuBarItemImpl) (QPainter *, int, int, int, int, QMenuItem *, QColorGroup &, bool, bool); |
115 | 115 | ||
116 | extern QDrawMenuBarItemImpl qt_set_draw_menu_bar_impl(QDrawMenuBarItemImpl); | 116 | extern QDrawMenuBarItemImpl qt_set_draw_menu_bar_impl(QDrawMenuBarItemImpl); |
117 | 117 | ||
118 | QPixmapCache::clear ( ); | 118 | QPixmapCache::clear ( ); |
119 | QPalette p = palette ( ); | 119 | QPalette p = pal; // ette ( ); |
120 | sty-> polish ( p ); | 120 | sty-> polish ( p ); |
121 | qt_set_draw_menu_bar_impl ( 0 ); | 121 | qt_set_draw_menu_bar_impl ( 0 ); |
122 | setStyleRecursive ( this, sty ); | 122 | setStyleRecursive ( this, sty ); |
123 | setPalette ( p ); | 123 | setPalette ( p ); |
124 | QTimer::singleShot ( 0, this, SLOT( fixGeometry ( ))); | 124 | QTimer::singleShot ( 0, this, SLOT( fixGeometry ( ))); |
125 | } | 125 | } |
126 | 126 | ||
127 | 127 | ||
128 | void SampleWindow::setDecoration( WindowDecorationInterface *i ) | 128 | void SampleWindow::setDecoration( WindowDecorationInterface *i ) |
129 | { | 129 | { |
130 | iface = i; | 130 | iface = i; |
131 | wd.rect = QRect( 0, 0, 150, 75 ); | 131 | wd.rect = QRect( 0, 0, 150, 75 ); |
132 | wd.caption = tr("Sample"); | 132 | wd.caption = tr("Sample"); |
133 | wd.palette = palette(); | 133 | wd.palette = palette(); |
134 | wd.flags = WindowDecorationInterface::WindowData::Dialog | | 134 | wd.flags = WindowDecorationInterface::WindowData::Dialog | |
135 | WindowDecorationInterface::WindowData::Active; | 135 | WindowDecorationInterface::WindowData::Active; |
136 | wd.reserved = 1; | 136 | wd.reserved = 1; |
137 | 137 | ||
138 | th = iface->metric(WindowDecorationInterface::TitleHeight, &wd); | 138 | th = iface->metric(WindowDecorationInterface::TitleHeight, &wd); |
139 | tb = iface->metric(WindowDecorationInterface::TopBorder, &wd); | 139 | tb = iface->metric(WindowDecorationInterface::TopBorder, &wd); |
140 | lb = iface->metric(WindowDecorationInterface::LeftBorder, &wd); | 140 | lb = iface->metric(WindowDecorationInterface::LeftBorder, &wd); |
141 | rb = iface->metric(WindowDecorationInterface::RightBorder, &wd); | 141 | rb = iface->metric(WindowDecorationInterface::RightBorder, &wd); |
142 | bb = iface->metric(WindowDecorationInterface::BottomBorder, &wd); | 142 | bb = iface->metric(WindowDecorationInterface::BottomBorder, &wd); |
143 | 143 | ||
144 | int yoff = th + tb; | 144 | int yoff = th + tb; |
145 | int xoff = lb; | 145 | int xoff = lb; |
146 | 146 | ||
147 | wd.rect.setX( 0 ); | 147 | wd.rect.setX( 0 ); |
148 | wd.rect.setWidth( width() - lb - rb ); | 148 | wd.rect.setWidth( width() - lb - rb ); |
149 | wd.rect.setY( 0 ); | 149 | wd.rect.setY( 0 ); |
150 | wd.rect.setHeight( height() - yoff - bb ); | 150 | wd.rect.setHeight( height() - yoff - bb ); |
151 | 151 | ||
diff --git a/noncore/settings/appearance2/sample.h b/noncore/settings/appearance2/sample.h index c861228..27e6db5 100644 --- a/noncore/settings/appearance2/sample.h +++ b/noncore/settings/appearance2/sample.h | |||
@@ -18,60 +18,60 @@ | |||
18 | ..}^=.= = ; Public License for more details. | 18 | ..}^=.= = ; Public License for more details. |
19 | ++= -. .` .: | 19 | ++= -. .` .: |
20 | : = ...= . :.=- You should have received a copy of the GNU | 20 | : = ...= . :.=- You should have received a copy of the GNU |
21 | -. .:....=;==+<; General Public License along with this file; | 21 | -. .:....=;==+<; General Public License along with this file; |
22 | -_. . . )=. = see the file COPYING. If not, write to the | 22 | -_. . . )=. = see the file COPYING. If not, write to the |
23 | -- :-=` Free Software Foundation, Inc., | 23 | -- :-=` Free Software Foundation, Inc., |
24 | 59 Temple Place - Suite 330, | 24 | 59 Temple Place - Suite 330, |
25 | Boston, MA 02111-1307, USA. | 25 | Boston, MA 02111-1307, USA. |
26 | 26 | ||
27 | */ | 27 | */ |
28 | 28 | ||
29 | #ifndef __PREVIEW_H__ | 29 | #ifndef __PREVIEW_H__ |
30 | #define __PREVIEW_H__ | 30 | #define __PREVIEW_H__ |
31 | 31 | ||
32 | #include <qwidget.h> | 32 | #include <qwidget.h> |
33 | 33 | ||
34 | #include <qpe/windowdecorationinterface.h> | 34 | #include <qpe/windowdecorationinterface.h> |
35 | 35 | ||
36 | class QVBox; | 36 | class QVBox; |
37 | class QPopupMenu; | 37 | class QPopupMenu; |
38 | class SampleText; | 38 | class SampleText; |
39 | 39 | ||
40 | class SampleWindow : public QWidget | 40 | class SampleWindow : public QWidget |
41 | { | 41 | { |
42 | Q_OBJECT | 42 | Q_OBJECT |
43 | public: | 43 | public: |
44 | SampleWindow( QWidget *parent ); | 44 | SampleWindow( QWidget *parent ); |
45 | 45 | ||
46 | QSize sizeHint() const; | 46 | QSize sizeHint() const; |
47 | 47 | ||
48 | virtual void setFont( const QFont &f ); | 48 | virtual void setFont( const QFont &f ); |
49 | 49 | ||
50 | void setStyle2 ( QStyle *sty ); | 50 | void setStyle2 ( QStyle *sty, const QPalette &p ); |
51 | void setDecoration( WindowDecorationInterface *i ); | 51 | void setDecoration( WindowDecorationInterface *i ); |
52 | void setPalette ( const QPalette & ); | 52 | void setPalette ( const QPalette & ); |
53 | 53 | ||
54 | virtual void paintEvent( QPaintEvent * ); | 54 | virtual void paintEvent( QPaintEvent * ); |
55 | 55 | ||
56 | void init(); | 56 | void init(); |
57 | 57 | ||
58 | virtual bool eventFilter( QObject *, QEvent *e ); | 58 | virtual bool eventFilter( QObject *, QEvent *e ); |
59 | virtual void paletteChange( const QPalette &old ); | 59 | virtual void paletteChange( const QPalette &old ); |
60 | virtual void resizeEvent( QResizeEvent *re ); | 60 | virtual void resizeEvent( QResizeEvent *re ); |
61 | 61 | ||
62 | public slots: | 62 | public slots: |
63 | void fixGeometry(); | 63 | void fixGeometry(); |
64 | 64 | ||
65 | protected: | 65 | protected: |
66 | WindowDecorationInterface *iface; | 66 | WindowDecorationInterface *iface; |
67 | WindowDecorationInterface::WindowData wd; | 67 | WindowDecorationInterface::WindowData wd; |
68 | QVBox *container; | 68 | QVBox *container; |
69 | QPopupMenu *popup; | 69 | QPopupMenu *popup; |
70 | int th; | 70 | int th; |
71 | int tb; | 71 | int tb; |
72 | int lb; | 72 | int lb; |
73 | int rb; | 73 | int rb; |
74 | int bb; | 74 | int bb; |
75 | }; | 75 | }; |
76 | 76 | ||
77 | #endif | 77 | #endif |