Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

KeyRepeater.cpp

Go to the documentation of this file.
00001 #include "KeyRepeater.h"
00002 
00003 KeyRepeater::KeyRepeater()
00004 {
00005         qDebug("KeyRepeater::KeyRepeater()");
00006         m_pTimer = new QTimer(this);
00007         connect(m_pTimer, SIGNAL(timeout()), this, SLOT(autoRepeat()));
00008         init();
00009 }
00010 
00011 KeyRepeater::~KeyRepeater()
00012 {
00013         qDebug("KeyRepeater::~KeyRepeater()");
00014         delete m_pTimer;
00015 }
00016 
00017 void KeyRepeater::start(int unicode, int keycode, int modifiers)
00018 {
00019         m_unicode = unicode;
00020         m_keycode = keycode;
00021         m_modifiers = modifiers;
00022         if(m_mode == ENABLE){
00023                 m_pTimer->stop();
00024                 if(isRepeatable(keycode)){
00025                         /* repeater start */
00026                         m_pTimer->start(m_repeatdelay, TRUE);
00027                 }
00028         }
00029 }
00030 
00031 void KeyRepeater::stop(int keycode)
00032 {
00033         if(keycode == 0
00034                 || keycode == m_keycode
00035                 || isRepeatable(keycode) == false){
00036                 m_pTimer->stop();
00037         }
00038 }
00039 
00040 void KeyRepeater::init()
00041 {
00042         m_mode = ENABLE;
00043         m_repeatdelay = 400;
00044         m_repeatperiod = 60;
00045         m_disablekeys.append(0);
00046         m_disablekeys.append(Qt::Key_Escape);
00047         m_disablekeys.append(Qt::Key_Shift);
00048         m_disablekeys.append(Qt::Key_Control);
00049         m_disablekeys.append(Qt::Key_Alt);
00050         m_disablekeys.append(Qt::Key_Meta);
00051         for(int i=Qt::Key_F1; i<=Qt::Key_F35; i++){
00052                 m_disablekeys.append(i);
00053         }
00054 }
00055 
00056 void KeyRepeater::clear()
00057 {
00058         m_disablekeys.clear();
00059 }
00060 
00061 void KeyRepeater::reset()
00062 {
00063         clear();
00064         init();
00065 }
00066 
00067 void KeyRepeater::setRepeatable(int keycode, bool enable)
00068 {
00069         if(enable){
00070                 QValueList<int>::Iterator it = m_disablekeys.find(keycode);
00071                 if(it != m_disablekeys.end()){
00072                         m_disablekeys.remove(it);
00073                 }
00074         } else {
00075                 if(m_disablekeys.contains(keycode) == false){
00076                         m_disablekeys.append(keycode);
00077                 }
00078         }
00079 }
00080 
00081 bool KeyRepeater::isRepeatable(int keycode)
00082 {
00083         if(m_disablekeys.contains(keycode)){
00084                 return(false);
00085         } else {
00086                 return(true);
00087         }
00088 }
00089 
00090 void KeyRepeater::autoRepeat()
00091 {
00092         /* key release event */
00093 #if 0
00094         sendKeyEvent(
00095                 m_unicode,
00096                 m_keycode,
00097                 m_modifiers,
00098                 FALSE,
00099                 TRUE);
00100         /* key press event */
00101         sendKeyEvent(
00102                 m_unicode,
00103                 m_keycode,
00104                 m_modifiers,
00105                 TRUE,
00106                 TRUE);
00107 #else
00108         emit keyEvent(
00109                 m_unicode,
00110                 m_keycode,
00111                 m_modifiers,
00112                 FALSE,
00113                 TRUE);
00114         /* key press event */
00115         emit keyEvent(
00116                 m_unicode,
00117                 m_keycode,
00118                 m_modifiers,
00119                 TRUE,
00120                 TRUE);
00121 #endif
00122         /* start auto repeat */
00123         m_pTimer->start(m_repeatperiod);
00124 #if 0
00125         qDebug("autoRepeat[%x][%x][%x]",
00126                 m_unicode,
00127                 m_keycode,
00128                 m_modifiers);
00129 #endif
00130 }
00131 
00132 void KeyRepeater::statistics()
00133 {
00134         qWarning("KeyRepeater::statistics()");
00135         qWarning(" delay[%d] period[%d]", m_repeatdelay, m_repeatperiod);
00136         for(QValueList<int>::Iterator it=m_disablekeys.begin();
00137                         it!=m_disablekeys.end(); ++it){
00138                 qDebug(" disable[%x]", *it);
00139         }
00140 }

Generated on Sat Nov 5 16:16:43 2005 for OPIE by  doxygen 1.4.2