diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/gui/processWidget.cpp | 17 | ||||
-rw-r--r-- | src/gui/processWidget.h | 2 | ||||
-rw-r--r-- | src/gui/processesStartDialog.cpp | 89 | ||||
-rw-r--r-- | src/gui/processesStartDialog.h | 9 | ||||
-rw-r--r-- | src/gui/ui/processesStartDialog.ui | 193 | ||||
-rwxr-xr-x | src/pvs.cpp | 11 | ||||
-rwxr-xr-x | src/pvs.h | 2 |
7 files changed, 264 insertions, 59 deletions
diff --git a/src/gui/processWidget.cpp b/src/gui/processWidget.cpp index 38dd2ae..df865a4 100644 --- a/src/gui/processWidget.cpp +++ b/src/gui/processWidget.cpp @@ -23,7 +23,16 @@ ProcessWidget::ProcessWidget(QWidget *parent, PVSClient *cl): QWidget(parent), prowui(new Ui::ProcessWidget) { + + prowui->setupUi(this); + filter = filterSettings.value("RemoteProcessesList/filter").toString(); + + if (filter == "") + { + filterSettings.setValue("RemoteProcessesList/filter", "pvs pvsgui x11vnc dbus-launch dbus-daemon"); + filter = "pvs pvsgui x11vnc dbus-launch dbus-daemon"; + } client = cl; @@ -33,7 +42,7 @@ ProcessWidget::ProcessWidget(QWidget *parent, PVSClient *cl): connect( client, SIGNAL( processVectorReady(bool)), this, SLOT( refrProcessList())); //tell client we want to see his processes - sendCommand("SHOWPROCESSES", ""); + sendCommand("SHOWPROCESSES", filter); } void ProcessWidget::startProcess() @@ -46,14 +55,14 @@ void ProcessWidget::startProcess() if (start == QMessageBox::Ok) { sendCommand("STARTPROCESS", prowui->processLineEdit->text()); - sendCommand("SHOWPROCESSES", ""); + sendCommand("SHOWPROCESSES", filter); } prowui->processLineEdit->clear(); } void ProcessWidget::resendProcessList() { - sendCommand("SHOWPROCESSES", ""); + sendCommand("SHOWPROCESSES", filter); } void ProcessWidget::refrProcessList(bool timerEvent) @@ -127,7 +136,7 @@ void ProcessWidget::stopProcess() } } //tell client to update his list - sendCommand("SHOWPROCESSES", ""); + sendCommand("SHOWPROCESSES", filter); } } diff --git a/src/gui/processWidget.h b/src/gui/processWidget.h index 4d696eb..7f6737c 100644 --- a/src/gui/processWidget.h +++ b/src/gui/processWidget.h @@ -25,6 +25,8 @@ private: Ui::ProcessWidget *prowui; PVSClient *client; QVector<QString> *processes; + QSettings filterSettings; + QString filter; private slots: void startProcess(); diff --git a/src/gui/processesStartDialog.cpp b/src/gui/processesStartDialog.cpp index d1a7017..e0a6286 100644 --- a/src/gui/processesStartDialog.cpp +++ b/src/gui/processesStartDialog.cpp @@ -25,7 +25,13 @@ ProcessesStartDialog::ProcessesStartDialog(QWidget *parent) : procStartUi->setupUi(this); connect( procStartUi->sendButton, SIGNAL( clicked()), this, SLOT( send())); connect( procStartUi->cancelButton, SIGNAL( clicked()), this, SLOT( notSend())); - procStartUi->listOfProcessesButton->hide(); + connect( procStartUi->saveButton, SIGNAL( clicked()), this, SLOT ( save())); + + //if we click or double click one of our items we put it in our message + connect( procStartUi->processesList, SIGNAL( cellDoubleClicked(int,int)), this, SLOT ( itemClicked(int,int))); + connect( procStartUi->processesList, SIGNAL( cellClicked(int,int)), this, SLOT ( itemClicked(int,int))); + + listProcesses(); } ProcessesStartDialog::~ProcessesStartDialog() @@ -36,7 +42,7 @@ ProcessesStartDialog::~ProcessesStartDialog() void ProcessesStartDialog::send() { QString procd = procStartUi->message->text(); - + save(); //save (if we made changes to our list) if (procd.length()>0) { QMessageBox::StandardButton start = QMessageBox::question(0, @@ -48,9 +54,9 @@ void ProcessesStartDialog::send() { //write name of process to setProcessesDialog MainWindow::getWindow()->setProcessesDialog(procd); + procStartUi->message->clear(); + emit accept(); } - procStartUi->message->clear(); - emit accept(); } } @@ -62,5 +68,78 @@ void ProcessesStartDialog::notSend() void ProcessesStartDialog::listProcesses() { - // + /*settings.beginWriteArray("RemoteProcessesList"); + settings.setArrayIndex(0); + settings.setValue("command", "oowriter"); + settings.setValue("description", "Open Office Writer"); + settings.setArrayIndex(1); + settings.setValue("command", "oocalc"); + settings.setValue("description", "Open Office Calc"); + settings.endArray();*/ + + //read from settings + int size = settings.beginReadArray("RemoteProcessesList"); + for (int i = 0; i < size; ++i) + { + settings.setArrayIndex(i); + procStartUi->processesList->setRowCount(i+1); + procStartUi->processesList->setItem(i, 0, new QTableWidgetItem(settings.value("command").toString(),0)); + procStartUi->processesList->setItem(i, 1, new QTableWidgetItem(settings.value("description").toString(),0)); + } + settings.endArray(); + + //add empty items to our List + QString empty = " "; + procStartUi->processesList->setRowCount(procStartUi->processesList->rowCount()+1); + procStartUi->processesList->setItem(procStartUi->processesList->rowCount()-1, 0, new QTableWidgetItem(empty,0)); + procStartUi->processesList->setItem(procStartUi->processesList->rowCount()-1, 1, new QTableWidgetItem(empty,0)); +} + +void ProcessesStartDialog::save() +{ + //if we delete items from our list we increment our decrement - to decrement our arrayindex + int decrement = 0; + + // if both our last elements are empty dont read them + // we need this if we have added new elements + if ((procStartUi->processesList->item(procStartUi->processesList->rowCount()-1, 0) != 0) && + (procStartUi->processesList->item(procStartUi->processesList->rowCount()-1, 1) != 0)) + { + settings.beginWriteArray("RemoteProcessesList"); + for (int i = 0; i < procStartUi->processesList->rowCount(); ++i) + { + //if elements are only whitespaces we ignore them + if ((procStartUi->processesList->item(i, 0)->text().remove(QRegExp("\\s")) != "") && + (procStartUi->processesList->item(i, 1)->text().remove(QRegExp("\\s")) != "")) + { + settings.setArrayIndex(i-decrement); + settings.setValue("command", procStartUi->processesList->item(i, 0)->text()); + settings.setValue("description", procStartUi->processesList->item(i, 1)->text()); + } else decrement++; //and increment our decrement + } + settings.endArray(); + } + else + { + settings.beginWriteArray("RemoteProcessesList"); + for (int i = 0; i < procStartUi->processesList->rowCount()-1; ++i) + { + if ((procStartUi->processesList->item(i, 0)->text().remove(QRegExp("\\s")) != "") && + (procStartUi->processesList->item(i, 1)->text().remove(QRegExp("\\s")) != "")) + { + settings.setArrayIndex(i-decrement); + settings.setValue("command", procStartUi->processesList->item(i, 0)->text()); + settings.setValue("description", procStartUi->processesList->item(i, 1)->text()); + } else decrement++; + } + settings.endArray(); + } + listProcesses(); +} + +void ProcessesStartDialog::itemClicked(int row, int column) +{ + //if last item exists we put it in our message + if (procStartUi->processesList->item(row, 0) != 0) + procStartUi->message->setText(procStartUi->processesList->item(row, 0)->text()); } diff --git a/src/gui/processesStartDialog.h b/src/gui/processesStartDialog.h index 856279b..358a356 100644 --- a/src/gui/processesStartDialog.h +++ b/src/gui/processesStartDialog.h @@ -19,17 +19,14 @@ public: private: Ui::ProcessesStartDialog *procStartUi; - - /*QGridLayout *layout; - QLabel *textLabel; - QLineEdit *messageEdit; - QPushButton *sendButton; - QPushButton *cancelButton;*/ + QSettings settings; private slots: void send(); void notSend(); void listProcesses(); + void save(); + void itemClicked(int row, int column); }; #endif // PROCESSESSTARTDIALOG_H diff --git a/src/gui/ui/processesStartDialog.ui b/src/gui/ui/processesStartDialog.ui index 0f6c60a..2003c57 100644 --- a/src/gui/ui/processesStartDialog.ui +++ b/src/gui/ui/processesStartDialog.ui @@ -6,71 +6,190 @@ <rect> <x>0</x> <y>0</y> - <width>418</width> - <height>120</height> + <width>524</width> + <height>309</height> </rect> </property> <property name="windowTitle"> <string>Start Process</string> </property> - <widget class="QWidget" name="layoutWidget"> + <widget class="QWidget" name="verticalLayoutWidget_3"> <property name="geometry"> <rect> <x>10</x> <y>10</y> - <width>401</width> - <height>101</height> + <width>503</width> + <height>291</height> </rect> </property> - <layout class="QVBoxLayout" name="verticalLayout"> + <layout class="QVBoxLayout" name="outerVerticalLayout"> <item> - <widget class="QLabel" name="label"> - <property name="text"> - <string>Process to start:</string> - </property> - </widget> - </item> - <item> - <widget class="QLineEdit" name="message"/> - </item> - <item> - <layout class="QHBoxLayout" name="horizontalLayout"> - <property name="spacing"> - <number>5</number> - </property> + <layout class="QVBoxLayout" name="upperVerticalLayout"> <item> - <widget class="QPushButton" name="listOfProcessesButton"> + <widget class="QLabel" name="label_2"> <property name="text"> - <string>List of Processes</string> + <string>Either use a command from this list or type in the process in the lower field.</string> </property> </widget> </item> <item> - <spacer name="horizontalSpacer"> - <property name="orientation"> - <enum>Qt::Horizontal</enum> + <widget class="QTableWidget" name="processesList"> + <property name="verticalScrollBarPolicy"> + <enum>Qt::ScrollBarAsNeeded</enum> + </property> + <property name="horizontalScrollBarPolicy"> + <enum>Qt::ScrollBarAlwaysOff</enum> + </property> + <property name="editTriggers"> + <set>QAbstractItemView::DoubleClicked|QAbstractItemView::SelectedClicked</set> + </property> + <property name="alternatingRowColors"> + <bool>true</bool> + </property> + <property name="selectionMode"> + <enum>QAbstractItemView::SingleSelection</enum> + </property> + <property name="selectionBehavior"> + <enum>QAbstractItemView::SelectRows</enum> + </property> + <property name="gridStyle"> + <enum>Qt::DotLine</enum> + </property> + <property name="sortingEnabled"> + <bool>false</bool> + </property> + <property name="wordWrap"> + <bool>false</bool> </property> - <property name="sizeHint" stdset="0"> - <size> - <width>108</width> - <height>20</height> - </size> + <property name="cornerButtonEnabled"> + <bool>false</bool> </property> - </spacer> + <attribute name="horizontalHeaderVisible"> + <bool>true</bool> + </attribute> + <attribute name="horizontalHeaderCascadingSectionResizes"> + <bool>false</bool> + </attribute> + <attribute name="horizontalHeaderDefaultSectionSize"> + <number>200</number> + </attribute> + <attribute name="horizontalHeaderHighlightSections"> + <bool>false</bool> + </attribute> + <attribute name="horizontalHeaderStretchLastSection"> + <bool>true</bool> + </attribute> + <attribute name="verticalHeaderVisible"> + <bool>false</bool> + </attribute> + <attribute name="verticalHeaderVisible"> + <bool>false</bool> + </attribute> + <attribute name="horizontalHeaderStretchLastSection"> + <bool>true</bool> + </attribute> + <attribute name="horizontalHeaderCascadingSectionResizes"> + <bool>false</bool> + </attribute> + <attribute name="horizontalHeaderVisible"> + <bool>true</bool> + </attribute> + <attribute name="horizontalHeaderHighlightSections"> + <bool>false</bool> + </attribute> + <attribute name="horizontalHeaderDefaultSectionSize"> + <number>200</number> + </attribute> + <column> + <property name="text"> + <string>Command</string> + </property> + </column> + <column> + <property name="text"> + <string>Description</string> + </property> + </column> + </widget> + </item> + <item> + <layout class="QHBoxLayout" name="horizontalLayout_3"> + <item> + <spacer name="horizontalSpacer_2"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + <item> + <widget class="QPushButton" name="saveButton"> + <property name="text"> + <string>Save</string> + </property> + </widget> + </item> + </layout> </item> + </layout> + </item> + <item> + <widget class="Line" name="line"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + </widget> + </item> + <item> + <layout class="QVBoxLayout" name="lowerVerticalLayout"> <item> - <widget class="QPushButton" name="cancelButton"> + <widget class="QLabel" name="label"> <property name="text"> - <string>Cancel</string> + <string>Process to start:</string> </property> </widget> </item> <item> - <widget class="QPushButton" name="sendButton"> - <property name="text"> - <string>Start</string> + <widget class="QLineEdit" name="message"/> + </item> + <item> + <layout class="QHBoxLayout" name="horizontalLayout"> + <property name="spacing"> + <number>5</number> </property> - </widget> + <item> + <spacer name="horizontalSpacer"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>108</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + <item> + <widget class="QPushButton" name="cancelButton"> + <property name="text"> + <string>Cancel</string> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="sendButton"> + <property name="text"> + <string>Start</string> + </property> + </widget> + </item> + </layout> </item> </layout> </item> diff --git a/src/pvs.cpp b/src/pvs.cpp index 843a725..1f751b8 100755 --- a/src/pvs.cpp +++ b/src/pvs.cpp @@ -263,7 +263,7 @@ void PVS::onCommand(PVSMsg cmdMessage) if (ident.compare("SHOWPROCESSES") == 0) { _pvsServerConnection->sendMessage(PVSMsg(PVSCOMMAND, "PROCESSES", "SHOW clear")); //tell the client that we want to clear his process-list - showProc(); + showProc(message); return; } if (ident.compare("STARTPROCESS") == 0) @@ -938,10 +938,9 @@ QString PVS::getConfigValue(QString key) return _settings.value(key).toString(); } -void PVS::showProc() +void PVS::showProc(QString filter) { - QString settings = getConfigValue("RemoteProcess/filter"); - QStringList filter = settings.split(" "); + QStringList filterList = filter.split(" "); //look at procfs QDir procfs("/proc"); @@ -988,9 +987,9 @@ void PVS::showProc() } if (write) //check if user belongs to pvs { - for (int i=0;i<filter.size();i++) + for (int i=0;i<filterList.size();i++) { - if (name == (filter.at(i))) + if (name == (filterList.at(i))) write = false; } } @@ -159,7 +159,7 @@ private: int stopVNCScript(); ///< stop the vnc server (via script) static void signalHandler(int signal); //handles posix signals - void showProc(); //sends list of user processes to connection manager + void showProc(QString filter); //sends list of user processes to connection manager PVSServerConnection* _pvsServerConnection; ///< our tcp connection object to the pvsserver |