[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    =?utf-8?q?=5Bplasmate=5D_projectmanager=3A_fix_the_functionality?=
From:       Giorgos Tsiapaliwkas <terietor () gmail ! com>
Date:       2011-07-08 9:16:41
Message-ID: 20110708091641.49182A60A6 () git ! kde ! org
[Download RAW message or body]

Git commit 8900ce1d463bba958c1b3cf617e79747c80fdd5c by Giorgos Tsiapaliwkas.
Committed on 08/07/2011 at 11:16.
Pushed by tsiapaliwkas into branch 'master'.

fix the functionality of the remove button and also add a KMenu

M  +66   -19   projectmanager/projectmanager.cpp     
M  +12   -6    projectmanager/projectmanager.h     

http://commits.kde.org/plasmate/8900ce1d463bba958c1b3cf617e79747c80fdd5c

diff --git a/projectmanager/projectmanager.cpp b/projectmanager/projectmanager.cpp
index 8c0526b..b6eae5b 100644
--- a/projectmanager/projectmanager.cpp
+++ b/projectmanager/projectmanager.cpp
@@ -19,7 +19,6 @@
 
 
 #include <QLabel>
-#include <QPushButton>
 #include <QListWidget>
 #include <QVBoxLayout>
 #include <QDir>
@@ -32,6 +31,8 @@
 #include <KConfig>
 #include <KConfigGroup>
 #include <KStandardDirs>
+#include <KPushButton>
+#include <KMenu>
 
 #include "projectmanager.h"
 #include "startpage.h"
@@ -41,16 +42,26 @@ ProjectManager::ProjectManager(QWidget* parent) : QDialog(parent)
     projectList = new QListWidget();
     projectList->setSelectionMode(QAbstractItemView::ExtendedSelection);
     connect(projectList, SIGNAL(itemDoubleClicked(QListWidgetItem*)), this, \
SLOT(emitProjectSelected())); +    \
connect(projectList,SIGNAL(itemSelectionChanged()), this, SLOT(checkButtonState()));  \
                
-    loadButton = new QPushButton(i18n("Load Project"));
+    loadButton = new KPushButton(i18n("Load Project"));
     connect(loadButton, SIGNAL(clicked()), this, SLOT(emitProjectSelected()));
 
-    deleteButton = new QPushButton(i18n("Delete Project"));
-    connect(deleteButton, SIGNAL(clicked()), this, SLOT(confirmDeletion()));
+    removeMenuButton = new KPushButton(i18n("Remove Project"));
+
+    removeMenu = new KMenu(i18n("Remove Project"));
+
+    removeMenuButton->setMenu(removeMenu);
+    removeMenu->addAction(i18n("From List"), this, SLOT(confirmRemoveFromList()));
+    removeMenu->addAction(i18n("From Dist"), this, SLOT(confirmRemoveFromDisk()));
 
     QHBoxLayout *hoz = new QHBoxLayout();
+
+    loadButton->setDisabled(true);
     hoz->addWidget(loadButton);
-    hoz->addWidget(deleteButton);
+
+    removeMenuButton->setDisabled(true);
+    hoz->addWidget(removeMenuButton);
 
     QVBoxLayout *lay = new QVBoxLayout();
     lay->addWidget(projectList);
@@ -58,14 +69,32 @@ ProjectManager::ProjectManager(QWidget* parent) : QDialog(parent)
     setLayout(lay);
 }
 
-void ProjectManager::confirmDeletion()
+void ProjectManager::confirmRemoveFromList()
 {
-    //TODO: might want to disallow deleting a currently active project, or handle it
-    //      gracefully somehow.
-    QString dialogText = i18n("Are you sure you want to delete the selected \
projects? This cannot be undone."); +    m_destroyFlag = false;
+    QString dialogText = i18n("Are you sure you want to remove the selected \
projects? This cannot be undone.");  int code = \
                KMessageBox::warningContinueCancel(this, dialogText);
-    if (code != KMessageBox::Continue) return;
+    if (code != KMessageBox::Continue) {
+        return;
+    }
+    removeProcess();
+}
+
+void ProjectManager::confirmRemoveFromDisk()
+{
+    m_destroyFlag = true;
+    QString dialogText = i18n("Are you sure you want to remove the selected \
projects? This cannot be undone"); +    int code = \
KMessageBox::warningContinueCancel(this, dialogText); +    if (code != \
KMessageBox::Continue) { +        return;
+    }
+    removeProcess();
+}
+
+void ProjectManager::removeProcess()
+{
     QList<QListWidgetItem*> l = projectList->selectedItems();
+    bool checkSuccess = true;
 
     //TODO: should probably centralize config handling code somewhere.
     KConfigGroup cg(KGlobal::config(), "General");
@@ -73,17 +102,38 @@ void ProjectManager::confirmDeletion()
     for (int i = 0; i < l.size(); i++) {
         QString folder = l[i]->data(StartPage::FullPathRole).value<QString>();
         QString path = KStandardDirs::locateLocal("appdata", folder + '/');
-        deleteProject(path);
+        if(m_destroyFlag) {
+            deleteProject(path);
+        }
         if (recentProjects.contains(folder)) {
             recentProjects.removeAt(recentProjects.indexOf(folder));
+        } else {
+            checkSuccess = false;
         }
     }
-    //TODO: should perform a success check here instead of assuming success.
-    cg.writeEntry("recentProjects", recentProjects);
-    KGlobal::config()->sync();
-    emit requestRefresh();
+    if (checkSuccess) {
+        cg.writeEntry("recentProjects", recentProjects);
+        KGlobal::config()->sync();
+        emit requestRefresh();
+    }
 }
 
+void ProjectManager::checkButtonState()
+{
+    QList<QListWidgetItem*> l = projectList->selectedItems();
+    if (l.size()==0) {
+        loadButton->setDisabled(true);
+        removeMenuButton->setDisabled(true);
+    } else if (l.size()==1) {
+        loadButton->setEnabled(true);
+        removeMenuButton->setEnabled(true);
+    } else {
+        loadButton->setDisabled(true);
+        removeMenuButton->setEnabled(true);
+    }
+}
+
+
 void ProjectManager::addProject(QListWidgetItem *item)
 {
     projectList->addItem(item);
@@ -97,10 +147,7 @@ void ProjectManager::clearProjects()
 void ProjectManager::emitProjectSelected()
 {
     QList<QListWidgetItem*> l = projectList->selectedItems();
-    if (l.size() != 1) {
-        KMessageBox::information(this, i18n("Please select exactly one project to \
                load."));
-        return;
-    }
+
     QString url = l[0]->data(StartPage::FullPathRole).value<QString>();
 
     emit projectSelected(url);
diff --git a/projectmanager/projectmanager.h b/projectmanager/projectmanager.h
index d24ef19..080c026 100644
--- a/projectmanager/projectmanager.h
+++ b/projectmanager/projectmanager.h
@@ -23,10 +23,11 @@
 #include <QDialog>
 
 class QListWidget;
-class QPushButton;
 class QListWidgetItem;
 
 class KUrl;
+class KPushButton;
+class KMenu;
 
 namespace Ui
 {
@@ -35,7 +36,7 @@ class ProjectManager;
 
 class ProjectManager : public QDialog
 {
-    Q_OBJECT;
+    Q_OBJECT
 public:
     ProjectManager(QWidget* parent);
     void addProject(QListWidgetItem *item);
@@ -51,17 +52,22 @@ signals:
 
 private slots:
    void emitProjectSelected();
-   void confirmDeletion();
+   void removeProcess();
+   void confirmRemoveFromDisk();
+   void confirmRemoveFromList();
+   void checkButtonState();
 
 private:
 //TODO: Implement:
 //      search/filterbar,
 //      project multi-export,
 //      project multi-import.
-    QListWidget *projectList;
-    QPushButton *loadButton;
-    QPushButton *deleteButton;
+    QListWidget* projectList;
+    KPushButton* loadButton;
+    KPushButton* removeMenuButton;
+    KMenu *removeMenu;
     static void removeDirectory(const QString&);
+    bool m_destroyFlag;
 };
 
 #endif // PROJECTMANAGER_H


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic