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

KHCWidget.cpp

Go to the documentation of this file.
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         /* keycode */
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         /* modifiers */
00104         chkOrgShift->setChecked(ke->state() & Qt::ShiftButton);
00105         chkOrgCtrl->setChecked(ke->state() & Qt::ControlButton);
00106         chkOrgAlt->setChecked(ke->state() & Qt::AltButton);
00107 
00108         /* unicode */
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         /* keycode */
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         /* modifiers */
00127         chkMapShift->setChecked(ke->state() & Qt::ShiftButton);
00128         chkMapCtrl->setChecked(ke->state() & Qt::ControlButton);
00129         chkMapAlt->setChecked(ke->state() & Qt::AltButton);
00130 
00131         /* unicode */
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         /* original key */
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         /* original modifiers */
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         /* mapping key */
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         /* mapping modifiers */
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         /* mapping unicode */
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         /* close tag */
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                 //btnCtrl->update();
00293         } else {
00294                 QCopEnvelope e("QPE/KeyHelper", "enable()");
00295                 btnCtrl->setText(tr("Disable"));
00296                 //btnCtrl->update();
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 

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