author | drw <drw> | 2003-02-16 21:54:23 (UTC) |
---|---|---|
committer | drw <drw> | 2003-02-16 21:54:23 (UTC) |
commit | 8ecc375c803dc57b160bd0335891fcaf4f6de1df (patch) (side-by-side diff) | |
tree | a89c1ccc6e3a469bb8fa435dfedce9386333cb72 /libopie | |
parent | e0eb3f016d7f8a1e1e5548ef8aa115fef8999697 (diff) | |
download | opie-8ecc375c803dc57b160bd0335891fcaf4f6de1df.zip opie-8ecc375c803dc57b160bd0335891fcaf4f6de1df.tar.gz opie-8ecc375c803dc57b160bd0335891fcaf4f6de1df.tar.bz2 |
Added changeTab() to OTabWidget to dynamically change tab name and/or icon (stumbled upon request for this in TinyKate todo)
-rw-r--r-- | libopie/otabinfo.h | 16 | ||||
-rw-r--r-- | libopie/otabwidget.cpp | 46 | ||||
-rw-r--r-- | libopie/otabwidget.h | 10 |
3 files changed, 67 insertions, 5 deletions
diff --git a/libopie/otabinfo.h b/libopie/otabinfo.h index 8dbbcc2..6589638 100644 --- a/libopie/otabinfo.h +++ b/libopie/otabinfo.h @@ -60,57 +60,73 @@ public: * @param parent Pointer to parent of this control. * @param name Name of control. * @param s Style of widget selection control. * @param p Position of the widget selection control. */ OTabInfo() : i( -1 ), c( 0 ), p( 0 ), l( QString::null ) {} /** * @fn OTabInfo( int id, QWidget *control, const QString &icon, const QString &label ) * @brief Object constructor. * * @param id TabBar identifier for widget. * @param control QWidget pointer to widget. * @param icon QString name of icon file. * @param label QString text label for OTabWidget selection control. */ OTabInfo( int id, QWidget *control, const QString &icon, const QString &label ) : i( id ), c( control ), p( icon ), l( label ) {} /** * @fn id() * @brief Returns TabBar ID. */ int id() const { return i; } /** * @fn label() * @brief Returns text label for widget. */ const QString &label() const { return l; } /** + * @fn setLabel( const QString &label ) + * @brief Set label for tab. + * + * @param label QString text label for OTabWidget selection control. + */ + void setLabel( const QString &label ) { l = label; } + +/** * @fn control() * @brief Returns pointer to widget. */ QWidget *control() const { return c; } /** * @fn icon() * @brief Returns name of icon file. */ const QString &icon() const { return p; } +/** + * @fn setIcon( const QString &icon ) + * @brief Set icon for tab. + * + * @param icon QString name of icon file. + */ + void setIcon( const QString &icon ) { p = icon; } + private: int i; QWidget *c; QString p; QString l; }; /** * @class OTabInfoList * @brief A list of OTabInfo objects used by OTabWidget. */ typedef QList<OTabInfo> OTabInfoList; #endif diff --git a/libopie/otabwidget.cpp b/libopie/otabwidget.cpp index bee3f35..99bf067 100644 --- a/libopie/otabwidget.cpp +++ b/libopie/otabwidget.cpp @@ -129,74 +129,110 @@ void OTabWidget::removePage( QWidget *childwidget ) OTabInfo *tab = tabs.first(); while ( tab && tab->control() != childwidget ) { tab = tabs.next(); } if ( tab && tab->control() == childwidget ) { tabBar->setTabEnabled( tab->id(), FALSE ); tabBar->removeTab( tabBar->tab( tab->id() ) ); int i = 0; while ( i < tabList->count() && tabList->text( i ) != tab->label() ) { i++; } if ( tabList->text( i ) == tab->label() ) { tabList->removeItem( i ); } widgetStack->removeWidget( childwidget ); tabs.remove( tab ); delete tab; currentTab = tabs.current(); if ( !currentTab ) { widgetStack->setFrameStyle( QFrame::NoFrame ); } setUpLayout(); } } } +void OTabWidget::changeTab( QWidget *widget, const QString &iconset, const QString &label) +{ + OTabInfo *currtab = tabs.first(); + while ( currtab && currtab->control() != widget ) + { + currtab = tabs.next(); + } + if ( currtab && currtab->control() == widget ) + { + QTab *tab = tabBar->tab( currtab->id() ); + QPixmap icon( loadSmooth( iconset ) ); + tab->setText( label ); + if ( tabBarStyle == IconTab ) + tab->setIconSet( icon ); + int i = 0; + while ( i < tabList->count() && tabList->text( i ) != currtab->label() ) + { + i++; + } + if ( i < tabList->count() && tabList->text( i ) == currtab->label() ) + { + if ( tabBarStyle == IconTab || tabBarStyle == IconList ) + { + tabList->changeItem( icon, label, i ); + } + else + { + tabList->changeItem( label, i ); + } + } + currtab->setLabel( label ); + currtab->setIcon( iconset ); + } + setUpLayout(); +} + void OTabWidget::setCurrentTab( QWidget *childwidget ) { - OTabInfo *newtab = tabs.first(); - while ( newtab && newtab->control() != childwidget ) + OTabInfo *currtab = tabs.first(); + while ( currtab && currtab->control() != childwidget ) { - newtab = tabs.next(); + currtab = tabs.next(); } - if ( newtab && newtab->control() == childwidget ) + if ( currtab && currtab->control() == childwidget ) { - selectTab( newtab ); + selectTab( currtab ); } } void OTabWidget::setCurrentTab( const QString &tabname ) { OTabInfo *newtab = tabs.first(); while ( newtab && newtab->label() != tabname ) { newtab = tabs.next(); } if ( newtab && newtab->label() == tabname ) { selectTab( newtab ); } } void OTabWidget::setCurrentTab(int tabindex) { OTabInfo *newtab = tabs.first(); while ( newtab && newtab->id() != tabindex ) { newtab = tabs.next(); } if ( newtab && newtab->id() == tabindex ) { selectTab( newtab ); } } OTabWidget::TabStyle OTabWidget::tabStyle() const { return tabBarStyle; diff --git a/libopie/otabwidget.h b/libopie/otabwidget.h index 74d683b..0aa9bb8 100644 --- a/libopie/otabwidget.h +++ b/libopie/otabwidget.h @@ -97,64 +97,74 @@ public: * @param p Position of the widget selection control. * * Constructs a new OTabWidget control with parent and name. The style and position parameters * determine how the widget selection control will be displayed. */ OTabWidget( QWidget * = 0, const char * = 0, TabStyle = Global, TabPosition = Top ); /** * @fn ~OTabWidget() * @brief Object destructor. */ ~OTabWidget(); /** * @fn addTab( QWidget *child, const QString &icon, const QString &label ) * @brief Add new widget to control. * * @param child Widget control. * @param icon Path to icon. * @param label Text label. */ void addTab( QWidget *, const QString &, const QString & ); /** * @fn removePage( QWidget *widget ) * @brief Remove widget from control. Does not delete widget. * * @param widget Widget control to be removed. */ void removePage( QWidget * ); /** + * @fn changeTab( QWidget *widget, const QIconSet &icon, const QString &label ) + * @brief Change text and/or icon for existing tab + * + * @param child Widget control. + * @param icon Path to icon. + * @param label Text label. + */ + void changeTab( QWidget *, const QString &, const QString & ); + +/** * @fn tabStyle() * @brief Returns current widget selection control style. */ TabStyle tabStyle() const; /** * @fn setTabStyle( TabStyle s ) * @brief Set the current widget selection control style. * * @param s New style to be used. */ void setTabStyle( TabStyle ); /** * @fn tabPosition() * @brief Returns current widget selection control position. */ TabPosition tabPosition() const; /** * @fn setTabPosition( TabPosition p ) * @brief Set the current widget selection control position. * * @param p New position of widget selection control. */ void setTabPosition( TabPosition ); /** * @fn setCurrentTab( QWidget *childwidget ) * @brief Selects and brings to top the desired widget by using widget pointer. * * @param childwidget Widget to select. |