diff options
author | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 |
---|---|---|
committer | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 |
commit | 4aed2c8219774f5d797760606b8489a92ddc5163 (patch) | |
tree | 3f8c130f7d269626bf6a9447407ef6c35954426a /khotkeys/shared/settings.cpp | |
download | tdebase-4aed2c8219774f5d797760606b8489a92ddc5163.tar.gz tdebase-4aed2c8219774f5d797760606b8489a92ddc5163.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/kdebase@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'khotkeys/shared/settings.cpp')
-rw-r--r-- | khotkeys/shared/settings.cpp | 265 |
1 files changed, 265 insertions, 0 deletions
diff --git a/khotkeys/shared/settings.cpp b/khotkeys/shared/settings.cpp new file mode 100644 index 000000000..829c8521a --- /dev/null +++ b/khotkeys/shared/settings.cpp @@ -0,0 +1,265 @@ +/**************************************************************************** + + KHotKeys + + Copyright (C) 1999-2001 Lubos Lunak <l.lunak@kde.org> + + Distributed under the terms of the GNU General Public License version 2. + +****************************************************************************/ + +#define _SETTINGS_CPP_ + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +#include "settings.h" + +#include <kconfig.h> +#include <kdebug.h> +#include <klocale.h> +#include <kaccel.h> +#include <kglobal.h> +#include <kmessagebox.h> + +#include "triggers.h" +#include "conditions.h" +#include "action_data.h" + +namespace KHotKeys +{ + +// Settings + +Settings::Settings() + : actions( NULL ), gestures_exclude( NULL ) + { + } + +bool Settings::read_settings( bool include_disabled_P ) + { + KConfig cfg( KHOTKEYS_CONFIG_FILE, true ); + return read_settings( cfg, include_disabled_P, ImportNone ); + } + +bool Settings::import( KConfig& cfg_P, bool ask_P ) + { + return read_settings( cfg_P, true, ask_P ? ImportAsk : ImportSilent ); + } + +bool Settings::read_settings( KConfig& cfg_P, bool include_disabled_P, ImportType import_P ) + { + if( actions == NULL ) + actions = new Action_data_group( NULL, "should never see", "should never see", + NULL, Action_data_group::SYSTEM_ROOT, true ); + if( cfg_P.groupList().count() == 0 ) // empty + return false; + cfg_P.setGroup( "Main" ); // main group + if( import_P == ImportNone ) // reading main cfg file + already_imported = cfg_P.readListEntry( "AlreadyImported" ); + else + { + QString import_id = cfg_P.readEntry( "ImportId" ); + if( !import_id.isEmpty()) + { + if( already_imported.contains( import_id )) + { + if( import_P == ImportSilent + || KMessageBox::warningContinueCancel( NULL, + i18n( "This \"actions\" file has already been imported before. " + "Are you sure you want to import it again?" )) != KMessageBox::Continue ) + return true; // import "successful" + } + else + already_imported.append( import_id ); + } + else + { + if( import_P != ImportSilent + && KMessageBox::warningContinueCancel( NULL, + i18n( "This \"actions\" file has no ImportId field and therefore it cannot be determined " + "whether or not it has been imported already. Are you sure you want to import it?" )) + == KMessageBox::Cancel ) + return true; + } + } + int version = cfg_P.readNumEntry( "Version", -1234576 ); + switch( version ) + { + case 1: + read_settings_v1( cfg_P ); + break; + case 2: + read_settings_v2( cfg_P, include_disabled_P ); + break; + default: + kdWarning( 1217 ) << "Unknown cfg. file version\n"; + return false; + case -1234576: // no config file + if( import_P ) // if importing, this is an error + return false; + break; + } + if( import_P != ImportNone ) + return true; // don't read global settings + cfg_P.setGroup( "Main" ); // main group + daemon_disabled = cfg_P.readBoolEntry( "Disabled", false ); + cfg_P.setGroup( "Gestures" ); + gestures_disabled_globally = cfg_P.readBoolEntry( "Disabled", true ); + gesture_mouse_button = cfg_P.readNumEntry( "MouseButton", 2 ); + gesture_mouse_button = KCLAMP( gesture_mouse_button, 2, 9 ); + gesture_timeout = cfg_P.readNumEntry( "Timeout", 300 ); + cfg_P.setGroup( "GesturesExclude" ); + delete gestures_exclude; + gestures_exclude = new Windowdef_list( cfg_P ); + cfg_P.setGroup( "Voice" ); + voice_shortcut=KShortcut( cfg_P.readEntry("Shortcut" , "") ); + return true; + } + +void Settings::write_settings() + { + KConfig cfg( KHOTKEYS_CONFIG_FILE, false ); +// CHECKME smazat stare sekce ? + QStringList groups = cfg.groupList(); + for( QStringList::ConstIterator it = groups.begin(); + it != groups.end(); + ++it ) + cfg.deleteGroup( *it ); + cfg.setGroup( "Main" ); // main group + cfg.writeEntry( "Version", 2 ); // now it's version 2 cfg. file + cfg.writeEntry( "AlreadyImported", already_imported ); + cfg.setGroup( "Data" ); + int cnt = write_actions_recursively_v2( cfg, actions, true ); + cfg.setGroup( "Main" ); + cfg.writeEntry( "Autostart", cnt != 0 && !daemon_disabled ); + cfg.writeEntry( "Disabled", daemon_disabled ); + cfg.setGroup( "Gestures" ); + cfg.writeEntry( "Disabled", gestures_disabled_globally ); + cfg.writeEntry( "MouseButton", gesture_mouse_button ); + cfg.writeEntry( "Timeout", gesture_timeout ); + if( gestures_exclude != NULL ) + { + cfg.setGroup( "GesturesExclude" ); + gestures_exclude->cfg_write( cfg ); + } + else + cfg.deleteGroup( "GesturesExclude" ); + cfg.setGroup( "Voice" ); + cfg.writeEntry("Shortcut" , voice_shortcut.toStringInternal() ); + + } + + +// return value means the number of enabled actions written in the cfg file +// i.e. 'Autostart' for value > 0 should be on +int Settings::write_actions_recursively_v2( KConfig& cfg_P, Action_data_group* parent_P, bool enabled_P ) + { + int enabled_cnt = 0; + QString save_cfg_group = cfg_P.group(); + int cnt = 0; + for( Action_data_group::Iterator it = parent_P->first_child(); + it; + ++it ) + { + ++cnt; + if( enabled_P && (*it)->enabled( true )) + ++enabled_cnt; + cfg_P.setGroup( save_cfg_group + "_" + QString::number( cnt )); + ( *it )->cfg_write( cfg_P ); + Action_data_group* grp = dynamic_cast< Action_data_group* >( *it ); + if( grp != NULL ) + enabled_cnt += write_actions_recursively_v2( cfg_P, grp, enabled_P && (*it)->enabled( true )); + } + cfg_P.setGroup( save_cfg_group ); + cfg_P.writeEntry( "DataCount", cnt ); + return enabled_cnt; + } + +void Settings::read_settings_v2( KConfig& cfg_P, bool include_disabled_P ) + { + cfg_P.setGroup( "Data" ); + read_actions_recursively_v2( cfg_P, actions, include_disabled_P ); + } + +void Settings::read_actions_recursively_v2( KConfig& cfg_P, Action_data_group* parent_P, + bool include_disabled_P ) + { + QString save_cfg_group = cfg_P.group(); + int cnt = cfg_P.readNumEntry( "DataCount" ); + for( int i = 1; + i <= cnt; + ++i ) + { + cfg_P.setGroup( save_cfg_group + "_" + QString::number( i )); + if( include_disabled_P || Action_data_base::cfg_is_enabled( cfg_P )) + { + Action_data_base* new_action = Action_data_base::create_cfg_read( cfg_P, parent_P ); + Action_data_group* grp = dynamic_cast< Action_data_group* >( new_action ); + if( grp != NULL ) + read_actions_recursively_v2( cfg_P, grp, include_disabled_P ); + } + } + cfg_P.setGroup( save_cfg_group ); + } + +// backward compatibility +void Settings::read_settings_v1( KConfig& cfg_P ) + { + int sections = cfg_P.readNumEntry( "Num_Sections", 0 ); + Action_data_group* menuentries = NULL; + for( Action_data_group::Iterator it( actions->first_child()); + *it; + ++it ) + { + Action_data_group* tmp = dynamic_cast< Action_data_group* >( *it ); + if( tmp == NULL ) + continue; + if( tmp->system_group() == Action_data_group::SYSTEM_MENUENTRIES ) + { + menuentries = tmp; + break; + } + } + for( int sect = 1; + sect <= sections; + ++sect ) + { + QString group = QString( "Section%1" ).arg( sect ); + if( !cfg_P.hasGroup( group )) + continue; + cfg_P.setGroup( group ); + QString name = cfg_P.readEntry( "Name" ); + if( name.isNull() ) + continue; + QString shortcut = cfg_P.readEntry( "Shortcut" ); + if( shortcut.isNull() ) + continue; + QString run = cfg_P.readEntry( "Run" ); + if( run.isNull() ) + continue; + bool menuentry = cfg_P.readBoolEntry( "MenuEntry", false ); + // CHECKME tohle pridavani az pak je trosku HACK + if( menuentry ) + { + if( menuentries == NULL ) + { + menuentries = new Action_data_group( actions, + i18n( MENU_EDITOR_ENTRIES_GROUP_NAME ), + i18n( "These entries were created using Menu Editor." ), NULL, + Action_data_group::SYSTEM_MENUENTRIES, true ); + menuentries->set_conditions( new Condition_list( "", menuentries )); + } + ( void ) new Menuentry_shortcut_action_data( menuentries, name, "", + KShortcut( shortcut ), run ); + } + else + { + ( void ) new Command_url_shortcut_action_data( actions, name, "", + KShortcut( shortcut ), run ); + } + } + } + +} // namespace KHotKeys |