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
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
00093 #if 0
00094 sendKeyEvent(
00095 m_unicode,
00096 m_keycode,
00097 m_modifiers,
00098 FALSE,
00099 TRUE);
00100
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
00115 emit keyEvent(
00116 m_unicode,
00117 m_keycode,
00118 m_modifiers,
00119 TRUE,
00120 TRUE);
00121 #endif
00122
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 }