Skip to content

Commit

Permalink
Layout XML reading
Browse files Browse the repository at this point in the history
  • Loading branch information
thefloweringash committed Jan 30, 2014
1 parent 8fd46ac commit 0ed119f
Show file tree
Hide file tree
Showing 5 changed files with 147 additions and 8 deletions.
94 changes: 94 additions & 0 deletions qtclient/layout/1.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
<keyboard layout="kinesis" layoutid="1" image="kinesis.png">
<!-- We have a keypad layer. the @layersize keys after index -->
<!-- @layerstart are duplicated as a keypad layer with separate -->
<!-- definitions -->
<keypad keyindex="0" layerstart="2" layersize="84"/>
<layout>
<key name="LOGICAL_KEY_KEYPAD" x="685" y="2" w="29" h="38"/>
<key name="LOGICAL_KEY_PROGRAM" x="720" y="2" w="29" h="38"/>
<key name="LOGICAL_KEY_A" x="65" y="174" w="48" h="48"/>
<key name="LOGICAL_KEY_B" x="276" y="213" w="48" h="48"/>
<key name="LOGICAL_KEY_C" x="171" y="213" w="48" h="48"/>
<key name="LOGICAL_KEY_D" x="171" y="161" w="48" h="48"/>
<key name="LOGICAL_KEY_E" x="171" y="108" w="48" h="48"/>
<key name="LOGICAL_KEY_F" x="223" y="160" w="48" h="48"/>
<key name="LOGICAL_KEY_G" x="276" y="160" w="48" h="48"/>
<key name="LOGICAL_KEY_H" x="427" y="160" w="48" h="48"/>
<key name="LOGICAL_KEY_I" x="532" y="109" w="48" h="48"/>
<key name="LOGICAL_KEY_J" x="480" y="161" w="48" h="48"/>
<key name="LOGICAL_KEY_K" x="532" y="161" w="48" h="48"/>
<key name="LOGICAL_KEY_L" x="585" y="161" w="48" h="48"/>
<key name="LOGICAL_KEY_M" x="480" y="213" w="48" h="48"/>
<key name="LOGICAL_KEY_N" x="428" y="213" w="48" h="48"/>
<key name="LOGICAL_KEY_O" x="585" y="108" w="48" h="48"/>
<key name="LOGICAL_KEY_P" x="639" y="122" w="48" h="48"/>
<key name="LOGICAL_KEY_Q" x="66" y="122" w="48" h="48"/>
<key name="LOGICAL_KEY_R" x="224" y="109" w="48" h="48"/>
<key name="LOGICAL_KEY_S" x="119" y="161" w="48" h="48"/>
<key name="LOGICAL_KEY_T" x="276" y="109" w="48" h="48"/>
<key name="LOGICAL_KEY_U" x="480" y="109" w="48" h="48"/>
<key name="LOGICAL_KEY_V" x="223" y="214" w="48" h="48"/>
<key name="LOGICAL_KEY_W" x="118" y="110" w="48" h="48"/>
<key name="LOGICAL_KEY_X" x="118" y="213" w="48" h="48"/>
<key name="LOGICAL_KEY_Y" x="428" y="108" w="48" h="48"/>
<key name="LOGICAL_KEY_Z" x="66" y="227" w="48" h="48"/>
<key name="LOGICAL_KEY_1" x="65" y="68" w="48" h="48"/>
<key name="LOGICAL_KEY_2" x="117" y="56" w="48" h="48"/>
<key name="LOGICAL_KEY_3" x="171" y="56" w="48" h="48"/>
<key name="LOGICAL_KEY_4" x="222" y="56" w="48" h="48"/>
<key name="LOGICAL_KEY_5" x="275" y="56" w="48" h="48"/>
<key name="LOGICAL_KEY_6" x="427" y="56" w="48" h="48"/>
<key name="LOGICAL_KEY_7" x="480" y="56" w="48" h="48"/>
<key name="LOGICAL_KEY_8" x="533" y="56" w="48" h="48"/>
<key name="LOGICAL_KEY_9" x="586" y="56" w="48" h="48"/>
<key name="LOGICAL_KEY_0" x="638" y="68" w="48" h="48"/>
<key name="LOGICAL_KEY_F1" x="39" y="2" w="29" h="38"/>
<key name="LOGICAL_KEY_F2" x="74" y="2" w="29" h="38"/>
<key name="LOGICAL_KEY_F3" x="108" y="2" w="29" h="38"/>
<key name="LOGICAL_KEY_F4" x="144" y="2" w="29" h="38"/>
<key name="LOGICAL_KEY_F5" x="178" y="2" w="29" h="38"/>
<key name="LOGICAL_KEY_F6" x="215" y="2" w="29" h="38"/>
<key name="LOGICAL_KEY_F7" x="250" y="2" w="29" h="38"/>
<key name="LOGICAL_KEY_F8" x="285" y="2" w="29" h="38"/>
<key name="LOGICAL_KEY_F9" x="440" y="2" w="29" h="38"/>
<key name="LOGICAL_KEY_F10" x="475" y="2" w="29" h="38"/>
<key name="LOGICAL_KEY_F11" x="510" y="2" w="29" h="38"/>
<key name="LOGICAL_KEY_F12" x="545" y="2" w="29" h="38"/>
<key name="LOGICAL_KEY_EQUALS" x="1" y="63" w="60" h="48"/>
<key name="LOGICAL_KEY_TAB" x="1" y="116" w="60" h="48"/>
<key name="LOGICAL_KEY_ESC" x="3" y="2" w="29" h="38"/>
<key name="LOGICAL_KEY_CAPSLOCK" x="1" y="168" w="60" h="48"/>
<key name="LOGICAL_KEY_LSHIFT" x="1" y="220" w="60" h="48"/>
<key name="LOGICAL_KEY_UP" x="480" y="266" w="48" h="48"/>
<key name="LOGICAL_KEY_DOWN" x="532" y="266" w="48" h="48"/>
<key name="LOGICAL_KEY_LEFT" x="171" y="266" w="48" h="48"/>
<key name="LOGICAL_KEY_RIGHT" x="223" y="266" w="48" h="48"/>
<key name="LOGICAL_KEY_LSQUARE" x="585" y="266" w="48" h="48"/>
<key name="LOGICAL_KEY_RSQUARE" x="637" y="280" w="48" h="48"/>
<key name="LOGICAL_KEY_SCROLLLOCK" x="615" y="2" w="29" h="38"/>
<key name="LOGICAL_KEY_PRINTSCREEN" x="580" y="2" w="29" h="38"/>
<key name="LOGICAL_KEY_INTERNATIONAL" x="117" y="266" w="48" h="48"/>
<key name="LOGICAL_KEY_BACKTICK" x="66" y="280" w="48" h="48"/>
<key name="LOGICAL_KEY_HYPHEN" x="690" y="63" w="60" h="48"/>
<key name="LOGICAL_KEY_PAUSE" x="650" y="2" w="29" h="38"/>
<key name="LOGICAL_KEY_END" x="273" y="457" w="44" h="44"/>
<key name="LOGICAL_KEY_HOME" x="292" y="407" w="44" h="44"/>
<key name="LOGICAL_KEY_DELETE" x="234" y="398" w="37" h="73"/>
<key name="LOGICAL_KEY_BACKSPACE" x="187" y="383" w="37" h="73"/>
<key name="LOGICAL_KEY_L_ALT" x="309" y="356" w="44" h="44"/>
<key name="LOGICAL_KEY_L_CTRL" x="259" y="338" w="44" h="44"/>
<key name="LOGICAL_KEY_BACKSLASH" x="690" y="116" w="60" h="48"/>
<key name="LOGICAL_KEY_PGDN" x="433" y="456" w="44" h="44"/>
<key name="LOGICAL_KEY_PGUP" x="416" y="407" w="44" h="44"/>
<key name="LOGICAL_KEY_ENTER" x="478" y="398" w="37" h="73"/>
<key name="LOGICAL_KEY_SPACE" x="528" y="380" w="37" h="73"/>
<key name="LOGICAL_KEY_R_ALT" x="397" y="357" w="44" h="44"/>
<key name="LOGICAL_KEY_R_CTRL" x="447" y="339" w="44" h="44"/>
<key name="LOGICAL_KEY_SEMICOLON" x="638" y="174" w="48" h="48"/>
<key name="LOGICAL_KEY_QUOTE" x="690" y="168" w="60" h="48"/>
<key name="LOGICAL_KEY_COMMA" x="533" y="213" w="48" h="48"/>
<key name="LOGICAL_KEY_PERIOD" x="585" y="213" w="48" h="48"/>
<key name="LOGICAL_KEY_SLASH" x="638" y="227" w="48" h="48"/>
<key name="LOGICAL_KEY_RSHIFT" x="690" y="220" w="60" h="48"/>
</layout>
</keyboard>
Binary file added qtclient/layout/kinesis.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
49 changes: 46 additions & 3 deletions qtclient/layoutpresenter.cc
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
#include <QApplication>
#include <QDebug>
#include <QXmlDefaultHandler>
#include <QXmlSimpleReader>

#include "layoutpresenter.h"
#include "keyboardmodel.h"

Expand All @@ -15,6 +18,35 @@ LayoutPresenter::~LayoutPresenter() {
}
}

namespace {
class Layout {
QString mImageName;

friend class XMLLayoutHandler;
public:
QString imageName() { return mImageName; }
};

class XMLLayoutHandler : public QXmlDefaultHandler {
Layout& mLayout;
public:
XMLLayoutHandler(Layout& layout)
: mLayout(layout)
{}

virtual bool startElement(const QString& namespaceURI,
const QString& localName,
const QString& qName,
const QXmlAttributes& atts)
{
if (localName == "keyboard") {
qDebug() << "setting mImageName";
mLayout.mImageName = atts.value("image");
}
return true;
}
};
};

void LayoutPresenter::setModel(KeyboardModel *model) {
mModel = model;
Expand All @@ -30,8 +62,19 @@ void LayoutPresenter::setModel(KeyboardModel *model) {
QString layoutXml =
resourceDir + QString::number(model->getLayoutID()) + ".xml";

qDebug() << "Switching to model " << layoutXml
<< " image: " << layoutImagePath;
qDebug() << "Loading layout from xml " << layoutXml;

Layout layout;
XMLLayoutHandler handler(layout);
QXmlSimpleReader xmlReader;
QFile layoutXmlFile(layoutXml);
QXmlInputSource source(&layoutXmlFile);
xmlReader.setContentHandler(&handler);
if (!xmlReader.parse(source)) {
qDebug() << "error reading from xml";
return;
}

mView->setKeyboardInfo(model->getLayoutID());
qDebug() << "layout.imageName = " << layout.imageName();
mView->setKeyboardImage(QPixmap(resourceDir + layout.imageName()));
}
4 changes: 2 additions & 2 deletions qtclient/layoutview.cc
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,6 @@ LayoutView::LayoutView(LayoutPresenter *presenter)
{
}

void LayoutView::setKeyboardInfo(uint8_t layoutID) {

void LayoutView::setKeyboardImage(const QPixmap& pixmap) {
setPixmap(pixmap);
}
8 changes: 5 additions & 3 deletions qtclient/layoutview.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,12 @@
#ifndef LAYOUTVIEW_H
#define LAYOUTVIEW_H

#include <QWidget>
#include <QLabel>
#include <QPixmap>

class LayoutPresenter;

class LayoutView : public QWidget {
class LayoutView : public QLabel {
Q_OBJECT
Q_DISABLE_COPY(LayoutView)

Expand All @@ -15,7 +16,8 @@ class LayoutView : public QWidget {
public:
LayoutView(LayoutPresenter *presenter);

void setKeyboardInfo(uint8_t layoutID);
void setKeyboardImage(const QPixmap& pixmap);
// void setKeyboardInfo(uint8_t layoutID);
};

#endif

0 comments on commit 0ed119f

Please sign in to comment.