KDECore
kshortcut.h
Go to the documentation of this file.00001 /* This file is part of the KDE libraries 00002 Copyright (C) 2001,2002 Ellis Whitehead <ellis@kde.org> 00003 00004 This library is free software; you can redistribute it and/or 00005 modify it under the terms of the GNU Library General Public 00006 License as published by the Free Software Foundation; either 00007 version 2 of the License, or (at your option) any later version. 00008 00009 This library is distributed in the hope that it will be useful, 00010 but WITHOUT ANY WARRANTY; without even the implied warranty of 00011 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00012 Library General Public License for more details. 00013 00014 You should have received a copy of the GNU Library General Public License 00015 along with this library; see the file COPYING.LIB. If not, write to 00016 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 00017 Boston, MA 02110-1301, USA. 00018 */ 00019 00020 #ifndef __KSHORTCUT_H 00021 #define __KSHORTCUT_H 00022 00023 #include <qkeysequence.h> 00024 #include <qstring.h> 00025 #include "kdelibs_export.h" 00026 00027 class QKeyEvent; 00028 class KKeyNative; 00029 00040 class KDECORE_EXPORT KKey 00041 { 00042 public: 00047 enum { MOD_FLAG_COUNT = 4 }; 00048 enum { QtWIN = (Qt::META) }; 00053 enum ModFlag { 00054 SHIFT = 0x01, 00055 CTRL = 0x02, 00056 ALT = 0x04, 00057 WIN = 0x08 00058 }; 00059 00066 KKey(); 00067 00073 KKey( int keyQt ); 00074 00079 KKey( const QKeySequence& keySeq ); 00080 00085 KKey( const QKeyEvent* keyEvent ); 00086 00090 KKey( const KKey& key ); 00091 00100 KKey( const QString& key ); 00104 KKey( uint key, uint mod ); 00105 ~KKey(); 00106 00107 // Initialization methods 00112 void clear(); 00113 00120 bool init( int keyQt ); 00121 00127 bool init( const QKeySequence& keySeq ); 00128 00134 bool init( const QKeyEvent* keyEvent ); 00135 00141 bool init( const KKey& key ); 00142 00152 bool init( const QString& key); 00153 00157 bool init( uint key, uint mod ); 00158 00162 KKey& operator =( const KKey& key ) 00163 { init( key ); return *this; } 00164 00165 // Query methods. 00173 bool isNull() const; 00174 00178 uint sym() const; 00182 uint modFlags() const; 00183 00184 // Comparison Methods 00195 int compare( const KKey& key ) const; 00196 00201 bool operator == ( const KKey& key ) const 00202 { return compare( key ) == 0; } 00207 bool operator != ( const KKey& key ) const 00208 { return compare( key ) != 0; } 00213 bool operator < ( const KKey& key ) const 00214 { return compare( key ) < 0; } 00215 00216 // Conversion methods. 00222 int keyCodeQt() const; 00223 00231 QString toString() const; 00232 00237 QString toStringInternal() const; 00238 00239 // Operation methods 00243 void simplify(); 00244 00251 static KKey& null(); 00252 00258 static QString modFlagLabel( ModFlag f ); 00259 00260 private: 00261 /* 00262 * Under X11, m_key will hold an X11 key symbol. 00263 * For Qt/Embedded, it will hold the Qt key code. 00264 */ 00271 uint m_sym; 00275 uint m_mod; 00276 00277 private: 00278 friend class KKeyNative; 00279 }; 00280 00288 class KDECORE_EXPORT KKeySequence 00289 { 00290 public: 00292 enum { MAX_KEYS = 4 }; 00293 00300 KKeySequence(); 00301 00306 KKeySequence( const QKeySequence& keySeq ); 00307 00312 KKeySequence( const KKey& key ); 00313 00318 KKeySequence( const KKeyNative& key ); 00319 00324 KKeySequence( const KKeySequence& keySeq ); 00325 00334 KKeySequence( const QString& keySeq ); 00335 00336 ~KKeySequence(); 00337 00343 void clear(); 00344 00350 bool init( const QKeySequence& keySeq ); 00351 00357 bool init( const KKey& key ); 00358 00364 bool init( const KKeyNative& key ); 00365 00371 bool init( const KKeySequence& keySeq ); 00372 00382 bool init( const QString& key ); 00383 00387 KKeySequence& operator =( const KKeySequence& seq ) 00388 { init( seq ); return *this; } 00389 00395 uint count() const; 00396 00405 const KKey& key( uint i ) const; 00406 00410 bool isTriggerOnRelease() const; 00411 00420 bool setKey( uint i, const KKey& key ); 00421 00429 bool isNull() const; 00430 00436 bool startsWith( const KKeySequence& keySeq ) const; 00437 00450 int compare( const KKeySequence& keySeq ) const; 00451 00456 bool operator == ( const KKeySequence& seq ) const 00457 { return compare( seq ) == 0; } 00458 00463 bool operator != ( const KKeySequence& seq ) const 00464 { return compare( seq ) != 0; } 00465 00470 bool operator < ( const KKeySequence& seq ) const 00471 { return compare( seq ) < 0; } 00472 // TODO: consider adding Qt::SequenceMatch matches(...) methods for QKeySequence equivalence 00473 00478 QKeySequence qt() const; 00479 00486 int keyCodeQt() const; 00487 00494 QString toString() const; 00495 00499 QString toStringInternal() const; 00500 00507 static KKeySequence& null(); 00508 00509 protected: 00510 uchar m_nKeys; 00511 uchar m_bTriggerOnRelease; 00512 // BCI: m_rgvar should be renamed to m_rgkey for KDE 4.0 00513 KKey m_rgvar[MAX_KEYS]; 00514 00515 private: 00516 class KKeySequencePrivate* d; 00517 friend class KKeyNative; 00518 }; 00519 00543 class KDECORE_EXPORT KShortcut 00544 { 00545 public: 00550 enum { MAX_SEQUENCES = 2 }; 00551 00558 KShortcut(); 00559 00566 KShortcut( int keyQt ); 00567 00573 KShortcut( const QKeySequence& keySeq ); 00574 00580 KShortcut( const KKey& key ); 00581 00587 KShortcut( const KKeySequence& keySeq ); 00588 00593 KShortcut( const KShortcut& shortcut ); 00594 00602 KShortcut( const char* shortcut ); 00603 00611 KShortcut( const QString& shortcut ); 00612 ~KShortcut(); 00613 00619 void clear(); 00620 00627 bool init( int keyQt ); 00628 00633 bool init( const QKeySequence& keySeq ); 00634 00639 bool init( const KKey& key ); 00640 00645 bool init( const KKeySequence& keySeq ); 00646 00651 bool init( const KShortcut& shortcut ); 00652 00660 bool init( const QString& shortcut ); 00661 00665 KShortcut& operator =( const KShortcut& cut ) 00666 { init( cut ); return *this; } 00667 00674 uint count() const; 00675 00683 const KKeySequence& seq( uint i ) const; 00684 00692 int keyCodeQt() const; 00693 00701 bool isNull() const; 00702 00716 int compare( const KShortcut& shortcut ) const; 00717 00722 bool operator == ( const KShortcut& cut ) const 00723 { return compare( cut ) == 0; } 00724 00729 bool operator != ( const KShortcut& cut ) const 00730 { return compare( cut ) != 0; } 00731 00736 bool operator < ( const KShortcut& cut ) const 00737 { return compare( cut ) < 0; } 00738 00745 bool contains( const KKey& key ) const; 00746 00753 bool contains( const KKeyNative& key ) const; 00754 00760 bool contains( const KKeySequence& keySeq ) const; 00761 00770 bool setSeq( uint i, const KKeySequence& keySeq ); 00771 00781 bool append( const KKeySequence& keySeq ); 00782 00788 void remove( const KKeySequence& keySeq ); 00789 00798 bool append( const KKey& spec ); 00799 00807 bool append( const KShortcut& cut ); 00808 00813 operator QKeySequence () const; 00814 00822 QString toString() const; 00823 00827 QString toStringInternal( const KShortcut* pcutDefault = 0 ) const; 00828 00835 static KShortcut& null(); 00836 00837 protected: 00838 uint m_nSeqs; 00839 KKeySequence m_rgseq[MAX_SEQUENCES]; 00840 00841 private: 00842 class KShortcutPrivate* d; 00843 friend class KKeyNative; 00844 00845 #ifndef KDE_NO_COMPAT 00846 public: 00847 operator int () const { return keyCodeQt(); } 00848 #endif 00849 }; 00850 00851 #endif // __KSHORTCUT_H