summaryrefslogtreecommitdiff
path: root/library/menubutton.cpp
Side-by-side diff
Diffstat (limited to 'library/menubutton.cpp') (more/less context) (show whitespace changes)
-rw-r--r--library/menubutton.cpp187
1 files changed, 187 insertions, 0 deletions
diff --git a/library/menubutton.cpp b/library/menubutton.cpp
new file mode 100644
index 0000000..c34383a
--- a/dev/null
+++ b/library/menubutton.cpp
@@ -0,0 +1,187 @@
+/**********************************************************************
+** 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 "menubutton.h"
+#include <qpopupmenu.h>
+
+/*!
+ \class MenuButton menubutton.h
+ \brief The MenuButton class is a pushbutton with a menu.
+
+ Similar in function to a QComboBox.
+*/
+
+/*!
+ \fn void MenuButton::selected(int index)
+
+ This signal is emitted when the item at \a index is selected.
+*/
+
+/*!
+ \fn void MenuButton::selected(const QString& text)
+
+ This signal is emitted when the item with the given \a text is selected.
+*/
+
+
+/*!
+ Constructs a MenuButton with the given \a items added (see insertItems()).
+ The standard \a parent an \a name arguments are passed to the base class.
+*/
+MenuButton::MenuButton( const QStringList& items, QWidget* parent, const char* name) :
+ QPushButton(parent,name)
+{
+ init();
+ insertItems(items);
+}
+
+/*!
+ Constructs an empty MenuButton.
+ The standard \a parent an \a name arguments are passed to the base class.
+
+ \sa insertItems()
+*/
+MenuButton::MenuButton( QWidget* parent, const char* name) :
+ QPushButton(parent,name)
+{
+ init();
+}
+
+void MenuButton::init()
+{
+ setAutoDefault(FALSE);
+ pop = new QPopupMenu(this);
+ nitems=0;
+ connect(pop, SIGNAL(activated(int)), this, SLOT(select(int)));
+ setPopup(pop);
+ //setPopupDelay(0);
+}
+
+/*!
+ Removes all items from the button and menu.
+*/
+void MenuButton::clear()
+{
+ delete pop;
+ init();
+}
+
+/*!
+ Inserts string \a items into the menu. The string "--" represents
+ a separator.
+*/
+void MenuButton::insertItems( const QStringList& items )
+{
+ QStringList::ConstIterator it=items.begin();
+ for (; it!=items.end(); ++it) {
+ if ( (*it) == "--" )
+ insertSeparator();
+ else
+ insertItem(*it);
+ }
+}
+
+/*!
+ Inserts an \a icon and \a text into the menu.
+*/
+void MenuButton::insertItem( const QIconSet& icon, const QString& text=QString::null )
+{
+ pop->insertItem(icon, text, nitems++);
+ if ( nitems==1 ) select(0);
+}
+
+/*!
+ Inserts \a text into the menu.
+*/
+void MenuButton::insertItem( const QString& text )
+{
+ pop->insertItem(text, nitems++);
+ if ( nitems==1 ) select(0);
+}
+
+/*!
+ Inserts a visual separator into the menu.
+*/
+void MenuButton::insertSeparator()
+{
+ pop->insertSeparator();
+}
+
+/*!
+ Selects the items with text \a s.
+*/
+void MenuButton::select(const QString& s)
+{
+ for (int i=0; i<nitems; i++) {
+ if ( pop->text(i) == s ) {
+ select(i);
+ break;
+ }
+ }
+}
+
+/*!
+ Selects the item at index \a s.
+*/
+void MenuButton::select(int s)
+{
+ cur = s;
+ updateLabel();
+ if ( pop->iconSet(cur) )
+ setIconSet(*pop->iconSet(cur));
+ emit selected(cur);
+ emit selected(currentText());
+}
+
+/*!
+ Returns the index of the current item.
+*/
+int MenuButton::currentItem() const
+{
+ return cur;
+}
+
+/*!
+ Returns the text of the current item.
+*/
+QString MenuButton::currentText() const
+{
+ return pop->text(cur);
+}
+
+/*!
+ Sets the label. If \a label is empty, the
+ current item text is displayed, otherwise \a label should contain
+ "%1", which will be replaced by the current item text.
+*/
+void MenuButton::setLabel(const QString& label)
+{
+ lab = label;
+ updateLabel();
+}
+
+void MenuButton::updateLabel()
+{
+ QString t = pop->text(cur);
+ if ( !lab.isEmpty() )
+ t = lab.arg(t);
+ setText(t);
+}
+