blob: 8670d9ff270e8a6f0a6689b64b8ae4c5775cf245 [file] [log] [blame]
// Copyright 2010-2015, Google Inc.
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
// * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
// * Neither the name of Google Inc. nor the names of its
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "gui/dictionary_tool/import_dialog.h"
#include <QtGui/QtGui>
#include "base/util.h"
#include "dictionary/user_dictionary_storage.h"
#include "dictionary/user_dictionary_importer.h"
namespace mozc {
namespace gui {
ImportDialog::ImportDialog(QWidget *parent)
: QDialog(parent,
// To disable context help on Windows.
Qt::WindowTitleHint | Qt::WindowSystemMenuHint) {
setupUi(this);
#ifdef OS_MACOSX
layout()->setContentsMargins(8, 12, 8, 8);
#endif
// Initialize combo boxes for lists of IMEs and character encodings.
ime_combobox_->addItem(
tr("Auto detection"),
static_cast<int>(UserDictionaryImporter::IME_AUTO_DETECT));
ime_combobox_->addItem(
tr("Google"),
static_cast<int>(UserDictionaryImporter::MOZC));
#ifdef OS_WIN
ime_combobox_->addItem(
tr("Microsoft IME"),
static_cast<int>(UserDictionaryImporter::MSIME));
ime_combobox_->addItem(
tr("ATOK"),
static_cast<int>(UserDictionaryImporter::ATOK));
ime_combobox_->addItem(
tr("Kotoeri"),
static_cast<int>(UserDictionaryImporter::KOTOERI));
#else
ime_combobox_->addItem(
tr("Kotoeri"),
static_cast<int>(UserDictionaryImporter::KOTOERI));
ime_combobox_->addItem(
tr("ATOK"),
static_cast<int>(UserDictionaryImporter::ATOK));
ime_combobox_->addItem(
tr("Microsoft IME"),
static_cast<int>(UserDictionaryImporter::MSIME));
#endif
encoding_combobox_->addItem(
tr("Auto detection"),
static_cast<int>(UserDictionaryImporter::ENCODING_AUTO_DETECT));
encoding_combobox_->addItem(
tr("Unicode"),
static_cast<int>(UserDictionaryImporter::UTF16));
encoding_combobox_->addItem(
tr("Shift JIS"),
static_cast<int>(UserDictionaryImporter::SHIFT_JIS));
encoding_combobox_->addItem(
tr("UTF-8"),
static_cast<int>(UserDictionaryImporter::UTF8));
QPushButton *button = buttonbox_->button(QDialogButtonBox::Ok);
if (button != NULL) {
button->setText(tr("Import"));
}
// Signals and slots to connect buttons and actions.
connect(select_file_pushbutton_, SIGNAL(clicked()),
this, SLOT(SelectFile()));
connect(buttonbox_,
SIGNAL(clicked(QAbstractButton *)),
this,
SLOT(Clicked(QAbstractButton *)));
// Signals and slots to manage availability of GUI components.
connect(file_name_lineedit_, SIGNAL(textChanged(const QString &)),
this, SLOT(OnFormValueChanged()));
connect(dic_name_lineedit_, SIGNAL(textChanged(const QString &)),
this, SLOT(OnFormValueChanged()));
}
ImportDialog::~ImportDialog() {}
const QString ImportDialog::file_name() const {
return file_name_lineedit_->text();
}
const QString ImportDialog::dic_name() const {
return dic_name_lineedit_->text();
}
UserDictionaryImporter::IMEType ImportDialog::ime_type() const {
return static_cast<UserDictionaryImporter::IMEType>(
ime_combobox_->itemData(ime_combobox_->currentIndex()).toInt());
}
UserDictionaryImporter::EncodingType ImportDialog::encoding_type() const {
return static_cast<UserDictionaryImporter::EncodingType>(
encoding_combobox_->itemData(encoding_combobox_->currentIndex()).toInt());
}
int ImportDialog::ExecInCreateMode() {
mode_ = CREATE;
Reset();
return exec();
}
int ImportDialog::ExecInAppendMode() {
mode_ = APPEND;
Reset();
return exec();
}
bool ImportDialog::IsAcceptButtonEnabled() const {
const bool is_enabled =
(mode_ == CREATE &&
!file_name_lineedit_->text().isEmpty() &&
!dic_name_lineedit_->text().isEmpty()) ||
(mode_ == APPEND &&
!file_name_lineedit_->text().isEmpty());
return is_enabled;
}
void ImportDialog::OnFormValueChanged() {
QPushButton *button = buttonbox_->button(QDialogButtonBox::Ok);
if (button != NULL) {
button->setEnabled(IsAcceptButtonEnabled());
}
}
void ImportDialog::Reset() {
file_name_lineedit_->clear();
dic_name_lineedit_->clear();
ime_combobox_->setCurrentIndex(0);
encoding_combobox_->setCurrentIndex(0);
if (mode_ == CREATE) {
dic_name_lineedit_->show();
dic_name_label_->show();
} else {
dic_name_lineedit_->hide();
dic_name_label_->hide();
}
OnFormValueChanged();
file_name_lineedit_->setFocus();
}
void ImportDialog::SelectFile() {
const QString initial_path =
file_name_lineedit_->text().isEmpty() ?
QDir::homePath() :
file_name_lineedit_->text();
const QString filename = QFileDialog::getOpenFileName(
this, tr("Import dictionary"),
initial_path,
tr("Text Files (*.txt);;All Files (*)"));
if (filename.isEmpty()) {
return;
}
file_name_lineedit_->setText(
QDir::toNativeSeparators(filename));
}
void ImportDialog::Clicked(QAbstractButton *button) {
switch (buttonbox_->buttonRole(button)) {
case QDialogButtonBox::AcceptRole:
if (IsAcceptButtonEnabled()) {
accept();
}
break;
case QDialogButtonBox::RejectRole:
reject();
break;
default:
break;
}
}
} // namespace gui
} // namespace mozc