Work on the dictionary selection dialog.
[mdictionary] / src / mdictionary / gui / DictManagerWidget.cpp
index 2f516e5..04aad2f 100644 (file)
@@ -35,6 +35,8 @@ DictManagerWidget::DictManagerWidget(GUIInterface *parent) :
     this->guiInterface = parent;
 
     initalizeUI();
+
+    setModal(true);
 }
 
 void DictManagerWidget::initalizeUI() {
@@ -84,12 +86,26 @@ void DictManagerWidget::initalizeUI() {
     connect(dictList, SIGNAL(itemChanged(QListWidgetItem*)),
             this, SLOT(changed()));
 
+    #ifndef Q_WS_MAEMO_5
+        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
+
     refreshDictsList();
 
     #ifndef Q_WS_MAEMO_5
         setMinimumSize(500,300);
         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()));
     #endif
 }
@@ -109,8 +125,15 @@ 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()) {
@@ -178,15 +201,12 @@ void DictManagerWidget::addNewDictButtonClicked() {
     #endif
 
    CommonDictInterface* selectedPlugin =
-           DictTypeSelectDialog::addNewDict(
-                   guiInterface->getPlugins(),
-                   this->parentWidget());
-
-   if(selectedPlugin != NULL) {
+           DictTypeSelectDialog::addNewDict(guiInterface->getPlugins(),this);
+   if(selectedPlugin) {
        Settings* settings =
                selectedPlugin->dictDialog()->addNewDictionary(this->parentWidget());
 
-       if(settings != NULL) {
+       if(settings) {
            CommonDictInterface* newDict = selectedPlugin->getNew(settings);
            if(newDict) {
                delete settings;
@@ -200,6 +220,7 @@ void DictManagerWidget::addNewDictButtonClicked() {
 void DictManagerWidget::itemSelected(QListWidgetItem *) {
     removeDictButton->setEnabled(true);
     settingsButton->setEnabled(true);
+    dictList->setFocus();
 }
 
 void DictManagerWidget::removeButtonClicked() {
@@ -244,3 +265,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();
+    }
+}