author | sandman <sandman> | 2002-09-20 01:42:10 (UTC) |
---|---|---|
committer | sandman <sandman> | 2002-09-20 01:42:10 (UTC) |
commit | b1f3d33cb0b3f203f153074a8812d5988c3031b2 (patch) (side-by-side diff) | |
tree | 1734ac2808dab8f0982b23a2a9101486fcdcfee5 | |
parent | 9204c61f669fb265f6c5f14bfd6ca363a2929e40 (diff) | |
download | opie-b1f3d33cb0b3f203f153074a8812d5988c3031b2.zip opie-b1f3d33cb0b3f203f153074a8812d5988c3031b2.tar.gz opie-b1f3d33cb0b3f203f153074a8812d5988c3031b2.tar.bz2 |
New experimental appearance settings
-rw-r--r-- | noncore/settings/appearance2/appearance.cpp | 729 | ||||
-rw-r--r-- | noncore/settings/appearance2/appearance.h | 116 | ||||
-rw-r--r-- | noncore/settings/appearance2/appearance2.pro | 12 | ||||
-rw-r--r-- | noncore/settings/appearance2/colorlistitem.h | 28 | ||||
-rw-r--r-- | noncore/settings/appearance2/decolistitem.h | 79 | ||||
-rw-r--r-- | noncore/settings/appearance2/editScheme.cpp | 83 | ||||
-rw-r--r-- | noncore/settings/appearance2/editScheme.h | 48 | ||||
-rw-r--r-- | noncore/settings/appearance2/fontlistitem.h | 40 | ||||
-rw-r--r-- | noncore/settings/appearance2/main.cpp | 35 | ||||
-rw-r--r-- | noncore/settings/appearance2/sample.cpp | 236 | ||||
-rw-r--r-- | noncore/settings/appearance2/sample.h | 49 | ||||
-rw-r--r-- | noncore/settings/appearance2/stylelistitem.h | 85 |
12 files changed, 1540 insertions, 0 deletions
diff --git a/noncore/settings/appearance2/appearance.cpp b/noncore/settings/appearance2/appearance.cpp new file mode 100644 index 0000000..52c7125 --- a/dev/null +++ b/noncore/settings/appearance2/appearance.cpp @@ -0,0 +1,729 @@ +/********************************************************************** +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. +** +** This file is part of the Qtopia Environment. +** +** This file may be distributed and/or modified under the terms of the +** GNU General Public License version 2 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. +** +** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +** +** See http://www.trolltech.com/gpl/ for GPL licensing information. +** +** Contact info@trolltech.com if any conditions of this licensing are +** not clear to you. +** +*********************************************************************** +** +** Enhancements by: Dan Williams, <williamsdr@acm.org> +** +**********************************************************************/ + +#include "appearance.h" +#include "editScheme.h" + +#include <opie/ofiledialog.h> +#include <opie/otabwidget.h> + +#include <qpe/applnk.h> +#include <qpe/config.h> +#include <qpe/global.h> +#include <qpe/resource.h> +#include <qpe/qpeapplication.h> +#if defined(Q_WS_QWS) && !defined(QT_NO_COP) +#include <qpe/qcopenvelope_qws.h> +#endif + +#include <qaction.h> +#include <qbuttongroup.h> +#include <qcheckbox.h> +#include <qcombobox.h> +#include <qdialog.h> +#include <qdir.h> +#include <qlabel.h> +#include <qlayout.h> +#include <qlineedit.h> +#include <qlistbox.h> +#include <qmessagebox.h> +#include <qmultilineedit.h> +#include <qpopupmenu.h> +#include <qpushbutton.h> +#include <qradiobutton.h> +#if QT_VERSION >= 300 +#include <qstylefactory.h> +#else +#include <qwindowsstyle.h> +#include <qpe/qpestyle.h> +#include <qpe/lightstyle.h> +#include <qpe/qlibrary.h> +#include <qpe/styleinterface.h> +#endif +#include <qtabwidget.h> +#include <qtoolbutton.h> +#include <qvgroupbox.h> +#include <qwidget.h> + +#include "stylelistitem.h" +#include "decolistitem.h" +#include "fontlistitem.h" +#include "colorlistitem.h" + +#include "sample.h" + + +static int findItemCB ( QComboBox *box, const QString &str ) +{ + for ( int i = 0; i < box-> count ( ); i++ ) { + if ( box-> text ( i ) == str ) + return i; + } + return -1; +} + +class DefaultWindowDecoration : public WindowDecorationInterface +{ +public: + DefaultWindowDecoration() : ref(0) {} + QString name() const { + return "Default"; + } + QPixmap icon() const { + return QPixmap(); + } + QRESULT queryInterface( const QUuid &uuid, QUnknownInterface **iface ) { + *iface = 0; + if ( uuid == IID_QUnknown ) + *iface = this; + else if ( uuid == IID_WindowDecoration ) + *iface = this; + + if ( *iface ) + (*iface)->addRef(); + return QS_OK; + } + Q_REFCOUNT + +private: + ulong ref; +}; + + +struct { + QColorGroup::ColorRole role; + const char *key; + const char *def; +} colorLUT [] = { + { QColorGroup::Base, "Base", "#FFFFFF" }, + { QColorGroup::Background, "Background", "#E5E1D5" }, + { QColorGroup::Button, "Button", "#D6CDBB" }, + { QColorGroup::ButtonText, "ButtonText", "#000000" }, + { QColorGroup::Highlight, "Highlight", "#800000" }, + { QColorGroup::HighlightedText, "HighlightedText", "#FFFFFF" }, + { QColorGroup::Text, "Text", "#000000" }, + + { QColorGroup::NColorRoles, 0, 0 } +}; + + +void Appearance::loadStyles ( QListBox *list ) +{ +#if QT_VERSION >= 300 + list->insertStringList(QStyleFactory::styles()); +#else + list->insertItem( new StyleListItem ( "Windows", new QWindowsStyle ( ))); + list->insertItem( new StyleListItem ( "Light", new LightStyle ( ))); +#ifndef QT_NO_STYLE_MOTIF + list->insertItem( new StyleListItem ( "Motif", new QMotifStyle ( ))); +#endif +#ifndef QT_NO_STYLE_MOTIFPLUS + list->insertItem( new StyleListItem ( "MotifPlus", new QMotifPlusStyle ( ))); +#endif +#ifndef QT_NO_STYLE_PLATINUM + list->insertItem( new StyleListItem ( "Platinum", new QPlatinumStyle ( ))); +#endif +#endif + list->insertItem( new StyleListItem ( "QPE", new QPEStyle ( ))); + +#if QT_VERSION < 300 + { + QString path = QPEApplication::qpeDir() + "/plugins/styles/"; + QStringList sl = QDir ( path, "lib*.so" ). entryList ( ); + + for ( QStringList::Iterator it = sl. begin ( ); it != sl. end ( ); ++it ) { + QLibrary *lib = new QLibrary ( path + "/" + *it ); + StyleInterface *iface; + + if ( lib-> queryInterface ( IID_Style, (QUnknownInterface **) &iface ) == QS_OK ) + list-> insertItem ( new StyleListItem ( lib, iface )); + else + delete lib; + } + } + +#endif +} + +void Appearance::loadDecos ( QListBox *list ) +{ + list-> insertItem ( new DecoListItem ( tr( "Default" ))); + + { + QString path = QPEApplication::qpeDir() + "/plugins/decorations/"; + QStringList sl = QDir ( path, "lib*.so" ). entryList ( ); + + for ( QStringList::Iterator it = sl. begin ( ); it != sl. end ( ); ++it ) { + QLibrary *lib = new QLibrary ( path + "/" + *it ); + WindowDecorationInterface *iface; + + if ( lib-> queryInterface ( IID_WindowDecoration, (QUnknownInterface **) &iface ) == QS_OK ) + list-> insertItem ( new DecoListItem ( lib, iface )); + else + delete lib; + } + } +} + +static QPalette readColorPalette ( Config &config ) +{ + QColor bgcolor( config. readEntry( "Background", "#E5E1D5" ) ); + QColor btncolor( config. readEntry( "Button", "#D6CDBB" ) ); + QPalette pal( btncolor, bgcolor ); + + QString color = config. readEntry( "Highlight", "#800000" ); + pal.setColor( QColorGroup::Highlight, QColor(color) ); + color = config. readEntry( "HighlightedText", "#FFFFFF" ); + pal.setColor( QColorGroup::HighlightedText, QColor(color) ); + color = config. readEntry( "Text", "#000000" ); + pal.setColor( QColorGroup::Text, QColor(color) ); + color = config. readEntry( "ButtonText", "#000000" ); + pal.setColor( QPalette::Active, QColorGroup::ButtonText, QColor(color) ); + color = config. readEntry( "Base", "#FFFFFF" ); + pal.setColor( QColorGroup::Base, QColor(color) ); + + pal.setColor( QPalette::Disabled, QColorGroup::Text, pal.color(QPalette::Active, QColorGroup::Background).dark() ); + + return pal; +} + +void Appearance::loadColors ( QListBox *list ) +{ + list-> clear ( ); + { + Config config ( "qpe" ); + config. setGroup ( "Appearance" ); + + list-> insertItem ( new ColorListItem ( tr( "Current scheme" ), readColorPalette ( config ))); + } + + QString path = QPEApplication::qpeDir ( ) + "/etc/colors/"; + QStringList sl = QDir ( path ). entryList ( "*.scheme" ); + + for ( QStringList::Iterator it = sl. begin ( ); it != sl. end ( ); ++it ) { + QString name = (*it). left ((*it). find ( ".scheme" )); + Config config ( path + *it, Config::File ); + config. setGroup ( "Colors" ); + + list-> insertItem ( new ColorListItem ( name, readColorPalette ( config ))); + } +} + +void Appearance::loadFonts ( QListBox *list ) +{ + FontDatabase fd; + QStringList f = fd. families ( ); + + for ( QStringList::ConstIterator it = f. begin ( ); it != f. end ( ); ++it ) + list-> insertItem ( new FontListItem ( *it, fd. styles ( *it ), fd. pointSizes ( *it ))); +} + + +QWidget *Appearance::createStyleTab ( QWidget *parent ) +{ + Config config ( "qpe" ); + config. setGroup ( "Appearance" ); + + QWidget* tab = new QWidget( parent, "StyleTab" ); + QVBoxLayout* vertLayout = new QVBoxLayout( tab, 4, 4 ); + + m_style_list = new QListBox( tab, "m_style_list" ); + vertLayout->addWidget( m_style_list ); + + m_style_settings = new QPushButton ( tr( "Settings..." ), tab ); + connect ( m_style_settings, SIGNAL( clicked ( )), this, SLOT( styleSettingsClicked ( ))); + vertLayout-> addWidget ( m_style_settings ); + + loadStyles ( m_style_list ); + + QString s = config. readEntry ( "Style", "Light" ); + m_style_list-> setCurrentItem ( m_style_list-> findItem ( s )); + m_original_style = m_style_list-> currentItem ( ); + styleClicked ( m_original_style ); + + connect( m_style_list, SIGNAL( highlighted( int ) ), this, SLOT( styleClicked( int ) ) ); + + return tab; +} + +QWidget *Appearance::createDecoTab ( QWidget *parent ) +{ + Config config ( "qpe" ); + config. setGroup ( "Appearance" ); + + QWidget* tab = new QWidget( parent, "DecoTab" ); + QVBoxLayout* vertLayout = new QVBoxLayout( tab, 4, 4 ); + + m_deco_list = new QListBox( tab, "m_deco_list" ); + vertLayout->addWidget( m_deco_list ); + + loadDecos ( m_deco_list ); + + QString s = config. readEntry ( "Decoration" ); + m_deco_list-> setCurrentItem ( m_deco_list-> findItem ( s )); + m_original_deco = m_deco_list-> currentItem ( ); + if ( m_deco_list-> currentItem ( ) < 0 ) + m_deco_list-> setCurrentItem ( 0 ); + decoClicked ( m_original_deco ); + + connect( m_deco_list, SIGNAL( highlighted( int ) ), this, SLOT( decoClicked( int ) ) ); + + return tab; +} + +QWidget *Appearance::createFontTab ( QWidget *parent ) +{ + Config config ( "qpe" ); + config. setGroup ( "Appearance" ); + + + QWidget *tab = new QWidget( parent, "FontTab" ); + QGridLayout *gridLayout = new QGridLayout ( tab, 0, 0, 4, 4 ); + gridLayout->setRowStretch ( 4, 10 ); + + m_font_family_list = new QListBox( tab, "FontListBox" ); + gridLayout->addMultiCellWidget( m_font_family_list, 0, 4, 0, 0 ); + connect( m_font_family_list, SIGNAL( highlighted( int ) ), this, SLOT( fontFamilyClicked( int ) ) ); + + QLabel *label = new QLabel( tr( "Style" ), tab ); + gridLayout->addWidget( label, 0, 1 ); + + m_font_style_list = new QComboBox( tab, "StyleListBox" ); + connect( m_font_style_list, SIGNAL( activated( int ) ), this, SLOT( fontStyleClicked( int ) ) ); + gridLayout->addWidget( m_font_style_list, 1, 1 ); + + label = new QLabel( tr( "Size" ), tab ); + gridLayout->addWidget( label, 2, 1 ); + + m_font_size_list = new QComboBox( tab, "SizeListBox" ); + connect( m_font_size_list, SIGNAL( activated( int ) ), + this, SLOT( fontSizeClicked( int ) ) ); + gridLayout->addWidget( m_font_size_list, 3, 1 ); + + loadFonts ( m_font_family_list ); + + QString familyStr = config.readEntry( "FontFamily", "Helvetica" ); + QString styleStr = config.readEntry( "FontStyle", "Regular" ); + QString sizeStr = config.readEntry( "FontSize", "10" ); + + m_font_family_list-> setCurrentItem ( m_font_family_list-> findItem ( familyStr )); + m_original_fontfamily = m_font_family_list-> currentItem ( ); + if ( m_font_family_list-> currentItem ( ) < 0 ) + m_font_family_list-> setCurrentItem ( 0 ); + + fontFamilyClicked ( m_original_fontfamily ); + + m_font_style_list-> setCurrentItem ( findItemCB ( m_font_style_list, styleStr )); + m_original_fontstyle = m_font_style_list-> currentItem ( ); + fontStyleClicked ( m_original_fontstyle ); + + m_font_size_list-> setCurrentItem ( findItemCB ( m_font_size_list, sizeStr )); + m_original_fontsize = m_font_size_list-> currentItem ( ); + fontSizeClicked ( m_original_fontsize ); + + return tab; +} + +QWidget *Appearance::createColorTab ( QWidget *parent ) +{ + Config config ( "qpe" ); + config. setGroup ( "Appearance" ); + + + QWidget *tab = new QWidget( parent, "ColorTab" ); + QGridLayout *gridLayout = new QGridLayout( tab, 0, 0, 4, 4 ); + gridLayout->setRowStretch ( 3, 10 ); + + m_color_list = new QListBox ( tab ); + gridLayout->addMultiCellWidget ( m_color_list, 0, 3, 0, 0 ); + connect( m_color_list, SIGNAL( highlighted( int ) ), this, SLOT( colorClicked( int ) ) ); + + loadColors ( m_color_list ); + m_color_list-> setCurrentItem ( 0 ); + + QPushButton* tempButton = new QPushButton( tab, "editSchemeButton" ); + tempButton->setText( tr( "Edit..." ) ); + connect( tempButton, SIGNAL( clicked() ), this, SLOT( editSchemeClicked() ) ); + gridLayout->addWidget( tempButton, 0, 1 ); + + tempButton = new QPushButton( tab, "deleteSchemeButton" ); + tempButton->setText( tr( "Delete" ) ); + connect( tempButton, SIGNAL( clicked() ), this, SLOT( deleteSchemeClicked() ) ); + gridLayout->addWidget( tempButton, 1, 1 ); + + tempButton = new QPushButton( tab, "saveSchemeButton" ); + tempButton->setText( tr( "Save" ) ); + connect( tempButton, SIGNAL( clicked() ), this, SLOT( saveSchemeClicked() ) ); + gridLayout->addWidget( tempButton, 2, 1 ); + + return tab; +} + +QWidget *Appearance::createGuiTab ( QWidget *parent ) +{ + Config config ( "qpe" ); + config. setGroup ( "Appearance" ); + + QWidget *tab = new QWidget( parent, "AdvancedTab" ); + QVBoxLayout *vertLayout = new QVBoxLayout( tab, 4, 4 ); + + QGridLayout* gridLayout = new QGridLayout ( vertLayout ); + + int style = config. readNumEntry ( "TabStyle", 2 ); + + QLabel* label = new QLabel( tr( "Tab style:" ), tab ); + gridLayout-> addWidget ( label, 0, 0 ); + QButtonGroup* btngrp = new QButtonGroup( tab, "buttongroup" ); + btngrp-> hide ( ); + btngrp-> setExclusive ( true ); + + m_tabstyle_list = new QComboBox ( false, tab, "tabstyle" ); + m_tabstyle_list-> insertItem ( tr( "Tabs" )); + m_tabstyle_list-> insertItem ( tr( "Tabs w/icons" )); + m_tabstyle_list-> insertItem ( tr( "Drop down list" )); + m_tabstyle_list-> insertItem ( tr( "Drop down list w/icons" )); + m_tabstyle_list-> setCurrentItem ( style & 0xff ); + gridLayout-> addMultiCellWidget ( m_tabstyle_list, 0, 0, 1, 2 ); + + m_tabstyle_top = new QRadioButton( tr( "Top" ), tab, "tabpostop" ); + btngrp-> insert ( m_tabstyle_top ); + gridLayout-> addWidget( m_tabstyle_top, 1, 1 ); + + m_tabstyle_bottom = new QRadioButton( tr( "Bottom" ), tab, "tabposbottom" ); + btngrp-> insert ( m_tabstyle_top ); + gridLayout-> addWidget( m_tabstyle_bottom, 1, 2 ); + + bool tabtop = ( style & 0xff00 ) == 0; + m_tabstyle_top-> setChecked ( tabtop ); + m_tabstyle_bottom-> setChecked ( !tabtop ); + + m_original_tabstyle = style; + + return tab; +} + + +Appearance::Appearance( QWidget* parent, const char* name, WFlags ) + : QDialog ( parent, name, true ) +{ + setCaption( tr( "Appearance" ) ); + + Config config( "qpe" ); + config.setGroup( "Appearance" ); + + QVBoxLayout *top = new QVBoxLayout ( this, 4, 4 ); + + m_sample = new SampleWindow ( this ); + m_sample-> setDecoration ( new DefaultWindowDecoration ( )); + + OTabWidget* tw = new OTabWidget ( this, "tabwidget", OTabWidget::Global, OTabWidget::Bottom ); + QWidget *styletab; + + tw-> addTab ( styletab = createStyleTab ( tw ), "appearance/styletabicon.png", tr( "Style" )); + tw-> addTab ( createFontTab ( tw ), "appearance/fonttabicon.png", tr( "Font" )); + tw-> addTab ( createColorTab ( tw ), "appearance/colorstabicon.png", tr( "Colors" ) ); + tw-> addTab ( createDecoTab ( tw ), "appearance/styletabicon.png", tr( "Windows" ) ); + tw-> addTab ( createGuiTab ( tw ), "appearance/backgroundtabicon.png", tr( "Gui" ) ); + + top-> addWidget ( tw, 10 ); + top-> addWidget ( m_sample, 1 ); + + tw-> setCurrentTab ( styletab ); +} + +Appearance::~Appearance() +{ +} + +void Appearance::accept ( ) +{ + Config config("qpe"); + config.setGroup( "Appearance" ); + + int newstyle = m_style_list-> currentItem ( ); + int newtabstyle = ( m_tabstyle_list-> currentItem ( ) & 0xff ) | \ + ( m_tabstyle_top-> isChecked ( ) ? 0x000 : 0x100 ); + int newfontfamily = m_font_family_list-> currentItem ( ); + int newfontstyle = m_font_style_list-> currentItem ( ); + int newfontsize = m_font_size_list-> currentItem ( ); + + + if ( m_style_changed ) { + StyleListItem *item = (StyleListItem *) m_style_list-> item ( newstyle ); + if ( item ) + config.writeEntry( "Style", item-> key ( )); + } + if ( newtabstyle != m_original_tabstyle ) { + config. writeEntry ( "TabStyle", newtabstyle ); + } + + if ( m_font_changed ) { + config.writeEntry( "FontFamily", m_font_family_list-> text ( newfontfamily )); + config.writeEntry( "FontStyle", m_font_style_list-> text ( newfontstyle )); + config.writeEntry( "FontSize", m_font_size_list-> text ( newfontsize )); + } + +/* + if ( schemeChanged ) + { + int i; + for ( i = 0; i < MAX_CONTROL; i++ ) + { + config.writeEntry( controlList[i], controlColor[i] ); + } + } +*/ + config. write ( ); // need to flush the config info first + Global::applyStyle ( ); + + if ( QMessageBox::warning ( this, tr( "Restart" ), tr( "Do you want to restart Opie now?" ), tr( "Yes" ), tr( "No" ), 0, 0, 1 ) == 0 ) { + QCopEnvelope e( "QPE/System", "restart()" ); + } + + QDialog::accept ( ); +} + +void Appearance::done ( int r ) +{ + QDialog::done ( r ); + close ( ); +} + + +void Appearance::styleClicked ( int index ) +{ + StyleListItem *sli = (StyleListItem *) m_style_list-> item ( index ); + m_style_settings-> setEnabled ( sli ? sli-> hasSettings ( ) : false ); + + if ( m_sample && sli && sli-> style ( )) + m_sample-> setStyle2 ( sli-> style ( )); + + m_style_changed |= ( index != m_original_style ); +} + +void Appearance::styleSettingsClicked ( ) +{ + StyleListItem *item = (StyleListItem *) m_style_list-> item ( m_style_list-> currentItem ( )); + + if ( item && item-> hasSettings ( )) { + QDialog *d = new QDialog ( this, "SETTINGS-DLG", true ); + QVBoxLayout *vbox = new QVBoxLayout ( d, 4, 0 ); + + QWidget *w = item-> settings ( d ); + + if ( w ) { + vbox-> addWidget ( w ); + + d-> setCaption ( w-> caption ( )); + + d-> showMaximized ( ); + bool accepted = ( d-> exec ( ) == QDialog::Accepted ); + + if ( item-> setSettings ( accepted )) + m_style_changed = true; + } + delete d; + } +} + +void Appearance::decoClicked ( int index ) +{ + DecoListItem *dli = (DecoListItem *) m_deco_list-> item ( index ); + + if ( m_sample ) { + if ( dli && dli-> interface ( )) + m_sample-> setDecoration ( dli-> interface ( )); + else + m_sample-> setDecoration ( new DefaultWindowDecoration ( )); + } + m_deco_changed |= ( index != m_original_deco ); +} + +void Appearance::fontFamilyClicked ( int index ) +{ + QString oldstyle = m_font_style_list-> currentText ( ); + QString oldsize = m_font_size_list-> currentText ( ); + + FontListItem *fli = (FontListItem *) m_font_family_list-> item ( index ); + + m_font_style_list-> clear ( ); + m_font_style_list-> insertStringList ( fli-> styles ( )); + m_font_style_list-> setEnabled ( !fli-> styles ( ). isEmpty ( )); + + int i; + + i = findItemCB ( m_font_style_list, oldstyle ); + if ( i < 0 ) + i = findItemCB ( m_font_style_list, "Regular" ); + if (( i < 0 ) && ( m_font_style_list-> count ( ) > 0 )) + i = 0; + + if ( i >= 0 ) { + m_font_style_list-> setCurrentItem ( i ); + fontStyleClicked ( i ); + } + + m_font_size_list-> clear ( ); + QValueList<int> sl = fli-> sizes ( ); + + for ( QValueList<int>::Iterator it = sl. begin ( ); it != sl. end ( ); ++it ) + m_font_size_list-> insertItem ( QString::number ( *it )); + + i = findItemCB ( m_font_size_list, oldsize ); + if ( i < 0 ) + i = findItemCB ( m_font_size_list, "10" ); + if (( i < 0 ) && ( m_font_size_list-> count ( ) > 0 )) + i = 0; + + if ( i >= 0 ) { + m_font_size_list-> setCurrentItem ( i ); + fontSizeClicked ( i ); + } + changeText ( ); + + m_font_changed |= ( index != m_original_fontfamily ); +} + +void Appearance::fontStyleClicked ( int index ) +{ + changeText ( ); + + m_font_changed |= ( index != m_original_fontstyle ); +} + +void Appearance::fontSizeClicked ( int index ) +{ + changeText ( ); + + m_font_changed |= ( index != m_original_fontsize ); +} + +void Appearance::changeText ( ) +{ + int ffa = m_font_family_list-> currentItem ( ); + int fst = m_font_style_list-> currentItem ( ); + int fsi = m_font_size_list-> currentItem ( ); + + FontListItem *fli = (FontListItem *) m_font_family_list-> item ( ffa ); + + if ( fli ) { + FontDatabase fdb; + + m_sample-> setFont ( fdb. font ( fli-> family ( ), \ + fst >= 0 ? fli-> styles ( ) [fst] : QString::null, \ + fsi >= 0 ? fli-> sizes ( ) [fsi] : 10, \ + fdb. charSets ( fli-> family ( )) [0] )); + } +} + +void Appearance::colorClicked ( int index ) +{ + ColorListItem *item = (ColorListItem *) m_color_list-> item ( index ); + + if ( item ) + m_sample-> setPalette ( item-> palette ( )); + + m_color_changed |= ( item-> palette ( ) != qApp-> palette ( )); +} + + +void Appearance::editSchemeClicked ( ) +{ + ColorListItem *item = (ColorListItem *) m_color_list-> item ( m_color_list-> currentItem ( )); + +/* + EditScheme* editdlg = new EditScheme( this, "editScheme", TRUE, 0, + 9, controlLabel, controlColor ); + editdlg->showMaximized(); + if ( editdlg->exec() == QDialog::Accepted ) + { + int i; + for ( i = 0; i < MAX_CONTROL; i++ ) + { + controlColor[i] = editdlg->colorList[i]; + } + m_color_changed = true; + } + delete editdlg; + */ +} + + +void Appearance::saveSchemeClicked() +{ + ColorListItem *item = (ColorListItem *) m_color_list-> item ( m_color_list-> currentItem ( )); + + if ( !item ) + return; + + QDialog *d = new QDialog ( this, 0, true ); + d-> setCaption ( tr( "Save Scheme" )); + QLineEdit *ed = new QLineEdit ( this ); + ( new QVBoxLayout ( d, 4, 4 ))-> addWidget ( ed ); + + if ( d-> exec ( ) == QDialog::Accepted ) { + QString schemename = ed-> text ( ); + QFile file ( QPEApplication::qpeDir() + "/etc/colors/" + schemename + ".scheme" ); + if ( !file. exists ( )) + { + QPalette p = item-> palette ( ); + + Config config ( file.name(), Config::File ); + config.setGroup( "Colors" ); + + for ( int i = 0; colorLUT [i]. role != QColorGroup::NColorRoles; i++ ) + config.writeEntry ( colorLUT [i]. key, p. color ( QPalette::Active, colorLUT [i]. role ). name ( )); + + config. write ( ); // need to flush the config info first + loadColors ( m_color_list ); + } + else + { + QMessageBox::information ( this, tr( "Save scheme" ), tr( "Scheme does already exist." )); + } + } + delete d; +} + +void Appearance::deleteSchemeClicked() +{ + ColorListItem *item = (ColorListItem *) m_color_list-> item ( m_color_list-> currentItem ( )); + + if ( !item ) + return; + + if ( m_color_list-> currentItem ( ) > 0 ) + { + if ( QMessageBox::warning ( this, tr( "Delete scheme" ), tr( "Do you really want to delete\n" ) + item-> text ( ) + "?", + tr( "Yes" ), tr( "No" ), 0, 0, 1 ) == 0 ) { + QFile::remove ( QPEApplication::qpeDir ( ) + "/etc/colors/" + item-> text ( ) + ".scheme" ); + loadColors ( m_color_list ); + } + } + else + { + QMessageBox::information( this, tr( "Delete scheme" ), tr( "Unable to delete current scheme." )); + } +} + diff --git a/noncore/settings/appearance2/appearance.h b/noncore/settings/appearance2/appearance.h new file mode 100644 index 0000000..ce0d4b0 --- a/dev/null +++ b/noncore/settings/appearance2/appearance.h @@ -0,0 +1,116 @@ +/********************************************************************** +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. +** +** This file is part of the Qtopia Environment. +** +** This file may be distributed and/or modified under the terms of the +** GNU General Public License version 2 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. +** +** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +** +** See http://www.trolltech.com/gpl/ for GPL licensing information. +** +** Contact info@trolltech.com if any conditions of this licensing are +** not clear to you. +** +*********************************************************************** +** +** Enhancements by: Dan Williams, <williamsdr@acm.org> +** +**********************************************************************/ + +#ifndef APPEARANCESETTINGS_H +#define APPEARANCESETTINGS_H + +#include <qpe/fontdatabase.h> + +#include <qmainwindow.h> +#include <qdialog.h> + +class QCheckBox; +class QComboBox; +class QLabel; +class QLineEdit; +class QListBox; +class QMultiLineEdit; +class QPushButton; +class QRadioButton; +class QToolButton; +class SampleWindow; + +class Appearance : public QDialog +{ + Q_OBJECT + +public: + Appearance( QWidget* parent = 0, const char* name = 0, WFlags fl = 0 ); + ~Appearance(); + +protected: + virtual void accept ( ); + virtual void done ( int r ); + +protected slots: + void styleClicked ( int ); + void styleSettingsClicked ( ); + void decoClicked ( int ); + void fontFamilyClicked ( int ); + void fontStyleClicked ( int ); + void fontSizeClicked ( int ); + void colorClicked ( int ); +// void tabStyleClicked ( int ); + + void editSchemeClicked(); + void saveSchemeClicked(); + void deleteSchemeClicked(); + +private: + void loadStyles ( QListBox * ); + void loadDecos ( QListBox * ); + void loadFonts ( QListBox * ); + void loadColors ( QListBox * ); + + void changeText(); + + QWidget *createStyleTab ( QWidget *parent ); + QWidget *createDecoTab ( QWidget *parent ); + QWidget *createFontTab ( QWidget *parent ); + QWidget *createColorTab ( QWidget *parent ); + QWidget *createGuiTab ( QWidget *parent ); + +private: + bool m_style_changed; + bool m_font_changed; + bool m_scheme_changed; + bool m_deco_changed; + bool m_color_changed; + + int m_original_style; + int m_original_deco; + int m_original_fontfamily; + int m_original_fontstyle; + int m_original_fontsize; + int m_original_tabstyle; + + QListBox * m_style_list; + QPushButton * m_style_settings; + + QListBox * m_deco_list; + + QListBox * m_color_list; + + QListBox * m_font_family_list; + QComboBox * m_font_style_list; + QComboBox * m_font_size_list; + + SampleWindow *m_sample; + + QComboBox * m_tabstyle_list; + QRadioButton *m_tabstyle_top; + QRadioButton *m_tabstyle_bottom; +}; + +#endif // APPEARANCESETTINGS_H diff --git a/noncore/settings/appearance2/appearance2.pro b/noncore/settings/appearance2/appearance2.pro new file mode 100644 index 0000000..3147148 --- a/dev/null +++ b/noncore/settings/appearance2/appearance2.pro @@ -0,0 +1,12 @@ +TEMPLATE = app +CONFIG = qt warn_on release +DESTDIR = $(OPIEDIR)/bin +HEADERS = appearance.h editScheme.h sample.h +SOURCES = appearance.cpp editScheme.cpp main.cpp sample.cpp +INCLUDEPATH += $(OPIEDIR)/include +DEPENDPATH += ../$(OPIEDIR)/include +LIBS += -lqpe -lopie +TARGET = appearance2 +INCLUDEPATH += $(OPIEDIR)/include +DEPENDPATH += $(OPIEDIR)/include + diff --git a/noncore/settings/appearance2/colorlistitem.h b/noncore/settings/appearance2/colorlistitem.h new file mode 100644 index 0000000..c7318a6 --- a/dev/null +++ b/noncore/settings/appearance2/colorlistitem.h @@ -0,0 +1,28 @@ +#ifndef COLORLISTITEM_H +#define COLORLISTITEM_H + +#include <qlistbox.h> +#include <qpalette.h> + +class ColorListItem : public QListBoxText { +public: + ColorListItem ( const QString &t, const QPalette &pal ) : QListBoxText ( t ) + { + m_pal = pal; + } + + virtual ~ColorListItem ( ) + { + } + + QPalette palette ( ) + { + return m_pal; + } + +private: + QPalette m_pal; +}; + + +#endif diff --git a/noncore/settings/appearance2/decolistitem.h b/noncore/settings/appearance2/decolistitem.h new file mode 100644 index 0000000..dfdce47 --- a/dev/null +++ b/noncore/settings/appearance2/decolistitem.h @@ -0,0 +1,79 @@ +#ifndef DECOLISTITEM_H +#define DECOLISTITEM_H + +#include <qpe/windowdecorationinterface.h> +#include <qlistbox.h> + +class DecoListItem : public QListBoxText { +public: + DecoListItem ( const QString &t ) : QListBoxText ( t ) + { + m_lib = 0; + m_window_if = 0; +// m_settings_if = 0; + } + + DecoListItem ( QLibrary *lib, WindowDecorationInterface *iface ) : QListBoxText ( iface-> name ( )) + { + m_lib = lib; + m_window_if = iface; + +// iface-> queryInterface ( IID_WindowDecoration, (QUnknownInterface **) &m_settings_if ); + } + + virtual ~DecoListItem ( ) + { +// if ( m_settings_if ) +// m_settings_if-> release ( ); + if ( m_window_if ) + m_window_if-> release ( ); + delete m_lib; + } + + bool hasSettings ( ) const + { +// return ( m_settings_if ); + return false; + } + + QWidget *settings ( QWidget * /*parent*/ ) + { +// return m_settings_if ? m_settings_if-> create ( parent ) : 0; + return 0; + } + + bool setSettings ( bool /*accepted*/ ) + { +// if ( !m_settings_if ) +// return false; + +// if ( accepted ) +// return m_settings_if-> accept ( ); +// else { +// m_settings_if-> reject ( ); +// return false; +// } + return false; + } + + QString key ( ) + { + if ( m_window_if ) + return QString ( m_window_if-> name ( )); + else + return text ( ); + } + + WindowDecorationInterface *interface ( ) + { + return m_window_if; + } + +private: + QLibrary *m_lib; + WindowDecorationInterface *m_window_if; +// WindowDecorationSettingsInterface *m_settings_if; + +}; + +#endif
\ No newline at end of file diff --git a/noncore/settings/appearance2/editScheme.cpp b/noncore/settings/appearance2/editScheme.cpp new file mode 100644 index 0000000..2453c7b --- a/dev/null +++ b/noncore/settings/appearance2/editScheme.cpp @@ -0,0 +1,83 @@ +/********************************************************************** +** EditScheme +** +** Dialog for editing color scheme +** +** Copyright (C) 2002, Dan Williams +** williamsdr@acm.org +** http://draknor.net +** +** This file may be distributed and/or modified under the terms of the +** GNU General Public License version 2 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. +** +** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +** +**********************************************************************/ + +#include "editScheme.h" + +#include "opie/colorpopupmenu.h" + +#include <qaction.h> +#include <qlabel.h> +#include <qlayout.h> +#include <qpopupmenu.h> +#include <qscrollview.h> +#include <qtoolbutton.h> + +EditScheme::EditScheme( QWidget* parent, const char* name, bool modal, WFlags fl, + int max, QString list[], QString colors[] ) + : QDialog( parent, name, modal, fl ) +{ + setCaption( tr( "Edit scheme" ) ); + QGridLayout* layout = new QGridLayout( this ); + layout->setSpacing( 4 ); + layout->setMargin( 4 ); + + + maxCount = max; + int i; + QLabel* label; + ColorPopupMenu* colorPopupMenu; + for ( i = 0; i < max; i++ ) + { + colorList[i] = colors[i]; + surfaceList[i] = list[i]; + label = new QLabel( tr( surfaceList[i] ), this ); + layout->addWidget( label, i, 0 ); + colorButtons[i] = new QToolButton( this, list[i] ); + colorButtons[i]->setPalette( QPalette( QColor( colors[i] ) ) ); + layout->addWidget( colorButtons[i], i, 1 ); + + colorPopupMenu = new ColorPopupMenu( colors[i], 0, list[i] ); + colorButtons[i]->setPopup( colorPopupMenu ); + colorButtons[i]->setPopupDelay( 0 ); + connect( colorPopupMenu, SIGNAL( colorSelected( const QColor& ) ), this, SLOT( changeColor( const QColor& ) ) ); + } +} + +EditScheme::~EditScheme() +{ +} + +void EditScheme::changeColor( const QColor& color ) +{ + QString name( sender()->name() ); + int i; + + for ( i = 0; i < maxCount; i++ ) + { + if ( name == colorButtons[i]->name() ) + { + break; + } + } + if ( i < maxCount && name == colorButtons[i]->name() ) + { + colorList[i] = color.name(); + colorButtons[i]->setPalette( QPalette( QColor( colorList[i] ) ) ); + } +} diff --git a/noncore/settings/appearance2/editScheme.h b/noncore/settings/appearance2/editScheme.h new file mode 100644 index 0000000..cf238c6 --- a/dev/null +++ b/noncore/settings/appearance2/editScheme.h @@ -0,0 +1,48 @@ +/********************************************************************** +** EditScheme +** +** Dialog for editing color scheme +** +** Copyright (C) 2002, Dan Williams +** williamsdr@acm.org +** http://draknor.net +** +** This file may be distributed and/or modified under the terms of the +** GNU General Public License version 2 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. +** +** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +** +**********************************************************************/ + +#ifndef EDITSCHEME_H +#define EDITSCHEME_H + +#include <qdialog.h> +#include <qtoolbutton.h> + +class QColor; + +class EditScheme : public QDialog +{ + Q_OBJECT + +public: + EditScheme( QWidget* parent = 0, const char* name = 0, bool modal = FALSE, WFlags fl = 0, + int = 0, QString[] = 0, QString[] = 0 ); + ~EditScheme(); + + int maxCount; + QString surfaceList[9]; + QString colorList[9]; + + + QToolButton* colorButtons[9]; + +protected slots: + void changeColor( const QColor& ); +}; + +#endif // EDITSCHEME_H diff --git a/noncore/settings/appearance2/fontlistitem.h b/noncore/settings/appearance2/fontlistitem.h new file mode 100644 index 0000000..73f1d54 --- a/dev/null +++ b/noncore/settings/appearance2/fontlistitem.h @@ -0,0 +1,40 @@ +#ifndef FONTLISTITEM_H +#define FONTLISTITEM_H + +#include <qlistbox.h> + +class FontListItem : public QListBoxText { +public: + FontListItem ( const QString &t, const QStringList &styles, const QValueList<int> &sizes ) : QListBoxText ( ) + { + m_name = t; + m_styles = styles; + m_sizes = sizes; + + QString str = t; + str [0] = str [0]. upper ( ); + setText ( str ); + } + + QString family ( ) const + { + return m_name; + } + + const QStringList &styles ( ) const + { + return m_styles; + } + + const QValueList<int> &sizes ( ) const + { + return m_sizes; + } + +private: + QStringList m_styles; + QValueList<int> m_sizes; + QString m_name; +}; + +#endif
\ No newline at end of file diff --git a/noncore/settings/appearance2/main.cpp b/noncore/settings/appearance2/main.cpp new file mode 100644 index 0000000..cfbab0b --- a/dev/null +++ b/noncore/settings/appearance2/main.cpp @@ -0,0 +1,35 @@ +/********************************************************************** +** Copyright (C) 2000 Trolltech AS. All rights reserved. +** +** This file is part of Qtopia Environment. +** +** This file may be distributed and/or modified under the terms of the +** GNU General Public License version 2 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. +** +** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +** +** See http://www.trolltech.com/gpl/ for GPL licensing information. +** +** Contact info@trolltech.com if any conditions of this licensing are +** not clear to you. +** +**********************************************************************/ + +#include "appearance.h" + +#include <qpe/qpeapplication.h> + + +int main ( int argc, char **argv ) +{ + QPEApplication app ( argc, argv ); + + Appearance m; + app. showMainDocumentWidget ( &m ); + + return app. exec ( ); +} + diff --git a/noncore/settings/appearance2/sample.cpp b/noncore/settings/appearance2/sample.cpp new file mode 100644 index 0000000..ee27d60 --- a/dev/null +++ b/noncore/settings/appearance2/sample.cpp @@ -0,0 +1,236 @@ +#include <qvbox.h> +#include <qpopupmenu.h> +#include <qpainter.h> +#include <qmenubar.h> +#include <qcheckbox.h> +#include <qpushbutton.h> +#include <qscrollbar.h> +#include <qlayout.h> +#include <qwhatsthis.h> +#include <qpixmapcache.h> +#include <qtimer.h> +#include <qobjectlist.h> + +#include "sample.h" + + +class SampleText : public QWidget +{ +public: + SampleText( const QString &t, bool h, QWidget *parent ) + : QWidget( parent ), hl(h), text(t) + { + if ( hl ) + setBackgroundMode( PaletteHighlight ); + else + setBackgroundMode( PaletteBase ); + } + + QSize sizeHint() const + { + QFontMetrics fm(font()); + return QSize( fm.width(text)+10, fm.height()+4 ); + } + + void paintEvent( QPaintEvent * ) + { + QPainter p(this); + if ( hl ) + p.setPen( colorGroup().highlightedText() ); + else + p.setPen( colorGroup().text() ); + p.drawText( rect(), AlignCenter, text ); + } + +private: + bool hl; + QString text; +}; + + +SampleWindow::SampleWindow( QWidget *parent ) : QWidget(parent), iface(0) +{ + init(); +} + +QSize SampleWindow::sizeHint() const +{ + return container->sizeHint() + QSize( 10, 35 ); +} + +void SampleWindow::setFont( const QFont &f ) +{ + QWidget::setFont( f ); + popup->setFont( f ); + QTimer::singleShot ( 0, this, SLOT( fixGeometry ( ))); +} + +static void setStyleRecursive ( QWidget *w, QStyle *s ) +{ + QObjectList *childObjects=(QObjectList*)w->children(); + if ( childObjects ) { + QObject * o; + for(o=childObjects->first();o!=0;o=childObjects->next()) { + if( o->isWidgetType() ) { + setStyleRecursive((QWidget *)o,s); + } + } + } + w->setStyle( s ); +} + + +void SampleWindow::setStyle2 ( QStyle *sty ) +{ + QPixmapCache::clear ( ); + QPalette p = palette ( ); + sty-> polish ( p ); + setStyleRecursive ( this, sty ); + QTimer::singleShot ( 0, this, SLOT( fixGeometry ( ))); +} + + +void SampleWindow::setDecoration( WindowDecorationInterface *i ) +{ + iface = i; + wd.rect = QRect( 0, 0, 150, 75 ); + wd.caption = tr("Sample"); + wd.palette = palette(); + wd.flags = WindowDecorationInterface::WindowData::Dialog | + WindowDecorationInterface::WindowData::Active; + wd.reserved = 1; + + th = iface->metric(WindowDecorationInterface::TitleHeight, &wd); + tb = iface->metric(WindowDecorationInterface::TopBorder, &wd); + lb = iface->metric(WindowDecorationInterface::LeftBorder, &wd); + rb = iface->metric(WindowDecorationInterface::RightBorder, &wd); + bb = iface->metric(WindowDecorationInterface::BottomBorder, &wd); + + int yoff = th + tb; + int xoff = lb; + + wd.rect.setX( 0 ); + wd.rect.setWidth( width() - lb - rb ); + wd.rect.setY( 0 ); + wd.rect.setHeight( height() - yoff - bb ); + + container->setGeometry( xoff, yoff, wd.rect.width(), wd.rect.height() ); + setMinimumSize( container->sizeHint().width()+lb+rb, + container->sizeHint().height()+tb+th+bb ); +} + +void SampleWindow::paintEvent( QPaintEvent * ) +{ + if ( !iface ) + return; + + QPainter p( this ); + + p.translate( lb, th+tb ); + + iface->drawArea(WindowDecorationInterface::Border, &p, &wd); + iface->drawArea(WindowDecorationInterface::Title, &p, &wd); + + p.setPen(palette().active().color(QColorGroup::HighlightedText)); + QFont f( font() ); + f.setWeight( QFont::Bold ); + p.setFont(f); + iface->drawArea(WindowDecorationInterface::TitleText, &p, &wd); + + QRect brect( 0, -th, iface->metric(WindowDecorationInterface::HelpWidth,&wd), th ); + iface->drawButton( WindowDecorationInterface::Help, &p, &wd, + brect.x(), brect.y(), brect.width(), brect.height(), (QWSButton::State)0 ); + brect.moveBy( wd.rect.width() - + iface->metric(WindowDecorationInterface::OKWidth,&wd) - + iface->metric(WindowDecorationInterface::CloseWidth,&wd), 0 ); + iface->drawButton( WindowDecorationInterface::Close, &p, &wd, + brect.x(), brect.y(), brect.width(), brect.height(), (QWSButton::State)0 ); + brect.moveBy( iface->metric(WindowDecorationInterface::CloseWidth,&wd), 0 ); + iface->drawButton( WindowDecorationInterface::OK, &p, &wd, + brect.x(), brect.y(), brect.width(), brect.height(), (QWSButton::State)0 ); +} + +void SampleWindow::init() +{ + container = new QVBox( this ); + popup = new QPopupMenu( this ); + popup->insertItem( tr("Normal Item"), 1 ); + popup->insertItem( tr("Disabled Item"), 2 ); + popup->setItemEnabled(2, FALSE); + QMenuBar *mb = new QMenuBar( container ); + mb->insertItem( tr("Menu"), popup ); + QHBox *hb = new QHBox( container ); + QWidget *w = new QWidget( hb ); + (void)new QScrollBar( 0, 0, 0, 0, 0, Vertical, hb ); + + QGridLayout *gl = new QGridLayout( w, 2, 2, 4 ); + SampleText *l = new SampleText( tr("Normal Text"), FALSE, w ); + gl->addWidget( l, 0, 0 ); + + l = new SampleText( tr("Highlighted Text"), TRUE, w ); + gl->addWidget( l, 1, 0 ); + + QPushButton *pb = new QPushButton( tr("Button"), w ); + gl->addWidget( pb, 0, 1 ); + pb->setFocusPolicy( NoFocus ); + + QCheckBox *cb = new QCheckBox( tr("Check Box"), w ); + gl->addWidget( cb, 1, 1 ); + cb->setFocusPolicy( NoFocus ); + cb->setChecked( TRUE ); + + QWhatsThis::add( this, tr("Sample window using the selected settings.") ); +} + +bool SampleWindow::eventFilter( QObject *, QEvent *e ) +{ + switch ( e->type() ) { + case QEvent::MouseButtonPress: + case QEvent::MouseButtonRelease: + case QEvent::MouseButtonDblClick: + case QEvent::MouseMove: + case QEvent::KeyPress: + case QEvent::KeyRelease: + return TRUE; + default: + break; + } + + return FALSE; +} + +void SampleWindow::paletteChange( const QPalette &old ) +{ + QWidget::paletteChange ( old ); + wd. palette = palette ( ); + popup-> setPalette ( palette ( )); +} + +void SampleWindow::setPalette ( const QPalette &pal ) +{ + QPixmapCache::clear ( ); + QPalette p = pal; + style ( ). polish ( p ); + + QWidget::setPalette ( p ); +} + +void SampleWindow::resizeEvent( QResizeEvent *re ) +{ + wd.rect = QRect( 0, 0, 150, 75 ); + + wd.rect.setX( 0 ); + wd.rect.setWidth( width() - lb - rb ); + wd.rect.setY( 0 ); + wd.rect.setHeight( height() - th - tb - bb ); + + container->setGeometry( lb, th+tb, wd.rect.width(), wd.rect.height() ); + QWidget::resizeEvent( re ); +} + +void SampleWindow::fixGeometry() +{ + setMinimumSize( container->sizeHint().width()+lb+rb, + container->sizeHint().height()+tb+th+bb ); +} + diff --git a/noncore/settings/appearance2/sample.h b/noncore/settings/appearance2/sample.h new file mode 100644 index 0000000..c6f9b5a --- a/dev/null +++ b/noncore/settings/appearance2/sample.h @@ -0,0 +1,49 @@ +#ifndef __PREVIEW_H__ +#define __PREVIEW_H__ + +#include <qwidget.h> + +#include <qpe/windowdecorationinterface.h> + +class QVBox; +class QPopupMenu; +class SampleText; + +class SampleWindow : public QWidget +{ + Q_OBJECT +public: + SampleWindow( QWidget *parent ); + + QSize sizeHint() const; + + virtual void setFont( const QFont &f ); + + void setStyle2 ( QStyle *sty ); + void setDecoration( WindowDecorationInterface *i ); + void setPalette ( const QPalette & ); + + virtual void paintEvent( QPaintEvent * ); + + void init(); + + virtual bool eventFilter( QObject *, QEvent *e ); + virtual void paletteChange( const QPalette &old ); + virtual void resizeEvent( QResizeEvent *re ); + +public slots: + void fixGeometry(); + +protected: + WindowDecorationInterface *iface; + WindowDecorationInterface::WindowData wd; + QVBox *container; + QPopupMenu *popup; + int th; + int tb; + int lb; + int rb; + int bb; +}; + +#endif diff --git a/noncore/settings/appearance2/stylelistitem.h b/noncore/settings/appearance2/stylelistitem.h new file mode 100644 index 0000000..3cc63dc --- a/dev/null +++ b/noncore/settings/appearance2/stylelistitem.h @@ -0,0 +1,85 @@ +#ifndef STYLELISTITEM_H +#define STYLELISTITEM_H + +#include <qlistbox.h> +#include <qpe/styleinterface.h> + +#include <stdio.h> + +class StyleListItem : public QListBoxText { +public: + StyleListItem ( const QString &t, QStyle *sty ) : QListBoxText ( t ) + { + m_lib = 0; + m_style_if = 0; + m_settings_if = 0; + m_style = sty; + } + + StyleListItem ( QLibrary *lib, StyleInterface *iface ) : QListBoxText ( iface-> name ( )) + { + m_lib = lib; + m_style_if = iface; + m_settings_if = 0; + m_style = iface-> create ( ); + + iface-> queryInterface ( IID_StyleSettings, (QUnknownInterface **) &m_settings_if ); + } + + virtual ~StyleListItem ( ) + { + delete m_style; + + if ( m_settings_if ) + m_settings_if-> release ( ); + if ( m_style_if ) + m_style_if-> release ( ); + delete m_lib; + } + + bool hasSettings ( ) const + { + return ( m_settings_if ); + } + + QWidget *settings ( QWidget *parent ) + { + return m_settings_if ? m_settings_if-> create ( parent ) : 0; + } + + bool setSettings ( bool accepted ) + { + if ( !m_settings_if ) + return false; + + if ( accepted ) + return m_settings_if-> accept ( ); + else { + m_settings_if-> reject ( ); + return false; + } + } + + QString key ( ) + { + if ( m_style_if ) + return QString ( m_style_if-> key ( )); + else + return text ( ); + } + + QStyle *style ( ) + { + return m_style; + } + +private: + QLibrary *m_lib; + QStyle *m_style; + StyleInterface *m_style_if; + StyleSettingsInterface *m_settings_if; + +}; + + +#endif |