]> gitweb.hamatoma.de Git - reqt/commitdiff
context menu works
authorhama <hama@siduction.net>
Wed, 6 May 2015 21:30:57 +0000 (23:30 +0200)
committerhama <hama@siduction.net>
Wed, 6 May 2015 21:30:57 +0000 (23:30 +0200)
appl/refind/dialogoptions.cpp
appl/refind/dialogoptions.hpp
appl/refind/dialogoptions.ui
appl/refind/mainwindow.cpp
appl/refind/utils.cpp
base/ReQStringUtil.cpp
base/ReQStringUtil.hpp

index 8a8c1315fe472d4e40b0fd6984fe34d13d88be84..82eebbd6d1d8f210b93ca5b93327f04cbc15ccf6 100644 (file)
@@ -9,7 +9,15 @@
 #include "base/rebase.hpp"
 #include "dialogoptions.hpp"
 #include "ui_dialogoptions.h"
+#include "math.h"
+#include <QFileDialog>
 
+/**
+ * Constructor.
+ *
+ * @param handlers  the current list of the context menu handlers
+ * @param parent    the widget parent
+ */
 DialogOptions::DialogOptions(ContextHandlerList& handlers, QWidget *parent) :
             QDialog(parent),
             ui(new Ui::DialogOptions),
@@ -20,8 +28,11 @@ DialogOptions::DialogOptions(ContextHandlerList& handlers, QWidget *parent) :
    connect(ui->pushButtonAdd, SIGNAL(clicked()), this, SLOT(add()));
    connect(ui->pushButtonDel, SIGNAL(clicked()), this, SLOT(del()));
    connect(ui->pushButtonDown, SIGNAL(clicked()), this, SLOT(down()));
+   connect(ui->pushButtonSelectProgram, SIGNAL(clicked()), this,
+      SLOT(selectProgram()));
    connect(ui->pushButtonUp, SIGNAL(clicked()), this, SLOT(up()));
    connect(ui->tableWidget, SIGNAL(cellClicked(int,int)), this, SLOT(cellEntered(int,int)));
+   connect(ui->tableWidget, SIGNAL(cellActivated(int,int)), this, SLOT(cellEntered(int,int)));
    for (int ix = 0; ix < ui->comboBoxFileType->count(); ix++)
       m_fileTypes.append(ui->comboBoxFileType->itemText(ix));
    for (int ix = 0; ix < ui->comboBoxDirMode->count(); ix++)
@@ -107,7 +118,10 @@ void DialogOptions::currentToTable(int row){
  */
 void DialogOptions::del(){
    int count = ui->tableWidget->rowCount() - 1;
-   for (int row = m_selectedRow; row < count; row++){
+   int start = m_selectedRow;
+   if (start == 0)
+      start = 1;
+   for (int row = start; row < count; row++){
       swapRows(row, row - 1);
    }
    ui->tableWidget->setRowCount(count);
@@ -207,6 +221,15 @@ void DialogOptions::swapRows(int row1, int row2){
    }
 }
 
+/**
+ * Handles the event "pushed button select program file".
+ */
+void DialogOptions::selectProgram(){
+   QString file = QFileDialog::getOpenFileName(NULL, tr("Select Program File"),
+      ui->comboBoxProgram->currentText());
+   if (!file.isEmpty())
+      ui->comboBoxProgram->setCurrentText(file);
+}
 /**
  * Handles the event "pushed button up".
  */
index 36010878c6d2e4ae8cf44d1055e349654427bc5b..4e978b8fa01ad405f6fbcbc68a8b4b1d660ed838 100644 (file)
@@ -26,6 +26,7 @@ public:
    void cellEntered(int row, int column);
    void del();
    void down();
+   void selectProgram();
    void up();
 private:
    void currentToTable(int row);
index 7d486d49ca19f7547a1235c41c5672ec3788a756..03fa9a72e554e47c51185424569ad941bf00df5a 100644 (file)
@@ -85,7 +85,7 @@
          </column>
          <column>
           <property name="text">
-           <string>Current Directory</string>
+           <string>Directory Mode</string>
           </property>
          </column>
          <item row="0" column="1">
index 33fb4a80e72d3ee27325f9f4bb2a0765d2520e7b..8aa58e1ded98ff262c42cc5143c5d51c8c22ae07 100644 (file)
@@ -499,19 +499,6 @@ void MainWindow::prepareContextMenu(){
             SIGNAL(customContextMenuRequested(const QPoint&)),
             SLOT(handleTableContextMenu(const QPoint&)));
    ContextHandler* handler = new ContextHandler();
-   handler->m_text = "kedit";
-   handler->m_program = "/usr/bin/kate";
-   handler->m_arguments = "${full}";
-   handler->m_directoryMode = ContextHandler::DM_UNDEF;
-   handler->m_fileType = ContextHandler::FT_FILE;
-   m_contextHandlers.list().append(handler);
-   handler = new ContextHandler();
-   handler->m_text = "bash";
-   handler->m_program = "/usr/bin/konsole";
-   handler->m_arguments = "${full}";
-   handler->m_directoryMode = ContextHandler::DM_TO_FILE;
-   handler->m_fileType = ContextHandler::FT_DIR;
-   m_contextHandlers.list().append(handler);
 }
 
 /**
index d5123a9b83c0710fe62922f2070f5a278153d680..71a48ce24f0dc75d0a97d23af0a9da7d514953cd 100644 (file)
@@ -93,12 +93,29 @@ void ContextHandlerList::save(ReStateStorage& storage){
    for (int ix = 0; ix < m_list.size(); ix++){
       ContextHandler* handler = m_list.at(ix);
       value = handler->m_text + "\t" + handler->m_program + "\t"
+         + handler->m_arguments + "\t"
          + QString::number(handler->m_fileType) + "\t"
          + QString::number(handler->m_directoryMode);
       storage.store(name, value, ix);
    }
 }
 
+ContextHandler* createHandlerIfExists(const QString& file,
+    ContextHandler::FileType fileType = ContextHandler::FT_FILE){
+    QFileInfo info(file);
+    ContextHandler* handler = NULL;
+    if (info.exists()){
+        handler = new ContextHandler;
+        handler->m_text = ReQStringUtil::nodeOf(file);
+        handler->m_program = file;
+        handler->m_arguments = fileType;
+        handler->m_directoryMode = fileType == ContextHandler::FT_FILE
+                ? ContextHandler::DM_TO_PARENT
+                : ContextHandler::DM_TO_FILE;
+    }
+    return handler;
+}
+
 /**
  * Reads the list from the storage.
  *
@@ -110,24 +127,51 @@ void ContextHandlerList::restore(ReStateStorage& storage){
    int ix = -1;
    QString value;
    QStringList cols;
+   ContextHandler* handler;
    while (true){
       ix++;
       value = storage.restore(name, ix);
       if (value.isEmpty())
          break;
       cols = value.split('\t');
-      if (cols.size() != 5)
-         break;
-      ContextHandler* handler = new ContextHandler;
+      if (cols.size() < 3)
+         continue;
+      handler = new ContextHandler;
       handler->m_text = cols.at(0);
       handler->m_program = cols.at(1);
       handler->m_arguments = cols.at(2);
-      handler->m_fileType = ContextHandler::FileType(
-         1 + atol(cols.at(3).toUtf8().constData()));
-      handler->m_directoryMode = ContextHandler::DirMode(
-         1 + atol(cols.at(4).toUtf8().constData()));
+      const char* sValue = cols.at(3).toUtf8().constData();
+      handler->m_fileType = ContextHandler::FileType(atol(sValue));
+      sValue = cols.at(4).toUtf8().constData();
+      handler->m_directoryMode = ContextHandler::DirMode(atol(sValue));
       m_list.append(handler);
    }
+   if (m_list.size() == 0){
+#if defined __linux__
+       handler = createHandlerIfExists("/usr/bin/kate");
+       if (handler == NULL)
+           handler = createHandlerIfExists("/usr/bin/geany");
+       if (handler == NULL)
+           handler = createHandlerIfExists("/usr/bin/kwrite");
+       if (handler == NULL)
+           handler = createHandlerIfExists("/usr/bin/gedit");
+       if (handler != NULL)
+           m_list.append(handler);
+       handler = createHandlerIfExists("/usr/bin/konsole", ContextHandler::FT_DIR);
+       if (handler == NULL)
+           handler = createHandlerIfExists("/usr/bin/gnome-terminal", ContextHandler::FT_DIR);
+       if (handler != NULL)
+           m_list.append(handler);
+#elif defined __WIN32__
+       handler = createHandlerIfExists("c:\\windows\\system32\\notepad.exe");
+       if (handler == NULL)
+           m_contextHandlers.list().append(handler);
+       handler = createHandlerIfExists("c:\\windows\\system32\\cmd.exe", ContextHandler::FT_DIR);
+       if (handler == NULL)
+           m_list.append(handler);
+
+#endif
+   }
 }
 
 /**
index 0b1b8ebf58f1a85050f8995ba370334cd5214bfd..94c376664d2ab7c2742f3443d4f8f8f925a9a030 100644 (file)
@@ -355,6 +355,32 @@ int ReQStringUtil::lengthOfReal(const ReString& text, int start, qreal* pValue){
    return found ? ix - start : 0;
 }
 
+/**
+ * Extracts the node of a filename.
+ *
+ * The node is the filename without path.
+ *
+ * @param filename  the filename (with or without path)
+ * @return          the node of <code>filename</code>
+ */
+ReString ReQStringUtil::nodeOf(const ReString& filename){
+   QString rc;
+
+   int index = filename.lastIndexOf('/');
+   if (index >= 0)
+      rc = filename.mid(index + 1);
+   else{
+#if defined __WIN32__
+      index = filename.lastIndexOf('\\');
+      if (index < 0)
+      rc = filename;
+      else
+      rc = filename.mid(index + 1);
+#endif
+   }
+   return rc;
+}
+
 /**
  * Appends a relative path to base directory name (absolute or relative).
  *
index 1846f1370cee315041c66893528be27218d2a91d..950163f74c4eb4880e3db8aaf275b041b6e3bacb 100644 (file)
@@ -42,6 +42,7 @@ public:
       return path;
 #endif
    }
+   static ReString nodeOf(const ReString& filename);
    static QString pathAppend(const QString& base, const QString& path);
    static bool replacePlaceholders(QString& text,
       const QMap <QString, QString>& placeholders, QString* error);