You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
153 lines
4.2 KiB
153 lines
4.2 KiB
/*********
|
|
*
|
|
* This file is part of BibleTime's source code, http://www.bibletime.info/.
|
|
*
|
|
* Copyright 1999-2006 by the BibleTime developers.
|
|
* The BibleTime source code is licensed under the GNU General Public License version 2.0.
|
|
*
|
|
**********/
|
|
|
|
|
|
|
|
#include "cmodulechooserbar.h"
|
|
#include "cmodulechooserbutton.h"
|
|
|
|
#include <tqtimer.h>
|
|
|
|
CModuleChooserBar::CModuleChooserBar(ListCSwordModuleInfo useModules, CSwordModuleInfo::ModuleType type, TQWidget *parent, const char *name )
|
|
: TDEToolBar(parent,name),
|
|
m_moduleType(type),
|
|
m_idCounter(0),
|
|
m_buttonLimit(-1) //-1 means no limit
|
|
{
|
|
//insert buttons if useModules != 0
|
|
// for (useModules.first(); useModules.current(); useModules.next()) {
|
|
ListCSwordModuleInfo::iterator end_it = useModules.end();
|
|
for (ListCSwordModuleInfo::iterator it(useModules.begin()); it != end_it; ++it) {
|
|
|
|
if ((m_buttonLimit != -1) && ( m_buttonLimit <= (int)m_buttonList.count()) ) { //we reached the button limit
|
|
break;
|
|
};
|
|
|
|
addButton( *it );
|
|
}
|
|
|
|
// We can add a button to choose an additional module
|
|
if ( (m_buttonLimit == -1) || (m_buttonLimit > (int)m_buttonList.count()) ) {
|
|
addButton(0); //add a button without module set
|
|
}
|
|
}
|
|
|
|
/** Adds a button to the toolbar */
|
|
CModuleChooserButton* const CModuleChooserBar::addButton( CSwordModuleInfo* const module ) {
|
|
CModuleChooserButton* b = new CModuleChooserButton(module, m_moduleType, ++m_idCounter, this);
|
|
insertWidget( m_idCounter, b->size().width(), b );
|
|
m_buttonList.append(b);
|
|
|
|
connect( b, TQT_SIGNAL(sigAddButton()), this, TQT_SLOT(addButton()) );
|
|
|
|
connect( b, TQT_SIGNAL(sigRemoveButton(const int)), this, TQT_SLOT(removeButton(const int)) );
|
|
|
|
connect( b, TQT_SIGNAL(sigChanged()), TQT_SIGNAL(sigChanged()) );
|
|
connect( b, TQT_SIGNAL(sigChanged()), TQT_SLOT(updateMenuItems()) );
|
|
|
|
b->show();
|
|
|
|
updateMenuItems(); //make sure the items are up to date with the newest module list
|
|
|
|
return b;
|
|
}
|
|
|
|
void CModuleChooserBar::addButton( ) {
|
|
addButton(0);
|
|
}
|
|
|
|
/** Removes a button from the toolbar */
|
|
void CModuleChooserBar::removeButton( const int ID ) {
|
|
for (m_buttonList.first(); m_buttonList.current(); m_buttonList.next()) {
|
|
if (m_buttonList.current()->getId() == ID) { //found the right button to remove
|
|
CModuleChooserButton* b = m_buttonList.current();
|
|
m_buttonList.remove(b);
|
|
|
|
b->hide();
|
|
b->deleteLater();
|
|
break;
|
|
}
|
|
}
|
|
|
|
emit sigChanged();
|
|
|
|
updateMenuItems(); //make sure the items are up to date with the newest module list
|
|
}
|
|
|
|
/** Returns a list of selected modules. */
|
|
ListCSwordModuleInfo CModuleChooserBar::getModuleList() {
|
|
const int currentItemIndex = m_buttonList.at(); //make sure we don't change the current list item
|
|
|
|
ListCSwordModuleInfo list;
|
|
CSwordModuleInfo* m = 0;
|
|
for ( m_buttonList.first(); m_buttonList.current(); m_buttonList.next()) {
|
|
m = m_buttonList.current()->module();
|
|
if ( m ) {
|
|
list.append( m );
|
|
}
|
|
}
|
|
|
|
m_buttonList.at( currentItemIndex );
|
|
return list;
|
|
}
|
|
|
|
/** Sets the number of the maximum count of buttons. */
|
|
void CModuleChooserBar::setButtonLimit(const int limit) {
|
|
m_buttonLimit = limit;
|
|
if (limit == -1) //no need to delete buttons
|
|
return;
|
|
|
|
const int tooMuch = m_buttonList.count() - limit;
|
|
for (int i = 0; i < tooMuch; ++i) {
|
|
CModuleChooserButton* b = m_buttonList.getLast();
|
|
m_buttonList.remove(b);
|
|
b->hide();
|
|
delete b;
|
|
}
|
|
|
|
updateMenuItems();
|
|
}
|
|
|
|
/** Sets the modules which are chosen in this module chooser bar. */
|
|
void CModuleChooserBar::setModules( ListCSwordModuleInfo useModules ) {
|
|
setButtonLimit(0);
|
|
setButtonLimit(-1); //these two lines clear the bar
|
|
|
|
if (!useModules.count()) {
|
|
return;
|
|
}
|
|
|
|
// for (useModules.first(); useModules.current(); useModules.next()) {
|
|
ListCSwordModuleInfo::iterator end_it = useModules.end();
|
|
for (ListCSwordModuleInfo::iterator it(useModules.begin()); it != end_it; ++it) {
|
|
if ( (m_buttonLimit != -1) && (m_buttonLimit <= (int)m_buttonList.count()) ) {
|
|
break;
|
|
}
|
|
|
|
addButton( *it );
|
|
}
|
|
if ( (m_buttonLimit == -1) || (m_buttonLimit > (int)m_buttonList.count()) ) {
|
|
addButton(0);//add button without module set
|
|
}
|
|
|
|
updateMenuItems();
|
|
}
|
|
|
|
|
|
/*!
|
|
\fn CModuleChooserBar::updateMenuItems()
|
|
*/
|
|
void CModuleChooserBar::updateMenuItems() {
|
|
TQPtrList<CModuleChooserButton> buttons = m_buttonList ;
|
|
|
|
for (buttons.first(); buttons.current(); buttons.next()) {
|
|
buttons.current()->updateMenuItems();
|
|
}
|
|
}
|