/***************************************************************************
* 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 . *
* *
***************************************************************************/
#include "common.h"
#include "dictwidget.h"
#include "adddictdialog.h"
#include "dictmodel.h"
#include "rulemodel.h"
#include "ui_dictwidget.h"
#include
SkkDictWidget::SkkDictWidget(QWidget* parent): FcitxQtConfigUIWidget(parent)
,m_ui(new Ui::SkkDictWidget)
{
m_ui->setupUi(this);
m_dictModel = new DictModel(this);
m_ruleModel = new RuleModel(this);
m_ui->ruleLabel->setText(_("&Rule:"));
m_ui->dictionaryView->setModel(m_dictModel);
m_ui->ruleComboBox->setModel(m_ruleModel);
connect(m_ui->addDictButton, SIGNAL(clicked(bool)), this, SLOT(addDictClicked()));
connect(m_ui->defaultDictButton, SIGNAL(clicked(bool)), this, SLOT(defaultDictClicked()));
connect(m_ui->removeDictButton, SIGNAL(clicked(bool)), this, SLOT(removeDictClicked()));
connect(m_ui->moveUpDictButton, SIGNAL(clicked(bool)), this, SLOT(moveUpDictClicked()));
connect(m_ui->moveDownDictButton, SIGNAL(clicked(bool)), this, SLOT(moveDownClicked()));
connect(m_ui->ruleComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(ruleChanged(int)));
load();
}
SkkDictWidget::~SkkDictWidget()
{
delete m_ui;
}
QString SkkDictWidget::addon()
{
return "fcitx-skk";
}
QString SkkDictWidget::title()
{
return _("Dictionary Manager");
}
QString SkkDictWidget::icon()
{
return "fcitx-skk";
}
void SkkDictWidget::load()
{
m_dictModel->load();
FILE* fp = FcitxXDGGetFileWithPrefix("skk", "rule", "r", NULL);
QString sline;
do {
if (!fp) {
break;
}
QFile f;
QByteArray line;
if (f.open(fp, QIODevice::ReadOnly)) {;
line = f.readLine();
f.close();
}
fclose(fp);
sline = QString::fromUtf8(line).trimmed();
if (sline.isEmpty()) {
sline = "default";
}
} while(0);
m_ruleModel->load();
int idx = m_ruleModel->findRule(sline);
idx = idx < 0 ? 0 : idx;
m_ui->ruleComboBox->setCurrentIndex(idx);
Q_EMIT changed(false);
}
void SkkDictWidget::save()
{
m_dictModel->save();
QString name = m_ruleModel->data(m_ruleModel->index(m_ui->ruleComboBox->currentIndex(), 0), Qt::UserRole).toString();
FILE* fp = FcitxXDGGetFileUserWithPrefix("skk", "rule", "w", NULL);
if (!fp) {
return;
}
QFile f;
if (f.open(fp, QIODevice::WriteOnly)) {
f.write(name.toUtf8());
f.close();
}
fclose(fp);
Q_EMIT changed(false);
}
void SkkDictWidget::addDictClicked()
{
AddDictDialog dialog;
int result = dialog.exec();
if (result == QDialog::Accepted) {
m_dictModel->add(dialog.dictionary());
Q_EMIT changed(true);
}
}
void SkkDictWidget::defaultDictClicked()
{
m_dictModel->defaults();
Q_EMIT changed(true);
}
void SkkDictWidget::removeDictClicked()
{
if (m_ui->dictionaryView->currentIndex().isValid()) {
m_dictModel->removeRow(m_ui->dictionaryView->currentIndex().row());
Q_EMIT changed(true);
}
}
void SkkDictWidget::moveUpDictClicked()
{
int row = m_ui->dictionaryView->currentIndex().row();
if (m_dictModel->moveUp(m_ui->dictionaryView->currentIndex())) {
m_ui->dictionaryView->selectionModel()->setCurrentIndex(
m_dictModel->index(row - 1), QItemSelectionModel::ClearAndSelect);
Q_EMIT changed(true);
}
}
void SkkDictWidget::moveDownClicked()
{
int row = m_ui->dictionaryView->currentIndex().row();
if (m_dictModel->moveDown(m_ui->dictionaryView->currentIndex())) {
m_ui->dictionaryView->selectionModel()->setCurrentIndex(
m_dictModel->index(row + 1), QItemSelectionModel::ClearAndSelect);
Q_EMIT changed(true);
}
}
void SkkDictWidget::ruleChanged(int )
{
Q_EMIT changed(true);
}