summaryrefslogtreecommitdiffstats
path: root/quanta/utility/toolbartabwidget.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'quanta/utility/toolbartabwidget.cpp')
-rw-r--r--quanta/utility/toolbartabwidget.cpp351
1 files changed, 351 insertions, 0 deletions
diff --git a/quanta/utility/toolbartabwidget.cpp b/quanta/utility/toolbartabwidget.cpp
new file mode 100644
index 00000000..03c6e86b
--- /dev/null
+++ b/quanta/utility/toolbartabwidget.cpp
@@ -0,0 +1,351 @@
+/***************************************************************************
+ toolbartabwidget.cpp
+ ---------------------
+ copyright : (C) 2003 by Andras Mantia <amantia@kde.org>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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; version 2 of the License. *
+ * *
+ ***************************************************************************/
+
+//qt includes
+#include <qevent.h>
+#include <qlayout.h>
+#include <qobjectlist.h>
+#include <qpoint.h>
+#include <qtabbar.h>
+#include <qwidgetstack.h>
+#include <qtabwidget.h>
+#include <qfontmetrics.h>
+
+//kde includes
+#include <kaction.h>
+#include <kaccelmanager.h>
+#include <kdeversion.h>
+#include <kiconloader.h>
+#include <klocale.h>
+#include <kmessagebox.h>
+#include <kpopupmenu.h>
+#include <ktoolbar.h>
+#include <ktoolbarbutton.h>
+#include <kdebug.h>
+#include <kglobalsettings.h>
+
+//app includes
+#include "toolbartabwidget.h"
+
+ToolbarTabWidget::ToolbarTabWidget(QWidget * parent, const char * name, WFlags f)
+:QTabWidget(parent, name, f)
+{
+ m_popupMenu = new KPopupMenu(this);
+ m_popupMenu->insertTitle(i18n("Toolbar Menu"), 1);
+ m_popupMenu->insertItem(i18n("New Action..."), parent, SLOT(slotNewAction()));
+ m_popupMenu->insertSeparator();
+ m_popupMenu->insertItem(i18n("New Toolbar..."), parent, SLOT(slotAddToolbar()));
+ m_popupMenu->insertItem(i18n("Remove Toolbar"), this, SLOT(slotRemoveToolbar()));
+ m_popupMenu->insertItem(i18n("Rename Toolbar..."), this, SLOT(slotRenameToolbar()));
+ m_popupMenu->insertItem(SmallIconSet("configure_toolbars"), i18n("Configure Toolbars..."), this, SLOT(slotEditToolbar()));
+
+ connect(this, SIGNAL(removeToolbar(const QString&)),
+ parent, SLOT(slotRemoveToolbar(const QString&)));
+ connect(this, SIGNAL(renameToolbar(const QString&)),
+ parent, SLOT(slotRenameToolbar(const QString&)));
+ connect(this, SIGNAL(editToolbar(const QString&)),
+ parent, SLOT(slotConfigureToolbars(const QString&)));
+ connect(this, SIGNAL(newAction()),
+ parent, SLOT(slotNewAction()));
+ connect(this, SIGNAL(addToolbar()),
+ parent, SLOT(slotAddToolbar()));
+ KAcceleratorManager::setNoAccel(this);
+}
+
+void ToolbarTabWidget::insertTab(QWidget *child, const QString &label, const QString &id)
+{
+ if (child->inherits("KToolBar") && child->parentWidget())
+ {
+ QTabWidget::insertTab(child->parentWidget(), label);
+ toolbarList.insert(id, child);
+ }
+}
+
+QWidget* ToolbarTabWidget::page(int index)
+{
+ QWidget *w = QTabWidget::page(index);
+
+ for (QMap<QString, QWidget*>::Iterator it = toolbarList.begin(); it != toolbarList.end(); ++it)
+ {
+ if (it.data()->parentWidget() == w)
+ {
+ w = *it;
+ break;
+ }
+ }
+ return w;
+}
+
+QString ToolbarTabWidget::id(QWidget *w) const
+{
+ QString idStr;
+ for (QMap<QString, QWidget*>::ConstIterator it = toolbarList.constBegin(); it != toolbarList.constEnd(); ++it)
+ {
+ if (it.data()->parentWidget() == w)
+ {
+ idStr = it.key();
+ break;
+ }
+ }
+ return idStr;
+}
+
+QString ToolbarTabWidget::id(int index) const
+{
+ QWidget *w = QTabWidget::page(index);
+ QString idStr;
+ for (QMap<QString, QWidget*>::ConstIterator it = toolbarList.constBegin(); it != toolbarList.constEnd(); ++it)
+ {
+ if (it.data()->parentWidget() == w)
+ {
+ idStr = it.key();
+ break;
+ }
+ }
+ return idStr;
+}
+
+QWidget* ToolbarTabWidget::page(const QString& id)
+{
+ QWidget *w = toolbarList.find(id).data();
+ return w;
+}
+
+void ToolbarTabWidget::removePage(QWidget * w)
+{
+ QWidget *parent = w->parentWidget();
+ if (w->inherits("KToolBar") && parent)
+ {
+ QTabWidget::removePage(parent);
+ for (QMap<QString, QWidget*>::ConstIterator it = toolbarList.constBegin(); it != toolbarList.constEnd(); ++it)
+ {
+ if (it.data() == w)
+ {
+ toolbarList.remove(it.key());
+ break;
+ }
+ }
+ delete parent;
+ }
+}
+
+void ToolbarTabWidget::slotRemoveToolbar()
+{
+ emit removeToolbar(tabUnderMouse.lower());
+}
+
+void ToolbarTabWidget::slotRenameToolbar()
+{
+ emit renameToolbar(tabUnderMouse.lower());
+}
+
+void ToolbarTabWidget::slotEditToolbar()
+{
+ emit editToolbar(tabUnderMouseLabel + " <quanta>");
+}
+
+void ToolbarTabWidget::mousePressEvent ( QMouseEvent * e )
+{
+ if (e->button() == Qt::RightButton)
+ {
+ QPoint p = e->globalPos();
+ QTab *tab = 0L;
+ QWidget *pageW = 0L;
+ for (int i =0; i < tabBar()->count(); i++)
+ {
+ tab = tabBar()->tabAt(i);
+ pageW = page(i);
+ QRect r = tab->rect();
+ QPoint p1 = mapToGlobal(r.topLeft());
+ QPoint p2 = mapToGlobal(r.bottomRight());
+ if (QRect(p1, p2).contains(p))
+ break;
+ else
+ tab = 0L;
+ }
+ tabUnderMouseLabel = tab ? tab->text() : label(currentPageIndex());
+ if (!pageW)
+ pageW = currentPage();
+ for (QMap<QString, QWidget*>::Iterator it = toolbarList.begin(); it != toolbarList.end(); ++it)
+ {
+ if (it.data()->parentWidget() == pageW)
+ {
+ tabUnderMouse = it.key();
+ break;
+ }
+ }
+ m_popupMenu->changeTitle(1, i18n("Toolbar Menu") + " - " + i18n(tabUnderMouseLabel.utf8()));
+ m_popupMenu->popup(p);
+ }
+}
+
+
+void ToolbarTabWidget::resizeEvent(QResizeEvent *e)
+{
+ QWidget::resizeEvent(e);
+ QWidget *tb;
+ for (QMap<QString, QWidget*>::Iterator it = toolbarList.begin(); it != toolbarList.end(); ++it)
+ {
+ tb = it.data();
+ tb->resize(QSize(width(), tb->height()));
+ }
+ int i = currentPageIndex();
+ if (i > 0)
+ {
+ setCurrentPage(i -1);
+ } else
+ if (i+1 < count())
+ {
+ setCurrentPage(i + 1);
+ }
+ setCurrentPage(i);
+}
+
+int ToolbarTabWidget::tabHeight() const
+{
+ int height = tabBar()->height();
+ if (height < 2)
+ {
+ height = QFontMetrics(KGlobalSettings::generalFont()).height() + 12;
+ }
+ return height;
+}
+
+
+QuantaToolBar::QuantaToolBar(QWidget *parent, const char *name, bool honor_style, bool readConfig)
+:KToolBar (parent, name=0, honor_style, readConfig)
+{
+ m_popupMenu = new KPopupMenu(this);
+ m_toolbarTab = dynamic_cast<ToolbarTabWidget*>(parent->parentWidget());
+ currentActionName = "";
+ m_iconTextMenu = new KPopupMenu(this);
+ m_iconTextMenu->setCheckable(true);
+ m_iconTextMenu->insertItem(i18n("Icons Only"), 0);
+ m_iconTextMenu->insertItem(i18n("Text Only"), 1);
+ m_iconTextMenu->insertItem(i18n("Text Alongside Icons"), 2);
+ m_iconTextMenu->insertItem(i18n("Text Under Icons"), 3);
+ connect(m_iconTextMenu, SIGNAL(activated(int)), SLOT(slotIconTextChanged(int)));
+ connect(m_iconTextMenu, SIGNAL(aboutToShow()), SLOT(slotIconTextMenuAboutToShow()));
+ setIconText(ToolbarTabWidget::ref()->iconText(), false);
+}
+
+void QuantaToolBar::slotIconTextMenuAboutToShow()
+{
+ m_iconTextMenu->setItemChecked(0, false);
+ m_iconTextMenu->setItemChecked(1, false);
+ m_iconTextMenu->setItemChecked(2, false);
+ m_iconTextMenu->setItemChecked(3, false);
+ switch (ToolbarTabWidget::ref()->iconText())
+ {
+ case IconOnly: m_iconTextMenu->setItemChecked(0, true);
+ break;
+ case TextOnly: m_iconTextMenu->setItemChecked(1, true);
+ break;
+ case IconTextRight: m_iconTextMenu->setItemChecked(2, true);
+ break;
+ case IconTextBottom: m_iconTextMenu->setItemChecked(3, true);
+ break;
+ }
+}
+
+void QuantaToolBar::slotIconTextChanged(int id)
+{
+ ToolbarTabWidget *toolbarTab = ToolbarTabWidget::ref();
+ int width = toolbarTab->width();
+ int bigHeight = iconSize() + QFontMetrics(KGlobalSettings::toolBarFont()).height() + 10;
+ int normalHeight = iconSize() + 10;
+ for (int i = 0; i < toolbarTab->count(); i++)
+ {
+ QuantaToolBar *tb = static_cast<QuantaToolBar*>(toolbarTab->page(i));
+ switch (id)
+ {
+ case 0: tb->setIconText(IconOnly);
+ tb->setGeometry(0,0, width, normalHeight);
+ break;
+ case 1: tb->setIconText(TextOnly);
+ tb->setGeometry(0,0, width, normalHeight);
+ break;
+ case 2: tb->setIconText(IconTextRight);
+ tb->setGeometry(0,0, width, normalHeight);
+ break;
+ case 3: tb->setIconText(IconTextBottom);
+ tb->setGeometry(0,0, width, bigHeight);
+ break;
+ }
+ }
+ toolbarTab->setIconText(iconText());
+ if (id == 3)
+ {
+ toolbarTab->setFixedHeight(toolbarTab->tabHeight() + height() + 3);
+ } else
+ {
+ toolbarTab->setFixedHeight(toolbarTab->tabHeight() + height() + 3);
+ }
+}
+
+void QuantaToolBar::mousePressEvent(QMouseEvent *e)
+{
+ if (e->button() == Qt::RightButton)
+ {
+ m_popupMenu->clear();
+ QPoint p = e->globalPos();
+ if (m_toolbarTab)
+ {
+ m_toolbarTab->tabUnderMouse = m_toolbarTab->id(m_toolbarTab->currentPageIndex());
+ m_toolbarTab->tabUnderMouseLabel = m_toolbarTab->label(m_toolbarTab->currentPageIndex());
+ m_popupMenu->insertTitle(i18n("Toolbar Menu") + " - "
+ + i18n(m_toolbarTab->tabUnderMouseLabel.utf8()));
+ m_popupMenu->insertItem(i18n("New Action..."), m_toolbarTab, SIGNAL(newAction()));
+ QObjectList* childrenList = queryList("KToolBarButton");
+ for (uint i = 0; i < childrenList->count(); i++)
+ {
+ KToolBarButton *w = static_cast<KToolBarButton*>(childrenList->at(i));
+ QPoint p1 = w->parentWidget()->mapToGlobal(w->pos());
+ QPoint p2 = QPoint(p1.x() + w->width(), p1.y()+w->height());
+ if (QRect(p1, p2).contains(p))
+ {
+ currentActionName = w->textLabel();
+ QString actionName = currentActionName;
+ m_popupMenu->insertItem(i18n("Remove Action - %1").arg(actionName.replace('&',"&&")), this, SLOT(slotRemoveAction()));
+ m_popupMenu->insertItem(i18n("Edit Action - %1").arg(actionName), this, SLOT(slotEditAction()));
+ break;
+ }
+ }
+ m_popupMenu->insertSeparator();
+ m_popupMenu->insertItem(i18n("New Toolbar..."), m_toolbarTab, SIGNAL(addToolbar()));
+ m_popupMenu->insertItem(i18n("Remove Toolbar"), m_toolbarTab, SLOT(slotRemoveToolbar()));
+ m_popupMenu->insertItem(i18n("Rename Toolbar..."), m_toolbarTab, SLOT(slotRenameToolbar()));
+ m_popupMenu->insertSeparator();
+ m_popupMenu->insertItem( i18n("Text Position"), m_iconTextMenu);
+ m_popupMenu->insertItem(SmallIconSet("configure_toolbars"), i18n("Configure Toolbars..."), m_toolbarTab, SLOT(slotEditToolbar()));
+ }
+ m_popupMenu->popup(p);
+ }
+}
+
+void QuantaToolBar::slotEditAction()
+{
+ emit editAction(currentActionName);
+}
+
+void QuantaToolBar::slotRemoveAction()
+{
+ if ( KMessageBox::warningContinueCancel(this, i18n("<qt>Are you sure you want to remove the <b>%1</b> action?</qt>").arg(currentActionName),QString::null,KStdGuiItem::del()) == KMessageBox::Continue )
+ {
+ emit removeAction(m_toolbarTab->tabUnderMouse, currentActionName);
+ }
+}
+
+
+#include "toolbartabwidget.moc"