Fixed problem with connects in DictManagerWidget.cpp. Fixed: remove warnings from...
[mdictionary] / src / mdictionary / gui / DictManagerWidget.cpp
index e144b7d..e300a26 100644 (file)
 
 *******************************************************************************/
 
-//! \file DictManagerWidget.cpp
-//! \brief Dictionaries management widget
-//! \author Mateusz Półrola <mateusz.polrola@comarch.pl>
+/*! \file DictManagerWidget.cpp
+    \brief Implements dictionaries management widget
+
+    \author Mateusz Półrola <mateusz.polrola@comarch.pl>
+*/
 
 #include "DictManagerWidget.h"
 #include "DictTypeSelectDialog.h"
@@ -34,18 +36,40 @@ DictManagerWidget::DictManagerWidget(GUIInterface *parent) :
     setWindowTitle(tr("Dictionaries"));
     this->guiInterface = parent;
 
+    #ifndef Q_WS_MAEMO_5
+    model = 0;
+    #endif
     initalizeUI();
+
+    setModal(true);
 }
 
 void DictManagerWidget::initalizeUI() {
     verticalLayout = new QVBoxLayout;
     setLayout(verticalLayout);
 
-    dictListWidget = new QListWidget;
-    verticalLayout->addWidget(dictListWidget);
+    #ifndef Q_WS_MAEMO_5
+    qmlView = new QDeclarativeView(this);
+
+    ctxt = qmlView->rootContext();
+
+    refreshDictsList();
+    ctxt->setContextProperty("dictModel", &(*model));
+    qmlView->setSource(QUrl::fromLocalFile("/usr/share/mdictionary/qml/DictManagerWidget.qml"));
+
+    QGraphicsObject *rootObject = qmlView->rootObject();
+
+    qmlView->setResizeMode(QDeclarativeView::SizeRootObjectToView);
+    verticalLayout->addWidget(qmlView);
+
+    #endif
 
-    dictListWidget->setSelectionMode(QAbstractItemView::SingleSelection);
-    dictListWidget->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
+    #ifdef Q_WS_MAEMO_5
+    dictList = new QListWidget;
+    verticalLayout->addWidget(dictList);
+
+    dictList->setSelectionMode(QAbstractItemView::SingleSelection);
+    dictList->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
 
     addNewDictButton = new QPushButton(tr("Add"));
     removeDictButton = new QPushButton(tr("Remove"));
@@ -78,26 +102,84 @@ void DictManagerWidget::initalizeUI() {
     connect(settingsButton, SIGNAL(clicked()),
             this, SLOT(settingsButtonClicked()));
 
-    connect(dictListWidget, SIGNAL(itemClicked(QListWidgetItem*)),
+    connect(dictList, SIGNAL(itemClicked(QListWidgetItem*)),
             this, SLOT(itemSelected(QListWidgetItem*)));
 
-    connect(dictListWidget, SIGNAL(itemChanged(QListWidgetItem*)),
+    connect(dictList, SIGNAL(itemChanged(QListWidgetItem*)),
             this, SLOT(changed()));
+    #endif
+
+    #ifndef Q_WS_MAEMO_5
+    connect(rootObject, SIGNAL(addButtonClicked()),
+            this, SLOT(saveChanges()));
+    connect(rootObject, SIGNAL(addButtonClicked()),
+            this, SLOT(addNewDictButtonClicked()));
+
+    connect(rootObject, SIGNAL(removeButtonClicked()),
+            this, SLOT(saveChanges()));
+    connect(rootObject, SIGNAL(removeButtonClicked()),
+            this, SLOT(removeButtonClicked()));
+
+    connect(rootObject, SIGNAL(settingsButtonClicked()),
+            this, SLOT(saveChanges()));
+    connect(rootObject, SIGNAL(settingsButtonClicked()),
+            this, SLOT(settingsButtonClicked()));
+
+    //z modelu sygnał, oraz z okienka zmian ustawień w pluginie, gdy są zmiany
+//    oryginalnie:
+//    connect(dictList, SIGNAL(itemChanged(QListWidgetItem*)),
+//            this, SLOT(changed()));
+    connect(model, SIGNAL(itemChanged()),
+                this, SLOT(changed()));
+    //pozmieniać connecty, to jest na dwuklik mysza na liście, sprawdzić, zrobic alternatywne sloty
+            connect(rootObject, SIGNAL(itemActivated(int)),
+                    this, SLOT(saveChanges()));
+            connect(rootObject, SIGNAL(itemActivated(int)),
+                    this, SLOT(settingsButtonClicked()));
+
+//        connect(dictList, SIGNAL(itemActivated(QListWidgetItem*)),
+//                this, SLOT(saveChanges()));
+//        connect(dictList, SIGNAL(itemActivated(QListWidgetItem*)),
+//                this, SLOT(itemSelected(QListWidgetItem*)));
+//        connect(dictList, SIGNAL(itemActivated(QListWidgetItem*)),
+//                settingsButton, SIGNAL(clicked()));
+    #endif
 
+    #ifdef Q_WS_MAEMO_5
     refreshDictsList();
+    #endif
 
     #ifndef Q_WS_MAEMO_5
         setMinimumSize(500,300);
-        closeButton = new QPushButton(tr("Save"));
-        buttonGroup->addWidget(closeButton);
-        connect(closeButton, SIGNAL(clicked()), this, SLOT(save()));
+        //closeButton = new QPushButton(tr("Save"));
+        //buttonGroup->addWidget(closeButton);
+
+//        setMinimumWidth(sizeHint().width()*1.2);
+//        setMaximumWidth(sizeHint().width()*2);
+//        setMinimumHeight(sizeHint().height());
+//        setMaximumHeight(sizeHint().height()*2);
+        //connect(closeButton, SIGNAL(clicked()), this, SLOT(save()));
+        connect(rootObject, SIGNAL(saveButtonClicked()), this, SLOT(save()));
     #endif
 }
 
 
 void DictManagerWidget::refreshDictsList() {
 
-    dictListWidget->clear();
+    #ifndef Q_WS_MAEMO_5
+    QHash<CommonDictInterface*, bool> dicts = guiInterface->getDictionaries();
+
+    if (model == 0){
+        model = new DictManagerModel(dicts, this);
+    } else {
+        model->clear();
+        model->setDictionaries(dicts);
+    }
+
+    #endif
+
+    #ifdef Q_WS_MAEMO_5
+    dictList->clear();
     dictsHash.clear();
     removeDictButton->setEnabled(false);
     settingsButton->setEnabled(false);
@@ -108,9 +190,17 @@ void DictManagerWidget::refreshDictsList() {
 
     while(i.hasNext()) {
         i.next();
+
         QListWidgetItem* item = new QListWidgetItem();
-        QString name = i.key()->langFrom() + " - " + i.key()->langTo() + " (" +
-                       i.key()->type() + " " + i.key()->name() + ")";
+        QString name;
+        if (i.key()->type() == "stardict") {
+            name = i.key()->name() + " (" + i.key()->type() + ")";
+        }
+        else {
+            name = i.key()->langFrom() + " - " + i.key()->langTo() +
+                   " (" + i.key()->type() + " " +
+                   i.key()->name() + ")";
+        }
         item->setText(name);
         item->setFlags(item->flags() | Qt::ItemIsUserCheckable);
         if(i.value()) {
@@ -121,9 +211,12 @@ void DictManagerWidget::refreshDictsList() {
         }
         item->setIcon(*i.key()->icon());
 
-        dictListWidget->addItem(item);
+        dictList->addItem(item);
         dictsHash.insert(item, i.key());
     }
+
+    dictList->sortItems();
+    #endif
 }
 
 void DictManagerWidget::showEvent(QShowEvent *e) {
@@ -147,8 +240,8 @@ void DictManagerWidget::saveChanges() {
     #endif
         QList<CommonDictInterface*> checkedDicts;
 
-        for(int i=0; i<dictListWidget->count(); i++) {
-            QListWidgetItem* item = dictListWidget->item(i);
+        for(int i=0; i<dictList->count(); i++) {
+            QListWidgetItem* item = dictList->item(i);
             if(item->checkState() == Qt::Checked) {
                 checkedDicts.push_back(dictsHash[item]);
             }
@@ -178,10 +271,6 @@ void DictManagerWidget::addNewDictButtonClicked() {
    CommonDictInterface* selectedPlugin =
            DictTypeSelectDialog::addNewDict(guiInterface->getPlugins(),this);
    if(selectedPlugin) {
-           DictTypeSelectDialog::addNewDict(
-                   guiInterface->getPlugins(),
-                   this->parentWidget());
-
        Settings* settings =
                selectedPlugin->dictDialog()->addNewDictionary(this->parentWidget());
 
@@ -199,6 +288,7 @@ void DictManagerWidget::addNewDictButtonClicked() {
 void DictManagerWidget::itemSelected(QListWidgetItem *) {
     removeDictButton->setEnabled(true);
     settingsButton->setEnabled(true);
+    dictList->setFocus();
 }
 
 void DictManagerWidget::removeButtonClicked() {
@@ -206,7 +296,7 @@ void DictManagerWidget::removeButtonClicked() {
             tr("Do you want to remove selected dictionary?"),
             QMessageBox::Yes, QMessageBox::No) == QMessageBox::Yes) {
 
-        QList<QListWidgetItem*> selected = dictListWidget->selectedItems();
+        QList<QListWidgetItem*> selected = dictList->selectedItems();
         if(selected.count() > 0) {
             emit removeDictionary(dictsHash[selected[0]]);
             refreshDictsList();
@@ -224,7 +314,7 @@ void DictManagerWidget::settingsButtonClicked() {
         _save = false;
     }
     #endif
-   QList<QListWidgetItem*> selected = dictListWidget->selectedItems();
+   QList<QListWidgetItem*> selected = dictList->selectedItems();
    if(selected.count() > 0) {
        dictsHash[selected[0]]->dictDialog()->changeSettings(this->parentWidget());
    }
@@ -243,3 +333,19 @@ void DictManagerWidget::changed() {
         hide();
     }
 #endif
+
+
+void DictManagerWidget::keyPressEvent(QKeyEvent *e) {
+    if (!e->modifiers() || (e->modifiers() & Qt::KeypadModifier && e->key() == Qt::Key_Enter)) {
+        switch (e->key()) {
+            case Qt::Key_Escape:
+               reject();
+               break;
+            default:
+               e->ignore();
+               return;
+        }
+    } else {
+        e->ignore();
+    }
+}