/* This file is part of the KDE libraries Copyright (C) 1998 Mark Donohoe Copyright (C) 1997 Nicolas Hadacek Copyright (C) 1998 Matthias Ettrich Copyright (C) 2001 Ellis Whitehead Copyright (C) 2006 Hamish Rodda Copyright (C) 2007 Roberto Raggi Copyright (C) 2007 Andreas Hartmetz Copyright (C) 2008 Michael Jansen Copyright (C) 2008 Alexander Dymo Copyright (C) 2009 Chani Armitage This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include "kshortcutsdialog.h" #include "kshortcutsdialog_p.h" #include "kshortcutschemeshelper_p.h" #include "kdebug.h" #include "klocale.h" #include #include #include #include #include #include /************************************************************************/ /* KShortcutsDialog */ /* */ /* Originally by Nicolas Hadacek */ /* */ /* Substantially revised by Mark Donohoe */ /* */ /* And by Espen Sand 1999-10-19 */ /* (by using KDialog there is almost no code left ;) */ /* */ /************************************************************************/ class KShortcutsDialog::KShortcutsDialogPrivate { public: KShortcutsDialogPrivate(KShortcutsDialog *q): q(q), m_keyChooser(0), m_schemeEditor(0) {} QList m_collections; void changeShortcutScheme(const QString &scheme) { if (m_keyChooser->isModified() && KMessageBox::questionYesNo(q, i18n("The current shortcut scheme is modified. Save before switching to the new one?")) == KMessageBox::Yes) { m_keyChooser->save(); } else { m_keyChooser->undoChanges(); } QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); m_keyChooser->clearCollections(); foreach (KActionCollection *collection, m_collections) { // passing an empty stream forces the clients to reread the XML KXMLGUIClient *client = const_cast(collection->parentGUIClient()); if (client) { client->setXMLGUIBuildDocument( QDomDocument() ); } } //get xmlguifactory if (!m_collections.isEmpty()) { const KXMLGUIClient *client = m_collections.first()->parentGUIClient(); if (client) { KXMLGUIFactory *factory = client->factory(); if (factory) { factory->changeShortcutScheme(scheme); } } } foreach (KActionCollection *collection, m_collections) { m_keyChooser->addCollection(collection); } QApplication::restoreOverrideCursor(); } void undoChanges() { m_keyChooser->undoChanges(); } void save() { m_keyChooser->save(); emit q->saved(); } KShortcutsDialog *q; KShortcutsEditor* m_keyChooser; // ### move KShortcutSchemesEditor* m_schemeEditor; }; KShortcutsDialog::KShortcutsDialog( KShortcutsEditor::ActionTypes types, KShortcutsEditor::LetterShortcuts allowLetterShortcuts, QWidget *parent ) : KDialog( parent ), d(new KShortcutsDialogPrivate(this)) { setCaption(i18n("Configure Shortcuts")); setButtons(Details|Reset|Ok|Cancel|KDialog::User1); setButtonText(KDialog::User1, i18n("Print")); setButtonIcon(KDialog::User1, KIcon("document-print")); setModal(true); d->m_keyChooser = new KShortcutsEditor( this, types, allowLetterShortcuts ); setMainWidget( d->m_keyChooser ); setButtonText(Reset,i18n("Reset to Defaults")); d->m_schemeEditor = new KShortcutSchemesEditor(this); connect( d->m_schemeEditor, SIGNAL(shortcutsSchemeChanged(QString)), this, SLOT(changeShortcutScheme(QString)) ); setDetailsWidget(d->m_schemeEditor); connect( this, SIGNAL(resetClicked()), d->m_keyChooser, SLOT(allDefault()) ); connect( this, SIGNAL(user1Clicked()), d->m_keyChooser, SLOT(printShortcuts()) ); connect(this, SIGNAL(cancelClicked()), SLOT(undoChanges())); KConfigGroup group( KGlobal::config(), "KShortcutsDialog Settings" ); resize( group.readEntry( "Dialog Size", sizeHint() ) ); } KShortcutsDialog::~KShortcutsDialog() { KConfigGroup group( KGlobal::config(), "KShortcutsDialog Settings" ); group.writeEntry( "Dialog Size", size(), KConfigGroup::Persistent|KConfigGroup::Global ); delete d; } void KShortcutsDialog::addCollection(KActionCollection *collection, const QString &title) { d->m_keyChooser->addCollection(collection, title); d->m_collections << collection; } QList KShortcutsDialog::actionCollections() const { return d->m_collections; } //FIXME should there be a setSaveSettings method? bool KShortcutsDialog::configure(bool saveSettings) { disconnect(this, SIGNAL(okClicked()), this, SLOT(save())); if (saveSettings) { connect(this, SIGNAL(okClicked()), this, SLOT(save())); } if (isModal()) { int retcode = exec(); return retcode; } else { show(); return false; } } QSize KShortcutsDialog::sizeHint() const { return QSize(600, 480); } int KShortcutsDialog::configure(KActionCollection *collection, KShortcutsEditor::LetterShortcuts allowLetterShortcuts, QWidget *parent, bool saveSettings) { kDebug(125) << "KShortcutsDialog::configureKeys( KActionCollection*, " << saveSettings << " )"; KShortcutsDialog dlg(KShortcutsEditor::AllActions, allowLetterShortcuts, parent); dlg.d->m_keyChooser->addCollection(collection); return dlg.configure(saveSettings); } #include "moc_kshortcutsdialog.cpp" #include "moc_kshortcutsdialog_p.cpp" //kate: space-indent on; indent-width 4; replace-tabs on;tab-width 4;