/* * 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 <tqsplitter.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, TQWidget *, 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, TQT_SLOT( slotSave() ), actionCollection()); KStdAction::quit(this, TQT_SLOT( close() ), actionCollection()); KStdAction::cut(0, 0, actionCollection()); KStdAction::copy(0, 0, actionCollection()); KStdAction::paste(0, 0, actionCollection()); } void KMenuEdit::setupView() { m_splitter = new TQSplitter(Horizontal, this); m_tree = new TreeView(m_controlCenter, actionCollection(), m_splitter); m_basicTab = new BasicTab(m_splitter); connect(m_tree, TQT_SIGNAL(entrySelected(MenuFolderInfo *)), m_basicTab, TQT_SLOT(setFolderInfo(MenuFolderInfo *))); connect(m_tree, TQT_SIGNAL(entrySelected(MenuEntryInfo *)), m_basicTab, TQT_SLOT(setEntryInfo(MenuEntryInfo *))); connect(m_tree, TQT_SIGNAL(disableAction()), m_basicTab, TQT_SLOT(slotDisableAction() ) ); connect(m_basicTab, TQT_SIGNAL(changed(MenuFolderInfo *)), m_tree, TQT_SLOT(currentChanged(MenuFolderInfo *))); connect(m_basicTab, TQT_SIGNAL(changed(MenuEntryInfo *)), m_tree, TQT_SLOT(currentChanged(MenuEntryInfo *))); connect(m_basicTab, TQT_SIGNAL(findServiceShortcut(const KShortcut&, KService::Ptr &)), m_tree, TQT_SLOT(findServiceShortcut(const KShortcut&, KService::Ptr &))); // restore splitter sizes KConfig* config = KGlobal::config(); TQValueList<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(); }