File: rulemodel.cpp

package info (click to toggle)
fcitx-kkc 0.1.4-3.1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 504 kB
  • sloc: cpp: 1,026; ansic: 607; makefile: 6
file content (87 lines) | stat: -rw-r--r-- 2,896 bytes parent folder | download | duplicates (5)
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
/***************************************************************************
 *   Copyright (C) 2013~2013 by CSSlayer                                   *
 *   wengxt@gmail.com                                                      *
 *                                                                         *
 *  This program is free software: you can redistribute it and/or modify   *
 *  it under the terms of the GNU General Public License as published by   *
 *  the Free Software Foundation, either version 3 of the License, or      *
 *  (at your option) any later version.                                    *
 *                                                                         *
 *  This program is distributed in the hope that it will be useful,        *
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of         *
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the          *
 *  GNU General Public License for more details.                           *
 *                                                                         *
 *  You should have received a copy of the GNU General Public License      *
 *  along with this program.  If not, see <http://www.gnu.org/licenses/>.  *
 *                                                                         *
 ***************************************************************************/

#include "rulemodel.h"
#include <libkkc/libkkc.h>

RuleModel::RuleModel(QObject* parent): QAbstractListModel(parent)
{
}

RuleModel::~RuleModel()
{
}

void RuleModel::load()
{
    beginResetModel();
    int length;
    KkcRuleMetadata** rules = kkc_rule_list(&length);
    for (int i = 0; i < length; i++) {
        int priority;
        g_object_get(G_OBJECT(rules[i]), "priority", &priority, NULL);
        if (priority < 70) {
            continue;
        }
        gchar* name, *label;
        g_object_get(G_OBJECT(rules[i]), "label", &label, "name", &name, NULL);
        m_rules << Rule(QString::fromUtf8(name), QString::fromUtf8(label));
        g_object_unref(rules[i]);
        g_free(name);
        g_free(label);
    }
    g_free(rules);
    endResetModel();
}

int RuleModel::rowCount(const QModelIndex& parent) const
{
    return m_rules.size();
}

QVariant RuleModel::data(const QModelIndex& index, int role) const
{
    if (!index.isValid()) {
        return QVariant();
    }

    if (index.row() >= m_rules.size() || index.column() != 0) {
        return QVariant();
    }

    switch(role) {
        case Qt::DisplayRole:
            return m_rules[index.row()].label();
        case Qt::UserRole:
            return m_rules[index.row()].name();
    }
    return QVariant();
}

int RuleModel::findRule(const QString& name)
{
    int i = 0;
    Q_FOREACH (const Rule& rule, m_rules) {
        if (rule.name() == name) {
            return i;
        }
        i ++;
    }
    return -1;
}