KDEUI
kkeyserver.cpp
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #include "kkeyserver.h"
00024
00025 #include <config.h>
00026 #include <klocale.h>
00027 #include <kglobal.h>
00028 #include <kconfig.h>
00029 #include <kconfiggroup.h>
00030
00031 namespace KKeyServer {
00032
00033
00034
00035
00036 struct ModInfo
00037 {
00038 int modQt;
00039 const char* psName;
00040 QString* sLabel;
00041 };
00042
00043
00044
00045
00046
00047
00048
00049 #define KEYCTXT "keyboard-key-name"
00050 static ModInfo g_rgModInfo[4] =
00051 {
00052 { Qt::SHIFT, "Shift", 0 },
00053 { Qt::CTRL, "Ctrl", 0 },
00054 { Qt::ALT, "Alt", 0 },
00055 { Qt::META, "Meta", 0 }
00056 };
00057
00058
00059
00060
00061 static bool g_bInitializedKKeyLabels;
00062 static bool g_bMacLabels;
00063
00064 static void intializeKKeyLabels()
00065 {
00066 KConfigGroup cg( KGlobal::config(), "Keyboard" );
00067 g_rgModInfo[0].sLabel = new QString( cg.readEntry( "Label Shift", i18nc(KEYCTXT, g_rgModInfo[0].psName) ) );
00068 g_rgModInfo[1].sLabel = new QString( cg.readEntry( "Label Ctrl", i18nc(KEYCTXT, g_rgModInfo[1].psName) ) );
00069 g_rgModInfo[2].sLabel = new QString( cg.readEntry( "Label Alt", i18nc(KEYCTXT, g_rgModInfo[2].psName) ) );
00070 g_rgModInfo[3].sLabel = new QString( cg.readEntry( "Label Win", i18nc(KEYCTXT, g_rgModInfo[3].psName) ) );
00071 g_bMacLabels = (*g_rgModInfo[2].sLabel == "Command");
00072 g_bInitializedKKeyLabels = true;
00073
00074 }
00075
00076
00077
00078
00079
00080 static QString modToString( uint mod, bool bUserSpace )
00081 {
00082 if( bUserSpace && !g_bInitializedKKeyLabels )
00083 intializeKKeyLabels();
00084
00085 QString s;
00086 for( int i = 3; i >= 0; i-- ) {
00087 if( mod & g_rgModInfo[i].modQt ) {
00088 if( !s.isEmpty() )
00089 s += '+';
00090 s += (bUserSpace)
00091 ? *g_rgModInfo[i].sLabel
00092 : QString(g_rgModInfo[i].psName);
00093 }
00094 }
00095 return s;
00096 }
00097
00098 QString modToStringUser( uint mod )
00099 {
00100 return modToString( mod, true );
00101 }
00102
00103 uint stringUserToMod( const QString& mod )
00104 {
00105 QString s;
00106 for( int i = 3; i >= 0; i-- ) {
00107 if( mod.toLower() == g_rgModInfo[i].sLabel->toLower())
00108 return g_rgModInfo[i].modQt;
00109 }
00110 return 0;
00111 }
00112
00113
00114 }