Git commit 0c29ece10a4abbbb10be5ca616d40de78cbdb33f by shivam makkar. Committed on 23/01/2013 at 14:25. Pushed by makkar into branch 'amourphiouskb'. Added geometry and Tooltip Feature (code cleaning/formatting required) M +1 -0 kcontrol/keyboard/CMakeLists.txt A +499 -0 kcontrol/keyboard/preview/kbgeometry.cpp [License: UNKNO= WN] * A +56 -0 kcontrol/keyboard/preview/kbgeometry.h [License: UNKNOWN= ] * M +123 -272 kcontrol/keyboard/preview/kbpreviewframe.cpp M +17 -9 kcontrol/keyboard/preview/kbpreviewframe.h M +22 -3 kcontrol/keyboard/preview/keyboardpainter.cpp M +2 -1 kcontrol/keyboard/preview/keyboardpainter.h M +2 -0 kcontrol/keyboard/preview/keys.cpp M +1 -1 kcontrol/keyboard/preview/keys.h The files marked with a * at the end have a non valid license. Please read:= http://techbase.kde.org/Policies/Licensing_Policy and use the headers whic= h are listed at that page. http://commits.kde.org/kde-workspace/0c29ece10a4abbbb10be5ca616d40de78cbdb3= 3f diff --git a/kcontrol/keyboard/CMakeLists.txt b/kcontrol/keyboard/CMakeList= s.txt index ec30ec7..7e6559e 100644 --- a/kcontrol/keyboard/CMakeLists.txt +++ b/kcontrol/keyboard/CMakeLists.txt @@ -120,6 +120,7 @@ set(kcm_keyboard_PART_SRCS preview/keysymhelper.cpp preview/kbpreviewframe.cpp preview/keysym2ucs.cpp + preview/kbgeometry.cpp ) = = diff --git a/kcontrol/keyboard/preview/kbgeometry.cpp b/kcontrol/keyboard/p= review/kbgeometry.cpp new file mode 100644 index 0000000..8509985 --- /dev/null +++ b/kcontrol/keyboard/preview/kbgeometry.cpp @@ -0,0 +1,499 @@ +#include "kbgeometry.h" +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +KbGeometry::KbGeometry() +{ + defSectionLeft=3D0; + defSectionTop=3D0; + + pcModel=3D"pc101 pc102 pc104 pc105"; + pcgeometries =3D "latitude"; + macbooks =3D "macbook78 macbook79"; + applealu =3D "applealu_ansi applealu_iso applealu_jis"; + macs =3D "macintosh macintosh_old ibook powerbook macbook78 macbook79"; + dell =3D "dell101 dellm65"; + +} +int KbGeometry::setIntProp(QString a,QString b){ + int val; + float f; + if(b.contains(a)){ + QString dvl=3Db.mid(b.indexOf(a)); + dvl=3Ddvl.left(dvl.indexOf(";")); + dvl=3Ddvl.mid(dvl.indexOf("=3D")+1); + val=3Ddvl.toFloat(); + } + else + val=3D0; + return val; +} + +QString KbGeometry::setStrProp(QString a,QString b){ + QString val; + if(b.contains(a)){ + QString dvl=3Db.mid(b.indexOf(a)); + dvl=3Ddvl.left(dvl.indexOf(";")); + dvl=3Ddvl.mid(dvl.indexOf("=3D")+1); + val=3Ddvl; + } + else + val=3D""; + return val; +} + +void KbGeometry::extractShape(QString desc){ + desc.remove(" "); + desc.remove("\t"); + desc.remove("\n"); + QListshapes; + shapes=3Ddesc.split("shape\""); + for(int i=3D1;isz=3Dsh.split(","); + temp.sizex=3Dsz.at(0).toFloat(); + temp.sizey=3Dsz.at(1).toFloat(); + if(temp.sizex=3D=3D0||temp.sizey=3D=3D0){ + + idx=3Dth.indexOf("["); + int tdx=3Dth.indexOf("[",idx+1); + th=3Dth.mid(tdx+1); + idx=3Dth.indexOf("]"); + th=3Dth.left(idx); + QListsd=3Dth.split(","); + temp.sizex=3Dsd.at(0).toInt(); + temp.sizey=3Dsd.at(1).toInt(); + } + shapeList<seclist=3Ddesc.split("section\""); + setDefaultValues(seclist.at(0)); + extractShape(desc); + for(int i=3D1;irlst=3Dseclist.at(i).split("row{"); + QString inp=3Drlst.at(0); + int top=3DsetIntProp("top=3D",inp); + temp.ycordi=3Dtop+defSectionTop; + dm.setNum(temp.ycordi); + dm.append("=3D"); + m.setNum(top); + dm.append(m); + dm.append("+"); + m.setNum(defSectionTop); + dm.append(m); + dm.append("\n"); + temp.secShape=3DsetStrProp("key.shape=3D",inp); + if(temp.secShape=3D=3D"") + temp.secShape=3DdefShape; + temp.gap=3DsetIntProp("key.gap=3D",inp); + if(temp.gap=3D=3D0) + temp.gap=3Dkeygap; + int left=3DsetIntProp("left=3D",inp); + temp.xcordi=3Dleft+defSectionLeft; + m.setNum(temp.xcordi); + dm.append(m); + dm.append("=3D"); + m.setNum(left); + dm.append(m); + dm.append("+"); + m.setNum(defSectionLeft); + dm.append(m); + dm.append("\n"); + for(int j=3D1;j lst=3Ddesc.split(","); + QList klst; + while(!lst.empty()){ + QString temp=3Dlst.first(); + if(temp=3D=3D"};") + break; + lst.pop_front(); + if(temp.contains("{")){ + temp.remove("{"); + while(!lst.at(0).contains("}")){ + temp.append(";"); + temp.append(lst.first()); + lst.pop_front(); + } + temp.append(";"); + temp.append(lst.first()); + lst.pop_front(); + if(temp.contains("};")) + temp=3Dtemp.left(temp.indexOf("};")); + temp.remove("}"); + } + else{ + if(temp.contains("};")) + temp=3Dtemp.left(temp.indexOf("};")); + } + klst << temp; + + + } + return klst; +} + +void KbGeometry::extractRows(QString des){ + extractSections(des); + for(int j=3D0;jdummylst=3Ddummy.split(";"); + int z=3D0; + for(int k=3D0;k"); + temp.name=3Dd; + } + if(d.startsWith("\"")){ + d.remove("\""); + check=3D1; + //g.setText(d); + //g.exec(); + temp.shape=3DgetShape(d); + } + if(d.startsWith("shape=3D")){ + d=3DsetStrProp("shape=3D",d); + d.remove("\""); + temp.shape=3DgetShape(d); + check=3D1; + } + bool ok; + if(z=3D=3D0){ + addx=3Dd.toInt(&ok,10); + if(ok) + z=3D1; + } + } + } + else{ + dummy.remove("<"); + dummy.remove(">"); + temp.name=3Ddummy; + //g.setText(rows.at(i).shapeRow); + //g.exec(); + + } + if(check=3D=3D0) + temp.shape=3DgetShape(rows.at(i).shapeRow); + if(temp.shape.name=3D=3D"") + temp.shape=3DgetShape("NORM"); + temp.cordx=3Drows.at(i).cx+totksz+addx+gap; + totksz+=3Dtemp.shape.sizex+addx+gap; + temp.cordy=3Drows.at(i).cy; + keys<=3D 3 ) { + // .../usr/lib/X11 -> /usr/share/X11/xkb vs .../usr/X11/lib -> /us= r/X11/share/X11/xkb + QString delta =3D base.endsWith("X11") ? "/../../share/X11" : "/..= /share/X11"; + QDir baseDir(base + delta); + if( baseDir.exists() ) { + xkbParentDir =3D baseDir.absolutePath(); + } + else { + QDir baseDir(base + "/X11"); // .../usr/X11/lib/X11/xkb (old X= Free) + if( baseDir.exists() ) { + xkbParentDir =3D baseDir.absolutePath(); + } + } + } + + if( xkbParentDir.isEmpty() ) { + xkbParentDir =3D "/usr/share/X11"; + } + symBasedir=3DQString("%1/xkb/geometry/").arg(xkbParentDir); + return(symBasedir); +} diff --git a/kcontrol/keyboard/preview/kbgeometry.h b/kcontrol/keyboard/pre= view/kbgeometry.h new file mode 100644 index 0000000..f53761d --- /dev/null +++ b/kcontrol/keyboard/preview/kbgeometry.h @@ -0,0 +1,56 @@ +#ifndef KBGEOMETRY_H +#define KBGEOMETRY_H +#include + +struct Shape{ + QString name; + int sizex,sizey; +}; + +struct KeyGm { + QString name; + int cordx,cordy; + Shape shape; +}; + +struct Row{ + int cx,cy,gap; + QString shapeRow; + QList keylist; +}; + +struct Section{ + int xcordi,ycordi; + QList rowlist; + int gap; + QString secShape; +}; + +class KbGeometry +{ + QList shapeList; + QList
sections; + QList rows; + QString defShape; + int defSectionLeft,defSectionTop; + int setIntProp(QString a, QString b); + QString setStrProp(QString a,QString b); + Shape getShape(QString shape); + QString pcModel,pcgeometries,macbooks,applealu,macs,dell; + void extractShape(QString desc); + void setDefaultValues(QString desc); + void extractSections(QString desc); + void extractRows(QString desc); + QString makeGeometryStr(QString file,QString model); + QString getGeometryfromModel(QString model); + QString getGeometryDescription(QString geometry); + QString findGeometryBasedir(); +public: + QList keys; + KbGeometry(); + int kbWidth,kbHieght,keygap; + void extractKeys(QString desc); + QStringList splitKeys(QString desc); +}; + +#endif // KBGEOMETRY_H diff --git a/kcontrol/keyboard/preview/kbpreviewframe.cpp b/kcontrol/keyboa= rd/preview/kbpreviewframe.cpp index 62309ef..946d108 100644 --- a/kcontrol/keyboard/preview/kbpreviewframe.cpp +++ b/kcontrol/keyboard/preview/kbpreviewframe.cpp @@ -21,314 +21,163 @@ = #include #include -#include +#include +#include = #include #include = = +static const QColor keyBorderColor("#d4d4d4"); +static const QColor lev12color("#d4d4d4"); +static const QColor lev34color("#FF3300"); +static const QColor color[] =3D { lev12color, lev12color, lev34color, lev3= 4color }; + + + + KbPreviewFrame::KbPreviewFrame(QWidget *parent) : QFrame(parent) { setFrameStyle( QFrame::Box ); setFrameShadow(QFrame::Sunken); + setMouseTracking(true); } = -void KbPreviewFrame::paintTLDE(QPainter &painter,int &x,int &y) -{ - const int gr1=3D0,gr2=3D1,gr3=3D2,gr4=3D3,sz=3D20,kszx=3D70,kszy=3D70; - const int lv1x=3D15,lvl2x=3D40,lvly=3D10; - const QString lev12color=3D"#d4d4d4",lev34color=3D"#FF3300"; - - painter.drawRect(x,y,kszx,kszy); - for(int j=3D0;j=3D= pos.x()&&temp.ttPoint.y()<=3Dpos.y()&&temp.ttPoint.y()+tooltip_range>=3Dpos= .y()){ = + return i; } } - x+=3Dkszx; - - const int bkspszx=3D100,bk1x=3D10,bk1y=3D20,bk2y=3D60; - - painter.drawRect(x,y,bkspszx,kszy); - painter.drawText(x+bk1x,y+bk1y,i18n("<--")); - painter.drawText(x+bk1x,y+bk2y,i18n("Backspace")); + return -1; } = -void KbPreviewFrame::paintADRow(QPainter &painter,int &x,int&y) -{ - const int gr1=3D0,gr2=3D1,gr3=3D2,gr4=3D3,sz=3D20,kszx=3D70,kszy=3D70; - const int lv1x=3D15,lvl2x=3D40,lvly=3D10; - const QString lev12color=3D"#d4d4d4",lev34color=3D"#FF3300"; - - const int noADk=3D12; - - const int tabszx=3D100; - const int tab1x=3D20,tab2x=3D10,tab1y=3D25,tab2y=3D65,tab3y=3D45; - - painter.drawRect(x,y,tabszx,kszy); - painter.drawText(x+tab1x,y+tab1y,i18n("<--")); - painter.drawText(x+lv1x,y+tab3y,i18n("TAB")); - painter.drawText(x+tab2x,y+tab2y,i18n("-->")); - x+=3Dtabszx; - - for(int i=3D0;itype() =3D=3D QEvent::ToolTip) { + QHelpEvent *helpEvent =3D static_cast(event); + int index =3D keyAt(helpEvent->pos()); + if (index !=3D -1) { + QToolTip::showText(helpEvent->globalPos(), toolTipList[index]= .ttString); + } else { + QToolTip::hideText(); + event->ignore(); + } + + return true; + } + return QWidget::event(event); } = -void KbPreviewFrame::paintACRow(QPainter &painter,int &x,int &y) -{ - const int gr1=3D0,gr2=3D1,gr3=3D2,gr4=3D3,sz=3D20,kszx=3D70,kszy=3D70,= capszx=3D100; - const int noACk=3D11; - const int lv1x=3D15,lvl2x=3D40,lvly=3D10,shifx=3D10,shify=3D60,retsz= =3D140,ret1x=3D50,ret2x=3D30,ret1y=3D38,ret2y=3D43; - const QString lev12color=3D"#d4d4d4",lev34color=3D"#FF3300"; - - painter.drawRect(x,y,capszx,kszy); - painter.drawText(x+shifx,y+sz,i18n("^")); - painter.drawText(x+shifx,y+shify,i18n("Caps Lock")); - x+=3Dcapszx; - - for(int i=3D0;i symstr; symstr=3Dcontent.split("xkb_symbols "); = + geometry.extractKeys(model); + if(layoutvariant=3D=3D"") kblayout.generateLayout(symstr.at(1),country); = diff --git a/kcontrol/keyboard/preview/kbpreviewframe.h b/kcontrol/keyboard= /preview/kbpreviewframe.h index 7fd2e1d..79913d3 100644 --- a/kcontrol/keyboard/preview/kbpreviewframe.h +++ b/kcontrol/keyboard/preview/kbpreviewframe.h @@ -21,28 +21,36 @@ #include "keyboardlayout.h" #include "keysymhelper.h" #include "keyaliases.h" - +#include "kbgeometry.h" #include #include = +struct ToolTipText{ + QPoint ttPoint; + QString ttString; +}; + class KbPreviewFrame : public QFrame { Q_OBJECT private: - void paintTLDE(QPainter &painter,int &x,int &y); - void paintAERow(QPainter &painter,int &x,int &y); - void paintADRow(QPainter &painter,int &x,int &y); - void paintACRow(QPainter &painter,int &x,int &y); - void paintABRow(QPainter &painter,int &x,int &y); - void paintBottomRow(QPainter &painter,int &x,int &y); - void paintFnKeys(QPainter &painter,int &x,int &y); + int scalex,scaley; + void setScaleFactor(int width,int hieght); + void writeKeySym(QPainter &painter,KeyGm key); + void plotSym(QPainter &painter,KeyGm key,Keys sym); + void plotSym(QPainter &painter,KeyGm key,QString sym); + void getkeyboardlayout(QString country, QString layoutvariant); KeySymHelper symbol; Aliases alias; public: + QList toolTipList; explicit KbPreviewFrame(QWidget *parent =3D 0); void paintEvent(QPaintEvent *); + bool event(QEvent *event); + int keyAt(QPoint pos); + KbGeometry geometry; KeyboardLayout kblayout; - void generateKeyboardLayout(const QString &country, const QString &lay= outvariant); + void generateKeyboardLayout(const QString &country, const QString &lay= outvariant, const QString &model); = = }; diff --git a/kcontrol/keyboard/preview/keyboardpainter.cpp b/kcontrol/keybo= ard/preview/keyboardpainter.cpp index cc1489c..9a67bf6 100644 --- a/kcontrol/keyboard/preview/keyboardpainter.cpp +++ b/kcontrol/keyboard/preview/keyboardpainter.cpp @@ -17,10 +17,12 @@ */ = #include "keyboardpainter.h" -#include "ui_keyboardpainter.h" +#include "ui_KeyboardPainter.h" = #include #include +#include +#include = KeyboardPainter::KeyboardPainter() : ui(new Ui::keyboardpainter), @@ -35,11 +37,28 @@ KeyboardPainter::KeyboardPainter() : vLayout->addWidget(kbframe); vLayout->addWidget(exitButton); setWindowTitle(kbframe->kblayout.getLayoutName()); + setMouseTracking(true); } = -void KeyboardPainter::generateKeyboardLayout(QString country, QString vari= ant) +void KeyboardPainter::generateKeyboardLayout(QString country, QString vari= ant,QString model) { - kbframe->generateKeyboardLayout(country,variant); + kbframe->generateKeyboardLayout(country,variant,model); +} + +bool KeyboardPainter::event(QEvent *event){ + if (event->type() =3D=3D QEvent::ToolTip) { + QHelpEvent *helpEvent =3D static_cast(event); + int index =3D kbframe->keyAt(helpEvent->pos()); + if (index !=3D -1) { + QToolTip::showText(helpEvent->globalPos(), kbframe->toolTipLi= st[index].ttString); + } else { + QToolTip::hideText(); + event->ignore(); + } + + return true; + } + return QWidget::event(event); } = KeyboardPainter::~KeyboardPainter() diff --git a/kcontrol/keyboard/preview/keyboardpainter.h b/kcontrol/keyboar= d/preview/keyboardpainter.h index 64df088..155cb2b 100644 --- a/kcontrol/keyboard/preview/keyboardpainter.h +++ b/kcontrol/keyboard/preview/keyboardpainter.h @@ -36,9 +36,10 @@ class KeyboardPainter : public QDialog public: explicit KeyboardPainter(); ~KeyboardPainter(); - void generateKeyboardLayout(QString country, QString layoutvariant); + void generateKeyboardLayout(QString country, QString layoutvariant, QS= tring model); = private: + bool event(QEvent *event); Ui::keyboardpainter *ui; KbPreviewFrame *kbframe; QPushButton *exitButton; diff --git a/kcontrol/keyboard/preview/keys.cpp b/kcontrol/keyboard/preview= /keys.cpp index ef0d055..bf80bcf 100644 --- a/kcontrol/keyboard/preview/keys.cpp +++ b/kcontrol/keyboard/preview/keys.cpp @@ -49,5 +49,7 @@ void Keys::setKey(QString a) du.remove("\t"); du.remove("\n"); klst[k]=3Ddu; + keyVal.append(du); + keyVal.append("\n"); } } diff --git a/kcontrol/keyboard/preview/keys.h b/kcontrol/keyboard/preview/k= eys.h index 0cc5e84..54dfe27 100644 --- a/kcontrol/keyboard/preview/keys.h +++ b/kcontrol/keyboard/preview/keys.h @@ -27,7 +27,7 @@ class Keys { public: Keys(); - QString keyname; + QString keyname,keyVal; QListklst; void setKey(QString opton); };