[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: [kde-workspace/amourphiouskb] kcontrol/keyboard: Added geometry and Tooltip Feature (code cleaning/f
From: shivam makkar <amourphious1992 () gmail ! com>
Date: 2013-01-23 13:37:43
Message-ID: 20130123133743.4B193A6091 () git ! kde ! org
[Download RAW message or body]
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: UNKNOWN] *
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 which are listed at that page.
http://commits.kde.org/kde-workspace/0c29ece10a4abbbb10be5ca616d40de78cbdb33f
diff --git a/kcontrol/keyboard/CMakeLists.txt b/kcontrol/keyboard/CMakeLists.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/preview/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 <QtGui>
+
+#include <QtGui/QX11Info>
+#include <X11/Xlib.h>
+#include <X11/Xatom.h>
+#include <X11/XKBlib.h>
+#include <X11/extensions/XKBrules.h>
+#include <fixx11h.h>
+#include <config-workspace.h>
+#include <KApplication>
+#include <KLocale>
+#include <QtCore/QFile>
+
+
+KbGeometry::KbGeometry()
+{
+ defSectionLeft=0;
+ defSectionTop=0;
+
+ pcModel="pc101 pc102 pc104 pc105";
+ pcgeometries = "latitude";
+ macbooks = "macbook78 macbook79";
+ applealu = "applealu_ansi applealu_iso applealu_jis";
+ macs = "macintosh macintosh_old ibook powerbook macbook78 macbook79";
+ dell = "dell101 dellm65";
+
+}
+int KbGeometry::setIntProp(QString a,QString b){
+ int val;
+ float f;
+ if(b.contains(a)){
+ QString dvl=b.mid(b.indexOf(a));
+ dvl=dvl.left(dvl.indexOf(";"));
+ dvl=dvl.mid(dvl.indexOf("=")+1);
+ val=dvl.toFloat();
+ }
+ else
+ val=0;
+ return val;
+}
+
+QString KbGeometry::setStrProp(QString a,QString b){
+ QString val;
+ if(b.contains(a)){
+ QString dvl=b.mid(b.indexOf(a));
+ dvl=dvl.left(dvl.indexOf(";"));
+ dvl=dvl.mid(dvl.indexOf("=")+1);
+ val=dvl;
+ }
+ else
+ val="";
+ return val;
+}
+
+void KbGeometry::extractShape(QString desc){
+ desc.remove(" ");
+ desc.remove("\t");
+ desc.remove("\n");
+ QList<QString>shapes;
+ shapes=desc.split("shape\"");
+ for(int i=1;i<shapes.size();i++){
+ Shape temp;
+ QString sh=shapes.at(i);
+ QString th=shapes.at(i);
+ QMessageBox q;
+
+ int idx=sh.indexOf("\"",1);
+ QString shname=sh.left(idx);
+ temp.name=shname;
+ idx=sh.indexOf("[");
+ sh=sh.mid(idx+1);
+
+
+ idx=sh.indexOf("]");
+ sh=sh.left(idx);
+
+ QList<QString>sz=sh.split(",");
+ temp.sizex=sz.at(0).toFloat();
+ temp.sizey=sz.at(1).toFloat();
+ if(temp.sizex==0||temp.sizey==0){
+
+ idx=th.indexOf("[");
+ int tdx=th.indexOf("[",idx+1);
+ th=th.mid(tdx+1);
+ idx=th.indexOf("]");
+ th=th.left(idx);
+ QList<QString>sd=th.split(",");
+ temp.sizex=sd.at(0).toInt();
+ temp.sizey=sd.at(1).toInt();
+ }
+ shapeList<<temp;
+ sz.clear();
+ QString f;
+ sh=temp.name;
+ sh.append(" : ");
+ sh.append(f.setNum(temp.sizex));
+ sh.append(" : ");
+ sh.append(f.setNum(temp.sizey));
+ //q.setText(sh);
+ //q.exec();
+ }
+}
+
+void KbGeometry::setDefaultValues(QString desc){
+ desc.remove(" ");
+ desc.remove("\t");
+ QString g,l;
+ defSectionLeft=setIntProp("section.left=",desc);
+ l.setNum(defSectionLeft);
+ g.append(l);
+ g.append(" : ");
+ defSectionTop=setIntProp("section.top=",desc);
+ l.setNum(defSectionTop);
+ g.append(l);
+ g.append(" : ");
+
+ defShape=setStrProp("key.shape=",desc);
+
+ g.append(defShape);
+ g.append(" : ");
+
+ kbWidth=setIntProp("width=",desc);
+ l.setNum(kbWidth);
+ g.append(l);
+ g.append(" : ");
+ kbHieght=setIntProp("height=",desc);
+ l.setNum(kbHieght);
+ g.append(l);
+ g.append(" : ");
+ keygap=setIntProp("key.gap=",desc);
+ l.setNum(keygap);
+ g.append(l);
+ g.append(" : ");
+ //QMessageBox a;
+ //a.setText(g);
+ //a.exec();
+}
+
+void KbGeometry::extractSections(QString desc){
+ QMessageBox q;
+ desc.append("\n");
+ QString sec=desc;
+ QString ma;
+ while(sec.contains("//")){
+ int k=sec.indexOf("//");
+ QString first=sec.left(k);
+ ma.append(first);
+ //q.setText(ma);
+ //q.exec();
+ int l=sec.indexOf("\n",k+1);
+ sec=sec.mid(l);
+ //q.setText(sec);
+ //q.exec();
+ //q.setText(first.setNum(k));
+ //q.exec();
+
+ }
+ ma.append(sec);
+ desc=ma;
+ desc.remove(" ");
+ desc.remove("\t");
+ QString dm,m;
+ QList<QString>seclist=desc.split("section\"");
+ setDefaultValues(seclist.at(0));
+ extractShape(desc);
+ for(int i=1;i<seclist.size();i++){
+ Section temp;
+ QList<QString>rlst=seclist.at(i).split("row{");
+ QString inp=rlst.at(0);
+ int top=setIntProp("top=",inp);
+ temp.ycordi=top+defSectionTop;
+ dm.setNum(temp.ycordi);
+ dm.append("=");
+ m.setNum(top);
+ dm.append(m);
+ dm.append("+");
+ m.setNum(defSectionTop);
+ dm.append(m);
+ dm.append("\n");
+ temp.secShape=setStrProp("key.shape=",inp);
+ if(temp.secShape=="")
+ temp.secShape=defShape;
+ temp.gap=setIntProp("key.gap=",inp);
+ if(temp.gap==0)
+ temp.gap=keygap;
+ int left=setIntProp("left=",inp);
+ temp.xcordi=left+defSectionLeft;
+ m.setNum(temp.xcordi);
+ dm.append(m);
+ dm.append("=");
+ m.setNum(left);
+ dm.append(m);
+ dm.append("+");
+ m.setNum(defSectionLeft);
+ dm.append(m);
+ dm.append("\n");
+ for(int j=1;j<rlst.size();j++){
+ temp.rowlist<<rlst.at(j);
+ dm.append(rlst.at(j));
+ dm.append("\n");
+ }
+ sections<<temp;
+ //q.setText(dm);
+ //q.exec();
+ }
+}
+
+QStringList KbGeometry :: splitKeys(QString desc){
+ desc.remove(" ");
+ desc.remove("\t");
+ desc.remove("\n");
+ QList <QString> lst=desc.split(",");
+ QList <QString> klst;
+ while(!lst.empty()){
+ QString temp=lst.first();
+ if(temp=="};")
+ 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=temp.left(temp.indexOf("};"));
+ temp.remove("}");
+ }
+ else{
+ if(temp.contains("};"))
+ temp=temp.left(temp.indexOf("};"));
+ }
+ klst << temp;
+
+
+ }
+ return klst;
+}
+
+void KbGeometry::extractRows(QString des){
+ extractSections(des);
+ for(int j=0;j<sections.size();j++){
+ Section current=sections.at(j);
+ for(int k=0;k<current.rowlist.size();k++){
+
+ QString desc=current.rowlist.at(k);
+ desc=desc.left(desc.indexOf("};"));
+ desc.remove(" ");
+ desc.remove("\t");
+ Row temp;
+ temp.cx=setIntProp("left=",desc)+current.xcordi;
+ temp.cy=setIntProp("top=",desc)+current.ycordi;
+ QString tshape=setStrProp("key.shape=",desc);
+ if (tshape==""){
+ tshape=current.secShape.remove("\"");
+ }
+ temp.shapeRow=tshape.remove("\"");
+ desc=desc.mid(desc.indexOf("keys{")+5);
+ temp.gap=setIntProp("key.gap=",desc);
+ if(temp.gap==0)
+ temp.gap=current.gap;
+ QMessageBox q;
+ //QString tst;
+ //tst.setNum(setIntProp("left=",desc));
+ //q.setText(tst);
+ //q.exec();
+ temp.keylist=splitKeys(desc);
+ rows<<temp;
+
+ }
+
+ }
+ QMessageBox q;
+ for(int i=0;i<rows.size();i++){
+ QString a,b;
+ a.append(rows.at(i).shapeRow);
+ a.append(" : ");
+ a.append(b.setNum(rows.at(i).cx));
+ a.append(" : ");
+ a.append(b.setNum(rows.at(i).cy));
+ for(int n=0;n<rows.at(i).keylist.size();n++){
+ a.append("\n");
+ a.append(rows.at(i).keylist.at(n));
+ }
+ //q.setText(a);
+ //q.exec();
+ }
+}
+
+Shape KbGeometry :: getShape(QString shape){
+ for(int i=0;i<shapeList.size();i++){
+ Shape tmp=shapeList.at(i);
+ if(tmp.name==shape)
+ return tmp;
+ }
+ Shape k=getShape("NORM");
+ return k;
+}
+
+void KbGeometry :: extractKeys(QString model){
+
+ QString desc=getGeometryDescription(getGeometryfromModel(model));
+ extractRows(desc);
+ for(int i=0;i<rows.size();i++){
+ int totksz=0;
+ int gap=rows.at(i).gap;
+ for(int j=0;j<rows.at(i).keylist.size();j++){
+ KeyGm temp;
+ int addx=0;
+ QString dummy=rows.at(i).keylist.at(j);
+ QMessageBox g;
+ //g.setText(dummy);
+ //g.exec();
+ dummy.remove(" ");
+ int check=0;
+ if(dummy.contains(";")){
+ QList <QString>dummylst=dummy.split(";");
+ int z=0;
+ for(int k=0;k<dummylst.size();k++){
+ QString d=dummylst.at(k);
+ if(d.startsWith("<")){
+ d.remove("<");
+ d.remove(">");
+ temp.name=d;
+ }
+ if(d.startsWith("\"")){
+ d.remove("\"");
+ check=1;
+ //g.setText(d);
+ //g.exec();
+ temp.shape=getShape(d);
+ }
+ if(d.startsWith("shape=")){
+ d=setStrProp("shape=",d);
+ d.remove("\"");
+ temp.shape=getShape(d);
+ check=1;
+ }
+ bool ok;
+ if(z==0){
+ addx=d.toInt(&ok,10);
+ if(ok)
+ z=1;
+ }
+ }
+ }
+ else{
+ dummy.remove("<");
+ dummy.remove(">");
+ temp.name=dummy;
+ //g.setText(rows.at(i).shapeRow);
+ //g.exec();
+
+ }
+ if(check==0)
+ temp.shape=getShape(rows.at(i).shapeRow);
+ if(temp.shape.name=="")
+ temp.shape=getShape("NORM");
+ temp.cordx=rows.at(i).cx+totksz+addx+gap;
+ totksz+=temp.shape.sizex+addx+gap;
+ temp.cordy=rows.at(i).cy;
+ keys<<temp;
+ }
+ }
+ //QMessageBox q;
+ QString a,b;
+ int ptop=0;
+ for(int i=0;i<keys.size();i++){
+
+ KeyGm s=keys.at(i);
+ if(ptop!=s.cordy){
+ ptop=s.cordy;
+ a.append("\n");
+ }
+ a.append(s.name);
+ a.append(" : ");
+ a.append(b.setNum(s.cordx));
+ a.append(" : ");
+ a.append(b.setNum(s.cordy));
+ a.append(" : ");
+ a.append(s.shape.name);
+ a.append(" ");
+
+
+ }
+ QMessageBox q;
+ //q.setText(a);
+ //q.exec();
+}
+
+QString KbGeometry::makeGeometryStr(QString file,QString model){
+ QString geometry;
+ geometry.append(file);
+ geometry.append("/");
+ geometry.append(model);
+ return geometry;
+}
+
+QString KbGeometry::getGeometryfromModel(QString model){
+
+ QString geometry;
+
+ if(pcModel.contains(model))
+ return geometry=makeGeometryStr("pc",model);
+
+ if(pcgeometries.contains(model))
+ return geometry=makeGeometryStr("pc",model);
+
+ if(model=="apple")
+ return geometry=makeGeometryStr("macintosh","macintosh");
+ if(macbooks.contains(model)||macs.contains(model))
+ return geometry=makeGeometryStr("macintosh","macintosh");
+
+ if(applealu.contains(model))
+ return geometry=makeGeometryStr("macintosh",model);
+
+ if(dell.contains(model))
+ return geometry=makeGeometryStr("dell",model);
+
+ if(model=="hpmini110")
+ return geometry=makeGeometryStr("hp","mini110");
+
+ if(model=="hpdv5")
+ return geometry=makeGeometryStr("hp","dv5");
+
+ if(model=="pc98")
+ return geometry=makeGeometryStr("nec",model);
+
+ QMessageBox q;
+ q.setText(i18n("Showing in Default Geometry"));
+ q.exec();
+
+ return geometry="pc/pc104";
+
+}
+
+
+QString KbGeometry::getGeometryDescription(QString geometry){
+
+ QStringList temp=geometry.split("/");
+ QString description;
+ QString filename=findGeometryBasedir();
+ filename.append(temp.at(0));
+
+ QFile file(filename);
+ file.open(QIODevice::ReadOnly | QIODevice::Text);
+ QString content = file.readAll();
+ file.close();
+
+ QString geometryName=temp.at(1);
+ temp=content.split("xkb_geometry");
+ for(int i=1;i<temp.size();i++){
+ QString tempstr=temp.at(i);
+ int k=tempstr.indexOf("\"");
+ tempstr=tempstr.mid(k);
+ k=tempstr.indexOf("{");
+ tempstr=tempstr.left(k);
+ tempstr.remove(" ");
+ tempstr.remove("\"");
+ if(tempstr==geometryName){
+ description=temp.at(i);
+ break;
+ }
+ }
+ return description;
+}
+
+QString KbGeometry::findGeometryBasedir()
+{
+ QString symBasedir;
+ QString xkbParentDir;
+
+ QString base(XLIBDIR);
+ if( base.count('/') >= 3 ) {
+ // .../usr/lib/X11 -> /usr/share/X11/xkb vs .../usr/X11/lib -> /usr/X11/share/X11/xkb
+ QString delta = base.endsWith("X11") ? "/../../share/X11" : "/../share/X11";
+ QDir baseDir(base + delta);
+ if( baseDir.exists() ) {
+ xkbParentDir = baseDir.absolutePath();
+ }
+ else {
+ QDir baseDir(base + "/X11"); // .../usr/X11/lib/X11/xkb (old XFree)
+ if( baseDir.exists() ) {
+ xkbParentDir = baseDir.absolutePath();
+ }
+ }
+ }
+
+ if( xkbParentDir.isEmpty() ) {
+ xkbParentDir = "/usr/share/X11";
+ }
+ symBasedir=QString("%1/xkb/geometry/").arg(xkbParentDir);
+ return(symBasedir);
+}
diff --git a/kcontrol/keyboard/preview/kbgeometry.h b/kcontrol/keyboard/preview/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<QtCore>
+
+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<QString> keylist;
+};
+
+struct Section{
+ int xcordi,ycordi;
+ QList<QString> rowlist;
+ int gap;
+ QString secShape;
+};
+
+class KbGeometry
+{
+ QList <Shape> shapeList;
+ QList <Section> sections;
+ QList <Row> 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 <KeyGm> 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/keyboard/preview/kbpreviewframe.cpp
index 62309ef..946d108 100644
--- a/kcontrol/keyboard/preview/kbpreviewframe.cpp
+++ b/kcontrol/keyboard/preview/kbpreviewframe.cpp
@@ -21,314 +21,163 @@
#include <QtCore/QFile>
#include <QtGui/QFont>
-#include <QtGui/QFont>
+#include <QHelpEvent>
+#include <QToolTip>
#include <KApplication>
#include <KLocale>
+static const QColor keyBorderColor("#d4d4d4");
+static const QColor lev12color("#d4d4d4");
+static const QColor lev34color("#FF3300");
+static const QColor color[] = { lev12color, lev12color, lev34color, lev34color };
+
+
+
+
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=0,gr2=1,gr3=2,gr4=3,sz=20,kszx=70,kszy=70;
- const int lv1x=15,lvl2x=40,lvly=10;
- const QString lev12color="#d4d4d4",lev34color="#FF3300";
-
- painter.drawRect(x,y,kszx,kszy);
- for(int j=0;j<kblayout.TLDE.klst.size();j++){
- if(j==gr2)
- painter.drawText(x+lv1x,y+lvly,sz,sz,Qt::AlignBottom,symbol.getKeySymbol(kblayout.TLDE.klst.at(gr2)));
- if(j==gr1)
- painter.drawText(x+lv1x,y+lvl2x,sz,sz,Qt::AlignTop,symbol.getKeySymbol(kblayout.TLDE.klst.at(gr1)));
- painter.setPen(QColor(lev34color));
- if(j==gr3)
- painter.drawText(x+lvl2x,y+lvl2x,sz,sz,Qt::AlignTop,symbol.getKeySymbol(kblayout.TLDE.klst.at(gr3)));
- if(j==gr4)
- painter.drawText(x+lvl2x,y+lvly,sz,sz,Qt::AlignTop,symbol.getKeySymbol(kblayout.TLDE.klst.at(gr4)));
- painter.setPen(QColor(lev12color));
- }
-
-}
-
-void KbPreviewFrame::paintAERow(QPainter &painter,int &x,int &y)
-{
- const int gr1=0,gr2=1,gr3=2,gr4=3,sz=20,kszx=70,kszy=70;
- const int lv1x=15,lvl2x=40,lvly=10;
- const QString lev12color="#d4d4d4",lev34color="#FF3300";
- paintTLDE(painter,x,y);
-
- const int noAEk=12;
- for(int i=0;i<noAEk;i++){
- x+=kszx;
- painter.drawRect(x,y,kszx,kszy);
- for(int j=0;j<kblayout.AE[i].klst.size();j++){
- if(j==gr2)
- painter.drawText(x+lv1x,y+lvly,sz,sz,Qt::AlignBottom,symbol.getKeySymbol(kblayout.AE[i].klst.at(gr2)));
- if(j==gr1)
- painter.drawText(x+lv1x,y+lvl2x,sz,sz,Qt::AlignTop,symbol.getKeySymbol(kblayout.AE[i].klst.at(gr1)));
- painter.setPen(QColor(lev34color));
- if(j==gr3)
- painter.drawText(x+lvl2x,y+lvl2x,sz,sz,Qt::AlignTop,symbol.getKeySymbol(kblayout.AE[i].klst.at(gr3)));
- if(j==gr4)
- painter.drawText(x+lvl2x,y+lvly,sz,sz,Qt::AlignTop,symbol.getKeySymbol(kblayout.AE[i].klst.at(gr4)));
- painter.setPen(QColor(lev12color));
+int KbPreviewFrame::keyAt(QPoint pos){
+ const int tooltip_range = 10;
+ for(int i=0;i<toolTipList.size();i++){
+ ToolTipText temp=toolTipList.at(i);
+ if(temp.ttPoint.x()<=pos.x()&&temp.ttPoint.x()+tooltip_range>=pos.x()&&temp.ttPoint.y()<=pos.y()&&temp.ttPoint.y()+tooltip_range>=pos.y()){
+ return i;
}
}
- x+=kszx;
-
- const int bkspszx=100,bk1x=10,bk1y=20,bk2y=60;
-
- 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=0,gr2=1,gr3=2,gr4=3,sz=20,kszx=70,kszy=70;
- const int lv1x=15,lvl2x=40,lvly=10;
- const QString lev12color="#d4d4d4",lev34color="#FF3300";
-
- const int noADk=12;
-
- const int tabszx=100;
- const int tab1x=20,tab2x=10,tab1y=25,tab2y=65,tab3y=45;
-
- 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+=tabszx;
-
- for(int i=0;i<noADk;i++){
- painter.drawRect(x,y,kszx,kszy);
- for(int j=0;j<kblayout.AD[i].klst.size();j++){
- if(j==gr2)
- painter.drawText(x+lv1x,y+lvly,sz,sz,Qt::AlignBottom,symbol.getKeySymbol(kblayout.AD[i].klst.at(gr2)));
- if(j==gr1)
- painter.drawText(x+lv1x,y+lvl2x,sz,sz,Qt::AlignTop,symbol.getKeySymbol(kblayout.AD[i].klst.at(gr1)));
- painter.setPen(QColor(lev34color));
- if(j==gr3)
- painter.drawText(x+lvl2x,y+lvl2x,sz,sz,Qt::AlignTop,symbol.getKeySymbol(kblayout.AD[i].klst.at(gr3)));
- if(j==gr4)
- painter.drawText(x+lvl2x,y+lvly,sz,sz,Qt::AlignTop,symbol.getKeySymbol(kblayout.AD[i].klst.at(gr4)));
- painter.setPen(QColor(lev12color));
- }
- x+=kszx;
- }
- painter.drawRect(x,y,kszx,kszy);
- for(int j=0;j<kblayout.BKSL.klst.size();j++){
- if(j==gr2)
- painter.drawText(x+lv1x,y+lvly,sz,sz,Qt::AlignBottom,symbol.getKeySymbol(kblayout.BKSL.klst.at(gr2)));
- if(j==gr1)
- painter.drawText(x+lv1x,y+lvl2x,sz,sz,Qt::AlignTop,symbol.getKeySymbol(kblayout.BKSL.klst.at(gr1)));
- painter.setPen(QColor(lev34color));
- if(j==gr3)
- painter.drawText(x+lvl2x,y+lvl2x,sz,sz,Qt::AlignTop,symbol.getKeySymbol(kblayout.BKSL.klst.at(gr3)));
- if(j==gr4)
- painter.drawText(x+lvl2x,y+lvly,sz,sz,Qt::AlignTop,symbol.getKeySymbol(kblayout.BKSL.klst.at(gr4)));
- painter.setPen(QColor(lev12color));
- }
+bool KbPreviewFrame::event(QEvent *event){
+ if (event->type() == QEvent::ToolTip) {
+ QHelpEvent *helpEvent = static_cast<QHelpEvent *>(event);
+ int index = keyAt(helpEvent->pos());
+ if (index != -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=0,gr2=1,gr3=2,gr4=3,sz=20,kszx=70,kszy=70,capszx=100;
- const int noACk=11;
- const int lv1x=15,lvl2x=40,lvly=10,shifx=10,shify=60,retsz=140,ret1x=50,ret2x=30,ret1y=38,ret2y=43;
- const QString lev12color="#d4d4d4",lev34color="#FF3300";
-
- painter.drawRect(x,y,capszx,kszy);
- painter.drawText(x+shifx,y+sz,i18n("^"));
- painter.drawText(x+shifx,y+shify,i18n("Caps Lock"));
- x+=capszx;
-
- for(int i=0;i<noACk;i++){
- painter.drawRect(x,y,kszx,kszy);
- for(int j=0;j<kblayout.AC[i].klst.size();j++){
- if(j==gr2)
- painter.drawText(x+lv1x,y+lvly,sz,sz,Qt::AlignBottom,symbol.getKeySymbol(kblayout.AC[i].klst.at(gr2)));
- if(j==gr1)
- painter.drawText(x+lv1x,y+lvl2x,sz,sz,Qt::AlignTop,symbol.getKeySymbol(kblayout.AC[i].klst.at(gr1)));
- painter.setPen(QColor(lev34color));
- if(j==gr3)
- painter.drawText(x+lvl2x,y+lvl2x,sz,sz,Qt::AlignTop,symbol.getKeySymbol(kblayout.AC[i].klst.at(gr3)));
- if(j==gr4)
- painter.drawText(x+lvl2x,y+lvly,sz,sz,Qt::AlignTop,symbol.getKeySymbol(kblayout.AC[i].klst.at(gr4)));
- painter.setPen(QColor(lev12color));
- }
- x+=kszx;
+void KbPreviewFrame::paintEvent(QPaintEvent *){
+ //getkeyboardlayout("ua","Ukrainian");
+ //setWindowTitle(kblayout.Layoutname);
+ QPainter painter(this);
+ QFont kbfont("Ubuntu",9);
+ //alias.getAlias("qwerty","AD01");
+ painter.setFont(kbfont);
+ painter.setBrush(QBrush(Qt::black));
+ //painter.setPen(Qt::black);
+ //painter.drawText(450,10,kblayout.Layoutname);
+ painter.drawRect(0,0,1030,490);
+ painter.setPen(keyBorderColor);
+ painter.setBrush(QBrush(Qt::transparent));
+ setScaleFactor(geometry.kbWidth,geometry.kbHieght);
+ for(int i=0;i<geometry.keys.size();i++){
+ KeyGm dummy = geometry.keys.at(i);
+ painter.setPen(keyBorderColor);
+ painter.drawRect(scalex*dummy.cordx,scaley*dummy.cordy,scalex*dummy.shape.sizex,scaley*dummy.shape.sizey);
+ writeKeySym(painter,dummy);
}
- painter.drawRect(x,y,retsz,kszy);
- painter.drawText(x+ret1x,y+ret1y,i18n("|"));
- painter.drawText(x+ret2x,y+ret2y,i18n("<--"));
- painter.drawText(x+shify,y+lvl2x,i18n("Enter"));
-
-
}
-void KbPreviewFrame::paintABRow(QPainter &painter,int &x,int &y)
-{
- const int gr1=0,gr2=1,gr3=2,gr4=3,sz=20,kszx=70,kszy=70;
- const int lv1x=15,lvl2x=40,lvly=10;
- const QString lev12color="#d4d4d4",lev34color="#FF3300";
-
- const int noABk=10;
- for(int i=0;i<noABk;i++){
- painter.drawRect(x,y,kszx,kszy);
- for(int j=0;j<kblayout.AB[i].klst.size();j++){
- if(j==gr2)
- painter.drawText(x+lv1x,y+lvly,sz,sz,Qt::AlignBottom,symbol.getKeySymbol(kblayout.AB[i].klst.at(gr2)));
- if(j==gr1)
- painter.drawText(x+lv1x,y+lvl2x,sz,sz,Qt::AlignTop,symbol.getKeySymbol(kblayout.AB[i].klst.at(gr1)));
- painter.setPen(QColor(lev34color));
- if(j==gr3)
- painter.drawText(x+lvl2x,y+lvl2x,sz,sz,Qt::AlignTop,symbol.getKeySymbol(kblayout.AB[i].klst.at(gr3)));
- if(j==gr4)
- painter.drawText(x+lvl2x,y+lvly,sz,sz,Qt::AlignTop,symbol.getKeySymbol(kblayout.AB[i].klst.at(gr4)));
- painter.setPen(QColor(lev12color));
- }
- x+=kszx;
+void KbPreviewFrame :: plotSym(QPainter &painter, KeyGm key, QString sym){
+ const int x= key.cordx,y= key.cordy;
+ int symx = key.shape.sizex/3-sym.length(),symy=key.shape.sizey/2+3;
+ if(key.shape.sizex==0){
+ symx=6-sym.length();
}
-
-
+ if(key.shape.sizey==0)
+ symy=12;
+ painter.setPen(keyBorderColor);
+ QFont kbfont;
+ kbfont.setPointSize(7);
+ painter.setFont(kbfont);
+ painter.drawText(scalex*(x+symx),scaley*(y+symy),sym);
+ kbfont.setPointSize(9);
+ painter.setFont(kbfont);
}
-void KbPreviewFrame::paintBottomRow(QPainter &painter,int &x,int &y)
-{
- const int txtx=30,txty=35,ctrlsz=100,altsz=100,spsz=400,kszy=70;
- const QString lev12color="#d4d4d4",lev34color="#FF3300";
-
- painter.drawRect(x,y,ctrlsz,kszy);
- painter.drawText(x+txtx,y+txty,i18n("Ctrl"));
-
- x+=ctrlsz;
-
- painter.drawRect(x,y,altsz,kszy);
- painter.drawText(x+txtx,y+txty,i18n("Alt"));
-
- x+=altsz;
-
- painter.drawRect(x,y,spsz,kszy);
-
- x+=spsz;
-
- painter.drawRect(x,y,altsz,kszy);
- painter.setPen(QColor(lev34color));
- painter.drawText(x+txtx,y+txty,i18n("AltGr"));
- painter.setPen(QColor(lev12color));
-
- x+=ctrlsz;
-
- painter.drawRect(x,y,ctrlsz,kszy);
- painter.drawText(x+txtx,y+txty,i18n("Ctrl"));
-
-
+void KbPreviewFrame :: plotSym(QPainter &painter,KeyGm key,Keys sym){
+ const int x=key.cordx,y=key.cordy;
+ const int lvl1x = key.shape.sizex/5+1,lvl1y=key.shape.sizey/2+5;
+ const int lvl2x =key.shape.sizex/5+1,lvl2y=key.shape.sizey/5+5;
+ const int lvl3x=key.shape.sizex/2+1,lvl3y=key.shape.sizey/2+5;
+ const int lvl4x=key.shape.sizex/2+1,lvl4y=key.shape.sizey/5+5;
+ const int levelx_Pos[] = { lvl1x , lvl2x , lvl3x , lvl4x };
+ const int levely_Pos[] = { lvl1y , lvl2y , lvl3y ,lvl4y };
+
+ QPoint tp;
+ tp.setX(scalex*x);
+ tp.setY(scaley*y);
+ QString ts=sym.keyVal;
+ ToolTipText temp;
+ temp.ttPoint=tp;
+ temp.ttString=ts;
+ toolTipList<<temp;
+ for(int level = 0; level < sym.klst.size(); level++){
+ painter.setPen(color[level]);
+ painter.drawText(scalex*(x+levelx_Pos[level]),scaley*(y+levely_Pos[level]),symbol.getKeySymbol(sym.klst.at(level)));
+ }
}
-void KbPreviewFrame::paintFnKeys(QPainter &painter,int &x,int &y)
-{
- const int escsz=50,escx=20,escy=55;
- painter.drawRect(x,y,escsz,escsz);
-
- painter.drawText(escx,escy,i18n("ESC"));
-
- const int spacex=50;
- x+=spacex;
-
- const int fnkeyspace=60,fnkeysizex=50,fnkeysizey=50,fkc=15,fkn=25,fky=30,fnkig=4,fng=3;
- int f=1;
-
- QString str;
+void KbPreviewFrame :: writeKeySym(QPainter &painter, KeyGm key){
+
+ int plotted=0;
+
+ const QString key_group[] = { "AE" , "AD" , "AC" , "AB" , "TLDE" , "BKSL" };
+
+ for(int group_no = 0 ; group_no < 6 ; group_no++){
+ if(key.name.startsWith(key_group[group_no])){
+ QString ind=key.name.right(2);
+ int index=ind.toInt();
+ Keys sym;
+ if (group_no == 0)
+ sym=kblayout.AE[index-1];
+ if (group_no == 1)
+ sym=kblayout.AD[index-1];
+ if (group_no == 2)
+ sym=kblayout.AC[index-1];
+ if (group_no == 3)
+ sym=kblayout.AB[index-1];
+ if (group_no == 4)
+ sym=kblayout.TLDE;
+ if (group_no == 5)
+ sym=kblayout.BKSL;
+ plotSym(painter,key,sym);
+ plotted=1;
- for(int i=0;i<fng;i++){
- x+=spacex;
- for(int j=0;j<fnkig;j++){
- x+=fnkeyspace;
- painter.drawRect(x,y,fnkeysizex,fnkeysizey);
- painter.drawText(x+fkc,y+fky,i18n("F"));
- painter.drawText(x+fkn,y+fky,str.setNum(f));
- f++;
}
}
+ if(plotted==0){
+ QString sym=key.name;
+ plotSym(painter,key,sym);
+ }
}
-void KbPreviewFrame::paintEvent(QPaintEvent *)
-{
- const QString lev12color="#d4d4d4";
- QPainter painter(this);
-
- QFont kbfont;
- kbfont.setPointSize(12);
-
- painter.setFont(kbfont);
- painter.setBrush(QBrush(Qt::darkGray));
-
- const int strtx=0,strty=0,endx=1390,endy=490,kszy=70;
- const int row1x=10,row1y=30,row2x=10,row2y=90,row5x=10,row5y=330,row3x=10,row3y=170,shifx=10,shify=60,row4x=10,row4y=250,row6x=110,row6y=410;
- const int shiftsz=155;
-
- painter.drawRect(strtx,strty,endx,endy);
-
- painter.setPen(QColor(lev12color));
- painter.setBrush(QBrush(Qt::black));
-
- int x,y;
- x=row1x;
- y=row1y;
-
- paintFnKeys(painter,x,y);
-
- x=row2x;
- y=row2y;
-
- paintAERow(painter,x,y);
-
- x=row3x;
- y=row3y;
-
- paintADRow(painter,x,y);
-
- x=row4x;
- y=row4y;
-
- paintACRow(painter,x,y);
-
- x=row5x;
- y=row5y;
-
- painter.drawRect(x,y,shiftsz,kszy);
- painter.drawText(x+shifx,y+shify,i18n("SHIFT"));
- x+=shiftsz;
-
- paintABRow(painter,x,y);
-
- painter.drawRect(x,y,shiftsz,kszy);
- painter.drawText(x+shifx,y+shify,i18n("SHIFT"));
-
- x=row6x;
- y=row6y;
-
- paintBottomRow(painter,x,y);
-
- if( symbol.isFailed() ) {
- painter.drawRect(strtx,strty,endx,endy);
- const int midx=470, midy=240;
- painter.drawText(midx,midy,i18n("No Preview Found"));
- }
+void KbPreviewFrame :: setScaleFactor(int width,int height){
+ scalex=1030/width;
+ scaley=490/height;
+ scalex=2;
+ scaley=2;
}
-
-void KbPreviewFrame::generateKeyboardLayout(const QString& country, const QString& layoutvariant)
+void KbPreviewFrame::generateKeyboardLayout(const QString& country, const QString& layoutvariant,const \
QString& model) {
QString filename=kblayout.findSymbolbasedir();
filename.append(country);
@@ -341,6 +190,8 @@ void KbPreviewFrame::generateKeyboardLayout(const QString& country, const QStrin
QList<QString> symstr;
symstr=content.split("xkb_symbols ");
+ geometry.extractKeys(model);
+
if(layoutvariant=="")
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 <QPainter>
#include <QtGui/QFrame>
+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<ToolTipText> toolTipList;
explicit KbPreviewFrame(QWidget *parent = 0);
void paintEvent(QPaintEvent *);
+ bool event(QEvent *event);
+ int keyAt(QPoint pos);
+ KbGeometry geometry;
KeyboardLayout kblayout;
- void generateKeyboardLayout(const QString &country, const QString &layoutvariant);
+ void generateKeyboardLayout(const QString &country, const QString &layoutvariant, const QString \
&model);
};
diff --git a/kcontrol/keyboard/preview/keyboardpainter.cpp \
b/kcontrol/keyboard/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 <QtGui/QHBoxLayout>
#include <QtGui/QVBoxLayout>
+#include <QToolTip>
+#include <QHelpEvent>
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 variant)
+void KeyboardPainter::generateKeyboardLayout(QString country, QString variant,QString model)
{
- kbframe->generateKeyboardLayout(country,variant);
+ kbframe->generateKeyboardLayout(country,variant,model);
+}
+
+bool KeyboardPainter::event(QEvent *event){
+ if (event->type() == QEvent::ToolTip) {
+ QHelpEvent *helpEvent = static_cast<QHelpEvent *>(event);
+ int index = kbframe->keyAt(helpEvent->pos());
+ if (index != -1) {
+ QToolTip::showText(helpEvent->globalPos(), kbframe->toolTipList[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/keyboard/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, QString 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]=du;
+ keyVal.append(du);
+ keyVal.append("\n");
}
}
diff --git a/kcontrol/keyboard/preview/keys.h b/kcontrol/keyboard/preview/keys.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;
QList<QString>klst;
void setKey(QString opton);
};
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic