summaryrefslogtreecommitdiffstats
path: root/quanta/dialogs/actionconfigdialog.cpp
diff options
context:
space:
mode:
authortoma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2009-11-25 17:56:58 +0000
committertoma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2009-11-25 17:56:58 +0000
commite9ae80694875f869892f13f4fcaf1170a00dea41 (patch)
treeaa2f8d8a217e2d376224c8d46b7397b68d35de2d /quanta/dialogs/actionconfigdialog.cpp
downloadtdewebdev-e9ae80694875f869892f13f4fcaf1170a00dea41.tar.gz
tdewebdev-e9ae80694875f869892f13f4fcaf1170a00dea41.zip
Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features.
BUG:215923 git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdewebdev@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'quanta/dialogs/actionconfigdialog.cpp')
-rw-r--r--quanta/dialogs/actionconfigdialog.cpp933
1 files changed, 933 insertions, 0 deletions
diff --git a/quanta/dialogs/actionconfigdialog.cpp b/quanta/dialogs/actionconfigdialog.cpp
new file mode 100644
index 00000000..9a4cfb3d
--- /dev/null
+++ b/quanta/dialogs/actionconfigdialog.cpp
@@ -0,0 +1,933 @@
+/***************************************************************************
+ actionconfigdialog.cpp
+ ---------------------
+ copyright : (C) 2003 by Andras Mantia <[email protected]>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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 <qbuttongroup.h>
+#include <qcheckbox.h>
+#include <qdom.h>
+#include <qfileinfo.h>
+#include <qlineedit.h>
+#include <qlistbox.h>
+#include <qmultilineedit.h>
+#include <qradiobutton.h>
+#include <qtabwidget.h>
+#include <qregexp.h>
+
+//kde includes
+#include <kapplication.h>
+#include <kconfig.h>
+#include <kdebug.h>
+#include <kicondialog.h>
+#include <kiconloader.h>
+#include <kkeybutton.h>
+#include <klistview.h>
+#include <klocale.h>
+#include <kmainwindow.h>
+#include <kmessagebox.h>
+#include <kpopupmenu.h>
+#include <kpushbutton.h>
+#include <kstandarddirs.h>
+#include <kdeversion.h>
+#include <kinputdialog.h>
+#include <ktoolbar.h>
+
+//app includes
+#include "resource.h"
+#include "filecombo.h"
+
+#include "actionconfigdialog.h"
+#include "tagaction.h"
+#include "toolbartabwidget.h"
+
+ActionConfigDialog::ActionConfigDialog(const QDict<ToolbarEntry> &toolbarList, KMainWindow* parent, const char* name, bool modal, WFlags fl, const QString& defaultAction )
+ :ActionConfigDialogS( parent, name, modal, fl )
+{
+ m_mainWindow = parent;
+ m_toolbarList = toolbarList;
+ buttonOk->setIconSet(SmallIconSet("button_ok"));
+ buttonCancel->setIconSet(SmallIconSet("button_cancel"));
+ buttonApply->setIconSet(SmallIconSet("apply"));
+ //buttonHelp->setIconSet(SmallIconSet("help"));
+
+ currentAction = 0L;
+ m_toolbarItem = 0L;
+
+ connect(actionTreeView, SIGNAL(contextMenu(KListView *,QListViewItem *,const QPoint &)),
+ SLOT(slotContextMenu(KListView *,QListViewItem *,const QPoint &)));
+ connect(actionTreeView, SIGNAL(selectionChanged(QListViewItem *)),
+ SLOT(slotSelectionChanged(QListViewItem *)));
+ connect(shortcutKeyButton, SIGNAL(capturedShortcut(const KShortcut &)),
+ SLOT(slotShortcutCaptured(const KShortcut &)));
+ connect(scriptPath, SIGNAL(activated(const QString&)),
+ SLOT(slotTextChanged(const QString&)));
+ connect(this, SIGNAL(addToolbar()), m_mainWindow, SLOT(slotAddToolbar()));
+ connect(this, SIGNAL(removeToolbar(const QString&)), m_mainWindow, SLOT(slotRemoveToolbar(const QString&)));
+ connect(this, SIGNAL(deleteUserAction(KAction*)), m_mainWindow, SLOT(slotDeleteAction(KAction*)));
+ connect(this, SIGNAL(configureToolbars(const QString&)), m_mainWindow, SLOT(slotConfigureToolbars(const QString&)));
+//fill up the tree view with the toolbars and actions
+ actionTreeView->setSorting(-1);
+ allActionsItem = new KListViewItem(actionTreeView, i18n("All"));
+ actionTreeView->insertItem(allActionsItem);
+ QListViewItem *item, *oldItem = allActionsItem;
+ KAction *action;
+ QString toolbarName;
+ QString toolbarId;
+ ToolbarTabWidget *tb = ToolbarTabWidget::ref();
+ QRegExp r("\\&(?!\\&)");
+ KActionCollection *ac = m_mainWindow->actionCollection();
+ for (int i = 0; i < tb->count(); i++)
+ {
+ toolbarName = tb->label(i);
+ toolbarName.replace(r, "");
+ item = new KListViewItem(actionTreeView, oldItem, i18n(toolbarName.utf8()));
+ actionTreeView->insertItem(item);
+
+ toolbarId = tb->id(i);
+ QListViewItem *oldActionItem = 0L;
+ ToolbarEntry *p_toolbar = m_toolbarList[toolbarId];
+ if (p_toolbar)
+ {
+ QDomNode node = p_toolbar->guiClient->domDocument().firstChild().firstChild().firstChild();
+ while (!node.isNull())
+ {
+ if (node.nodeName() == "Action")
+ {
+ action = ac->action(node.toElement().attribute("name"));
+ if (action)
+ {
+ oldActionItem = new KListViewItem(item, oldActionItem, action->text().replace(r,""), action->shortcut().toString(), action->name());
+ oldActionItem->setPixmap(0, SmallIcon(action->icon()) );
+ }
+ }
+ node = node.nextSibling();
+ }
+ if (tb->label(tb->currentPageIndex()).replace(r, "") == toolbarName)
+ {
+ item->setOpen(true);
+ if (item->firstChild())
+ {
+ if (defaultAction.isEmpty())
+ {
+ actionTreeView->setCurrentItem(item->firstChild());
+ } else
+ {
+ QListViewItem *actionItem = item->firstChild();
+ while (actionItem && actionItem->depth() > 0)
+ {
+ if (actionItem->text(0) == defaultAction || actionItem->text(0) == defaultAction + "...")
+ {
+ actionTreeView->setCurrentItem(actionItem);
+ break;
+ }
+ actionItem = actionItem->nextSibling();
+ }
+ }
+ }
+ }
+ }
+ oldItem = item;
+ }
+ uint acCount = ac->count();
+ for (uint i = 0; i < acCount; i++)
+ {
+ action = ac->action(i);
+ item = new KListViewItem(allActionsItem, action->text().replace(r, ""), action->shortcut().toString(), action->name());
+ item->setPixmap(0, SmallIcon(action->icon()) );
+ }
+ allActionsItem->sortChildItems(0, true);
+
+ treeMenu = new KPopupMenu(actionTreeView);
+ treeMenu->insertItem(i18n("&Add New Toolbar"), this, SLOT(slotAddToolbar()));
+ treeMenu->insertItem(i18n("&Remove Toolbar"), this, SLOT(slotRemoveToolbar()));
+ treeMenu->insertItem(i18n("&Edit Toolbar"), this, SLOT(slotEditToolbar()));
+
+ globalShortcuts = KGlobal::config()->entryMap( "Global Shortcuts" );
+}
+
+ActionConfigDialog::~ActionConfigDialog()
+{
+}
+
+void ActionConfigDialog::slotAddToolbar()
+{
+ emit addToolbar();
+ QString toolbarName;
+ QListViewItem *item;
+ ToolbarTabWidget *tb = ToolbarTabWidget::ref();
+ for (int i = 0; i < tb->count(); i++)
+ {
+ toolbarName = tb->label(i);
+ if (!actionTreeView->findItem(toolbarName, 0))
+ {
+ item = actionTreeView->lastItem();
+ if (item->parent())
+ item = item->parent();
+ new KListViewItem(actionTreeView, item, i18n(toolbarName.utf8()));
+ break;
+ }
+ }
+}
+
+void ActionConfigDialog::slotRemoveToolbar()
+{
+ QListViewItem *item = actionTreeView->currentItem();
+ QString s = item->text(0);
+ if (item->parent())
+ {
+ item = item->parent();
+ s = item->text(0);
+ }
+ if (s != i18n("All"))
+ {
+ if ( KMessageBox::warningContinueCancel(this, i18n("Do you really want to remove the \"%1\" toolbar?").arg(s),QString::null,KStdGuiItem::del()) == KMessageBox::Continue )
+ {
+ m_toolbarItem = item;
+ connect(m_mainWindow, SIGNAL(toolbarRemoved(const QString&)), SLOT(slotToolbarRemoved(const QString&)));
+ emit removeToolbar(s.lower());
+ }
+ }
+}
+
+void ActionConfigDialog::slotToolbarRemoved(const QString &/*name*/)
+{
+ actionTreeView->setCurrentItem(allActionsItem);
+ delete m_toolbarItem;
+ m_toolbarItem = 0L;
+ disconnect(m_mainWindow, SIGNAL(toolbarRemoved(const QString&)), this, SLOT(slotToolbarRemoved(const QString&)));
+}
+
+void ActionConfigDialog::slotEditToolbar()
+{
+ QString toolbarName;
+ QString toolbarId;
+ QListViewItem *oldItem;
+ QListViewItem *item = actionTreeView->currentItem();
+ if (item->parent())
+ item = item->parent();
+ toolbarName = item->text(0);
+ if ( toolbarName != i18n("All"))
+ {
+ emit configureToolbars(toolbarName +" <quanta>");
+
+ //update the tree view
+ KAction *action;
+ KActionCollection *ac = m_mainWindow->actionCollection();
+ ToolbarTabWidget *tb = ToolbarTabWidget::ref();
+ for (int i = 0; i < tb->count(); i++)
+ {
+ toolbarName = tb->label(i);
+ toolbarId = tb->id(i);
+ ToolbarEntry *p_toolbar = m_toolbarList[toolbarId];
+ if (p_toolbar)
+ {
+ oldItem = actionTreeView->findItem(toolbarName, 0);
+ item = new KListViewItem(actionTreeView, oldItem, toolbarName);
+ item->setOpen(oldItem->isOpen());
+ delete oldItem;
+ QDomNode node = p_toolbar->guiClient->domDocument().firstChild().firstChild().firstChild();
+ while (!node.isNull())
+ {
+ if (node.nodeName() == "Action")
+ {
+ action = ac->action(node.toElement().attribute("name"));
+ if (action)
+ {
+ oldItem = new KListViewItem(item, oldItem, action->text().replace(QRegExp("\\&(?!\\&)"),""), action->shortcut().toString(), action->name());
+ oldItem->setPixmap(0, SmallIcon(action->icon()));
+ }
+ }
+ node = node.nextSibling();
+ }
+ }
+ }
+ actionTreeView->setCurrentItem(allActionsItem);
+ actionTreeView->setSelected(allActionsItem, true);
+ }
+}
+
+void ActionConfigDialog::slotContextMenu(KListView *,QListViewItem *,const QPoint &point)
+{
+ treeMenu->popup(point);
+}
+
+void ActionConfigDialog::slotSelectionChanged(QListViewItem *item)
+{
+ if (currentAction && currentAction->inherits("TagAction"))
+ {
+ if ( buttonApply->isEnabled() &&
+ KMessageBox::questionYesNo(this, i18n("Do you want to save the changes made to this action?"), QString::null, KStdGuiItem::save(), KStdGuiItem::discard()) == KMessageBox::Yes )
+ {
+ saveCurrentAction();
+ }
+ buttonApply->setEnabled(false);
+ currentAction = 0L;
+ }
+ if (item && item->depth() > 0)
+ {
+ TagAction *action = 0L;
+ KActionCollection *ac = m_mainWindow->actionCollection();
+ uint acCount = ac->count();
+//find the corresponding action
+ for (uint i = 0; i < acCount; i++)
+ {
+ KAction *a = ac->action(i);
+ QString actionName = a->name();
+ if (a && actionName == item->text(2) && a->inherits("TagAction"))
+ {
+ action = static_cast<TagAction*>(a);
+ actionProperties->setEnabled(true);
+ deleteAction->setEnabled(true);
+ break;
+ } else
+ {
+ actionProperties->setEnabled(false);
+ deleteAction->setEnabled(false);
+ }
+ }
+
+ //if we found the action, load the action details
+ if (action)
+ {
+ currentAction = action;
+ QDomElement el = action->data();
+ if ( el.hasAttribute("icon") )
+ {
+ QString s = el.attribute("icon");
+ if (!QFileInfo(s).exists())
+ s = QFileInfo(s).fileName();
+ actionIcon->setIcon(s);
+ }
+ QString actionText = el.attribute("text");
+ actionText.replace(QRegExp("\\&(?!\\&)"),"");
+ lineText->setText(actionText);
+ lineToolTip->setText( el.attribute("tooltip") );
+ selectedShortcut = action->shortcut();
+ QString shortcutText = action->shortcut().toString();
+ if (shortcutText.isEmpty())
+ {
+ noShortcut->setChecked(true);
+ shortcutKeyButton->setText(i18n("None"));
+ } else
+ {
+ customShortcut->setChecked(true);
+ shortcutKeyButton->setShortcut(action->shortcut(), false);
+ shortcutKeyButton->setText(shortcutText);
+ }
+
+//find the container toolbars of this action and add them to the container listbox
+ toolbarListBox->clear();
+ int current = 0;
+ int count = 0;
+ ToolbarTabWidget *tb = ToolbarTabWidget::ref();
+ for (int i = 0; i < tb->count(); i++)
+ {
+ QString toolbarName = tb->label(i);
+ QString toolbarId = tb->id(i);
+ ToolbarEntry *p_toolbar = m_toolbarList[toolbarId];
+ if (p_toolbar)
+ {
+ QDomNode node = p_toolbar->guiClient->domDocument().firstChild().firstChild().firstChild();
+ while (!node.isNull())
+ {
+ if (node.nodeName() == "Action" &&
+ node.toElement().attribute("name") == el.attribute("name"))
+ {
+ toolbarListBox->insertItem(toolbarName);
+ if (item->parent()->text(0) == toolbarName)
+ current = count;
+ count++;
+ }
+ node = node.nextSibling();
+ }
+ }
+ }
+ toolbarListBox->setCurrentItem(current);
+ toolbarListBox->setSelected(current, true);
+ toolbarListBox->sort();
+
+//set the detailed settings pages to their defaults
+ lineTag->clear();
+ lineClosingTag->clear();
+ useClosingTag->setChecked(false);
+ useActionDialog->setChecked(false);
+ scriptPath->setText("");
+ inputBox->setCurrentItem(0);
+ outputBox->setCurrentItem(5);
+ errorBox->setCurrentItem(5);
+ textEdit->clear();
+//set the detailed settings according to the type of the action
+ QString type = el.attribute("type", "tag");
+ if (type == "tag")
+ {
+ QDomElement eltag = el.namedItem("tag").toElement();
+ lineTag->setText( eltag.text() );
+ useActionDialog->setChecked(eltag.attribute("useDialog","false") == "true");
+ eltag = el.namedItem("xtag").toElement();
+ lineClosingTag->setText( eltag.text() );
+ useClosingTag->setChecked( eltag.attribute("use","false") == "true" );
+ typeCombo->setCurrentItem(0);
+ }
+ else if (type == "script")
+ {
+ QDomElement elScript = el.namedItem("script").toElement();
+ scriptPath->setText( elScript.text() );
+
+ QString s;
+ s = elScript.attribute("input","none");
+ if (s == "current")
+ {
+ inputBox->setCurrentItem(1);
+ } else
+ if (s == "selected")
+ {
+ inputBox->setCurrentItem(2);
+ } else
+ {
+ inputBox->setCurrentItem(0);
+ }
+
+ s = elScript.attribute("output","none");
+ if (s == "cursor")
+ {
+ outputBox->setCurrentItem(1);
+ } else
+ if (s == "selection")
+ {
+ outputBox->setCurrentItem(2);
+ } else
+ if (s == "replace")
+ {
+ outputBox->setCurrentItem(3);
+ } else
+ if (s == "new")
+ {
+ outputBox->setCurrentItem(4);
+ } else
+ if (s == "message")
+ {
+ outputBox->setCurrentItem(5);
+ } else
+ {
+ outputBox->setCurrentItem(0);
+ }
+
+ s = elScript.attribute("error","none");
+ if (s == "cursor")
+ {
+ errorBox->setCurrentItem(1);
+ } else
+ if (s == "selection")
+ {
+ errorBox->setCurrentItem(2);
+ } else
+ if (s == "replace")
+ {
+ errorBox->setCurrentItem(3);
+ } else
+ if (s == "new")
+ {
+ errorBox->setCurrentItem(4);
+ } else
+ if (s == "message")
+ {
+ errorBox->setCurrentItem(5);
+ } else
+ {
+ errorBox->setCurrentItem(0);
+ }
+ typeCombo->setCurrentItem(1);
+ }
+ else if (type == "text")
+ {
+ textEdit->setText( el.namedItem("text").toElement().text() );
+ typeCombo->setCurrentItem(2);
+ }
+ buttonApply->setEnabled(false);
+ }
+ } else
+ {
+ actionProperties->setEnabled(false);
+ deleteAction->setEnabled(false);
+ }
+}
+
+void ActionConfigDialog::saveCurrentAction()
+{
+ static_cast<TagAction *>(currentAction)->setModified(true);
+ QString s;
+ QDomElement el = static_cast<TagAction *>(currentAction)->data();
+ s = actionIcon->icon();
+ el.setAttribute("icon", s);
+ currentAction->setIcon(s);
+ QString oldText = el.attribute("text");
+ s = lineText->text();
+ s.replace('&', "&&");
+ el.setAttribute("text", s);
+ currentAction->setText(s);
+ s = lineToolTip->text();
+ el.setAttribute("tooltip", s);
+ currentAction->setToolTip(s);
+ s = "";
+ if (customShortcut->isChecked())
+ {
+ s = selectedShortcut.toString();
+ currentAction->setShortcut(selectedShortcut);
+ } else
+ {
+ currentAction->setShortcut(KShortcut());
+ }
+ el.setAttribute("shortcut", s);
+
+
+//update the tree view
+ QListViewItem *listItem;
+ QListViewItemIterator it(actionTreeView);
+ while (it.current())
+ {
+ listItem = it.current();
+ if (listItem->depth() > 0 && listItem->text(2) == currentAction->name())
+ {
+ listItem->setPixmap(0, SmallIcon(actionIcon->icon()));
+ listItem->setText(0, lineText->text());
+ listItem->setText(1, currentAction->shortcut().toString());
+ }
+ ++it;
+ }
+
+//remove all the detailed settings
+ QDomElement item = el.namedItem("tag").toElement();
+ if ( !item.isNull() )
+ el.removeChild(item);
+ item = el.namedItem("tag").toElement();
+ if ( !item.isNull() )
+ el.removeChild(item);
+ item = el.namedItem("xtag").toElement();
+ if ( !item.isNull() )
+ el.removeChild(item);
+ item = el.namedItem("script").toElement();
+ if ( !item.isNull() )
+ el.removeChild(item);
+ item = el.namedItem("text").toElement();
+ if ( !item.isNull() )
+ el.removeChild(item);
+//add the new detailed settings
+ QDomDocument document = QDomDocument();
+ int type = typeCombo->currentItem();
+ switch (type)
+ {
+ case 1:{
+ el.setAttribute("type","script");
+ item = document.createElement("script");
+ switch (inputBox->currentItem())
+ {
+ case 1:{ item.setAttribute("input", "current");
+ break;
+ }
+ case 2:{ item.setAttribute("input", "selected");
+ break;
+ }
+ default:{ item.setAttribute("input", "none");
+ break;
+ }
+ }
+ switch (outputBox->currentItem())
+ {
+ case 1:{ item.setAttribute("output", "cursor");
+ break;
+ }
+ case 2:{ item.setAttribute("output", "selection");
+ break;
+ }
+ case 3:{ item.setAttribute("output", "replace");
+ break;
+ }
+ case 4:{ item.setAttribute("output", "new");
+ break;
+ }
+ case 5:{ item.setAttribute("output", "message");
+ break;
+ }
+ default:{ item.setAttribute("output", "none");
+ break;
+ }
+ }
+ switch (errorBox->currentItem())
+ {
+ case 1:{ item.setAttribute("error", "cursor");
+ break;
+ }
+ case 2:{ item.setAttribute("error", "selection");
+ break;
+ }
+ case 3:{ item.setAttribute("error", "replace");
+ break;
+ }
+ case 4:{ item.setAttribute("error", "new");
+ break;
+ }
+ case 5:{ item.setAttribute("error", "message");
+ break;
+ }
+ default:{ item.setAttribute("error", "none");
+ break;
+ }
+ }
+
+ el.appendChild(item);
+ item.appendChild(document.createTextNode(scriptPath->text()));
+ break;
+ }
+ case 2:{
+ el.setAttribute("type","text");
+ item = document.createElement("text");
+ el.appendChild(item);
+ item.appendChild(document.createTextNode(textEdit->text()));
+ break;
+ }
+ default:{
+ el.setAttribute("type","tag");
+ item = document.createElement("tag");
+ item.setAttribute("useDialog", useActionDialog->isChecked() ? "true" : "false");
+ el.appendChild(item);
+ item.appendChild(document.createTextNode(lineTag->text()));
+ item = document.createElement("xtag");
+ item.setAttribute("use", useClosingTag->isChecked() ? "true" : "false");
+ el.appendChild(item);
+ item.appendChild(document.createTextNode(lineClosingTag->text()));
+ break;
+ }
+ }
+ ToolbarTabWidget *tb = ToolbarTabWidget::ref();
+ for (int i = 0; i < tb->count(); i++)
+ {
+ QString toolbarName = tb->label(i);
+ QString toolbarId = tb->id(i);
+ ToolbarEntry *p_toolbar = m_toolbarList[toolbarId];
+ bool isOnToolbar = false;
+ if (p_toolbar)
+ {
+ QDomNode node = p_toolbar->guiClient->domDocument().firstChild().firstChild().firstChild();
+ bool placeOnToolbar = toolbarListBox->findItem(toolbarName, Qt::ExactMatch);
+ while (!node.isNull())
+ {
+ if (node.nodeName() == "Action" &&
+ node.toElement().attribute("name") == el.attribute("name"))
+ {
+ //if it's present in the toolbar, but not in the container list,
+ //remove it also from the toolbar
+ if (!placeOnToolbar)
+ {
+ currentAction->unplug(tb->page(i));
+ currentAction->unplug(p_toolbar->menu);
+ node.parentNode().removeChild(node);
+ QListViewItemIterator iter(actionTreeView);
+ while (iter.current())
+ {
+ listItem = iter.current();
+ if (listItem->depth() > 0 && listItem->parent()->text(0) == toolbarName
+ && listItem->text(2) == el.attribute("name"))
+ {
+ delete listItem;
+ break;
+ }
+ ++iter;
+ }
+ }
+ isOnToolbar = true;
+ break;
+ }
+ node = node.nextSibling();
+ }
+ //it's not on the toolbar, but it should be
+ if (!isOnToolbar && placeOnToolbar)
+ {
+ currentAction->plug(tb->page(i));
+ currentAction->plug(p_toolbar->menu);
+ item = p_toolbar->guiClient->domDocument().createElement("Action");
+ item.setAttribute("name",el.attribute("name"));
+ p_toolbar->guiClient->domDocument().firstChild().firstChild().appendChild(item);
+ //put it also in the treeview
+ listItem = actionTreeView->findItem(toolbarName, 0);
+ if (listItem)
+ {
+ QListViewItem *after = listItem->firstChild();
+ while ( after && (!after->nextSibling() || (after->nextSibling() && after->nextSibling()->depth()!=0 ) ))
+ {
+ if (after->text(2) == currentAction->name())
+ {
+ placeOnToolbar = false;
+ break;
+ }
+ after = after->nextSibling();
+ }
+ if (placeOnToolbar)
+ {
+ listItem = new KListViewItem(listItem, after, lineText->text(), currentAction->shortcut().toString(), currentAction->name());
+ listItem->setPixmap(0, SmallIcon(actionIcon->icon()));
+ }
+ }
+ }
+ KXMLGUIFactory::saveConfigFile(p_toolbar->guiClient->domDocument(),
+ p_toolbar->guiClient->xmlFile(), p_toolbar->guiClient->instance());
+ }
+ QWidget *toolBar = tb->page(i);
+ if (toolBar->minimumSizeHint().height() > 20)
+ {
+ toolBar->adjustSize();
+ toolBar->setGeometry(0,0, tb->width(), toolBar->height());
+ } else
+ {
+ toolBar->setGeometry(0,0, tb->width(), tb->height() - tb->tabHeight());
+ }
+
+ }
+}
+
+void ActionConfigDialog::slotShortcutCaptured(const KShortcut &shortcut)
+{
+ QString shortcutText = shortcut.toString();
+ QString shortcutText2;
+ int pos = shortcutText.find(';');
+ if (pos != -1)
+ {
+ shortcutText2 = shortcutText.mid(pos + 1);
+ shortcutText = shortcutText.left(pos);
+ }
+ QString s = shortcutText;
+ s.replace('+', "\\+");
+ QRegExp shortcutRx("\\(" + s + "\\)|" + s + "$|" + s + ";");
+ s = shortcutText2;
+ s.replace('+', "\\+");
+ QRegExp shortcutRx2("\\(" + s + "\\)|" + s + "$|" + s + ";");
+ QString global;
+//check for conflicting global shortcuts
+ QMap<QString, QString>::Iterator it;
+ for ( it = globalShortcuts.begin(); it != globalShortcuts.end(); ++it )
+ {
+ if (it.data().contains(shortcutRx))
+ {
+ global = it.key();
+ break;
+ }
+ if (!shortcutText2.isEmpty() && it.data().contains(shortcutRx2))
+ {
+ shortcutText = shortcutText2;
+ global = it.key();
+ break;
+ }
+ }
+
+ if (global.isEmpty())
+ {
+ QPtrList<KXMLGUIClient> clients = m_mainWindow->guiFactory()->clients();
+ for( QPtrListIterator<KXMLGUIClient> it( clients ); it.current(); ++it )
+ {
+ KActionCollection *ac = (*it)->actionCollection();
+ for (uint i = 0; i < ac->count(); i++)
+ {
+ KAction *action = ac->action(i);
+ if (action != currentAction && action->shortcut().toString().contains(shortcutRx))
+ {
+ global = action->text();
+ break;
+ }
+ if (!shortcutText2.isEmpty() && action != currentAction && action->shortcut().toString().contains(shortcutRx))
+ {
+ shortcutText = shortcutText2;
+ global = action->text();
+ break;
+ }
+ }
+ if (!global.isEmpty())
+ break;
+ }
+ }
+
+ if (global.isEmpty())
+ {
+ shortcutKeyButton->setText(shortcutText);
+ buttonApply->setEnabled(true);
+ selectedShortcut = shortcut;
+ } else
+ {
+ global.replace('&',"");
+ QString s = i18n("The '%1' key combination has already been allocated "
+ "to the \"%2\" action.\n"
+ "Please choose a unique key combination.").
+ arg(shortcutText).arg(global);
+ KMessageBox::sorry( this, s, i18n("Conflicting Shortcuts"));
+ }
+}
+
+void ActionConfigDialog::accept()
+{
+ if (buttonApply->isEnabled())
+ saveCurrentAction();
+ ActionConfigDialogS::accept();
+}
+
+void ActionConfigDialog::reject()
+{
+ if (buttonApply->isEnabled() && KMessageBox::questionYesNo(this, i18n("Do you want to save the changes made to this action?"), QString::null, KStdGuiItem::save(), KStdGuiItem::discard()) == KMessageBox::Yes )
+ saveCurrentAction();
+ ActionConfigDialogS::reject();
+}
+
+void ActionConfigDialog::slotNewAction()
+{
+ QDomDocument doc;
+ QDomElement el = doc.createElement("action");
+ el.setAttribute( "name", "user_"+KApplication::randomString(10) );
+ el.setAttribute( "icon", "ball" );
+
+ currentAction = new TagAction(&el, m_mainWindow);
+
+ //add the actions to every toolbar xmlguiclient
+ QDictIterator<ToolbarEntry> it(m_toolbarList);
+ while (it.current())
+ {
+ it.current()->guiClient->actionCollection()->insert(currentAction);
+ ++it;
+ }
+
+ selectedShortcut = KShortcut();
+ static_cast<TagAction*>(currentAction)->setModified(true);
+ QListViewItem *currentItem = actionTreeView->currentItem();
+ QListViewItem *item = new KListViewItem(allActionsItem);
+ QString actionText = QString("Action_%1").arg(m_mainWindow->actionCollection()->count());
+ currentAction->setText(actionText);
+ item->setText(2, currentAction->name());
+ item->setText(0, actionText);
+ item->setPixmap(0, SmallIcon("ball"));
+ allActionsItem->sortChildItems(0, true);
+ if (currentItem->parent() && currentItem->parent() == allActionsItem)
+ {
+ actionTreeView->setCurrentItem(item);
+ } else
+ {
+ QListViewItem *parentItem = currentItem->parent();
+ if (!parentItem)
+ parentItem = currentItem;
+
+ item = new KListViewItem(parentItem, currentItem);
+ item->setText(0, actionText);
+ item->setText(2, currentAction->name());
+ item->setPixmap(0, SmallIcon("ball"));
+ actionTreeView->setCurrentItem(item);
+ if (parentItem != allActionsItem)
+ {
+ toolbarListBox->insertItem(parentItem->text(0));
+ toolbarListBox->setCurrentItem(0);
+ toolbarListBox->setSelected(0, true);
+ }
+ }
+ actionTreeView->ensureItemVisible(item);
+ buttonApply->setEnabled(true);
+}
+
+void ActionConfigDialog::slotDeleteAction()
+{
+ if ( KMessageBox::warningContinueCancel(this, i18n("<qt>Removing the action removes all the references to it.\nAre you sure you want to remove the <b>%1</b> action?</qt>").arg(currentAction->text()),QString::null,KStdGuiItem::del()) == KMessageBox::Continue )
+ {
+ QString actionName = currentAction->name();
+ emit deleteUserAction(currentAction);
+ currentAction = 0L;
+ //update the tree view
+ QListViewItem *listItem;
+ QListViewItemIterator it(actionTreeView);
+ while (it.current())
+ {
+ listItem = it.current();
+ if (listItem->depth() > 0 && listItem->text(2) == actionName)
+ {
+ ++it;
+ delete listItem;
+ } else
+ {
+ ++it;
+ }
+ }
+ slotSelectionChanged(actionTreeView->currentItem());
+ }
+}
+
+void ActionConfigDialog::slotApply()
+{
+ saveCurrentAction();
+ buttonApply->setEnabled(false);
+}
+
+void ActionConfigDialog::slotAddContainerToolbar()
+{
+ ToolbarTabWidget *tb = ToolbarTabWidget::ref();
+ int i;
+
+ QStringList lst;
+ for (i = 0; i < tb->count(); i++)
+ {
+ if (!toolbarListBox->findItem(tb->label(i), Qt::ExactMatch))
+ lst << tb->label(i);
+ }
+
+ if (lst.count() > 0)
+ {
+ bool ok = false;
+ QString res = KInputDialog::getItem(
+ i18n( "Add Action to Toolbar" ),
+ i18n( "Please select a toolbar:" ), lst, 0, false, &ok, this );
+
+ if (ok)
+ {
+ toolbarListBox->insertItem(res);
+ toolbarListBox->sort();
+ buttonApply->setEnabled(true);
+ }
+ }
+}
+
+void ActionConfigDialog::slotRemoveContainerToolbar()
+{
+ int item = toolbarListBox->currentItem();
+ toolbarListBox->removeItem(item);
+ item = (item > 0) ? item - 1 : 0;
+ toolbarListBox->setCurrentItem(item);
+ toolbarListBox->setSelected(item, true);
+ buttonApply->setEnabled(true);
+}
+
+void ActionConfigDialog::slotToggled(bool)
+{
+ buttonApply->setEnabled(true);
+}
+
+void ActionConfigDialog::slotTextChanged()
+{
+ buttonApply->setEnabled(true);
+}
+
+void ActionConfigDialog::slotTextChanged(const QString&)
+{
+ buttonApply->setEnabled(true);
+}
+
+void ActionConfigDialog::createScriptAction(const QString& a_name, const QString& a_script)
+{
+ actionTreeView->setCurrentItem(allActionsItem);
+ slotNewAction();
+ typeCombo->setCurrentItem(1);
+ scriptPath->setText(a_script);
+ lineText->setText(a_name);
+}
+
+#include "actionconfigdialog.moc"