00001 #include "KHCWidget.h"
00002
00003 KHCWidget::KHCWidget(QWidget* parent, const char* name, WFlags fl)
00004 : KHCWidgetBase(parent, name, fl)
00005 {
00006 m_isEnable = true;
00007 setLayout();
00008 setHandler();
00009
00010 txtOrgKey->installEventFilter(this);
00011 txtMapKey->installEventFilter(this);
00012 }
00013
00014 KHCWidget::~KHCWidget()
00015 {
00016 }
00017
00018 void KHCWidget::setLayout()
00019 {
00020 QBoxLayout* topLayout = new QVBoxLayout(this, 5);
00021
00022 QBoxLayout* orgLayout1 = new QHBoxLayout(topLayout);
00023 orgLayout1->addWidget(lblOriginal);
00024 orgLayout1->addWidget(txtOrgKey);
00025
00026 QBoxLayout* orgLayout2 = new QHBoxLayout(topLayout);
00027 orgLayout2->addWidget(lblOrgK);
00028 orgLayout2->addWidget(lblOrgKeycode);
00029 #if 0
00030 orgLayout2->addWidget(lblOrgM);
00031 orgLayout2->addWidget(lblOrgModifiers);
00032 #endif
00033 orgLayout2->addWidget(lblOrgU);
00034 orgLayout2->addWidget(lblOrgUnicode);
00035 orgLayout2->addWidget(chkOrgShift);
00036 orgLayout2->addWidget(chkOrgCtrl);
00037 orgLayout2->addWidget(chkOrgAlt);
00038
00039 QBoxLayout* mapLayout1 = new QHBoxLayout(topLayout);
00040 mapLayout1->addWidget(lblMapping);
00041 mapLayout1->addWidget(txtMapKey);
00042
00043 QBoxLayout* mapLayout2 = new QHBoxLayout(topLayout);
00044 mapLayout2->addWidget(lblMapK);
00045 mapLayout2->addWidget(lblMapKeycode);
00046 #if 0
00047 mapLayout2->addWidget(lblMapM);
00048 mapLayout2->addWidget(lblMapModifiers);
00049 #endif
00050 mapLayout2->addWidget(lblMapU);
00051 mapLayout2->addWidget(lblMapUnicode);
00052 mapLayout2->addWidget(chkMapShift);
00053 mapLayout2->addWidget(chkMapCtrl);
00054 mapLayout2->addWidget(chkMapAlt);
00055
00056 QBoxLayout* btnLayout = new QHBoxLayout(topLayout);
00057 btnLayout->addWidget(btnGen);
00058 btnLayout->addWidget(btnCopy);
00059 btnLayout->addWidget(btnCtrl);
00060
00061 topLayout->addWidget(mleDefine);
00062 }
00063
00064 void KHCWidget::setHandler()
00065 {
00066 connect(btnGen, SIGNAL(clicked()), this, SLOT(onClick_Gen()));
00067 connect(btnCopy, SIGNAL(clicked()), this, SLOT(onClick_Copy()));
00068 connect(btnCtrl, SIGNAL(clicked()), this, SLOT(onClick_Ctrl()));
00069 }
00070
00071 bool KHCWidget::eventFilter(QObject* o, QEvent* e)
00072 {
00073 if(::strcmp(o->name(), "txtOrgKey") == 0){
00074 if(e->type() == QEvent::KeyPress){
00075 QKeyEvent* ke = (QKeyEvent*)e;
00076 if(ke->isAutoRepeat() == false){
00077 onPress_Org(ke);
00078 }
00079 return(true);
00080 }
00081 } else if(::strcmp(o->name(), "txtMapKey") == 0){
00082 if(e->type() == QEvent::KeyPress){
00083 QKeyEvent* ke = (QKeyEvent*)e;
00084 if(ke->isAutoRepeat() == false){
00085 onPress_Map(ke);
00086 }
00087 return(true);
00088 }
00089 }
00090
00091 return QWidget::eventFilter(o, e);
00092 }
00093
00094 void KHCWidget::onPress_Org(QKeyEvent* ke)
00095 {
00096
00097 const QString& name = KeyNames::getName(ke->key());
00098 if(name == QString::null){
00099 lblOrgKeycode->setText(QString::number(ke->key(), 16));
00100 } else {
00101 lblOrgKeycode->setText(name);
00102 }
00103
00104 chkOrgShift->setChecked(ke->state() & Qt::ShiftButton);
00105 chkOrgCtrl->setChecked(ke->state() & Qt::ControlButton);
00106 chkOrgAlt->setChecked(ke->state() & Qt::AltButton);
00107
00108
00109 if(ke->text()[0].isPrint()){
00110 lblOrgUnicode->setText(ke->text());
00111 } else {
00112 lblOrgUnicode->setText(QString::number(ke->ascii(), 16));
00113 }
00114 m_OrgkeyData.setData(ke);
00115 }
00116
00117 void KHCWidget::onPress_Map(QKeyEvent* ke)
00118 {
00119
00120 const QString& name = KeyNames::getName(ke->key());
00121 if(name == QString::null){
00122 lblMapKeycode->setText(QString::number(ke->key(), 16));
00123 } else {
00124 lblMapKeycode->setText(name);
00125 }
00126
00127 chkMapShift->setChecked(ke->state() & Qt::ShiftButton);
00128 chkMapCtrl->setChecked(ke->state() & Qt::ControlButton);
00129 chkMapAlt->setChecked(ke->state() & Qt::AltButton);
00130
00131
00132 if(ke->text()[0].isPrint()){
00133 lblMapUnicode->setText(ke->text());
00134 } else {
00135 lblMapUnicode->setText(QString::number(ke->ascii(), 16));
00136 }
00137 m_MapkeyData.setData(ke);
00138 }
00139
00140 void KHCWidget::onClick_Gen()
00141 {
00142 mleDefine->clear();
00143 if(m_OrgkeyData.key == 0
00144 || m_MapkeyData.key == 0){
00145 return;
00146 }
00147
00148 QString line;
00149 const QString& name = KeyNames::getName(m_OrgkeyData.key);
00150 line = "<define ";
00151 if(name == QString::null){
00152 line.append("code=\"");
00153 line.append(QString::number(m_OrgkeyData.key, 16));
00154 } else {
00155 line.append("key=\"");
00156 line.append(name);
00157 }
00158 line.append("\">");
00159 mleDefine->append(line);
00160
00161
00162 bool need = false;
00163 line = "<modifier";
00164 if(chkOrgShift->isChecked()){
00165 line.append(" Shift=\"On\"");
00166 need = true;
00167 }
00168 if(chkOrgCtrl->isChecked()){
00169 line.append(" Control=\"On\"");
00170 need = true;
00171 }
00172 if(chkOrgAlt->isChecked()){
00173 line.append(" Alt=\"On\"");
00174 need = true;
00175 }
00176 line.append("/>");
00177 if(need){
00178 mleDefine->append(line);
00179 }
00180
00181
00182 const QString& mapname = KeyNames::getName(m_MapkeyData.key);
00183 line = "<map";
00184 if(mapname == QString::null){
00185 line.append(" code=\"");
00186 line.append(QString::number(m_MapkeyData.key, 16));
00187 } else {
00188 line.append(" key=\"");
00189 line.append(mapname);
00190 }
00191 line.append("\"/>");
00192 mleDefine->append(line);
00193
00194
00195 need = false;
00196 line = "<map_modifier";
00197 bool on = chkMapShift->isChecked();
00198 if(chkOrgShift->isChecked() != on){
00199 line.append(" Shift=\"");
00200 if(on){
00201 line.append("On\"");
00202 } else {
00203 line.append("Off\"");
00204 }
00205 need = true;
00206 }
00207 on = chkMapCtrl->isChecked();
00208 if(chkOrgCtrl->isChecked() != on){
00209 line.append(" Control=\"");
00210 if(on){
00211 line.append("On\"");
00212 } else {
00213 line.append("Off\"");
00214 }
00215 need = true;
00216 }
00217 on = chkMapAlt->isChecked();
00218 if(chkOrgAlt->isChecked() != on){
00219 line.append(" Alt=\"");
00220 if(on){
00221 line.append("On\"");
00222 } else {
00223 line.append("Off\"");
00224 }
00225 need = true;
00226 }
00227 line.append("/>");
00228 if(need){
00229 mleDefine->append(line);
00230 }
00231
00232
00233 bool found = false;
00234 for(const QWSServer::KeyMap* m = QWSServer::keyMap();
00235 m->key_code != 0; m++){
00236 if(m->key_code == m_MapkeyData.key){
00237 if(m_MapkeyData.state & Qt::ControlButton){
00238 if(m->ctrl_unicode == m_MapkeyData.ascii){
00239 found = true;
00240 break;
00241 }
00242 } else if(m_MapkeyData.state & Qt::ShiftButton){
00243 if(m->shift_unicode == m_MapkeyData.ascii){
00244 found = true;
00245 break;
00246 }
00247 } else {
00248 if(m->unicode == m_MapkeyData.ascii){
00249 found = true;
00250 break;
00251 }
00252 }
00253 }
00254 }
00255 if(found == false){
00256 if(m_MapkeyData.text[0].isPrint()){
00257 line = "<map_unicode";
00258 if(m_MapkeyData.state & Qt::ControlButton){
00259 line.append(" ctrl_unicode=\"");
00260 } else if(m_MapkeyData.state & Qt::ShiftButton){
00261 line.append(" shift_unicode=\"");
00262 } else {
00263 line.append(" unicode=\"");
00264 }
00265 line.append(m_MapkeyData.text);
00266 line.append("\"/>");
00267 mleDefine->append(line);
00268 } else {
00269 mleDefine->clear();
00270 mleDefine->append("Not Support");
00271 return;
00272 }
00273 }
00274
00275
00276 line = "</define>";
00277 mleDefine->append(line);
00278 }
00279
00280 void KHCWidget::onClick_Copy()
00281 {
00282 mleDefine->selectAll();
00283 mleDefine->copy();
00284 mleDefine->deselect();
00285 }
00286
00287 void KHCWidget::onClick_Ctrl()
00288 {
00289 if(m_isEnable){
00290 QCopEnvelope e("QPE/KeyHelper", "disable()");
00291 btnCtrl->setText(tr("Enable"));
00292
00293 } else {
00294 QCopEnvelope e("QPE/KeyHelper", "enable()");
00295 btnCtrl->setText(tr("Disable"));
00296
00297 }
00298 m_isEnable = !m_isEnable;
00299 }
00300
00301 void KHCWidget::closeEvent(QCloseEvent* ce)
00302 {
00303 qDebug("closeEvent()");
00304 QCopEnvelope e("QPE/KeyHelper", "enable()");
00305 ce->accept();
00306 }
00307