summaryrefslogtreecommitdiff
path: root/noncore/applets/keyhelper/keyhelperapplet/applet/KeyHelper.cpp
blob: 4afdc1f4b5a2d946d3fe250d7c6d0b93921d2c77 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
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++;
    }
}