summaryrefslogtreecommitdiff
path: root/core/settings/launcher/tabdialog.cpp
authorsandman <sandman>2002-09-24 23:54:38 (UTC)
committer sandman <sandman>2002-09-24 23:54:38 (UTC)
commit64110f43896391053f662186228a4fad2280f717 (patch) (side-by-side diff)
treeb2f94a61a8de8b95a29c88d513525e7478b1d8c9 /core/settings/launcher/tabdialog.cpp
parent5ae62a1def1d21c4827560607b208033d6054ed0 (diff)
downloadopie-64110f43896391053f662186228a4fad2280f717.zip
opie-64110f43896391053f662186228a4fad2280f717.tar.gz
opie-64110f43896391053f662186228a4fad2280f717.tar.bz2
beta version - not fully functional
Diffstat (limited to 'core/settings/launcher/tabdialog.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--core/settings/launcher/tabdialog.cpp381
1 files changed, 381 insertions, 0 deletions
diff --git a/core/settings/launcher/tabdialog.cpp b/core/settings/launcher/tabdialog.cpp
new file mode 100644
index 0000000..7b01cc7
--- a/dev/null
+++ b/core/settings/launcher/tabdialog.cpp
@@ -0,0 +1,381 @@
+
+#include <qpe/resource.h>
+#include <qpe/config.h>
+
+#include <qlayout.h>
+#include <qvbox.h>
+#include <qtabbar.h>
+#include <qiconview.h>
+#include <qapplication.h>
+#include <qlabel.h>
+#include <qradiobutton.h>
+#include <qbuttongroup.h>
+
+#include <opie/ofontselector.h>
+#include <opie/otabwidget.h>
+#include <opie/ocolorbutton.h>
+
+#include "tabdialog.h"
+
+
+class SampleItem : public QIconViewItem {
+public:
+ SampleItem ( QIconView *v, const QString &text, const QPixmap &pix ) : QIconViewItem ( v, text )
+ {
+ m_large = pix;
+ m_small. convertFromImage ( pix. convertToImage ( ). smoothScale ( pix. width ( ) / 2, pix. height ( ) / 2 ));
+ }
+
+ void sizeChange ( )
+ {
+ calcRect ( );
+ repaint ( );
+ }
+
+ QPixmap *pixmap ( ) const
+ {
+ if ( iconView ( )-> itemTextPos ( ) == QIconView::Right )
+ return (QPixmap *) &m_small;
+ else
+ return (QPixmap *) &m_large;
+ }
+private:
+ QPixmap m_large, m_small;
+};
+
+class SampleView : public QIconView {
+public:
+ SampleView ( QWidget *parent = 0, const char *name = 0 ) : QIconView ( parent, name )
+ {
+ setItemsMovable ( false );
+ setAutoArrange ( true );
+ setSorting ( true );
+ setFrameStyle ( QFrame::NoFrame );
+ setSpacing ( 4 );
+ setMargin ( 0 );
+ setSelectionMode ( QIconView::NoSelection );
+ setBackgroundMode ( PaletteBase );
+ setViewMode ( TabConfig::Icon );
+ calculateGrid ( Bottom );
+
+
+ new SampleItem ( this, tr( "Sample 1" ), Resource::loadPixmap ( "DateBook" ));
+ new SampleItem ( this, tr( "Sample 2" ), Resource::loadPixmap ( "Calibrate" ));
+ new SampleItem ( this, tr( "Sample 3" ), Resource::loadPixmap ( "UnknownDocument" ));
+
+ setBackgroundType ( TabConfig::Ruled, QString::null );
+
+ setMaximumHeight ( firstItem ( )-> height ( ) + 16 );
+ }
+
+ void setViewMode ( TabConfig::ViewMode m )
+ {
+ viewport ( )-> setUpdatesEnabled ( false );
+
+ switch ( m ) {
+ case TabConfig::List:
+ setItemTextPos( QIconView::Right );
+ break;
+ case TabConfig::Icon:
+ setItemTextPos( QIconView::Bottom );
+ break;
+ }
+// hideOrShowItems ( false );
+
+ for ( QIconViewItem *it = firstItem ( ); it; it = it-> nextItem ( ))
+ ((SampleItem *) it )-> sizeChange ( );
+ arrangeItemsInGrid ( true );
+ viewport ( )-> setUpdatesEnabled ( true );
+ update ( );
+ }
+
+
+ void setBackgroundType( TabConfig::BackgroundType t, const QString &val )
+ {
+ switch ( t ) {
+ case TabConfig::Ruled: {
+ QPixmap bg ( width ( ), 9 );
+ QPainter painter ( &bg );
+ for ( int i = 0; i < 3; i++ ) {
+ painter. setPen ( white );
+ painter. drawLine ( 0, i*3, width()-1, i*3 );
+ painter. drawLine ( 0, i*3+1, width()-1, i*3+1 );
+ painter. setPen ( colorGroup().background().light(105) );
+ painter. drawLine ( 0, i*3+2, width()-1, i*3+2 );
+ }
+ painter.end ( );
+ setBackgroundPixmap ( bg );
+ break;
+ }
+
+ case TabConfig::SolidColor: {
+ setBackgroundPixmap ( QPixmap ( ));
+ if ( val. isEmpty ( ))
+ setBackgroundColor ( colorGroup ( ). base ( ));
+ else
+ setBackgroundColor ( val );
+ break;
+ }
+
+ case TabConfig::Image: {
+ qDebug( "Loading image: %s", val.latin1() );
+ QPixmap bg ( Resource::loadPixmap ( "wallpaper/" + val ));
+ if ( bg. isNull ( )) {
+ QImageIO imgio;
+ imgio. setFileName ( val );
+ QSize ds = qApp-> desktop ( )-> size ( );
+ QString param ( "Scale( %1, %2, ScaleMin )" ); // No tr
+ imgio. setParameters ( param. arg ( ds. width ( )). arg ( ds. height ( )). latin1 ( ));
+ imgio. read ( );
+ bg = imgio. image ( );
+ }
+ setBackgroundPixmap ( bg );
+ break;
+ }
+ }
+ m_bgtype = t;
+ viewport ( )-> update ( );
+ }
+
+ void setTextColor ( const QColor &tc )
+ {
+ m_textcolor = tc;
+ QColorGroup cg = colorGroup ( );
+ cg. setColor ( QColorGroup::Text, tc );
+ setPalette ( QPalette ( cg, cg, cg ));
+ viewport ( )-> update ( );
+ }
+
+ void setViewFont ( const QFont &f )
+ {
+ setFont ( f );
+ }
+
+ void setItemTextPos ( ItemTextPos pos )
+ {
+ calculateGrid ( pos );
+ QIconView::setItemTextPos( pos );
+ }
+
+ void calculateGrid ( ItemTextPos pos )
+ {
+ int dw = QApplication::desktop ( )-> width ( );
+ int viewerWidth = dw - style ( ).scrollBarExtent ( ). width ( );
+ if ( pos == Bottom ) {
+ int cols = 3;
+ if ( viewerWidth <= 200 )
+ cols = 2;
+ else if ( viewerWidth >= 400 )
+ cols = viewerWidth/96;
+ setSpacing ( 4 );
+ setGridX (( viewerWidth - ( cols + 1 ) * spacing ( )) / cols );
+ setGridY ( fontMetrics ( ). height ( ) * 2 + 24 );
+ }
+ else {
+ int cols = 2;
+ if ( viewerWidth < 150 )
+ cols = 1;
+ else if ( viewerWidth >= 400 )
+ cols = viewerWidth / 150;
+ setSpacing ( 2 );
+ setGridX (( viewerWidth - ( cols + 1 ) * spacing ( )) / cols );
+ setGridY ( fontMetrics ( ). height ( ) + 2 );
+ }
+ }
+
+ void paletteChange( const QPalette &p )
+ {
+ unsetPalette ( );
+ QIconView::paletteChange ( p );
+ if ( m_bgtype == TabConfig::Ruled )
+ setBackgroundType ( TabConfig::Ruled, QString::null );
+ QColorGroup cg = colorGroup ( );
+ cg.setColor ( QColorGroup::Text, m_textcolor );
+ setPalette ( QPalette ( cg, cg, cg ));
+ }
+
+ void setBackgroundPixmap ( const QPixmap &pm )
+ {
+ m_bgpix = pm;
+ }
+
+ void setBackgroundColor ( const QColor &c )
+ {
+ m_bgcolor = c;
+ }
+
+ void drawBackground ( QPainter *p, const QRect &r )
+ {
+ if ( !m_bgpix. isNull ( )) {
+ p-> drawTiledPixmap ( r, m_bgpix, QPoint (( r. x ( ) + contentsX ( )) % m_bgpix. width ( ),
+ ( r. y ( ) + contentsY ( )) % m_bgpix. height ( )));
+ }
+ else
+ p-> fillRect ( r, m_bgcolor );
+ }
+
+private:
+ QColor m_textcolor;
+ QColor m_bgcolor;
+ QPixmap m_bgpix;
+ TabConfig::BackgroundType m_bgtype;
+};
+
+
+
+TabDialog::TabDialog ( const QPixmap *tabicon, const QString &tabname, TabConfig &tc, QWidget *parent, const char *name, bool modal, WFlags fl )
+ : QDialog ( parent, name, modal, fl )
+{
+ setCaption ( tr( "Edit Tab" ));
+
+ QVBoxLayout *lay = new QVBoxLayout ( this, 4, 4 );
+
+ OTabWidget *tw = new OTabWidget ( this, "tabwidget", OTabWidget::Global, OTabWidget::Bottom );
+ QWidget *bgtab;
+
+ tw-> addTab ( bgtab = createBgTab ( tw ), "appearance/backgroundtabicon.png", tr( "Background" ));
+ tw-> addTab ( createFontTab ( tw ), "appearance/fonttabicon.png", tr( "Font" ));
+ tw-> addTab ( createIconTab ( tw ), "appearance/colorstabicon.png", tr( "Icons" ) );
+
+ tw-> setCurrentTab ( bgtab );
+
+ QWidget *sample = new QVBox ( this );
+ QTabBar *tb = new QTabBar ( sample );
+ QString name ( tr( "Previewing %1" ). arg ( tabname ));
+
+ tb-> addTab ( tabicon ? new QTab ( *tabicon, name ) : new QTab ( name ));
+
+ m_sample = new SampleView ( sample );
+
+ lay-> addWidget ( tw, 10 );
+ lay-> addWidget ( sample, 1 );
+}
+
+
+TabDialog::~TabDialog ( )
+{
+}
+
+QWidget *TabDialog::createFontTab ( QWidget *parent )
+{
+ Config config ( "qpe" );
+ config. setGroup ( "Appearance" );
+
+ QString familyStr = config.readEntry( "FontFamily", "Helvetica" );
+ QString styleStr = config.readEntry( "FontStyle", "Regular" );
+ int size = config.readNumEntry( "FontSize", 10 );
+
+ m_fontselect = new OFontSelector ( parent, "FontTab" );
+ m_fontselect-> setSelectedFont ( familyStr, styleStr, size );
+
+ connect( m_fontselect, SIGNAL( fontSelected ( const QFont & )),
+ this, SLOT( fontClicked ( const QFont & )));
+
+ return m_fontselect;
+}
+
+QWidget *TabDialog::createBgTab ( QWidget *parent )
+{
+ QWidget *tab = new QWidget( parent, "AdvancedTab" );
+ QVBoxLayout *vertLayout = new QVBoxLayout( tab, 4, 4 );
+
+ QGridLayout* gridLayout = new QGridLayout ( vertLayout );
+ gridLayout-> setColStretch ( 1, 10 );
+
+ QLabel* label = new QLabel( tr( "Type:" ), tab );
+ gridLayout-> addWidget ( label, 0, 0 );
+ m_bgtype = new QButtonGroup( tab, "buttongroup" );
+ m_bgtype-> hide ( );
+ m_bgtype-> setExclusive ( true );
+
+ QRadioButton *rb;
+ rb = new QRadioButton( tr( "Ruled" ), tab, "ruled" );
+ m_bgtype-> insert ( rb, TabConfig::Ruled );
+ gridLayout-> addWidget( rb, 0, 1 );
+
+ QHBoxLayout *hb = new QHBoxLayout ( );
+ hb-> setSpacing ( 4 );
+
+ rb = new QRadioButton( tr( "Solid color" ), tab, "solid" );
+ m_bgtype-> insert ( rb, TabConfig::SolidColor );
+ hb-> addWidget ( rb );
+
+ m_solidcolor = new OColorButton ( tab );
+ connect ( m_solidcolor, SIGNAL( colorSelected ( const QColor & )), this, SLOT( colorClicked ( const QColor & )));
+ hb-> addWidget ( m_solidcolor );
+ hb-> addStretch ( 10 );
+
+ gridLayout-> addLayout ( hb, 1, 1 );
+
+ rb = new QRadioButton( tr( "Image" ), tab, "image" );
+ m_bgtype-> insert ( rb, TabConfig::Image );
+ gridLayout-> addWidget( rb, 3, 1 );
+
+ QPushButton *p;
+
+ connect ( m_bgtype, SIGNAL( clicked ( int )), this, SLOT( bgTypeClicked ( int )));
+
+ vertLayout-> addStretch ( 10 );
+
+ return tab;
+}
+
+QWidget *TabDialog::createIconTab ( QWidget *parent )
+{
+ QWidget *tab = new QWidget( parent, "AdvancedTab" );
+ QVBoxLayout *vertLayout = new QVBoxLayout( tab, 4, 4 );
+
+ QGridLayout* gridLayout = new QGridLayout ( vertLayout );
+ gridLayout-> setColStretch ( 1, 10 );
+
+ QLabel* label = new QLabel( tr( "Size:" ), tab );
+ gridLayout-> addWidget ( label, 0, 0 );
+ m_iconsize = new QButtonGroup( tab, "buttongroup" );
+ m_iconsize-> hide ( );
+ m_iconsize-> setExclusive ( true );
+
+ QRadioButton *rb;
+ rb = new QRadioButton( tr( "Small" ), tab, "iconsmall" );
+ m_iconsize-> insert ( rb, TabConfig::List );
+ gridLayout-> addWidget( rb, 0, 1 );
+
+ rb = new QRadioButton( tr( "Large" ), tab, "iconlarge" );
+ m_iconsize-> insert ( rb, TabConfig::Icon );
+ gridLayout-> addWidget( rb, 1, 1 );
+
+ connect ( m_iconsize, SIGNAL( clicked ( int )), this, SLOT( iconSizeClicked ( int )));
+
+ vertLayout-> addStretch ( 10 );
+
+ return tab;
+}
+
+
+void TabDialog::iconSizeClicked ( int s )
+{
+ m_sample-> setViewMode ((TabConfig::ViewMode) s );
+}
+
+void TabDialog::fontClicked ( const QFont &f )
+{
+ m_sample-> setViewFont ( f );
+}
+
+void TabDialog::bgTypeClicked ( int t )
+{
+ QString s;
+
+ m_solidcolor-> setEnabled ( t == TabConfig::SolidColor );
+// m_imagebrowse-> setEnabled ( t == TabConfig::Image );
+// m_imagedefault-> setEnabled ( t == TabConfig::Image );
+
+ if ( t == TabConfig::SolidColor )
+ s = m_solidcolor-> color ( ). name ( );
+
+ m_sample-> setBackgroundType ((TabConfig::BackgroundType) t, s );
+}
+
+void TabDialog::colorClicked ( const QColor &col )
+{
+ m_sample-> setBackgroundType ( TabConfig::SolidColor, col. name ( ));
+}