summaryrefslogtreecommitdiffstats
path: root/kmenuedit/kmenuedit.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kmenuedit/kmenuedit.cpp')
-rw-r--r--kmenuedit/kmenuedit.cpp186
1 files changed, 186 insertions, 0 deletions
diff --git a/kmenuedit/kmenuedit.cpp b/kmenuedit/kmenuedit.cpp
new file mode 100644
index 000000000..ba8d6fc08
--- /dev/null
+++ b/kmenuedit/kmenuedit.cpp
@@ -0,0 +1,186 @@
+/*
+ * Copyright (C) 2000 Matthias Elter <elter@kde.org>
+ * Copyright (C) 2001-2002 Raffaele Sandrini <sandrini@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; 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 <qsplitter.h>
+
+#include <kaction.h>
+#include <kapplication.h>
+#include <kconfig.h>
+#include <kdebug.h>
+#include <kedittoolbar.h>
+#include <kglobal.h>
+#include <klocale.h>
+#include <kmessagebox.h>
+#include <kservice.h>
+#include <kstdaction.h>
+#include <kstdaccel.h>
+
+#include "treeview.h"
+#include "basictab.h"
+#include "kmenuedit.h"
+#include "kmenuedit.moc"
+
+KMenuEdit::KMenuEdit (bool controlCenter, QWidget *, const char *name)
+ : KMainWindow (0, name), m_tree(0), m_basicTab(0), m_splitter(0), m_controlCenter(controlCenter)
+{
+#if 0
+ m_showHidden = config->readBoolEntry("ShowHidden");
+#else
+ m_showHidden = false;
+#endif
+
+ // setup GUI
+ setupActions();
+ slotChangeView();
+}
+
+KMenuEdit::~KMenuEdit()
+{
+ KConfig *config = KGlobal::config();
+ config->setGroup("General");
+ config->writeEntry("SplitterSizes", m_splitter->sizes());
+
+ config->sync();
+}
+
+void KMenuEdit::setupActions()
+{
+ (void)new KAction(i18n("&New Submenu..."), "menu_new", 0, actionCollection(), "newsubmenu");
+ (void)new KAction(i18n("New &Item..."), "filenew", KStdAccel::openNew(), actionCollection(), "newitem");
+ if (!m_controlCenter)
+ (void)new KAction(i18n("New S&eparator"), "menu_new_sep", 0, actionCollection(), "newsep");
+
+ m_actionDelete = 0;
+
+ KStdAction::save(this, SLOT( slotSave() ), actionCollection());
+ KStdAction::quit(this, SLOT( close() ), actionCollection());
+ KStdAction::cut(0, 0, actionCollection());
+ KStdAction::copy(0, 0, actionCollection());
+ KStdAction::paste(0, 0, actionCollection());
+}
+
+void KMenuEdit::setupView()
+{
+ m_splitter = new QSplitter(Horizontal, this);
+ m_tree = new TreeView(m_controlCenter, actionCollection(), m_splitter);
+ m_basicTab = new BasicTab(m_splitter);
+
+ connect(m_tree, SIGNAL(entrySelected(MenuFolderInfo *)),
+ m_basicTab, SLOT(setFolderInfo(MenuFolderInfo *)));
+ connect(m_tree, SIGNAL(entrySelected(MenuEntryInfo *)),
+ m_basicTab, SLOT(setEntryInfo(MenuEntryInfo *)));
+ connect(m_tree, SIGNAL(disableAction()),
+ m_basicTab, SLOT(slotDisableAction() ) );
+
+ connect(m_basicTab, SIGNAL(changed(MenuFolderInfo *)),
+ m_tree, SLOT(currentChanged(MenuFolderInfo *)));
+
+ connect(m_basicTab, SIGNAL(changed(MenuEntryInfo *)),
+ m_tree, SLOT(currentChanged(MenuEntryInfo *)));
+
+ connect(m_basicTab, SIGNAL(findServiceShortcut(const KShortcut&, KService::Ptr &)),
+ m_tree, SLOT(findServiceShortcut(const KShortcut&, KService::Ptr &)));
+
+ // restore splitter sizes
+ KConfig* config = KGlobal::config();
+ QValueList<int> sizes = config->readIntListEntry("SplitterSizes");
+
+ if (sizes.isEmpty())
+ sizes << 1 << 3;
+ m_splitter->setSizes(sizes);
+ m_tree->setFocus();
+
+ setCentralWidget(m_splitter);
+}
+
+void KMenuEdit::slotChangeView()
+{
+#if 0
+ m_showHidden = m_actionShowHidden->isChecked();
+#else
+ m_showHidden = false;
+#endif
+
+ // disabling the updates prevents unnecessary redraws
+ setUpdatesEnabled( false );
+ guiFactory()->removeClient( this );
+
+ delete m_actionDelete;
+
+ m_actionDelete = new KAction(i18n("&Delete"), "editdelete", Key_Delete, actionCollection(), "delete");
+
+ if (!m_splitter)
+ setupView();
+ if (m_controlCenter)
+ setupGUI(KMainWindow::ToolBar|Keys|Save|Create, "kcontroleditui.rc");
+ else
+ setupGUI(KMainWindow::ToolBar|Keys|Save|Create, "kmenueditui.rc");
+
+ m_tree->setViewMode(m_showHidden);
+}
+
+void KMenuEdit::slotSave()
+{
+ m_tree->save();
+}
+
+bool KMenuEdit::queryClose()
+{
+ if (!m_tree->dirty()) return true;
+
+
+ int result;
+ if (m_controlCenter)
+ {
+ result = KMessageBox::warningYesNoCancel(this,
+ i18n("You have made changes to the Control Center.\n"
+ "Do you want to save the changes or discard them?"),
+ i18n("Save Control Center Changes?"),
+ KStdGuiItem::save(), KStdGuiItem::discard() );
+ }
+ else
+ {
+ result = KMessageBox::warningYesNoCancel(this,
+ i18n("You have made changes to the menu.\n"
+ "Do you want to save the changes or discard them?"),
+ i18n("Save Menu Changes?"),
+ KStdGuiItem::save(), KStdGuiItem::discard() );
+ }
+
+ switch(result)
+ {
+ case KMessageBox::Yes:
+ return m_tree->save();
+
+ case KMessageBox::No:
+ return true;
+
+ default:
+ break;
+ }
+ return false;
+}
+
+void KMenuEdit::slotConfigureToolbars()
+{
+ KEditToolbar dlg( factory() );
+
+ dlg.exec();
+}