#include #include #include #include #include #include #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(Opie::Core::OResource::loadPixmap("Tux", Opie::Core::OResource::SmallIcon)); 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