diff options
Diffstat (limited to 'kxkb/kxkbconfig.h')
-rw-r--r-- | kxkb/kxkbconfig.h | 122 |
1 files changed, 122 insertions, 0 deletions
diff --git a/kxkb/kxkbconfig.h b/kxkb/kxkbconfig.h new file mode 100644 index 000000000..82fe610c9 --- /dev/null +++ b/kxkb/kxkbconfig.h @@ -0,0 +1,122 @@ +// +// C++ Interface: kxkbconfig +// +// Description: +// +// +// Author: Andriy Rysin <rysin@kde.org>, (C) 2006 +// +// Copyright: See COPYING file that comes with this distribution +// +// +#ifndef KXKBCONFIG_H +#define KXKBCONFIG_H + +#include <tqstring.h> +#include <tqstringlist.h> +#include <tqptrqueue.h> +#include <tqmap.h> + + +/* Utility classes for per-window/per-application layout implementation +*/ +enum SwitchingPolicy { + SWITCH_POLICY_GLOBAL = 0, + SWITCH_POLICY_WIN_CLASS = 1, + SWITCH_POLICY_WINDOW = 2, + SWITCH_POLICY_COUNT = 3 +}; + + + +inline TQString createPair(TQString key, TQString value) +{ + if( value.isEmpty() ) + return key; + return TQString("%1(%2)").arg(key, value); +} + +struct LayoutUnit { + TQString layout; + TQString variant; + TQString includeGroup; + TQString displayName; + int defaultGroup; + + LayoutUnit() {} + + LayoutUnit(TQString layout_, TQString variant_): + layout(layout_), + variant(variant_) + {} + + LayoutUnit(TQString pair) { + setFromPair( pair ); + } + + void setFromPair(const TQString& pair) { + layout = parseLayout(pair); + variant = parseVariant(pair); + } + + TQString toPair() const { + return createPair(layout, variant); + } + + bool operator<(const LayoutUnit& lu) const { + return layout<lu.layout || + (layout==lu.layout && variant<lu.variant); + } + + bool operator!=(const LayoutUnit& lu) const { + return layout!=lu.layout || variant!=lu.variant; + } + + bool operator==(const LayoutUnit& lu) const { +// kdDebug() << layout << "==" << lu.layout << "&&" << variant << "==" << lu.variant << endl; + return layout==lu.layout && variant==lu.variant; + } + +//private: + static const TQString parseLayout(const TQString &layvar); + static const TQString parseVariant(const TQString &layvar); +}; + +extern const LayoutUnit DEFAULT_LAYOUT_UNIT; +extern const char* DEFAULT_MODEL; + + +class KxkbConfig +{ +public: + enum { LOAD_INIT_OPTIONS, LOAD_ACTIVE_OPTIONS, LOAD_ALL }; + + bool m_useKxkb; + bool m_showSingle; + bool m_showFlag; + bool m_enableXkbOptions; + bool m_resetOldOptions; + SwitchingPolicy m_switchingPolicy; + bool m_stickySwitching; + int m_stickySwitchingDepth; + + TQString m_model; + TQString m_options; + TQValueList<LayoutUnit> m_layouts; + + LayoutUnit getDefaultLayout(); + + bool load(int loadMode); + void save(); + void setDefaults(); + + TQStringList getLayoutStringList(/*bool compact*/); + static TQString getDefaultDisplayName(const TQString& code_); + static TQString getDefaultDisplayName(const LayoutUnit& layoutUnit, bool single=false); + +private: + static const TQMap<TQString, TQString> parseIncludesMap(const TQStringList& pairList); +}; + + +#endif |