summaryrefslogtreecommitdiffstats
path: root/lib/kofficeui/ttdeaction.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lib/kofficeui/ttdeaction.cpp')
-rw-r--r--lib/kofficeui/ttdeaction.cpp300
1 files changed, 300 insertions, 0 deletions
diff --git a/lib/kofficeui/ttdeaction.cpp b/lib/kofficeui/ttdeaction.cpp
new file mode 100644
index 00000000..56c626f8
--- /dev/null
+++ b/lib/kofficeui/ttdeaction.cpp
@@ -0,0 +1,300 @@
+/*
+ * Kivio - Visual Modelling and Flowcharting
+ * Copyright (C) 2000 theKompany.com
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+#include "tkaction.h"
+#include "tktoolbarbutton.h"
+#include "tkcombobox.h"
+
+#include <tqlabel.h>
+#include <tqlayout.h>
+
+#include <ktoolbar.h>
+#include <kiconloader.h>
+
+#define SET_FOR_ALL_CONTAINER(WIDGET_TYPE,METHOD_NAME,VALUE) \
+ for( int id = 0; id < containerCount(); ++id ) { \
+ TQWidget* w = container(id); \
+ if ( w->inherits("TDEToolBar") ) { \
+ TQWidget* r = static_cast<TDEToolBar*>(w)->getWidget(itemId(id)); \
+ if (qstrcmp(r->name(),"KTToolBarLayout")==0) \
+ r = (TQWidget*)r->child("widget"); \
+ if ( r && r->inherits(#WIDGET_TYPE) ) { \
+ WIDGET_TYPE* b = static_cast<WIDGET_TYPE*>(r); \
+ b->METHOD_NAME(VALUE); \
+ } \
+ } \
+ }
+
+TTDEAction::TTDEAction(TQObject* parent, const char* name)
+: TDEAction( "", 0, parent, name )
+{
+ m_imode = TK::IconOnly;
+}
+
+TTDEAction::~TTDEAction()
+{
+}
+
+int TTDEAction::plug(TQWidget* widget, int index)
+{
+ if ( widget->inherits("TDEToolBar") ) {
+ TDEToolBar* bar = static_cast<TDEToolBar*>(widget);
+ int id_ = TDEAction::getToolButtonID();
+ TDEInstance *instance;
+
+ if ( parentCollection() )
+ instance = parentCollection()->instance();
+ else
+ instance = TDEGlobal::instance();
+
+ TTDEToolBarButton* b = new TTDEToolBarButton(icon(),plainText(),bar,name(),instance);
+ // we don't need clicked() and buttonClicked(), do we?
+ // connect(b,TQT_SIGNAL(clicked()),TQT_SLOT(slotActivated()));
+ b->setIconMode(m_imode);
+ initToolBarButton(b);
+
+ bar->insertWidget( id_, 100, b, index );
+ addContainer(bar,id_);
+ connect( bar, TQT_SIGNAL(destroyed()), this, TQT_SLOT(slotDestroyed()) );
+
+ return containerCount() - 1;
+ }
+ return TDEAction::plug(widget,index);
+}
+
+void TTDEAction::initToolBarButton(TTDEToolBarButton* button)
+{
+ connect(button,TQT_SIGNAL(buttonClicked()),TQT_SLOT(slotActivated()));
+}
+
+TK::IconMode TTDEAction::iconMode()
+{
+ return m_imode;
+}
+
+void TTDEAction::setIconMode(TK::IconMode mode)
+{
+ m_imode = mode;
+ SET_FOR_ALL_CONTAINER(TTDEToolBarButton,setIconMode,mode)
+}
+
+void TTDEAction::setText(const TQString& text)
+{
+ TDEAction::setText(text);
+ updateLayout();
+}
+
+void TTDEAction::setIcon(const TQString& icon)
+{
+ TDEAction::setIcon(icon);
+ updateLayout();
+}
+
+void TTDEAction::updateLayout()
+{
+ int len = containerCount();
+ for( int id = 0; id < len; ++id ) {
+ TQWidget* w = container( id );
+ if (w->inherits("TDEToolBar")) {
+ TQWidget* r = static_cast<TDEToolBar*>(w)->getWidget(itemId(id));
+ if (qstrcmp(r->name(),"KTToolBarLayout")==0) {
+ updateLayout(r);
+ }
+ }
+ }
+}
+
+TQWidget* TTDEAction::createLayout(TQWidget* parent, TQWidget* children)
+{
+ TQWidget* base = new TQWidget(parent,"KTToolBarLayout");
+ TQLabel* textLabel = new TQLabel(base,"text");
+ textLabel->setMinimumHeight(1);
+ TQLabel* pixLabel = new TQLabel(base,"pixmap");
+ children->reparent(base,TQPoint(0,0));
+ children->setName("widget");
+ TQHBoxLayout* layout = new TQHBoxLayout(base,0,3);
+ layout->setResizeMode(TQLayout::Minimum);
+ layout->addWidget(textLabel);
+ layout->addWidget(pixLabel);
+ layout->addWidget(children,1);
+
+ updateLayout(base);
+ return base;
+}
+
+void TTDEAction::updateLayout(TQWidget* base)
+{
+ TQLabel* textLabel = (TQLabel*)base->child("text");
+ TQLabel* pixLabel = (TQLabel*)base->child("pixmap");
+ TQWidget* w = (TQWidget*)base->child("widget");
+
+ if (!textLabel || !pixLabel || !w)
+ return;
+
+ if (!text().isEmpty() && m_imode != TK::IconOnly ) {
+ textLabel->setText(text());
+ textLabel->show();
+ } else
+ textLabel->hide();
+
+ TQPixmap pix;
+ if (hasIcon())
+ pix = iconSet(KIcon::Small).pixmap();
+
+ if (!icon().isEmpty())
+ pix = BarIcon(icon());
+
+ if (!pix.isNull() && m_imode != TK::TextOnly) {
+ pixLabel->setPixmap(pix);
+ pixLabel->show();
+ } else
+ pixLabel->hide();
+
+ base->setFixedWidth( w->sizeHint().width() +
+ (textLabel->isVisible() ? textLabel->sizeHint().width():0) +
+ (pixLabel->isVisible() ? pixLabel->sizeHint().width():0) );
+}
+/******************************************************************************/
+TKBaseSelectAction::TKBaseSelectAction( TQObject* parent, const char* name )
+: TTDEAction(parent,name)
+{
+ m_current = 0;
+ m_editable = false;
+}
+
+TKBaseSelectAction::~TKBaseSelectAction()
+{
+}
+
+int TKBaseSelectAction::plug(TQWidget* widget, int index)
+{
+ if ( widget->inherits("TDEToolBar") )
+ {
+ TDEToolBar* bar = static_cast<TDEToolBar*>( widget );
+ int id_ = TDEAction::getToolButtonID();
+
+ TKComboBox* cb = new TKComboBox(m_editable,bar);
+ initComboBox(cb);
+ cb->setMinimumWidth( cb->sizeHint().width() );
+ TQWidget* base = createLayout(bar,cb);
+
+ bar->insertWidget( id_, 100, base, index );
+ addContainer( bar, id_ );
+
+ connect( bar, TQT_SIGNAL( destroyed() ), this, TQT_SLOT( slotDestroyed() ) );
+
+ setCurrentItem(currentItem());
+
+ return containerCount() - 1;
+ }
+ return -1;
+}
+
+int TKBaseSelectAction::currentItem()
+{
+ return m_current;
+}
+
+void TKBaseSelectAction::initComboBox(TKComboBox* cb)
+{
+ connect(cb,TQT_SIGNAL(activated(int)),TQT_SLOT(slotActivated(int)));
+}
+
+void TKBaseSelectAction::setEditable(bool editable)
+{
+ m_editable = editable;
+ SET_FOR_ALL_CONTAINER(TKComboBox,setEditable,editable)
+}
+
+bool TKBaseSelectAction::isEditable()
+{
+ return m_editable;
+}
+
+void TKBaseSelectAction::setCurrentItem(int index)
+{
+ m_current = index;
+ SET_FOR_ALL_CONTAINER(TKComboBox,setCurrentItem,index)
+}
+
+void TKBaseSelectAction::slotActivated(int id)
+{
+ if ( m_current == id )
+ return;
+
+ m_current = id;
+ setCurrentItem(id);
+ activate(id);
+}
+
+void TKBaseSelectAction::activate(int id)
+{
+ emit activated(id);
+}
+/******************************************************************************/
+TTDESelectAction::TTDESelectAction( TQObject* parent, const char* name )
+: TKBaseSelectAction(parent,name)
+{
+}
+
+TTDESelectAction::~TTDESelectAction()
+{
+}
+
+void TTDESelectAction::initComboBox(TKComboBox* cb)
+{
+ TKBaseSelectAction::initComboBox(cb);
+ connect(cb,TQT_SIGNAL(activated(const TQString&)),TQT_SLOT(slotActivated(const TQString&)));
+ cb->insertStringList(items());
+}
+
+void TTDESelectAction::slotActivated(const TQString& text)
+{
+ emit activated(text);
+}
+
+void TTDESelectAction::setItems(const TQStringList& lst )
+{
+ m_list = lst;
+ m_current = -1;
+
+ SET_FOR_ALL_CONTAINER(TKComboBox,clear, )
+ SET_FOR_ALL_CONTAINER(TKComboBox,insertStringList,lst)
+
+ // Disable if empty and not editable
+ setEnabled ( lst.count() > 0 || m_editable );
+}
+
+TQStringList TTDESelectAction::items() const
+{
+ return m_list;
+}
+
+void TTDESelectAction::clear()
+{
+ SET_FOR_ALL_CONTAINER(TKComboBox,clear, )
+}
+
+void TTDESelectAction::setEditText(const TQString& text)
+{
+ SET_FOR_ALL_CONTAINER(TKComboBox,setEditText,text)
+}
+
+#undef SET_FOR_ALL_CONTAINER
+#include "tkaction.moc"