-rw-r--r-- | microkde/kdeui/ktoolbar.cpp | 2 | ||||
-rw-r--r-- | microkde/kdeui/ktoolbar.h | 2 |
2 files changed, 2 insertions, 2 deletions
diff --git a/microkde/kdeui/ktoolbar.cpp b/microkde/kdeui/ktoolbar.cpp index 09ad0c8..35d4916 100644 --- a/microkde/kdeui/ktoolbar.cpp +++ b/microkde/kdeui/ktoolbar.cpp @@ -369,1025 +369,1025 @@ int KToolBar::insertLined (const QString& text, int id, bool enabled , const QString& toolTipText, int size, int index ) { KLineEdit *lined = new KLineEdit ( this, 0 ); if ( !toolTipText.isEmpty() ) QToolTip::add( lined, toolTipText ); if ( size > 0 ) lined->setMinimumWidth( size ); insertWidgetInternal( lined, index, id ); connect( lined, signal, receiver, slot ); lined->setText(text); lined->setEnabled( enabled ); return index; } int KToolBar::insertCombo (const QStringList &list, int id, bool writable, const char *signal, const QObject *receiver, const char *slot, bool enabled, const QString& tooltiptext, int size, int index, QComboBox::Policy policy ) { //US KComboBox *combo = new KComboBox ( writable, this ); KComboBox *combo = new KComboBox ( this ); combo->setEditable(writable); insertWidgetInternal( combo, index, id ); combo->insertStringList (list); combo->setInsertionPolicy(policy); combo->setEnabled( enabled ); if ( !tooltiptext.isEmpty() ) QToolTip::add( combo, tooltiptext ); if ( size > 0 ) combo->setMinimumWidth( size ); if (!tooltiptext.isNull()) QToolTip::add( combo, tooltiptext ); if ( signal && receiver && slot ) connect ( combo, signal, receiver, slot ); return index; } int KToolBar::insertCombo (const QString& text, int id, bool writable, const char *signal, QObject *receiver, const char *slot, bool enabled, const QString& tooltiptext, int size, int index, QComboBox::Policy policy ) { //US KComboBox *combo = new KComboBox ( writable, this ); KComboBox *combo = new KComboBox ( this ); combo->setEditable(writable); insertWidgetInternal( combo, index, id ); combo->insertItem (text); combo->setInsertionPolicy(policy); combo->setEnabled( enabled ); if ( !tooltiptext.isEmpty() ) QToolTip::add( combo, tooltiptext ); if ( size > 0 ) combo->setMinimumWidth( size ); if (!tooltiptext.isNull()) QToolTip::add( combo, tooltiptext ); connect (combo, signal, receiver, slot); return index; } int KToolBar::insertSeparator(int index, int id) { QWidget *w = new KToolBarSeparator( orientation(), FALSE, this, "tool bar separator" ); insertWidgetInternal( w, index, id ); return index; } int KToolBar::insertLineSeparator(int index, int id) { QWidget *w = new KToolBarSeparator( orientation(), TRUE, this, "tool bar separator" ); insertWidgetInternal( w, index, id ); return index; } int KToolBar::insertWidget(int id, int /*width*/, QWidget *widget, int index) { // removeWidgetInternal( widget ); // in case we already have it ? insertWidgetInternal( widget, index, id ); return index; } /*US int KToolBar::insertAnimatedWidget(int id, QObject *receiver, const char *slot, const QString& icons, int index ) { KAnimWidget *anim = new KAnimWidget( icons, d->m_iconSize, this ); insertWidgetInternal( anim, index, id ); if ( receiver ) connect( anim, SIGNAL(clicked()), receiver, slot); return index; } KAnimWidget *KToolBar::animatedWidget( int id ) { Id2WidgetMap::Iterator it = id2widget.find( id ); if ( it == id2widget.end() ) return 0; if ( (*it) && (*it)->inherits( "KAnimWidget" ) ) return (KAnimWidget*)(*it); QObjectList *l = queryList( "KAnimWidget" ); if ( !l || !l->first() ) { delete l; return 0; } for ( QObject *o = l->first(); o; o = l->next() ) { if ( o->inherits( "KAnimWidget" ) ) { delete l; return (KAnimWidget*)o; } } delete l; return 0; } */ void KToolBar::addConnection (int id, const char *signal, const QObject *receiver, const char *slot) { Id2WidgetMap::Iterator it = id2widget.find( id ); if ( it == id2widget.end() ) return; if ( (*it) ) connect( (*it), signal, receiver, slot ); } void KToolBar::setItemEnabled( int id, bool enabled ) { Id2WidgetMap::Iterator it = id2widget.find( id ); if ( it == id2widget.end() ) return; if ( (*it) ) (*it)->setEnabled( enabled ); } void KToolBar::setButtonPixmap( int id, const QPixmap& _pixmap ) { Id2WidgetMap::Iterator it = id2widget.find( id ); if ( it == id2widget.end() ) return; //US KToolBarButton * button = dynamic_cast<KToolBarButton *>( *it ); KToolBarButton * button = (KToolBarButton *)( *it ); if ( button ) button->setPixmap( _pixmap ); } void KToolBar::setButtonIcon( int id, const QString& _icon ) { Id2WidgetMap::Iterator it = id2widget.find( id ); if ( it == id2widget.end() ) return; //US KToolBarButton * button = dynamic_cast<KToolBarButton *>( *it ); KToolBarButton * button = (KToolBarButton *)( *it ); if ( button ) button->setIcon( _icon ); } void KToolBar::setButtonIconSet( int id, const QIconSet& iconset ) { Id2WidgetMap::Iterator it = id2widget.find( id ); if ( it == id2widget.end() ) return; //US KToolBarButton * button = dynamic_cast<KToolBarButton *>( *it ); KToolBarButton * button = (KToolBarButton *)( *it ); if ( button ) button->setIconSet( iconset ); } void KToolBar::setDelayedPopup (int id , QPopupMenu *_popup, bool toggle ) { Id2WidgetMap::Iterator it = id2widget.find( id ); if ( it == id2widget.end() ) return; //US KToolBarButton * button = dynamic_cast<KToolBarButton *>( *it ); KToolBarButton * button = (KToolBarButton *)( *it ); if ( button ) button->setDelayedPopup( _popup, toggle ); } void KToolBar::setAutoRepeat (int id, bool flag) { Id2WidgetMap::Iterator it = id2widget.find( id ); if ( it == id2widget.end() ) return; //US KToolBarButton * button = dynamic_cast<KToolBarButton *>( *it ); KToolBarButton * button = (KToolBarButton *)( *it ); if ( button ) button->setAutoRepeat( flag ); } void KToolBar::setToggle (int id, bool flag ) { Id2WidgetMap::Iterator it = id2widget.find( id ); if ( it == id2widget.end() ) return; //US KToolBarButton * button = dynamic_cast<KToolBarButton *>( *it ); KToolBarButton * button = (KToolBarButton *)( *it ); if ( button ) button->setToggle( flag ); } void KToolBar::toggleButton (int id) { Id2WidgetMap::Iterator it = id2widget.find( id ); if ( it == id2widget.end() ) return; //US KToolBarButton * button = dynamic_cast<KToolBarButton *>( *it ); KToolBarButton * button = (KToolBarButton *)( *it ); if ( button ) button->toggle(); } void KToolBar::setButton (int id, bool flag) { Id2WidgetMap::Iterator it = id2widget.find( id ); if ( it == id2widget.end() ) return; //US KToolBarButton * button = dynamic_cast<KToolBarButton *>( *it ); KToolBarButton * button = (KToolBarButton *)( *it ); if ( button ) button->on( flag ); } bool KToolBar::isButtonOn (int id) const { Id2WidgetMap::ConstIterator it = id2widget.find( id ); if ( it == id2widget.end() ) return false; //US KToolBarButton * button = dynamic_cast<KToolBarButton *>( *it ); KToolBarButton * button = (KToolBarButton *)( *it ); return button ? button->isOn() : false; } void KToolBar::setLinedText (int id, const QString& text) { Id2WidgetMap::Iterator it = id2widget.find( id ); if ( it == id2widget.end() ) return; //US QLineEdit * lineEdit = dynamic_cast<QLineEdit *>( *it ); QLineEdit * lineEdit = (QLineEdit *)( *it ); if ( lineEdit ) lineEdit->setText( text ); } QString KToolBar::getLinedText (int id) const { Id2WidgetMap::ConstIterator it = id2widget.find( id ); if ( it == id2widget.end() ) return QString::null; //US QLineEdit * lineEdit = dynamic_cast<QLineEdit *>( *it ); QLineEdit * lineEdit = (QLineEdit *)( *it ); return lineEdit ? lineEdit->text() : QString::null; } void KToolBar::insertComboItem (int id, const QString& text, int index) { Id2WidgetMap::Iterator it = id2widget.find( id ); if ( it == id2widget.end() ) return; //US QComboBox * comboBox = dynamic_cast<QComboBox *>( *it ); QComboBox * comboBox = (QComboBox *)( *it ); if (comboBox) comboBox->insertItem( text, index ); } void KToolBar::insertComboList (int id, const QStringList &list, int index) { Id2WidgetMap::Iterator it = id2widget.find( id ); if ( it == id2widget.end() ) return; //US QComboBox * comboBox = dynamic_cast<QComboBox *>( *it ); QComboBox * comboBox = (QComboBox *)( *it ); if (comboBox) comboBox->insertStringList( list, index ); } void KToolBar::removeComboItem (int id, int index) { Id2WidgetMap::Iterator it = id2widget.find( id ); if ( it == id2widget.end() ) return; //US QComboBox * comboBox = dynamic_cast<QComboBox *>( *it ); QComboBox * comboBox = (QComboBox *)( *it ); if (comboBox) comboBox->removeItem( index ); } void KToolBar::setCurrentComboItem (int id, int index) { Id2WidgetMap::Iterator it = id2widget.find( id ); if ( it == id2widget.end() ) return; //US QComboBox * comboBox = dynamic_cast<QComboBox *>( *it ); QComboBox * comboBox = (QComboBox *)( *it ); if (comboBox) comboBox->setCurrentItem( index ); } void KToolBar::changeComboItem (int id, const QString& text, int index) { Id2WidgetMap::Iterator it = id2widget.find( id ); if ( it == id2widget.end() ) return; //US QComboBox * comboBox = dynamic_cast<QComboBox *>( *it ); QComboBox * comboBox = (QComboBox *)( *it ); if (comboBox) comboBox->changeItem( text, index ); } void KToolBar::clearCombo (int id) { Id2WidgetMap::Iterator it = id2widget.find( id ); if ( it == id2widget.end() ) return; //US QComboBox * comboBox = dynamic_cast<QComboBox *>( *it ); QComboBox * comboBox = (QComboBox *)( *it ); if (comboBox) comboBox->clear(); } QString KToolBar::getComboItem (int id, int index) const { Id2WidgetMap::ConstIterator it = id2widget.find( id ); if ( it == id2widget.end() ) return QString::null; //US QComboBox * comboBox = dynamic_cast<QComboBox *>( *it ); QComboBox * comboBox = (QComboBox *)( *it ); return comboBox ? comboBox->text( index ) : QString::null; } KComboBox * KToolBar::getCombo(int id) { Id2WidgetMap::Iterator it = id2widget.find( id ); if ( it == id2widget.end() ) return 0; //US return dynamic_cast<KComboBox *>( *it ); return (KComboBox *)( *it ); } KLineEdit * KToolBar::getLined (int id) { Id2WidgetMap::Iterator it = id2widget.find( id ); if ( it == id2widget.end() ) return 0; //US return dynamic_cast<KLineEdit *>( *it ); return (KLineEdit *)( *it ); } KToolBarButton * KToolBar::getButton (int id) { Id2WidgetMap::Iterator it = id2widget.find( id ); if ( it == id2widget.end() ) return 0; //US return dynamic_cast<KToolBarButton *>( *it ); return (KToolBarButton *)( *it ); } void KToolBar::alignItemRight (int id, bool right ) { Id2WidgetMap::Iterator it = id2widget.find( id ); if ( it == id2widget.end() ) return; if ( rightAligned && !right && (*it) == rightAligned ) rightAligned = 0; if ( (*it) && right ) rightAligned = (*it); } QWidget *KToolBar::getWidget (int id) { Id2WidgetMap::Iterator it = id2widget.find( id ); return ( it == id2widget.end() ) ? 0 : (*it); } void KToolBar::setItemAutoSized (int id, bool yes ) { QWidget *w = getWidget(id); if ( w && yes ) setStretchableWidget( w ); } void KToolBar::clear () { QToolBar::clear(); widget2id.clear(); id2widget.clear(); } void KToolBar::removeItem(int id) { Id2WidgetMap::Iterator it = id2widget.find( id ); if ( it == id2widget.end() ) { kdDebug(220) << "KToolBar::removeItem item " << id << " not found" << endl; return; } QWidget * w = (*it); id2widget.remove( id ); widget2id.remove( w ); widgets.removeRef( w ); delete w; } void KToolBar::removeItemDelayed(int id) { Id2WidgetMap::Iterator it = id2widget.find( id ); if ( it == id2widget.end() ) { kdDebug(220) << "KToolBar::removeItem item " << id << " not found" << endl; return; } QWidget * w = (*it); id2widget.remove( id ); widget2id.remove( w ); widgets.removeRef( w ); w->blockSignals(true); d->idleButtons.append(w); layoutTimer->start( 50, TRUE ); } void KToolBar::hideItem (int id) { QWidget *w = getWidget(id); if ( w ) w->hide(); } void KToolBar::showItem (int id) { QWidget *w = getWidget(id); if ( w ) w->show(); } int KToolBar::itemIndex (int id) { QWidget *w = getWidget(id); return w ? widgets.findRef(w) : -1; } void KToolBar::setFullSize(bool flag ) { setHorizontalStretchable( flag ); setVerticalStretchable( flag ); } bool KToolBar::fullSize() const { return isHorizontalStretchable() || isVerticalStretchable(); } void KToolBar::enableMoving(bool flag ) { //US setMovingEnabled(flag); this->mainWindow()->setToolBarsMovable(flag); } void KToolBar::setBarPos (BarPosition bpos) { if ( !mainWindow() ) return; //US mainWindow()->moveDockWindow( this, (Dock)bpos ); mainWindow()->moveToolBar( this, (QMainWindow::ToolBarDock)bpos ); } -KToolBar::BarPosition KToolBar::barPos() const +const KToolBar::BarPosition KToolBar::barPos() { if ( !(QMainWindow*)mainWindow() ) return KToolBar::Top; //US Dock dock; QMainWindow::ToolBarDock dock; int dm1, dm2; bool dm3; ((QMainWindow*)mainWindow())->getLocation( (QToolBar*)this, dock, dm1, dm3, dm2 ); //US if ( dock == DockUnmanaged ) { if ( dock == QMainWindow::Unmanaged ) { return (KToolBar::BarPosition)Top; } return (BarPosition)dock; } bool KToolBar::enable(BarStatus stat) { bool mystat = isVisible(); if ( (stat == Toggle && mystat) || stat == Hide ) hide(); else show(); return isVisible() == mystat; } void KToolBar::setMaxHeight ( int h ) { setMaximumHeight( h ); } int KToolBar::maxHeight() { return maximumHeight(); } void KToolBar::setMaxWidth (int dw) { setMaximumWidth( dw ); } int KToolBar::maxWidth() { return maximumWidth(); } void KToolBar::setTitle (const QString& _title) { setLabel( _title ); } void KToolBar::enableFloating (bool ) { } void KToolBar::setIconText(IconText it) { setIconText( it, true ); } void KToolBar::setIconText(IconText icontext, bool update) { bool doUpdate=false; if (icontext != d->m_iconText) { d->m_iconText = icontext; doUpdate=true; } if (update == false) return; if (doUpdate) emit modechange(); // tell buttons what happened // ugly hack to force a QMainWindow::triggerLayout( TRUE ) if ( mainWindow() ) { QMainWindow *mw = mainWindow(); mw->setUpdatesEnabled( FALSE ); mw->setToolBarsMovable( !mw->toolBarsMovable() ); mw->setToolBarsMovable( !mw->toolBarsMovable() ); mw->setUpdatesEnabled( TRUE ); } } KToolBar::IconText KToolBar::iconText() const { return d->m_iconText; } void KToolBar::setIconSize(int size) { setIconSize( size, true ); } void KToolBar::setIconSize(int size, bool update) { bool doUpdate=false; if ( size != d->m_iconSize ) { d->m_iconSize = size; doUpdate=true; } if (update == false) return; if (doUpdate) emit modechange(); // tell buttons what happened // ugly hack to force a QMainWindow::triggerLayout( TRUE ) if ( mainWindow() ) { QMainWindow *mw = mainWindow(); mw->setUpdatesEnabled( FALSE ); mw->setToolBarsMovable( !mw->toolBarsMovable() ); mw->setToolBarsMovable( !mw->toolBarsMovable() ); mw->setUpdatesEnabled( TRUE ); } } int KToolBar::iconSize() const { /*US if ( !d->m_iconSize ) // default value? { if (!::qstrcmp(QObject::name(), "mainToolBar")) return KGlobal::iconLoader()->currentSize(KIcon::MainToolbar); else return KGlobal::iconLoader()->currentSize(KIcon::Toolbar); } return d->m_iconSize; */ int ret = 18; if ( QApplication::desktop()->width() > 320 ) ret = 30; return ret; } void KToolBar::setEnableContextMenu(bool enable ) { d->m_enableContext = enable; } bool KToolBar::contextMenuEnabled() const { return d->m_enableContext; } void KToolBar::setItemNoStyle(int id, bool no_style ) { Id2WidgetMap::Iterator it = id2widget.find( id ); if ( it == id2widget.end() ) return; //US KToolBarButton * button = dynamic_cast<KToolBarButton *>( *it ); KToolBarButton * button = (KToolBarButton *)( *it ); if (button) button->setNoStyle( no_style ); } void KToolBar::setFlat (bool flag) { if ( !mainWindow() ) return; if ( flag ) //US mainWindow()->moveDockWindow( this, DockMinimized ); mainWindow()->moveToolBar( this, QMainWindow::Minimized ); else //US mainWindow()->moveDockWindow( this, DockTop ); mainWindow()->moveToolBar( this, QMainWindow::Top ); // And remember to save the new look later /*US if ( mainWindow()->inherits( "KMainWindow" ) ) static_cast<KMainWindow *>(mainWindow())->setSettingsDirty(); */ } int KToolBar::count() const { return id2widget.count(); } void KToolBar::saveState() { /*US // first, try to save to the xml file if ( d->m_xmlguiClient && !d->m_xmlguiClient->xmlFile().isEmpty() ) { // go down one level to get to the right tags QDomElement elem = d->m_xmlguiClient->domDocument().documentElement().toElement(); elem = elem.firstChild().toElement(); QString barname(!::qstrcmp(name(), "unnamed") ? "mainToolBar" : name()); QDomElement current; // now try to find our toolbar d->modified = false; for( ; !elem.isNull(); elem = elem.nextSibling().toElement() ) { current = elem; if ( current.tagName().lower() != "toolbar" ) continue; QString curname(current.attribute( "name" )); if ( curname == barname ) { saveState( current ); break; } } // if we didn't make changes, then just return if ( !d->modified ) return; // now we load in the (non-merged) local file QString local_xml(KXMLGUIFactory::readConfigFile(d->m_xmlguiClient->xmlFile(), true, d->m_xmlguiClient->instance())); QDomDocument local; local.setContent(local_xml); // make sure we don't append if this toolbar already exists locally bool just_append = true; elem = local.documentElement().toElement(); KXMLGUIFactory::removeDOMComments( elem ); elem = elem.firstChild().toElement(); for( ; !elem.isNull(); elem = elem.nextSibling().toElement() ) { if ( elem.tagName().lower() != "toolbar" ) continue; QString curname(elem.attribute( "name" )); if ( curname == barname ) { just_append = false; local.documentElement().replaceChild( current, elem ); break; } } if (just_append) local.documentElement().appendChild( current ); KXMLGUIFactory::saveConfigFile(local, d->m_xmlguiClient->localXMLFile(), d->m_xmlguiClient->instance() ); return; } */ // if that didn't work, we save to the config file KConfig *config = KGlobal::config(); saveSettings(config, QString::null); config->sync(); } QString KToolBar::settingsGroup() { QString configGroup; if (!::qstrcmp(name(), "unnamed") || !::qstrcmp(name(), "mainToolBar")) configGroup = "Toolbar style"; else configGroup = QString(name()) + " Toolbar style"; if ( this->mainWindow() ) { configGroup.prepend(" "); configGroup.prepend( this->mainWindow()->name() ); } return configGroup; } void KToolBar::saveSettings(KConfig *config, const QString &_configGroup) { QString configGroup = _configGroup; if (configGroup.isEmpty()) configGroup = settingsGroup(); //kdDebug(220) << "KToolBar::saveSettings group=" << _configGroup << " -> " << configGroup << endl; QString position, icontext; int index; getAttributes( position, icontext, index ); //kdDebug(220) << "KToolBar::saveSettings " << name() << " newLine=" << newLine << endl; KConfigGroupSaver saver(config, configGroup); if ( position != d->PositionDefault ) config->writeEntry("Position", position); else config->deleteEntry("Position"); if ( icontext != d->IconTextDefault ) config->writeEntry("IconText", icontext); else config->deleteEntry("IconText"); if ( iconSize() != d->IconSizeDefault ) config->writeEntry("IconSize", iconSize()); else config->deleteEntry("IconSize"); if ( isHidden() != d->HiddenDefault ) config->writeEntry("Hidden", isHidden()); else config->deleteEntry("Hidden"); if ( index != d->IndexDefault ) config->writeEntry( "Index", index ); else config->deleteEntry("Index"); //US the older version of KDE (used on the Zaurus) has no Offset property /* if ( offset() != d->OffsetDefault ) config->writeEntry( "Offset", offset() ); else */ config->deleteEntry("Offset"); //US the older version of KDE (used on the Zaurus) has no NewLine property /* if ( newLine() != d->NewLineDefault ) config->writeEntry( "NewLine", newLine() ); else */ config->deleteEntry("NewLine"); } void KToolBar::setXMLGUIClient( KXMLGUIClient *client ) { d->m_xmlguiClient = client; } void KToolBar::setText( const QString & txt ) { //US setLabel( txt + " ( " + kapp->caption() + " ) " ); setLabel( txt + " ( " + KGlobal::getAppName() + " ) " ); } QString KToolBar::text() const { return label(); } void KToolBar::doConnections( KToolBarButton *button ) { connect(button, SIGNAL(clicked(int)), this, SIGNAL( clicked( int ) ) ); connect(button, SIGNAL(doubleClicked(int)), this, SIGNAL( doubleClicked( int ) ) ); connect(button, SIGNAL(released(int)), this, SIGNAL( released( int ) ) ); connect(button, SIGNAL(pressed(int)), this, SIGNAL( pressed( int ) ) ); connect(button, SIGNAL(toggled(int)), this, SIGNAL( toggled( int ) ) ); connect(button, SIGNAL(highlighted(int, bool)), this, SIGNAL( highlighted( int, bool ) ) ); } void KToolBar::mousePressEvent ( QMouseEvent *m ) { if ( !mainWindow() ) return; QMainWindow *mw = mainWindow(); if ( mw->toolBarsMovable() && d->m_enableContext ) { if ( m->button() == RightButton ) { int i = contextMenu()->exec( m->globalPos(), 0 ); switch ( i ) { case -1: return; // popup cancelled case CONTEXT_LEFT: //US mw->moveDockWindow( this, DockLeft ); mw->moveToolBar( this, QMainWindow::Left ); break; case CONTEXT_RIGHT: //US mw->moveDockWindow( this, DockRight ); mw->moveToolBar( this, QMainWindow::Right ); break; case CONTEXT_TOP: //US mw->moveDockWindow( this, DockTop ); mw->moveToolBar( this, QMainWindow::Top ); break; case CONTEXT_BOTTOM: //US mw->moveDockWindow( this, DockBottom ); mw->moveToolBar( this, QMainWindow::Bottom ); break; case CONTEXT_FLOAT: break; case CONTEXT_FLAT: //US mw->moveDockWindow( this, DockMinimized ); mw->moveToolBar( this, QMainWindow::Minimized ); break; case CONTEXT_ICONS: setIconText( IconOnly ); break; case CONTEXT_TEXTRIGHT: setIconText( IconTextRight ); break; case CONTEXT_TEXT: setIconText( TextOnly ); break; case CONTEXT_TEXTUNDER: setIconText( IconTextBottom ); break; default: if ( i >= CONTEXT_ICONSIZES ) setIconSize( i - CONTEXT_ICONSIZES ); else return; // assume this was an action handled elsewhere, no need for setSettingsDirty() } /*US if ( mw->inherits("KMainWindow") ) static_cast<KMainWindow *>(mw)->setSettingsDirty(); */ } } } void KToolBar::rebuildLayout() { for(QWidget *w=d->idleButtons.first(); w; w=d->idleButtons.next()) w->blockSignals(false); d->idleButtons.clear(); layoutTimer->stop(); QApplication::sendPostedEvents( this, QEvent::ChildInserted ); QBoxLayout *l = boxLayout(); l->setMargin( 1 ); // clear the old layout QLayoutIterator it = l->iterator(); while ( it.current() ) { it.deleteCurrent(); } for ( QWidget *w = widgets.first(); w; w = widgets.next() ) { if ( w == rightAligned ) { continue; } if ( w->inherits( "KToolBarSeparator" ) && !( (KToolBarSeparator*)w )->showLine() ) { l->addSpacing( 6 ); w->hide(); continue; } if ( w->inherits( "QPopupMenu" ) ) continue; l->addWidget( w ); w->show(); } if ( rightAligned ) { l->addStretch(); l->addWidget( rightAligned ); rightAligned->show(); } if ( fullSize() ) { // This code sucks. It makes the last combo in a toolbar VERY big (e.g. zoom combo in kword). //if ( !stretchableWidget && widgets.last() && // !widgets.last()->inherits( "QButton" ) && !widgets.last()->inherits( "KAnimWidget" ) ) // setStretchableWidget( widgets.last() ); if ( !rightAligned ) l->addStretch(); if ( stretchableWidget ) l->setStretchFactor( stretchableWidget, 10 ); } l->invalidate(); QApplication::postEvent( this, new QEvent( QEvent::LayoutHint ) ); //#endif //DESKTOP_VERSION } void KToolBar::childEvent( QChildEvent *e ) { if ( e->child()->isWidgetType() ) { QWidget * w = (QWidget*)e->child(); if ( e->type() == QEvent::ChildInserted ) { if ( !e->child()->inherits( "QPopupMenu" ) && ::qstrcmp( "qt_dockwidget_internal", e->child()->name() ) != 0 ) { // prevent items that have been explicitly inserted by insert*() from // being inserted again if ( !widget2id.contains( w ) ) { int dummy = -1; insertWidgetInternal( w, dummy, -1 ); } } } else { removeWidgetInternal( w ); } if ( isVisibleTo( 0 ) ) { QBoxLayout *l = boxLayout(); // QLayout *l = layout(); // clear the old layout so that we don't get unnecassery layout // changes till we have rebuild the thing QLayoutIterator it = l->iterator(); while ( it.current() ) { it.deleteCurrent(); } layoutTimer->start( 50, TRUE ); } } QToolBar::childEvent( e ); } diff --git a/microkde/kdeui/ktoolbar.h b/microkde/kdeui/ktoolbar.h index 49ff856..7a5c114 100644 --- a/microkde/kdeui/ktoolbar.h +++ b/microkde/kdeui/ktoolbar.h @@ -237,872 +237,872 @@ public: * @param index The position of the button. (-1 = at end). * * @return The item index. */ int insertButton(const QString& icon, int id, const char *signal, const QObject *receiver, const char *slot, bool enabled = true, const QString& text = QString::null, int index=-1/*US, KInstance *_instance = KGlobal::instance()*/ ); /** * Inserts a button (a @ref KToolBarButton) with the specified * pixmap. This pixmap will be used as the "active" one and the * disabled and default ones will be autogenerated. * * It is recommended that you use the insertButton function that * allows you to specify the icon name rather then the pixmap * itself. Specifying the icon name is much more flexible. * * You should connect to one or more signals in KToolBar: * @ref clicked() , @ref pressed() , @ref released() , or * @ref highlighted() and if the button is a toggle button * (@ref setToggle() ) @ref toggled() . Those signals have @p id * of a button that caused the signal. If you want to bind a popup * to button, see @ref setButton(). * * @param pixmap The active pixmap * @param id The id of this button * @param enabled Enable or disable the button at startup * @param text The tooltip or toolbar text (depending on state) * @param index The position of the button. (-1 = at end). * * @return The item index. */ int insertButton(const QPixmap& pixmap, int id, bool enabled = true, const QString& text = QString::null, int index=-1 ); /** * This is the same as above, but with specified signals and * slots to which this button will be connected. * * You can add more signals with @ref addConnection(). * * @param icon The name of the icon to use as the active pixmap * @param id The id of this button * @param signal The signal to connect to * @param receiver The slot's parent * @param enabled Enable or disable the button at startup * @param text The tooltip or toolbar text (depending on state) * @param index The position of the button. (-1 = at end). * * @return The item index. */ int insertButton(const QPixmap& pixmap, int id, const char *signal, const QObject *receiver, const char *slot, bool enabled = true, const QString& text = QString::null, int index=-1 ); /** * Inserts a button with popupmenu. * * Button will have small * triangle. You have to connect to popup's signals. The * signals @ref KButton::pressed(), @ref KButton::released(), * @ref KButton::clicked() or @ref KButton::doubleClicked() are @p not * emmited by * this button (see @ref setDelayedPopup() for that). * You can add custom popups which inherit @ref QPopupMenu to get popups * with tables, drawings etc. Just don't fiddle with events there. */ int insertButton(const QString& icon, int id, QPopupMenu *popup, bool enabled, const QString&_text, int index=-1); /** * Inserts a button with popupmenu. * * Button will have small * triangle. You have to connect to popup's signals. The * signals @ref KButton::pressed(), @ref KButton::released(), * @ref KButton::clicked() or @ref KButton::doubleClicked() are @p not * emmited by * this button (see @ref setDelayedPopup() for that). * You can add custom popups which inherit @ref QPopupMenu to get popups * with tables, drawings etc. Just don't fiddle with events there. */ int insertButton(const QPixmap& pixmap, int id, QPopupMenu *popup, bool enabled, const QString&_text, int index=-1); /** * Inserts a @ref KLineEdit. You have to specify signals and slots to * which KLineEdit will be connected. KLineEdit has all slots QLineEdit * has, plus signals @ref KLineEdit::completion and @ref KLineEdit::textRotation * KLineEdit can be set to autoresize itself to full free width * in toolbar, that is to last right aligned item. For that, * toolbar must be set to full width (which it is by default). * @see setFullWidth() * @see setItemAutoSized() * @see KLineEdit * @return Item index. */ int insertLined (const QString& text, int id, const char *signal, const QObject *receiver, const char *slot, bool enabled = true, const QString& toolTipText = QString::null, int size = 70, int index =-1); /** * Inserts a @ref KComboBox with list. * * Can be writable, but cannot contain * pixmaps. By default inserting policy is AtBottom, i.e. typed items * are placed at the bottom of the list. Can be autosized. If the size * argument is specified as -1, the width of the combobox is automatically * computed. * * @see setFullWidth() * @see setItemAutoSized() * @see KComboBox * @return Item index. */ int insertCombo (const QStringList &list, int id, bool writable, const char *signal, const QObject *receiver, const char *slot, bool enabled=true, const QString& tooltiptext=QString::null, int size=70, int index=-1, QComboBox::Policy policy = QComboBox::AtBottom); /** * Insert a @ref KComboBox with text. * * The rest is the same as above. * @see setItemAutoSized() * * @see KComboBox * @return Item index. */ int insertCombo (const QString& text, int id, bool writable, const char *signal, QObject *recevier, const char *slot, bool enabled=true, const QString& tooltiptext=QString::null, int size=70, int index=-1, QComboBox::Policy policy = QComboBox::AtBottom); /** * Inserts a separator into the toolbar with the given id. * Returns the separator's index */ int insertSeparator( int index = -1, int id = -1 ); /** * Inserts a line separator into the toolbar with the given id. * Returns the separator's index */ int insertLineSeparator( int index = -1, int id = -1 ); /** * Inserts a user-defined widget. The widget @p must have this * toolbar as its parent. * * Widget must have a QWidget for base class. Widget can be * autosized to full width. If you forget about it, you can get a * pointer to this widget with @ref getWidget(). * @see setItemAutoSized() * @return Item index. */ int insertWidget(int id, int width, QWidget *_widget, int index=-1); /** * Inserts an animated widget. A @ref KAnimWidget will be created * internally using the icon name you provide. * This will emit a signal (clicked()) whenever the * animation widget is clicked. * * @see animatedWidget() * * @param id The id for this toolbar item * @param receiver The parent of your slot * @param slot The slot to receive the clicked() signal * @param icons The name of the animation icon group to use * @param index The item index * * @return The item index */ /*US int insertAnimatedWidget(int id, QObject *receiver, const char *slot, const QString& icons, int index = -1); */ /** * This will return a pointer to the given animated widget, if it * exists. * * @see insertAnimatedWidget * * @param id The id for the widget you want to get a pointer to * * @return A pointer to the current animated widget or 0L */ //US KAnimWidget *animatedWidget( int id ); /** * Adds connections to items. * * It is important that you * know the @p id of particular item. Nothing happens if you forget @p id. */ void addConnection (int id, const char *signal, const QObject *receiver, const char *slot); /** * Enables/disables item. */ void setItemEnabled( int id, bool enabled ); /** * Sets the icon for a button. * * Can be used while button is visible. */ void setButtonIcon( int id, const QString& _icon ); /** * Sets button pixmap. * * Can be used while button is visible. */ void setButtonPixmap( int id, const QPixmap& _pixmap ); /** * Sets a button icon from a QIconSet. * * Can be used while button is visible. */ void setButtonIconSet( int id, const QIconSet& iconset ); /** * Sets a delayed popup for a button. * * Delayed popup is what you see in * Netscape Navigator's Previous and Next buttons: If you click them you * go back * or forth. If you press them long enough, you get a history-menu. * This is exactly what we do here. * * You will insert normal a button with connection (or use signals from * toolbar): * <pre> * bar->insertButton(icon, id, SIGNAL(clicked ()), this, * SLOT (slotClick()), true, "click or wait for popup"); * </pre> And then add a delayed popup: * <pre> * bar->setDelayedPopup (id, historyPopup); </pre> * * Don't add delayed popups to buttons which have normal popups. * * You may add popups which are derived from @ref QPopupMenu. You may * add popups that are already in the menu bar or are submenus of * other popups. */ void setDelayedPopup (int id , QPopupMenu *_popup, bool toggle = false); /** * Turns a button into an autorepeat button. * * Toggle buttons, buttons with menus, or * buttons with delayed menus cannot be made into autorepeat buttons. * Moreover, you can and will receive * only the signal clicked(), but not pressed() or released(). * When the user presses this button, you will receive the signal clicked(), * and if the button is still pressed after some time, * you will receive more clicked() signals separated by regular * intervals. Since this uses @ref QButton::setAutoRepeat() , * I can't quantify 'some'. */ void setAutoRepeat (int id, bool flag=true); /** * Turns button into a toggle button if @p flag is true. */ void setToggle (int id, bool flag = true); /** * Toggles a togglebutton. * * If the button is a toggle button (see @ref setToggle()) * the button state will be toggled. This will also cause the toolbar to * emit the signal @ref KButton::toggled() with parameter @p id. You must connect to * this signal, or use @ref addConnection() to connect directly to the * button signal @ref KButton::toggled(). */ void toggleButton (int id); /** * Sets a toggle button state. * * If the button is a toggle button (see @ref setToggle()) * this will set its state flag. This will also emit the signal * @ref KButton::toggled(). * * @see setToggle() */ void setButton (int id, bool flag); /** * @return @p true if button is on, @p false if button is off or if the * button is not a toggle button. * @see setToggle() */ bool isButtonOn (int id) const; /** * Sets the text of a line editor. * * Cursor is set at end of text. */ void setLinedText (int id, const QString& text); /** * Returns a line editor text. */ QString getLinedText (int id) const; /** * Inserts @p text in combobox @p id at position @p index. */ void insertComboItem (int id, const QString& text, int index); /** * Inserts @p list in combobox @p id at position @p index. */ void insertComboList (int id, const QStringList &list, int index); /** * Removes item @p index from combobox @p id. */ void removeComboItem (int id, int index); /** * Sets item @p index to be current item in combobox @p id. */ void setCurrentComboItem (int id, int index); /** * Changes item @p index in combobox @p id to text. * * @p index = -1 refers current item (one displayed in the button). */ void changeComboItem (int id, const QString& text, int index=-1); /** * Clears the combobox @p id. * * Does not delete it or hide it. */ void clearCombo (int id); /** * Returns text of item @p index from combobox @p id. * * @p index = -1 refers to current item. */ QString getComboItem (int id, int index=-1) const; /** * Returns a pointer to the combobox. * * Example: * <pre> * KComboBox *combo = toolbar->getCombo(combo_id); * </pre> * That way you can get access to other public methods * that @ref KComboBox provides. */ KComboBox * getCombo(int id); /** * Returns a pointer to KToolBarLined. * * Example: * <pre> * KLineEdit * lined = toolbar->getKToolBarLined(lined_id); * </pre> * That way you can get access to other public methods * that @ref KLineEdit provides. @ref KLineEdit is the same thing * as @ref QLineEdit plus completion signals. */ KLineEdit * getLined (int id); /** * Returns a pointer to KToolBarButton. * * Example: * <pre> * KToolBarButton * button = toolbar->getButton(button_id); * </pre> * That way you can get access to other public methods * that @ref KToolBarButton provides. * * Using this method is not recommended. */ KToolBarButton * getButton (int id); /** * Align item to the right. * * This works only if toolbar is set to full width. * @see setFullWidth() */ void alignItemRight (int id, bool right = true); /** * Returns a pointer to an inserted widget. * * Wrong ids are not tested. * You can do with this whatever you want, * except change its height (hardcoded). If you change its width * you will probably have to call QToolBar::updateRects(true) * @see QWidget * @see updateRects() * * KDE4: make this const! */ QWidget *getWidget (int id); /** * Set item autosized. * * This works only if the toolbar is set to full width. * Only @p one item can be autosized, and it has to be * the last left-aligned item. Items that come after this must be right * aligned. Items that can be right aligned are Lineds, Frames, Widgets and * Combos. An autosized item will resize itself whenever the toolbar geometry * changes to the last right-aligned item (or to end of toolbar if there * are no right-aligned items.) * @see setFullWidth() * @see alignItemRight() */ void setItemAutoSized (int id, bool yes = true); /** * Remove all items. * * The toolbar is redrawn after it. */ void clear (); /** * Remove item @p id. * * Item is deleted. Toolbar is redrawn after it. */ void removeItem (int id); /** * Remove item @p id. * * Item is deleted when toolbar is redrawn. */ void removeItemDelayed (int id); /** * Hide item. */ void hideItem (int id); /** * Show item. */ void showItem (int id); /** * Returns the index of the given item. * * KDE4: make this const! */ int itemIndex (int id); /** * Set toolbar to full parent size (default). * * In full size mode the bar * extends over the parent's full width or height. If the mode is disabled * the toolbar tries to take as much space as it needs without wrapping, but * it does not exceed the parent box. You can force a certain width or * height with @ref setMaxWidth() or @ref setMaxHeight(). * * If you want to use right-aligned items or auto-sized items you must use * full size mode. */ void setFullSize(bool flag = true); /** * @return @p true if the full-size mode is enabled. Otherwise * it returns @false. */ bool fullSize() const; /** * @deprecated use setMovingEnabled(bool) instead. * Enable or disable moving of toolbar. */ void enableMoving(bool flag = true); /** * Set position of toolbar. * @see BarPosition() */ void setBarPos (BarPosition bpos); /** * Returns position of toolbar. */ - BarPosition barPos() const; + const BarPosition barPos(); /** * @deprecated * Show, hide, or toggle toolbar. * * This method is provided for compatibility only, * please use show() and/or hide() instead. * @see BarStatus */ bool enable(BarStatus stat); /** * @deprecated * Use setMaximumHeight() instead. */ void setMaxHeight (int h); // Set max height for vertical toolbars /** * @deprecated * Use maximumHeight() instead. * Returns the value that was set with @ref setMaxHeight(). */ int maxHeight(); /** * @deprecated * Use setMaximumWidth() instead. * Set maximal width of horizontal (top or bottom) toolbar. */ void setMaxWidth (int dw); /** * @deprecated * Use maximumWidth() instead. * Returns the value that was set with @ref setMaxWidth(). */ int maxWidth(); /** * Set title for toolbar when it floats. * * Titles are however not (yet) * visible. You can't change toolbar's title while it's floating. */ void setTitle (const QString& _title); /** * @deprecated * Use enableMoving() instead. */ void enableFloating (bool arrrrrrgh); /** * Set the kind of painting for buttons. * * Choose from: * @li IconOnly (only icons), * @li IconTextRight (icon and text, text is left from icons), * @li TextOnly (only text), * @li IconTextBottom (icons and text, text is under icons). * @see IconText * */ void setIconText(IconText it); // Note: don't merge with the next one, it breaks Qt properties /** * Similar to @ref setIconText(IconText it) but allows you to * disable or enable updating. If @p update is false, then the * buttons will not be updated. This is useful only if you know * that you will be forcing an update later. */ void setIconText(IconText it, bool update); /** * @return The current text style for buttons. */ IconText iconText() const; /** * Set the icon size to load. Usually you should not call * this, the icon size is taken care of by KIconLoader * and globally configured. * By default, the toolbar will load icons of size 32 for main * toolbars and 22 for other toolbars * @see KIconLoader. * * @param size The size to use */ void setIconSize(int size); // Note: don't merge with the next one, it breaks Qt properties /** * Same as @ref setIconText(int size) but allows you * to disable the toolbar update. * * @param size The size to use * @param update If true, then the toolbar will be updated after * this */ void setIconSize(int size, bool update); /** * @return The current icon size for buttons. */ int iconSize() const; /** * This allows you to enable or disable the context menu. * * @param enable If false, then the context menu will be disabled */ void setEnableContextMenu(bool enable = true); /** * Returns whether or not the context menu is disabled * * @return The context menu state */ bool contextMenuEnabled() const; /** * This will inform a toolbar button to ignore certain style * changes. Specifically, it will ignore IconText (always IconOnly) * and will not allow image effects to apply. * * @param id The button to exclude from styles * @param no_style If true, then it is excluded (default: true). */ void setItemNoStyle(int id, bool no_style = true); void setFlat (bool flag); /** * @return the number of items in the toolbar */ int count() const; /** * Instruct the toolbar to save it's current state to either the app * config file or to the XML-GUI resource file (whichever has * precedence). */ void saveState(); /** * Save the toolbar settings to group @p configGroup in @p config. */ void saveSettings(KConfig *config, const QString &configGroup); /** * Read the toolbar settings from group @p configGroup in @p config * and apply them. */ void applySettings(KConfig *config, const QString &configGroup); /** * Tell the toolbar what XML-GUI resource file it should use to save * it's state. The state of the toolbar (position, size, etc) is * saved in KConfig files if the application does not use XML-GUI.. * but if the app does, then it's saved the XML file. This function * allows this to happen. * * @param xmlfile The XML-GUI resource file to write to * @param xml The DOM document for the XML-GUI building */ // void setXML(const QString& xmlfile, const QDomDocument& xml); /* @internal */ void setXMLGUIClient( KXMLGUIClient *client ); /** * Assign a (translated) text to this toolbar. This is used * for the tooltip on the handle, and when listing the toolbars. */ void setText( const QString & txt ); /** * @return the toolbar's text. */ QString text() const; void setStretchableWidget( QWidget *w ); QSizePolicy sizePolicy() const; bool highlight() const; QSize sizeHint() const; QSize minimumSizeHint() const; QSize minimumSize() const; void hide(); void show(); void updateRects( bool = FALSE ) {} //US void loadState( const QDomElement &e ); //US void saveState( QDomElement &e ); /** * @internal */ void positionYourself( bool force = false); signals: /** * Emitted when button @p id is clicked. */ void clicked(int id); /** * Emitted when button @p id is double-clicked. * * Note: you will always * recive two @ref clicked() , @ref pressed() and @ref released() signals. * There is no way to avoid it - at least no easy way. * If you need to resolve this all you can do is set up timers * which wait for @ref QApplication::doubleClickInterval() to expire. * If in that time you don't get this signal, you may belive that * button was only clicked and not double-clicked. * And please note that butons with popup menus do not emit this signal, * but those with delayed popup do. */ void doubleClicked (int id); /** * Emitted when button @p id is pressed. */ void pressed(int); /** * Emits when button @p id is released. */ void released(int); /** * Emitted when a toggle button changes state. * * Emitted also if you change state * with @ref setButton() or @ref toggleButton() * If you make a button normal again, with * setToggle(false), this signal won't * be emitted. */ void toggled(int); /** * This signal is emitted when item id gets highlighted/unhighlighted * (i.e when mouse enters/exits). * * Note that this signal is emitted from * all buttons (normal, disabled and toggle) even when there is no visible * change in buttons (i.e., buttons do not raise when mouse enters). * The parameter @p isHighlighted is @p true when mouse enters and @p false when * mouse exits. */ void highlighted(int id, bool isHighlighted); /** * This signal is emitted when item id gets highlighted/unhighlighted * (i.e when mouse enters/exits). * * Note that this signal is emitted from * all buttons (normal, disabled and toggle) even when there is no visible * change in buttons (i.e., buttons do not raise when mouse enters). */ void highlighted(int id ); /** * Emitted when toolbar changes position, or when * an item is removed from toolbar. * * If you subclass @ref KMainWindow and reimplement * @ref KMainWindow::resizeEvent() be sure to connect to * this signal. Note: You can connect this signal to a slot that * doesn't take parameter. */ void moved( BarPosition ); /** * @internal * This signal is emitted when toolbar detects changing of * following parameters: * highlighting, button-size, button-mode. This signal is * internal, aimed to buttons. */ void modechange (); /** * This signal is emitted when the toolbar is getting deleted, * and before ~KToolbar finishes (so it's still time to remove * widgets from the toolbar). * Used by KWidgetAction. * @since 3.2 */ void toolbarDestroyed(); public: /** * @return global setting for "Highlight buttons under mouse" */ void repaintMe(); static bool highlightSetting(); /** * @return global setting for "Toolbars transparent when moving" */ static bool transparentSetting(); /** * @return global setting for "Icon Text" */ static IconText iconTextSetting(); public slots: virtual void setIconText( const QString &txt ) { QToolBar::setIconText( txt ); } void slotRepaint(); protected: void mousePressEvent( QMouseEvent * ); void childEvent( QChildEvent *e ); void showEvent( QShowEvent *e ); void resizeEvent( QResizeEvent *e ); bool event( QEvent *e ); void applyAppearanceSettings(KConfig *config, const QString &_configGroup, bool forceGlobal = false); QString settingsGroup(); private slots: void rebuildLayout(); void slotReadConfig (); void slotAppearanceChanged(); void slotIconChanged(int); void toolBarPosChanged( QToolBar *tb ); void slotContextAboutToShow(); void widgetDestroyed(); private: void init( bool readConfig = true, bool honorStyle = false ); void doConnections( KToolBarButton *button ); void insertWidgetInternal( QWidget *w, int &index, int id ); void removeWidgetInternal( QWidget *w ); void getAttributes( QString &position, QString &icontext, int &index ); //US KPopupMenu *contextMenu(); QPopupMenu *contextMenu(); QMap<QWidget*, int > widget2id; typedef QMap<int, QWidget* > Id2WidgetMap; Id2WidgetMap id2widget; //US KPopupMenu *context; QPopupMenu *context; QPtrList<QWidget> widgets; QTimer *layoutTimer; QGuardedPtr<QWidget> stretchableWidget, rightAligned; protected: virtual void virtual_hook( int id, void* data ); private: KToolBarPrivate *d; bool inshutdownprocess; }; #endif |