diff options
| author | Michele Calgaro <michele.calgaro@yahoo.it> | 2025-08-28 22:44:34 +0900 | 
|---|---|---|
| committer | Michele Calgaro <michele.calgaro@yahoo.it> | 2025-08-31 23:25:26 +0900 | 
| commit | 086012dcad8a976a0dabbb7cbc20c9cb612cdfa9 (patch) | |
| tree | 56c9bfcfd7cd13b17707dc8862f26932e9814973 /src/app/Dialogs/krkeydialog.cpp | |
| parent | 409e7f624d202c7f96b4d0ab2da1834135169f8b (diff) | |
| download | krusader-086012dcad8a976a0dabbb7cbc20c9cb612cdfa9.tar.gz krusader-086012dcad8a976a0dabbb7cbc20c9cb612cdfa9.zip | |
Restructure source folders
Signed-off-by: Michele Calgaro <michele.calgaro@yahoo.it>
Diffstat (limited to 'src/app/Dialogs/krkeydialog.cpp')
| -rw-r--r-- | src/app/Dialogs/krkeydialog.cpp | 157 | 
1 files changed, 157 insertions, 0 deletions
| diff --git a/src/app/Dialogs/krkeydialog.cpp b/src/app/Dialogs/krkeydialog.cpp new file mode 100644 index 0000000..30f5dda --- /dev/null +++ b/src/app/Dialogs/krkeydialog.cpp @@ -0,0 +1,157 @@ +// +// C++ Implementation: krkeydialog +// +// Description:  +// +// +// Author: Jonas Bähr <http://jonas-baehr.de/>, (C) 2006 +// +// Copyright: See COPYING file that comes with this distribution +// +// +#include "krkeydialog.h" + +#include <tqlayout.h> +#include <tqwhatsthis.h> +#include <tdelocale.h> +#include <kpushbutton.h> +#include <tdemessagebox.h> +#include <tdefiledialog.h> +#include <tdeglobal.h> +#include <tdestandarddirs.h> +#include <tdeconfig.h> +#include <tdeactionshortcutlist.h> +#include <kdebug.h> + +#include "../krusader.h" + +//This is the filter in the KFileDialog of Import/Export: +static const char* FILE_FILTER = I18N_NOOP("*.keymap|Krusader keymaps\n*|all files"); + + +KrKeyDialog::KrKeyDialog( TQWidget * parent ) : KKeyDialog( false /* allow letter shortcuts */, parent ) { +   insert( krApp->actionCollection() ); + +   // HACK This fetches the layout of the buttonbox from KDialogBase, although it is not accessable with KDialogBase's API +   // None the less it's quite save to use since this implementation hasn't changed since KDE-3.3 (I haven't looked at earlier +   // versions since we don't support them) and now all work is done in KDE-4. +   TQWidget* buttonBox = static_cast<TQWidget*>( actionButton(KDialogBase::Ok)->parent() ); +   TQBoxLayout* buttonBoxLayout = static_cast<TQBoxLayout*>( buttonBox->layout() ); + +   KPushButton* importButton = new KPushButton( i18n("Import shortcuts"), buttonBox ); +   TQWhatsThis::add( importButton, i18n( "Load a keybinding profile, e.g., total_commander.keymap" ) ); +   buttonBoxLayout->insertWidget( 1, importButton ); // the defaults-button should stay on position 0 +   connect( importButton, TQ_SIGNAL( clicked() ), TQ_SLOT( slotImportShortcuts() ) ); + +   KPushButton* exportButton = new KPushButton( i18n("Export shortcuts"), buttonBox ); +   TQWhatsThis::add( exportButton, i18n( "Save current keybindings in a keymap file." ) ); +   buttonBoxLayout->insertWidget( 2, exportButton ); +   connect( exportButton, TQ_SIGNAL( clicked() ), TQ_SLOT( slotExportShortcuts() ) ); + +   // Also quite HACK 'isch but unfortunately KKeyDialog don't giveus access to this widget +   _chooser = static_cast<KKeyChooser*>( mainWidget() ); + +   configure( true /* SaveSettings */ ); // this runs the dialog +} + +KrKeyDialog::~KrKeyDialog() { +} + +void KrKeyDialog::slotImportShortcuts() { +   // find $TDEDIR/share/apps/krusader +   TQString basedir = TDEGlobal::dirs()->findResourceDir("appdata", "total_commander.keymap"); +   // let the user select a file to load +   TQString filename = KFileDialog::getOpenFileName(basedir, i18n(FILE_FILTER), 0, i18n("Select a keymap file")); +   if ( filename.isEmpty() ) +      return; + +   TDEConfig conf( filename, true /*read only*/, false /*no KDEGlobal*/ ); +   if ( ! conf.hasGroup("Shortcuts") ) { +      int answer = KMessageBox::warningContinueCancel( this,	//parent +		i18n("This file does not seem to be a valid keymap.\n" +			"It may be a keymap using a legacy format. The import can't be undone!"),	//text +		i18n("Try to import legacy format?"), 	//caption +		i18n("Import anyway"),	//Label for the continue-button +		"Confirm Import Legacy Shortcuts"	//dontAskAgainName (for the config-file) +	); +      if ( answer == KMessageBox::Continue ) +         importLegacyShortcuts( filename ); +      else +         return; +   } +   else +      _chooser->syncToConfig( "Shortcuts", &conf, false /* don't delete shortcuts of actions not listed in conf */ ); +} + +void KrKeyDialog::importLegacyShortcuts( const TQString& file ) { +/* + * This is basicaly Shie's code. It's copied from Kronfigurator's loog&feel page and adapted to the dialog + */ +	// check if there's an info file with the keymap +	TQFile info(file+".info"); +	if (info.open(IO_ReadOnly)) { +		TQTextStream stream(&info); +		TQStringList infoText = TQStringList::split("\n", stream.read()); +		if (KMessageBox::questionYesNoList(krApp, i18n("The following information was attached to the keymap. Do you really want to import this keymap?"), infoText)!=KMessageBox::Yes) +			return; +	} + +	// ok, import away +	TQFile f(file); +	if (!f.open(IO_ReadOnly)) { +		krOut << "Error opening " << file << endl; +		return; +	} +	char *actionName; +	TQDataStream stream(&f); +	int key; +	TDEAction *action; +	while (!stream.atEnd()) { +		stream >> actionName >> key; +		action = krApp->actionCollection()->action(actionName); +		if (action) { +			action->setShortcut(key); +//			krOut << "set shortcut for " << actionName <<endl; +		} else { +		   krOut << "unknown action " << actionName << endl; +		} +	} +	f.close(); + +	KMessageBox::information( this, // parent +		i18n("Please restart this dialog in order to see the changes"), // text +		i18n("Legacy import completed") // caption +		); +} + +void KrKeyDialog::slotExportShortcuts() { +   TQString filename = KFileDialog::getSaveFileName( TQString(), i18n(FILE_FILTER), 0, i18n("Select a keymap file") ); +   if ( filename.isEmpty() ) +      return; +   TQFile f( filename ); +   if ( f.exists() && +   		KMessageBox::warningContinueCancel( this,  +		i18n("<qt>File <b>%1</b> already exists. Do you really want to overwrite it?</qt>").arg(filename), +		i18n("Warning"), i18n("Overwrite") ) +	!= KMessageBox::Continue) +	return; +   if ( f.open( IO_WriteOnly ) ) +      // This is the only way to detect if the file is writable since we don't get feetback from TDEConfig's sync +      // Additionaly this prevents merging if the file already contains some shortcuts +      f.close(); +   else { +      KMessageBox::error( this, i18n("<qt>Can't open <b>%1</b> for writing!</qt>").arg(filename) ); +      return; +   } + +   TDEConfig conf( filename, false /*read only*/, false /*no KDEGlobal*/ ); + +   // unfortunately we can't use this function since it only writes the actions which are different from default. +   //krApp->actionCollection()->writeShortcutSettings( "Shortcuts", &conf ); +   TDEActionShortcutList list( krApp->actionCollection() ); +   list.writeSettings( "Shortcuts", &conf, true /* write all actions */ ); +   // That does TDEActionShortcutList::writeSettings for us +   //conf.sync(); // write back all changes +} + +#include "krkeydialog.moc" | 
