From 15318cad33835e4e2dc620d033e43cd930676cdd Mon Sep 17 00:00:00 2001 From: kergoth Date: Fri, 25 Jan 2002 22:14:26 +0000 Subject: Initial revision --- (limited to 'library/menubutton.cpp') 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 + +/*! + \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; itext(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); +} + -- cgit v0.9.0.2