Diffstat (limited to 'noncore/applets/keyhelper/keyhelperapplet/applet') (more/less context) (ignore whitespace changes)
8 files changed, 1064 insertions, 0 deletions
diff --git a/noncore/applets/keyhelper/keyhelperapplet/applet/KeyHelper.cpp b/noncore/applets/keyhelper/keyhelperapplet/applet/KeyHelper.cpp new file mode 100644 index 0000000..4afdc1f --- a/dev/null +++ b/noncore/applets/keyhelper/keyhelperapplet/applet/KeyHelper.cpp @@ -0,0 +1,112 @@ +#include "KeyHelper.h" +#include <opie2/okeyfilter.h> + +KeyHelper::KeyHelper() +{ + qDebug("KeyHelper::KeyHelper()"); + load(); + + m_oAction.setKeyModifiers(&m_oModifiers); + m_oAction.setKeyMappings(&m_oMappings); + m_oAction.setKeyExtensions(&m_oExtensions); + m_oAction.setKeyRepeater(&m_oRepeater); + m_oExtensions.setKeyModifiers(&m_oModifiers); +} + +KeyHelper::~KeyHelper() +{ + unset(); + qDebug("KeyHelper::~KeyHelper()"); +} + +bool KeyHelper::filter(int unicode, int keycode, int modifiers, + bool isPress, bool autoRepeat) +{ + m_oAction.setAction(unicode, keycode, modifiers, + isPress, autoRepeat); + return(m_oAction.doAction()); +} + +void KeyHelper::unset() +{ + Opie::Core::OKeyFilter::inst()->remHandler(this);; +} + +void KeyHelper::set() +{ + Opie::Core::OKeyFilter::inst()->addHandler(this); + m_oModifiers.resetStates(); +} + +void KeyHelper::enable() +{ + m_oAction.enable(); +} + +void KeyHelper::disable() +{ + m_oAction.disable(); + m_oRepeater.stop(); +} + +bool KeyHelper::load(const QString& file) +{ + KeycfgReader oReader; + oReader.setKeyModifiers(&m_oModifiers); + oReader.setKeyMappings(&m_oMappings); + oReader.setKeyExtensions(&m_oExtensions); + oReader.setKeyRepeater(&m_oRepeater); + + bool success; + if(file.length() == 0){ + success = oReader.load(); + } else if(file[0] == '/'){ + success = oReader.load(file); + } else { + //QString filepath = QString(::getenv("HOME")) + "/Settings/" + file; + QString filepath = QDir::homeDirPath() + "/Settings/" + file; + success = oReader.load(filepath); + } + if(success == false){ + qDebug("config xml load error"); + setDefault(); + } + return(success); +} + +bool KeyHelper::reload(const QString& file) +{ + m_oModifiers.reset(); + m_oMappings.reset(); + m_oExtensions.reset(); + m_oRepeater.reset(); + + return(load(file)); +} + +void KeyHelper::setDefault() +{ + /* default settings */ + m_oExtensions.assign("switch", Qt::Key_F12, + m_oModifiers.getMask("Shift"), KeyNames::getCode("Shift")); + m_oExtensions.assign("select", Qt::Key_F11, + m_oModifiers.getMask("Shift"), KeyNames::getCode("Shift")); +} + +void KeyHelper::statistics() +{ + m_oModifiers.statistics(); + m_oMappings.statistics(); + m_oExtensions.statistics(); + m_oRepeater.statistics(); +} + +void KeyHelper::dumpkeymap() +{ + const QWSServer::KeyMap* m = QWSServer::keyMap(); + qWarning("KeyHelper::dumpkeymap()"); + while(m->key_code != 0){ + qWarning(" [%04x][%04x][%04x][%04x]", m->key_code, m->unicode, m->shift_unicode, m->ctrl_unicode); + m++; + } +} diff --git a/noncore/applets/keyhelper/keyhelperapplet/applet/KeyHelper.h b/noncore/applets/keyhelper/keyhelperapplet/applet/KeyHelper.h new file mode 100644 index 0000000..aabb6eb --- a/dev/null +++ b/noncore/applets/keyhelper/keyhelperapplet/applet/KeyHelper.h @@ -0,0 +1,42 @@ +#ifndef _KEY_HELPER_H_ +#define _KEY_HELPER_H_ + +#include <qdir.h> +#include <qwindowsystem_qws.h> +#include "KeyNames.h" +#include "KeyMappings.h" +#include "KeyModifiers.h" +#include "KeyExtensions.h" +#include "KeyRepeater.h" +#include "KeyAction.h" +#include "KeycfgReader.h" + +class KeyHelper : public QWSServer::KeyboardFilter +{ +public: + KeyHelper(); + virtual ~KeyHelper(); + bool filter(int unicode, int keycode, int modifiers, + bool isPress, bool autoRepeat); + + void enable(); + void disable(); + void set(); + void unset(); + void statistics(); + void dumpkeymap(); + bool reload(const QString& file=QString::null); +private: + friend class KeyHelperWidget; + + bool load(const QString& file=QString::null); + void setDefault(); + + KeyAction m_oAction; + KeyMappings m_oMappings; + KeyModifiers m_oModifiers; + KeyExtensions m_oExtensions; + KeyRepeater m_oRepeater; +}; + +#endif /* _KEY_HELPER_H_ */ diff --git a/noncore/applets/keyhelper/keyhelperapplet/applet/KeyHelperApplet.cpp b/noncore/applets/keyhelper/keyhelperapplet/applet/KeyHelperApplet.cpp new file mode 100644 index 0000000..28304d7 --- a/dev/null +++ b/noncore/applets/keyhelper/keyhelperapplet/applet/KeyHelperApplet.cpp @@ -0,0 +1,65 @@ +#include "KeyHelperApplet.h" +#include "KeyHelperWidget.h" + +#if 0 +KeyHelperApplet::KeyHelperApplet() + : widget(0), ref(0) +{ + qDebug("KeyHelperApplet::KeyHelperApplet()"); +} + +KeyHelperApplet::~KeyHelperApplet() +{ + qDebug("KeyHelperApplet::~KeyHelperApplet()"); + delete widget; +} + +QWidget* KeyHelperApplet::applet(QWidget* parent) +{ + if(!widget){ + widget = new KeyHelperWidget(parent); + } + return(widget); +} + +int KeyHelperApplet::position() const +{ + return(6); +} + +QRESULT KeyHelperApplet::queryInterface(const QUuid& uuid, + QUnknownInterface** iface) +{ + *iface = 0; + + if(QFile::exists("/tmp/disable-keyhelper") + || QFile::exists("/mnt/card/disable-keyhelper") + || QFile::exists("/mnt/cf/disable-keyhelper")){ + return QS_FALSE; + } + + if(uuid == IID_QUnknown){ + *iface = this; + } else if(uuid == IID_TaskbarApplet){ + *iface = this; + } + + if(*iface){ + (*iface)->addRef(); + } + return QS_OK; +} + +Q_EXPORT_INTERFACE() +{ + Q_CREATE_INSTANCE(KeyHelperApplet) +} + +#else +#include <opie2/otaskbarapplet.h> + +using namespace Opie::Ui; + +EXPORT_OPIE_APPLET_v1( KeyHelperWidget ) + +#endif diff --git a/noncore/applets/keyhelper/keyhelperapplet/applet/KeyHelperApplet.h b/noncore/applets/keyhelper/keyhelperapplet/applet/KeyHelperApplet.h new file mode 100644 index 0000000..ef164dc --- a/dev/null +++ b/noncore/applets/keyhelper/keyhelperapplet/applet/KeyHelperApplet.h @@ -0,0 +1,26 @@ +#ifndef _KEY_HELPER_APPLET_H_ +#define _KEY_HELPER_APPLET_H_ + +#if 0 +#include <qpe/taskbarappletinterface.h> +#include "KeyHelperWidget.h" + +class KeyHelperApplet : public TaskbarAppletInterface +{ +public: + KeyHelperApplet(); + virtual ~KeyHelperApplet(); + + QRESULT queryInterface(const QUuid&, QUnknownInterface**); + Q_REFCOUNT + + virtual QWidget* applet(QWidget* parent); + virtual int position() const; +private: + KeyHelperWidget* widget; + ulong ref; +}; + +#endif + +#endif /* _KEY_HELPER_APPLET_H_ */ diff --git a/noncore/applets/keyhelper/keyhelperapplet/applet/KeyHelperWidget.cpp b/noncore/applets/keyhelper/keyhelperapplet/applet/KeyHelperWidget.cpp new file mode 100644 index 0000000..7beb511 --- a/dev/null +++ b/noncore/applets/keyhelper/keyhelperapplet/applet/KeyHelperWidget.cpp @@ -0,0 +1,490 @@ +#include "KeyHelperWidget.h" +#include "QSafeDataStream.h" +#include "KHUtil.h" + +QWidget* g_Widget = NULL; +int g_level = 0; + +static const char* _version_ = "1.2.2"; + +KeyHelperWidget::KeyHelperWidget(QWidget* parent, const char* name) + : QLabel(parent, name),disabled(Resource::loadPixmap("zkb-disabled")) +{ + qDebug("KeyHelperWidget::KeyHelperWidget()"); + g_Widget = this; + m_defHandler = NULL; + //m_reset = false; + m_reset = true; + m_useFilter = false; + m_pHelper = NULL; + m_status = false; + + //unset(); + initDebugLevel(); + + m_pHelper = new KeyHelper(); + + //qApp->installEventFilter(this); + + connect(qwsServer, + SIGNAL(windowEvent(QWSWindow*, QWSServer::WindowEvent)), + this, + SLOT(windowEvent(QWSWindow*, QWSServer::WindowEvent))); + + m_pChannel = new QCopChannel("QPE/KeyHelper", this); + connect(m_pChannel, SIGNAL(received(const QCString&, const QByteArray&)), + this, SLOT(receiveMessage(const QCString&, const QByteArray&))); + m_pSysChannel = new QCopChannel("QPE/System", this); + connect(m_pSysChannel, SIGNAL(received(const QCString&, const QByteArray&)), + this, SLOT(sysMessage(const QCString&, const QByteArray&))); + + //AppLnkManager::init(); + setFixedWidth ( AppLnk::smallIconSize() ); + setFixedHeight ( AppLnk::smallIconSize() ); + setPixmap(disabled); + init(); +} + +KeyHelperWidget::~KeyHelperWidget() +{ + qDebug("KeyHelperWidget::~KeyHelperWidget()"); + disconnect(qwsServer, + SIGNAL(windowEvent(QWSWindow*, QWSServer::WindowEvent)), + this, + SLOT(windowEvent(QWSWindow*, QWSServer::WindowEvent))); + disconnect(m_pChannel, SIGNAL(received(const QCString&, const QByteArray&)), + this, SLOT(receiveMessage(const QCString&, const QByteArray&))); + unset(); + if (m_pHelper) delete m_pHelper; + if (m_pChannel) delete m_pChannel; + if (m_pSysChannel) delete m_pSysChannel; + m_pHelper = NULL; + setDebugLevel(0); +} + +void KeyHelperWidget::mouseReleaseEvent(QMouseEvent*) +{ + ConfigEx::getInstance("keyhelper").setConfig("keyhelper"); +} + +void KeyHelperWidget::receiveMessage( + const QCString& msg, const QByteArray& data) +{ + if(m_pHelper == NULL){ + return; + } + QSafeDataStream stream(data, IO_ReadOnly); + if(msg == "event(int,int,int,int,int)"){ + int unicode; + int keycode; + int modifiers; + int isPress; + int autoRepeat; + stream >> unicode >> keycode >> modifiers >> isPress >> autoRepeat; + doEvent(unicode, keycode, modifiers, isPress, autoRepeat); + } else if(msg == "event(QString,int)"){ + QString key; + int isPress; + stream >> key >> isPress; + doEvent(key, isPress); + } else if(msg == "enable()"){ + enable(); + } else if(msg == "disable()"){ + disable(); + } else if(msg == "pause()"){ + pause(); + } else if(msg == "restart()"){ + restart(); + } else if(msg == "reload()"){ + m_xmlfile = QString::null; + doReload(); + } else if(msg == "reload(QString)"){ + stream >> m_xmlfile; + doReload(false); + } else if(msg == "version()"){ + version(); + } else if(msg == "repeater(int)"){ + int mode; + stream >> mode; + m_pHelper->m_oRepeater.setMode(mode); + } else if(msg == "hook(QString)"){ + QString s; + stream >> s; + m_pHelper->m_oAction.setHook(s.local8Bit()); + } else if(msg == "unhook()"){ + m_pHelper->m_oAction.setHook(""); + } else if(msg == "config()"){ + ConfigEx::getInstance("keyhelper").setConfig("keyhelper"); + } else if(msg == "config(QString)"){ + QString name; + stream >> name; + if(name == QString::null){ + ConfigEx::getInstance("keyhelper").setConfig("keyhelper"); + } else { + ConfigEx::getInstance("keyhelper").setConfig(name); + } + } else if(msg == "capture(int)"){ + int enable; + stream >> enable; + m_pHelper->m_oAction.setCapture(enable); + } else if(msg == "statistics()"){ + int level = g_level; + if(level == 0){ + setDebugLevel(1); + } + m_pHelper->statistics(); + if(level == 0){ + setDebugLevel(0); + } + } else if(msg == "dumpkeymap()"){ + int level = g_level; + if(level == 0){ + setDebugLevel(1); + } + m_pHelper->dumpkeymap(); + if(level == 0){ + setDebugLevel(0); + } + } else if(msg == "debug(int)"){ + int level; + stream >> level; + setDebugLevel(level); + } +} + +void KeyHelperWidget::doReload(bool showstatus) +{ + ConfigEx& cfg = ConfigEx::getInstance("keyhelper"); + QString oldgroup = cfg.getGroup(); + cfg.setGroup("Global"); + m_status = false; + if(showstatus && (cfg.readNumEntry("ShowStatusOnReload", 1) == 1)){ + m_status = true; + version(); + QCopEnvelope("QPE/System", "busy()"); + } + cfg.setGroup(oldgroup); + QTimer::singleShot(0, this, SLOT(reload())); +} + +void KeyHelperWidget::doEvent(int unicode, int keycode, int modifiers, int isPress, int autoRepeat) +{ + if(isPress == 0 || isPress == 1){ + m_pHelper->m_oAction.setAction(unicode, keycode, modifiers, isPress, autoRepeat); + m_pHelper->m_oAction.doAction(); + } else { + /* press & release */ + m_pHelper->m_oAction.setAction(unicode, keycode, modifiers, 1, autoRepeat); + m_pHelper->m_oAction.doAction(); + m_pHelper->m_oAction.setAction(unicode, keycode, modifiers, 0, autoRepeat); + m_pHelper->m_oAction.doAction(); + } +} + +void KeyHelperWidget::doEvent(const QString& key, int isPress) +{ + int unicode,keycode; + int modifiers = 0; + int pos; + QString keyname = key; + pos = keyname.find("+SHIFT", 0, FALSE); + if(pos > 0){ + modifiers |= Qt::ShiftButton; + keyname.remove(pos, 6); + } + pos = keyname.find("+CTRL", 0, FALSE); + if(pos > 0){ + modifiers |= Qt::ControlButton; + keyname.remove(pos, 5); + } + pos = keyname.find("+ALT", 0, FALSE); + if(pos > 0){ + modifiers |= Qt::AltButton; + keyname.remove(pos, 4); + } + if(keyname.length() > 1){ + unicode = 0xffff; + keycode = KeyNames::getCode(keyname); + /* get unicode */ + const QWSServer::KeyMap* m; + for(m=QWSServer::keyMap(); m->key_code != 0; m++){ + if(m->key_code == keycode){ + if(modifiers & Qt::ControlButton){ + unicode = m->ctrl_unicode; + } else if(modifiers & Qt::ShiftButton){ + unicode = m->shift_unicode; + } else { + unicode = m->unicode; + } + break; + } + } + } else { + const QWSServer::KeyMap* m; + keycode = 0; + unicode = keyname[0].unicode(); + /* check unicode */ + for(m=QWSServer::keyMap(); keycode == 0 && m->key_code != 0; m++){ + if(m->unicode == unicode){ + keycode = m->key_code; + break; + } + } + /* check shift_unicode */ + for(m=QWSServer::keyMap(); keycode == 0 && m->key_code != 0; m++){ + if(m->shift_unicode == unicode){ + keycode = m->key_code; + modifiers |= Qt::ShiftButton; + break; + } + } + /* check ctrl_unicode */ + for(m=QWSServer::keyMap(); keycode == 0 && m->key_code != 0; m++){ + if(m->ctrl_unicode == unicode){ + keycode = m->key_code; + modifiers |= Qt::ControlButton; + break; + } + } + } + doEvent(unicode, keycode, modifiers, isPress, 0); +} + +void KeyHelperWidget::sysMessage( + const QCString& msg, const QByteArray& data) +{ + QSafeDataStream stream(data, IO_ReadOnly); + if(msg == "linkChanged(QString)"){ + ConfigEx& cfg = ConfigEx::getInstance("keyhelper"); + QString oldgroup = cfg.getGroup(); + if(cfg.readNumEntry("DetectLinkChange", 1) == 1){ + AppLnkManager::init(true); + reload(); + } + cfg.setGroup(oldgroup); + } +} + +void MsgHandler(QtMsgType type, const char* msg) +{ + switch(type){ + case QtDebugMsg: + if(g_level >= 2){ + syslog(LOG_LOCAL5|LOG_DEBUG, + "<2>%s", msg); + } + break; + case QtWarningMsg: + if(g_level >= 1){ + syslog(LOG_LOCAL5|LOG_DEBUG, + "<1>%s", msg); + } + break; + default: + break; + } +} + +void KeyHelperWidget::initDebugLevel() +{ + ConfigEx& cfg = ConfigEx::getInstance("keyhelper"); + cfg.setGroup("Global"); + + int level = cfg.readNumEntry("DebugLevel", 0); + setDebugLevel(level); +} + +void KeyHelperWidget::setDebugLevel(int level) +{ +#ifdef QT_QWS_EBX + static bool noDebug = true; + g_level = level; + if(g_level > 0){ + if(noDebug){ + m_defHandler = qInstallMsgHandler(MsgHandler); + noDebug = false; + } + } else { + qInstallMsgHandler(m_defHandler); + noDebug = true; + } +#endif +} + +void KeyHelperWidget::enable() +{ + m_enable = true; + m_pHelper->enable(); + //set(); + QTimer::singleShot(0, this, SLOT(set())); +} + +void KeyHelperWidget::disable() +{ + m_enable = false; + m_pHelper->disable(); + unset(); +} + +void KeyHelperWidget::pause() +{ + m_saved = m_enable; + disable(); +} + +void KeyHelperWidget::restart() +{ + if(m_saved){ + enable(); + } +} + +void KeyHelperWidget::reload() +{ + disable(); + ConfigEx& cfg = ConfigEx::getInstance("keyhelper"); + cfg.reload(); + if(m_pHelper->reload(m_xmlfile) == false){ + if(m_status){ + Global::statusMessage("KeyHelper: Load Error"); + } + } + init(); + if(m_status){ + QCopEnvelope e("QPE/System", "notBusy(QString)"); + const QString app = KHUtil::currentApp(); + e << app; + m_status = false; + } +} + +void KeyHelperWidget::version() +{ + QString ver = "KeyHelper "; + ver.append(_version_); + Global::statusMessage(ver); +} + +void KeyHelperWidget::init() +{ + AppLnkManager::init(); +#if 0 + if(m_pHelper == NULL){ + m_pHelper = new KeyHelper(); + } +#endif + loadUseFilterApps(); + enable(); +} + +void KeyHelperWidget::set() +{ + if(m_pHelper != NULL && m_enable == true && m_useFilter == false){ + qWarning("KeyHelperWidget::set()"); + m_pHelper->set(); + } +} + +void KeyHelperWidget::unset() +{ + m_pHelper->unset(); +} + +void KeyHelperWidget::loadUseFilterApps() +{ + ConfigEx& cfg = ConfigEx::getInstance("keyhelper"); + + cfg.setGroup("Global"); + m_apps = cfg.readListEntry("UseFilterApps", ','); + + if(m_apps.isEmpty()){ + /* default */ + m_apps.append("CRIM"); + m_apps.append("Jpn50Pad"); + m_apps.append("JpnKtnPad"); + m_apps.append("JpnNumPad"); + m_apps.append("JpnSymPad"); + m_apps.append("Keyboard"); + m_apps.append("IMWidget"); /* IMKit */ + m_apps.append("POBox"); /* QPOBox */ + } +} + +#if 0 +void KeyHelperWidget::windowEvent(QWSWindow* w, QWSServer::WindowEvent e) +{ + if(m_apps.contains(w->name())){ + switch(e){ + case QWSServer::Hide: + case QWSServer::Destroy: + m_useFilter = false; + //m_reset = true; + QTimer::singleShot(0, this, SLOT(set())); + break; + case QWSServer::Create: + case QWSServer::Raise: + case QWSServer::Show: + m_useFilter = true; + //m_reset = false; + m_reset = true; + break; + default: + break; + } + } else if(w->client()->identity() != NULL && w->name() != NULL){ + switch(e){ +#if 0 + case QWSServer::Create: + case QWSServer::Hide: + if(m_useFilter == false && m_reset){ + m_reset = false; + set(); + //QTimer::singleShot(0, this, SLOT(set())); + } + break; +#else + case QWSServer::Hide: + case QWSServer::Destroy: + //if(m_useFilter == false && m_reset){ + if(m_reset){ + m_reset = false; + set(); + //QTimer::singleShot(0, this, SLOT(set())); + } + break; + case QWSServer::Create: + case QWSServer::Raise: + case QWSServer::Show: + m_reset = true; + break; +#endif + default: +#if 0 + if(m_reset == true){ + m_reset = false; + set(); + } +#endif + break; + } + } + if(w->name() != NULL){ + qWarning("[%s][%s][%x][%s]", + w->name().latin1(), + w->caption().latin1(), + e, + w->client()->identity().latin1()); + } +} + +#endif + +bool KeyHelperWidget::eventFilter(QObject* o, QEvent* e) +{ + return QWidget::eventFilter(o, e); +} + +int KeyHelperWidget::position() +{ + return 3; +} diff --git a/noncore/applets/keyhelper/keyhelperapplet/applet/KeyHelperWidget.h b/noncore/applets/keyhelper/keyhelperapplet/applet/KeyHelperWidget.h new file mode 100644 index 0000000..4798c5c --- a/dev/null +++ b/noncore/applets/keyhelper/keyhelperapplet/applet/KeyHelperWidget.h @@ -0,0 +1,75 @@ +#ifndef _KEY_HELPER_WIDGET_H_ +#define _KEY_HELPER_WIDGET_H_ + +#include <qwidget.h> +#include <qlabel.h> +#include <qpixmap.h> +#include <qtimer.h> +#include <qaccel.h> +#include <opie2/otaskbarapplet.h> +#include <opie2/okeyfilter.h> + +#include <qpe/qcopenvelope_qws.h> +#include <qpe/qpeapplication.h> +#include <qpe/global.h> +#include <qpe/resource.h> +#include "KeyHelper.h" +#include "AppLnkManager.h" +#include "ConfigEx.h" + +#include <syslog.h> + +Q_EXPORT void MsgHandler(QtMsgType type, const char* msg); + +class KeyHelperWidget : public QLabel +{ + Q_OBJECT +public: + KeyHelperWidget(QWidget* parent = 0, const char* name=0); + ~KeyHelperWidget(); + static int position(); + + virtual bool eventFilter(QObject* o, QEvent* e); + +public slots: + //void windowEvent(QWSWindow* w, QWSServer::WindowEvent e); +protected: + QCopChannel* m_pChannel; + QCopChannel* m_pSysChannel; + QPixmap disabled; + +protected slots: + void receiveMessage(const QCString& msg, const QByteArray& data); + void sysMessage(const QCString& msg, const QByteArray& data); + void reload(); + void set(); + void unset(); + void init(); + void mouseReleaseEvent(QMouseEvent*); + +private: + void loadUseFilterApps(); + void enable(); + void disable(); + void pause(); + void restart(); + void version(); + void setDebugLevel(int level); + void initDebugLevel(); + + bool m_reset; + bool m_useFilter; + bool m_status; + QString m_xmlfile; + msg_handler m_defHandler; + bool m_enable; + bool m_saved; + QStringList m_apps; + KeyHelper* m_pHelper; +private slots: + void doReload(bool showstatus=true); + void doEvent(int,int,int,int,int); + void doEvent(const QString&, int); +}; + +#endif /* _KEY_HELPER_WIDGET_H_ */ diff --git a/noncore/applets/keyhelper/keyhelperapplet/applet/QSafeDataStream.cpp b/noncore/applets/keyhelper/keyhelperapplet/applet/QSafeDataStream.cpp new file mode 100644 index 0000000..69ba562 --- a/dev/null +++ b/noncore/applets/keyhelper/keyhelperapplet/applet/QSafeDataStream.cpp @@ -0,0 +1,203 @@ +#include "QSafeDataStream.h" + +#include <qstring.h> +#include <qstringlist.h> +#include <qdatetime.h> + +QSafeDataStream &QSafeDataStream::operator>>( Q_INT8 &i ) +{ + if(atEnd()){ + i = 0; + return *this; + } else { + return (QSafeDataStream&)QDataStream::operator>>(i); + } +} + +QSafeDataStream &QSafeDataStream::operator>>( Q_UINT8 &i ) +{ + if(atEnd()){ + i = 0; + return *this; + } else { + return (QSafeDataStream&)QDataStream::operator>>(i); + } +} + +QSafeDataStream &QSafeDataStream::operator>>( Q_INT16 &i ) +{ + if(atEnd()){ + i = 0; + return *this; + } else { + return (QSafeDataStream&)QDataStream::operator>>(i); + } +} + +QSafeDataStream &QSafeDataStream::operator>>( Q_UINT16 &i ) +{ + if(atEnd()){ + i = 0; + return *this; + } else { + return (QSafeDataStream&)QDataStream::operator>>(i); + } +} + +QSafeDataStream &QSafeDataStream::operator>>( Q_INT32 &i ) +{ + if(atEnd()){ + i = 0; + return *this; + } else { + return (QSafeDataStream&)QDataStream::operator>>(i); + } +} + +QSafeDataStream &QSafeDataStream::operator>>( Q_UINT32 &i ) +{ + if(atEnd()){ + i = 0; + return *this; + } else { + return (QSafeDataStream&)QDataStream::operator>>(i); + } +} + +QSafeDataStream &QSafeDataStream::operator>>( Q_INT64 &i ) +{ + if(atEnd()){ + i = 0; + return *this; + } else { + return (QSafeDataStream&)QDataStream::operator>>(i); + } +} + +QSafeDataStream &QSafeDataStream::operator>>( Q_UINT64 &i ) +{ + if(atEnd()){ + i = 0; + return *this; + } else { + return (QSafeDataStream&)QDataStream::operator>>(i); + } +} + + +QSafeDataStream &QSafeDataStream::operator>>( float &f ) +{ + if(atEnd()){ + f = 0; + return *this; + } else { + return (QSafeDataStream&)QDataStream::operator>>(f); + } +} + +QSafeDataStream &QSafeDataStream::operator>>( double &f ) +{ + if(atEnd()){ + f = 0; + return *this; + } else { + return (QSafeDataStream&)QDataStream::operator>>(f); + } +} + +QSafeDataStream &QSafeDataStream::operator>>( char *&str ) +{ + if(atEnd()){ + str = 0; + return *this; + } else { + return (QSafeDataStream&)QDataStream::operator>>(str); + } +} + +QSafeDataStream &QSafeDataStream::readBytes( char *&s, uint &len ) +{ + if(atEnd()){ + s = 0; + len = 0; + return *this; + } else { + return (QSafeDataStream&)QDataStream::readBytes(s, len); + } +} + +QSafeDataStream &QSafeDataStream::readRawBytes( char *s, uint len ) +{ + if(atEnd()){ + return *this; + } else { + return (QSafeDataStream&)QDataStream::readRawBytes(s, len); + } +} + +QSafeDataStream &QSafeDataStream::operator>>( QString& s ) +{ + if(atEnd()){ + s = QString::null; + return *this; + } else { + return (QSafeDataStream&)(*((QDataStream*)this) >> s); + } +} + +QSafeDataStream &QSafeDataStream::operator>>( QStringList& list ) +{ + if(atEnd()){ + list.clear(); + return *this; + } else { + return (QSafeDataStream&)(*((QDataStream*)this) >> list); + } +} + +QSafeDataStream &QSafeDataStream::operator>>( QByteArray& a ) +{ + if(atEnd()){ + a.resize(0); + return *this; + } else { + return (QSafeDataStream&)(*((QDataStream*)this) >> a); + } +} + +QSafeDataStream &QSafeDataStream::operator>>( QCString& s ) +{ + if(atEnd()){ + s.resize(0); + return *this; + } else { + return (QSafeDataStream&)(*((QDataStream*)this) >> s); + } +} + +QSafeDataStream &QSafeDataStream::operator>>( QDate& d ) +{ + if(atEnd()){ + return *this; + } else { + return (QSafeDataStream&)(*((QDataStream*)this) >> d); + } +} + +QSafeDataStream &QSafeDataStream::operator>>( QTime& t ) +{ + if(atEnd()){ + return *this; + } else { + return (QSafeDataStream&)(*((QDataStream*)this) >> t); + } +} + +QSafeDataStream &QSafeDataStream::operator>>( QDateTime& dt ) +{ + if(atEnd()){ + return *this; + } else { + return (QSafeDataStream&)(*((QDataStream*)this) >> dt); + } +} diff --git a/noncore/applets/keyhelper/keyhelperapplet/applet/QSafeDataStream.h b/noncore/applets/keyhelper/keyhelperapplet/applet/QSafeDataStream.h new file mode 100644 index 0000000..2152b23 --- a/dev/null +++ b/noncore/applets/keyhelper/keyhelperapplet/applet/QSafeDataStream.h @@ -0,0 +1,51 @@ +#ifndef _QSAFEDATASTREAM_H_ +#define _QSAFEDATASTREAM_H_ + +#include <qdatastream.h> + +class QString; +class QStringList; +class QCString; +class QDate; +class QTime; +class QDateTime; + +class QSafeDataStream : public QDataStream +{ +public: + /* constructors */ + QSafeDataStream() + : QDataStream() {} + QSafeDataStream(QIODevice* d) + : QDataStream(d) {} + QSafeDataStream(QByteArray a, int mode) + : QDataStream(a, mode) {} + + /* read functions */ + QSafeDataStream &operator>>( Q_INT8 &i ); + QSafeDataStream &operator>>( Q_UINT8 &i ); + QSafeDataStream &operator>>( Q_INT16 &i ); + QSafeDataStream &operator>>( Q_UINT16 &i ); + QSafeDataStream &operator>>( Q_INT32 &i ); + QSafeDataStream &operator>>( Q_UINT32 &i ); + QSafeDataStream &operator>>( Q_INT64 &i ); + QSafeDataStream &operator>>( Q_UINT64 &i ); + + QSafeDataStream &operator>>( float &f ); + QSafeDataStream &operator>>( double &f ); + QSafeDataStream &operator>>( char *&str ); + + QSafeDataStream &readBytes( char *&, uint &len ); + QSafeDataStream &readRawBytes( char *, uint len ); + + QSafeDataStream &operator>>( QString& s ); + QSafeDataStream &operator>>( QStringList& list ); + QSafeDataStream &operator>>( QByteArray& a ); + QSafeDataStream &operator>>( QCString& s ); + QSafeDataStream &operator>>( QDate& d ); + QSafeDataStream &operator>>( QTime& t ); + QSafeDataStream &operator>>( QDateTime& dt ); + +}; + +#endif /* _QSAFEDATASTREAM_H_ */ |