Copyright 2010 Comarch S.A.
*******************************************************************************/
-
-//Created by Mateusz Półrola
+/*!
+ \file XdxfDictSelectDialog.cpp
+ \author Mateusz Półrola <mateusz.polrola@comarch.com>
+*/
#include "XdxfDictSelectDialog.h"
-XdxfDictSelectDialog::XdxfDictSelectDialog(QWidget *parent) :
- QDialog(parent) {
+XdxfDictSelectDialog::XdxfDictSelectDialog(QList<DownloadDict> dicts,
+ QWidget *parent) :
+ QDialog(parent) {
+ setWindowTitle(tr("Select dictionary"));
+
layout = new QVBoxLayout;
setLayout(layout);
langFrom = new QComboBox;
langTo = new QComboBox;
- checkBoxLayout->addWidget(langFrom);
- checkBoxLayout->addWidget(langTo);
+ langFrom->setInsertPolicy(QComboBox::InsertAlphabetically);
+ langTo->setInsertPolicy(QComboBox::InsertAlphabetically);
+
+ langFromLabel = new QLabel(tr("From "));
+ langToLabel = new QLabel(tr("To "));
+
+ checkBoxLayout->addWidget(langFromLabel);
+ checkBoxLayout->addWidget(langFrom, 10);
+ checkBoxLayout->addWidget(langToLabel);
+ checkBoxLayout->addWidget(langTo, 10);
+
+ model = new DictsModel(dicts, this);
+ proxyModel = new DictsProxyModel;
+ proxyModel->setDynamicSortFilter(true);
+ proxyModel->setSourceModel(model);
- treeWidget = new QTreeWidget;
- treeWidget->setRootIsDecorated(false);
- treeWidget->setColumnCount(4);
- QStringList headers;
- headers << tr("From") << tr("To") << tr("Name") << tr("Size");
- treeWidget->setHeaderLabels(headers);
- treeWidget->setColumnWidth(0, 100);
- treeWidget->setColumnWidth(1, 100);
- treeWidget->setColumnWidth(2, 100);
- treeWidget->setColumnWidth(3, 100);
- layout->addWidget(treeWidget);
+ treeView = new QTreeView;
+ treeView->setModel(proxyModel);
+ treeView->setRootIsDecorated(false);
+ treeView->setExpandsOnDoubleClick(false);
+
+ treeView->setSortingEnabled(true);
+ treeView->sortByColumn(0, Qt::AscendingOrder);
+
+ treeView->setWordWrap(true);
+
+ #ifndef Q_WS_MAEMO_5
+ treeView->resizeColumnToContents(0);
+ treeView->resizeColumnToContents(1);
+ treeView->setColumnWidth(2, 300);
+ treeView->resizeColumnToContents(3);
+ #else
+ treeView->setColumnWidth(0, 150);
+ treeView->setColumnWidth(1, 150);
+ treeView->setColumnWidth(2, 300);
+ treeView->setColumnWidth(3, 150);
+ #endif
+ layout->addWidget(treeView);
connect(langFrom, SIGNAL(currentIndexChanged(int)),
this, SLOT(refreshDictList()));
connect(langTo, SIGNAL(currentIndexChanged(int)),
this, SLOT(refreshDictList()));
+ connect(treeView, SIGNAL(activated(QModelIndex)),
+ this, SLOT(itemClicked(QModelIndex)));
+
#ifndef Q_WS_MAEMO_5
- setMinimumSize(400,200);
+ setMinimumSize(800,500);
#else
setMinimumHeight(350);
#endif
- refreshDictList();
+ initializeDicts();
+}
+
+
+void XdxfDictSelectDialog::initializeDicts() {
+ //scan of all languages of dictionaries, using QSet to get only distinct languages
+ QSet<QString> languagesFrom;
+ QSet<QString> languagesTo;
+
+ for(int i=0; i < model->rowCount(QModelIndex()); i++) {
+ languagesFrom.insert(
+ model->data(model->index(i, 0, QModelIndex())).toString());
+ languagesTo.insert(
+ model->data(model->index(i, 1, QModelIndex())).toString());
+ }
+
+ //removes one dictionary which from and to languages are empty....
+ //bug in site with dictionaries
+ languagesFrom.remove(QString());
+ languagesTo.remove(QString());
+
+ //sorting of found languages
+ QList<QString> langFromList = languagesFrom.toList();
+ qSort(langFromList);
+
+ QList<QString> langToList = languagesTo.toList();
+ qSort(langToList);
+
+ //and adding them to combobox, first item in each combobox is "Any"
+ langFrom->addItem(tr("Any"));
+ for(int i=0; i < langFromList.count(); i++) {
+ langFrom->addItem(langFromList.at(i));
+ }
+
+ langTo->addItem(tr("Any"));
+ for(int i=0; i < langToList.count(); i++) {
+ langTo->addItem(langToList.at(i));
+ }
}
void XdxfDictSelectDialog::refreshDictList() {
- QStringList l;
- l << "pies" << "kot";
- treeWidget->insertTopLevelItem(0, new QTreeWidgetItem(l));
+ //if selected language is "Any"(index 0), from filter string is set to empty string, proxy model uses empty string as special case and don't filter by this field.
+ if(langTo->currentIndex() == 0)
+ proxyModel->setTo(QString());
+ else
+ proxyModel->setTo(langTo->currentText());
+
+ if(langFrom->currentIndex() == 0)
+ proxyModel->setFrom(QString());
+ else
+ proxyModel->setFrom(langFrom->currentText());
+}
+
+
+void XdxfDictSelectDialog::itemClicked(QModelIndex index) {
+ _link = index.model()->data(index, Qt::UserRole).toString();
+ accept();
}