Diffstat (limited to 'examples/inputmethod/exampleboardimpl.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r-- | examples/inputmethod/exampleboardimpl.cpp | 157 |
1 files changed, 157 insertions, 0 deletions
diff --git a/examples/inputmethod/exampleboardimpl.cpp b/examples/inputmethod/exampleboardimpl.cpp new file mode 100644 index 0000000..36989a2 --- a/dev/null +++ b/examples/inputmethod/exampleboardimpl.cpp @@ -0,0 +1,157 @@ +#include <qwidget.h> +#include <qcheckbox.h> +#include <qlabel.h> +#include <qsignalmapper.h> +#include <qpushbutton.h> +#include <qpe/resource.h> + +#include "exampleboardimpl.h" + +ExampleBoard::ExampleBoard(QWidget* par, WFlags fl ) + : QHBox(par, "name", fl ) +{ + QCheckBox *box1 = new QCheckBox(tr("Alt"),this); + connect(box1,SIGNAL(toggled(bool)), + this,SLOT(slotAlt(bool))); + m_alt = box1; + box1 = new QCheckBox(tr("Shift"),this ); + connect(box1,SIGNAL(toggled(bool)), + this,SLOT(slotShift(bool))); + m_shi = box1; + box1 = new QCheckBox(tr("Ctrl","Control Shortcut on keyboard"),this ); + connect(box1,SIGNAL(toggled(bool)), + this,SLOT(slotCtrl(bool))); + m_ctrl = box1; + + QSignalMapper *map = new QSignalMapper(this); + QPushButton *btn = new QPushButton("a",this); + map->setMapping(btn,0); + connect(btn,SIGNAL(clicked()),map,SLOT(map())); + + btn = new QPushButton("b",this); + map->setMapping(btn,1); + connect(btn,SIGNAL(clicked()),map,SLOT(map())); + + btn = new QPushButton("c",this); + map->setMapping(btn,2); + connect(btn,SIGNAL(clicked()),map,SLOT(map())); + + connect(map,SIGNAL(mapped(int)), + this,SLOT(slotKey(int))); + resetState(); +} + +ExampleBoard::~ExampleBoard(){ +} + +void ExampleBoard::resetState(){ + m_state = 0; + m_shi->setChecked(false); + m_ctrl->setChecked(false); + m_alt->setChecked(false); +} + +void ExampleBoard::slotKey(int _ke){ + int ke = _ke + 0x61; // 0 + 65 = 0x41 == A + if(m_state & ShiftButton ) + ke -= 0x20; + + /* + * Send the key + * ke is the unicode + * _ke + 0x41 is the keycode + * m_state Normally the state + * down/up + * auto repeat + */ + emit key(ke, _ke +0x41,m_state,true,false); + emit key(ke, _ke + 0x41,m_state,false,false); +} + +void ExampleBoard::slotShift(bool b){ + if(b) + m_state |= ShiftButton; + else + m_state &= ~ShiftButton; +} + +void ExampleBoard::slotAlt(bool b){ + if(b) + m_state |= AltButton; + else + m_state &= ~AltButton; +} + +void ExampleBoard::slotCtrl(bool b){ + if(b) + m_state |= ControlButton; + else + m_state &= ~ControlButton; +} + + + +ExampleboardImpl::ExampleboardImpl() + : m_pickboard(0), m_icn(0) +{ +} + +ExampleboardImpl::~ExampleboardImpl() +{ + delete m_pickboard; + delete m_icn; +} + +QWidget *ExampleboardImpl::inputMethod( QWidget *parent, Qt::WFlags f ) +{ + if ( !m_pickboard ) + m_pickboard = new ExampleBoard( parent, f ); + return m_pickboard; +} + +void ExampleboardImpl::resetState() +{ + if ( m_pickboard ) + m_pickboard->resetState(); +} + +QPixmap *ExampleboardImpl::icon() +{ + if ( !m_icn ) + m_icn = new QPixmap(Resource::loadPixmap("Tux")); + return m_icn; +} + +QString ExampleboardImpl::name() +{ + return QObject::tr("Example Input"); +} + +void ExampleboardImpl::onKeyPress( QObject *receiver, const char *slot ) +{ + if ( m_pickboard ) + QObject::connect( m_pickboard, SIGNAL(key(ushort,ushort,ushort,bool,bool)), receiver, slot ); +} + +#ifndef QT_NO_COMPONENT +QRESULT ExampleboardImpl::queryInterface( const QUuid &uuid, QUnknownInterface **iface ) +{ + *iface = 0; + if ( uuid == IID_QUnknown ) + *iface = this; + else if ( uuid == IID_InputMethod ) + *iface = this; + else + return QS_FALSE; + + if ( *iface ) + (*iface)->addRef(); + return QS_OK; +} + +Q_EXPORT_INTERFACE() +{ + Q_CREATE_INSTANCE( ExampleboardImpl ) +} +#endif + |