summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--inputmethods/multikey/configdlg.cpp60
-rw-r--r--inputmethods/multikey/configdlg.h9
-rw-r--r--inputmethods/multikey/keyboard.cpp10
-rw-r--r--inputmethods/multikey/keyboard.h1
4 files changed, 56 insertions, 24 deletions
diff --git a/inputmethods/multikey/configdlg.cpp b/inputmethods/multikey/configdlg.cpp
index f23bf1c..7bea589 100644
--- a/inputmethods/multikey/configdlg.cpp
+++ b/inputmethods/multikey/configdlg.cpp
@@ -1,123 +1,143 @@
/*
* TODO
- * make a font selection thing
+ * make a font selection thing (size too)
*
- * FIXME
- * if you open the config dialog and close it from the little (x) button on the title bar,
- * you have to hit the button on the keyboard twice for it to open the next time
*
*
*/
#include <qpe/qpeapplication.h>
#include <qpe/config.h>
#include <qwidget.h>
#include <qdialog.h>
#include <qtabwidget.h>
#include <qvbox.h>
#include <qgrid.h>
#include <qgroupbox.h>
#include <qlabel.h>
#include <qcheckbox.h>
#include <qsizepolicy.h>
#include <qpushbutton.h>
-#include <qcombobox.h>
+#include <qlistbox.h>
#include "configdlg.h"
#include "keyboard.h"
ConfigDlg::ConfigDlg () : QTabWidget ()
{
setCaption( tr("Multikey Configuration") );
/*
* 'general config' tab
*/
QVBox *gen_box = new QVBox (this);
gen_box->setMargin(3);
addTab(gen_box, tr("General Settings"));
- QGroupBox *map_group = new QGroupBox (2, Qt::Horizontal, tr("Keymap File"), gen_box);
+ QGroupBox *map_group = new QGroupBox (2, Qt::Vertical, tr("Keymap File"), gen_box);
- map_combo = new QComboBox ((bool)0, map_group);
- map_combo->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed));
+ keymaps = new QListBox (map_group);
+ keymaps->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding));
+ //keymaps->setMaximumHeight(150);
QString cur(tr("Current Language"));
- map_combo->insertItem(cur);
- connect(map_combo, SIGNAL(activated(int)), SLOT(setMap(int)));
+ keymaps->insertItem(cur);
+ connect(keymaps, SIGNAL(highlighted(int)), SLOT(setMap(int)));
- QString ko(tr(QPEApplication::qpeDir() + "/share/multikey/ko.keymap"));
- map_combo->insertItem(ko);
+ QString ko(QPEApplication::qpeDir() + "/share/multikey/ko.keymap");
+ keymaps->insertItem(ko);
- QString en(tr(QPEApplication::qpeDir() + "/share/multikey/en.keymap"));
- map_combo->insertItem(en);
+ QString en(QPEApplication::qpeDir() + "/share/multikey/en.keymap");
+ keymaps->insertItem(en);
- QString de(tr(QPEApplication::qpeDir() + "/share/multikey/de.keymap"));
- map_combo->insertItem(de);
+ QString de(QPEApplication::qpeDir() + "/share/multikey/de.keymap");
+ keymaps->insertItem(de);
- QPushButton *button = new QPushButton(tr("Browse..."), map_group);
- button->setFlat((bool)1);
+ QGrid *add_remove_grid = new QGrid(2, map_group);
+ add_remove_grid->setMargin(3);
+ add_remove_grid->setSpacing(3);
+
+ add_button = new QPushButton(tr("Add"), add_remove_grid);
+ add_button->setFlat((bool)1);
+
+ remove_button = new QPushButton(tr("Remove"), add_remove_grid);
+ remove_button->setFlat((bool)1);
pick_button = new QCheckBox(tr("Pickboard"), gen_box);
Config config ("multikey");
config.setGroup ("pickboard");
bool pick_open = config.readBoolEntry ("open", "0"); // default closed
if (pick_open) {
pick_button->setChecked(true);
}
// by connecting it after checking it, the signal isn't emmited
connect (pick_button, SIGNAL(clicked()), this, SLOT(pickTog()));
/*
* 'color' tab
*/
QGrid *color_box = new QGrid(2, this);
color_box->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed));
color_box->setMargin(3);
+ color_box->setSpacing(3);
addTab(color_box, tr("Colors"));
QLabel *label;
label = new QLabel(tr("Key Color"), color_box);
- button = new QPushButton(color_box);
+ QPushButton *button = new QPushButton(color_box);
button->setFlat((bool)1);
label = new QLabel(tr("Key Pressed Color"), color_box);
button = new QPushButton(color_box);
button->setFlat((bool)1);
label = new QLabel(tr("Line Color"), color_box);
button = new QPushButton(color_box);
button->setFlat((bool)1);
label = new QLabel(tr("Text Color"), color_box);
button = new QPushButton(color_box);
button->setFlat((bool)1);
label = new QLabel("", color_box); // a spacer so the above buttons dont expand
label->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding));
}
void ConfigDlg::pickTog() {
Config config ("multikey");
config.setGroup ("pickboard");
config.writeEntry ("open", pick_button->isChecked()); // default closed
emit pickboardToggled(pick_button->isChecked());
}
void ConfigDlg::setMap(int index) {
if (index == 0) {
+ if (remove_button->isEnabled())
+ remove_button->setDisabled(true);
+
emit setMapToDefault();
}
else {
- emit setMapToFile(map_combo->text(index));
+ if (!remove_button->isEnabled())
+ remove_button->setEnabled(true);
+
+ emit setMapToFile(keymaps->text(index));
}
}
+
+void ConfigDlg::addMap() {
+
+}
+
+void ConfigDlg::removeMap(int index) {
+
+}
diff --git a/inputmethods/multikey/configdlg.h b/inputmethods/multikey/configdlg.h
index 54127a0..1a64764 100644
--- a/inputmethods/multikey/configdlg.h
+++ b/inputmethods/multikey/configdlg.h
@@ -1,31 +1,36 @@
#include <qpe/qpeapplication.h>
#include <qtabwidget.h>
#include <qcheckbox.h>
-#include <qcombobox.h>
+#include <qlistbox.h>
+#include <qpushbutton.h>
#ifndef CONFIGDLG_H
#define CONFIGDLG_H
class ConfigDlg : public QTabWidget
{
Q_OBJECT
public:
ConfigDlg ();
signals:
void pickboardToggled(bool on_off);
void setMapToDefault();
void setMapToFile(QString file);
private slots:
void pickTog();
void setMap(int index);
+ void addMap();
+ void removeMap(int index);
private:
QCheckBox *pick_button;
- QComboBox *map_combo;
+ QListBox *keymaps;
+ QPushButton *add_button;
+ QPushButton *remove_button;
};
#endif
diff --git a/inputmethods/multikey/keyboard.cpp b/inputmethods/multikey/keyboard.cpp
index 2a80f1e..b71f929 100644
--- a/inputmethods/multikey/keyboard.cpp
+++ b/inputmethods/multikey/keyboard.cpp
@@ -4,108 +4,115 @@
** This file is part of Qtopia Environment.
**
** This file may be distributed and/or modified under the terms of the
** GNU General Public License version 2 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the
** packaging of this file.
**
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
**
** See http://www.trolltech.com/gpl/ for GPL licensing information.
**
** Contact info@trolltech.com if any conditions of this licensing are
** not clear to you.
**
**********************************************************************/
#include "keyboard.h"
#include "configdlg.h"
#include <qpe/global.h>
#include <qpe/qcopenvelope_qws.h>
#include <qwindowsystem_qws.h>
#include <qpainter.h>
#include <qfontmetrics.h>
#include <qtimer.h>
#include <qpe/qpeapplication.h>
#include <qpe/config.h>
#include <ctype.h>
#include <qfile.h>
#include <qtextstream.h>
-#include <iostream.h>
#include <sys/utsname.h>
#define USE_SMALL_BACKSPACE
/* Keyboard::Keyboard {{{1 */
Keyboard::Keyboard(QWidget* parent, const char* _name, WFlags f) :
QFrame(parent, _name, f), shift(0), lock(0), ctrl(0),
alt(0), useLargeKeys(TRUE), usePicks(0), pressedKeyRow(-1), pressedKeyCol(-1),
unicode(-1), qkeycode(0), modifiers(0), schar(0), mchar(0), echar(0),
configdlg(0)
{
// get the default font
Config *config = new Config( "qpe" );
config->setGroup( "Appearance" );
QString familyStr = config->readEntry( "FontFamily", "fixed" );
delete config;
config = new Config("multikey");
config->setGroup ("pickboard");
usePicks = config->readBoolEntry ("open", "0"); // default closed
delete config;
setFont( QFont( familyStr, 10 ) );
picks = new KeyboardPicks( this );
picks->setFont( QFont( familyStr, 10 ) );
picks->initialise();
if (usePicks) {
QObject::connect( picks, SIGNAL(key(ushort,ushort,ushort,bool,bool) ),
this, SIGNAL(key(ushort,ushort,ushort,bool,bool)) );
} else picks->hide();
keys = new Keys();
repeatTimer = new QTimer( this );
connect( repeatTimer, SIGNAL(timeout()), this, SLOT(repeat()) );
}
+Keyboard::~Keyboard() {
+
+ if ( configdlg ) {
+ delete (ConfigDlg *) configdlg;
+ configdlg = 0;
+ }
+
+}
/* Keyboard::resizeEvent {{{1 */
void Keyboard::resizeEvent(QResizeEvent*)
{
int ph = picks->sizeHint().height();
picks->setGeometry( 0, 0, width(), ph );
keyHeight = (height()-(usePicks ? ph : 0))/5;
int nk; // number of keys?
if ( useLargeKeys ) {
nk = 15;
} else {
nk = 19;
}
defaultKeyWidth = (width()/nk)/2;
xoffs = (width()-defaultKeyWidth*nk)/2; // empty key spaces?
}
/* KeyboardPicks::initialize {{{1 */
void KeyboardPicks::initialise()
{
setSizePolicy(QSizePolicy(QSizePolicy::Expanding,QSizePolicy::Fixed));
mode = 0;
dc = new KeyboardConfig(this);
configs.append(dc);
}
/* KeyboardPicks::sizeHint {{{1 */
QSize KeyboardPicks::sizeHint() const
{
return QSize(240,fontMetrics().lineSpacing());
@@ -930,65 +937,64 @@ void Keys::setKeysFromFile(const char * filename) {
delete [] (xpm[i]);
}
setKey(row, qcode, unicode, width, xpm2pix);
}
// shift map
else if (buf.contains(QRegExp("^[0-9a-fx]+\\s+[0-9a-fx]+\\s*$", FALSE, FALSE))) {
QTextStream tmp (buf, IO_ReadOnly);
ushort lower, shift;
tmp >> lower >> shift;
shiftMap.insert(lower, shift);
buf = t.readLine();
}
// other variables like lang & title
else if (buf.contains(QRegExp("^\\s*[a-zA-Z]+\\s*=\\s*[a-zA-Z0-9/]+\\s*$", FALSE, FALSE))) {
QTextStream tmp (buf, IO_ReadOnly);
QString name, equals, value;
tmp >> name >> equals >> value;
if (name == "lang") {
lang = value;
}
- cout << name << " = " << value << "\n";
buf = t.readLine();
}
// comments
else if (buf.contains(QRegExp("^\\s*#"))) {
buf = t.readLine();
} else { // blank line, or garbage
buf = t.readLine();
}
}
f.close();
}
}
// Keys::setKey {{{2
void Keys::setKey(const int row, const int qcode, const ushort unicode,
const int width, QPixmap *pix) {
Key * key;
key = new Key;
key->qcode = qcode;
key->unicode = unicode;
key->width = width;
// share key->pressed between same keys
bool found = 0;
for (int i = 1; i <= 5; i++) {
diff --git a/inputmethods/multikey/keyboard.h b/inputmethods/multikey/keyboard.h
index c2efe10..8ca50ea 100644
--- a/inputmethods/multikey/keyboard.h
+++ b/inputmethods/multikey/keyboard.h
@@ -63,64 +63,65 @@ public:
ushort shift(const ushort);
QPixmap *pix(const int row, const int col);
int numKeys(const int row);
void setKeysFromFile(const char *filename);
void setKey(const int row, const int qcode, const ushort unicode,
const int width, QPixmap *pix);
void setPressed(const int row, const int col, const bool pressed);
QString lang;
QString title;
private:
typedef struct Key {
int qcode; // are qt key codes just unicode values?
ushort unicode;
int width; // not pixels but relative key width. normal key is 2
// only needed for keys like ctrl that can have multiple keys pressed at once
bool *pressed;
QPixmap *pix;
};
QList<Key> keys[6];
QMap<ushort,ushort> shiftMap;
};
class Keyboard : public QFrame
{
Q_OBJECT
public:
Keyboard( QWidget* parent=0, const char* name=0, WFlags f=0 );
+ ~Keyboard();
void resetState();
void mousePressEvent(QMouseEvent*);
void mouseReleaseEvent(QMouseEvent*);
void resizeEvent(QResizeEvent*);
void paintEvent(QPaintEvent* e);
//void timerEvent(QTimerEvent* e);
void drawKeyboard( QPainter &p, int row = -1, int col = -1);
QSize sizeHint() const;
signals:
void key( ushort scancode, ushort unicode, ushort modifiers, bool, bool );
private slots:
void repeat();
void togglePickboard(bool on_off);
void setMapToDefault();
void setMapToFile(QString file);
private:
int getKey( int &w, int j = -1 );
void clearHighlight();
bool *shift;
bool *lock;
bool *ctrl;
bool *alt;
uint useLargeKeys:1;
uint usePicks:1;