author | drw <drw> | 2002-12-20 01:36:55 (UTC) |
---|---|---|
committer | drw <drw> | 2002-12-20 01:36:55 (UTC) |
commit | 3e556ed5f8c8b1236b9c6155b609930103d17b21 (patch) (unidiff) | |
tree | 859cc1e4f3097276ab77cac4cff5b24fde26ba11 /noncore | |
parent | 876e1a4724a7bd75dc642e295de354241096e028 (diff) | |
download | opie-3e556ed5f8c8b1236b9c6155b609930103d17b21.zip opie-3e556ed5f8c8b1236b9c6155b609930103d17b21.tar.gz opie-3e556ed5f8c8b1236b9c6155b609930103d17b21.tar.bz2 |
1. Added check for /sbin/modinfo, and if exists will display module details again. 2. Combined process and module detail viewers into one common class. 3. Move process signal sending to main process tab.
-rw-r--r-- | noncore/settings/sysinfo/detail.cpp (copied from noncore/settings/sysinfo/modulesdetail.h) | 41 | ||||
-rw-r--r-- | noncore/settings/sysinfo/detail.h (renamed from noncore/settings/sysinfo/modulesdetail.h) | 21 | ||||
-rw-r--r-- | noncore/settings/sysinfo/modulesdetail.cpp | 89 | ||||
-rw-r--r-- | noncore/settings/sysinfo/modulesinfo.cpp | 53 | ||||
-rw-r--r-- | noncore/settings/sysinfo/modulesinfo.h | 7 | ||||
-rw-r--r-- | noncore/settings/sysinfo/processdetail.cpp | 92 | ||||
-rw-r--r-- | noncore/settings/sysinfo/processdetail.h | 47 | ||||
-rw-r--r-- | noncore/settings/sysinfo/processinfo.cpp | 65 | ||||
-rw-r--r-- | noncore/settings/sysinfo/processinfo.h | 17 | ||||
-rw-r--r-- | noncore/settings/sysinfo/sysinfo.pro | 4 |
10 files changed, 153 insertions, 283 deletions
diff --git a/noncore/settings/sysinfo/modulesdetail.h b/noncore/settings/sysinfo/detail.cpp index 5515c4b..2c5fdc4 100644 --- a/noncore/settings/sysinfo/modulesdetail.h +++ b/noncore/settings/sysinfo/detail.cpp | |||
@@ -1,5 +1,5 @@ | |||
1 | /********************************************************************** | 1 | /********************************************************************** |
2 | ** ModulesDetail | 2 | ** Detail |
3 | ** | 3 | ** |
4 | ** Display module information | 4 | ** Display module information |
5 | ** | 5 | ** |
@@ -19,31 +19,32 @@ | |||
19 | ** | 19 | ** |
20 | **********************************************************************/ | 20 | **********************************************************************/ |
21 | 21 | ||
22 | #ifndef MODULESDETAIL_H | 22 | #include "detail.h" |
23 | #define MODULESDETAIL_H | ||
24 | 23 | ||
25 | #include <qwidget.h> | 24 | #include <sys/types.h> |
26 | #include <qcombo.h> | 25 | #include <stdio.h> |
27 | #include <qtextview.h> | 26 | |
28 | #include <qpushbutton.h> | 27 | #include <qcombobox.h> |
28 | #include <qlayout.h> | ||
29 | #include <qlistview.h> | 29 | #include <qlistview.h> |
30 | #include <qmessagebox.h> | ||
31 | #include <qpushbutton.h> | ||
32 | #include <qtextview.h> | ||
33 | #include <qwhatsthis.h> | ||
30 | 34 | ||
31 | class ModulesDetail : public QWidget | 35 | Detail::Detail( QWidget* parent, const char* name, WFlags ) |
36 | : QWidget( parent, name, WStyle_ContextHelp ) | ||
32 | { | 37 | { |
33 | Q_OBJECT | 38 | QVBoxLayout *layout = new QVBoxLayout( this ); |
34 | 39 | ||
35 | public: | 40 | detailView = new QTextView( this ); |
36 | ModulesDetail( QWidget* parent, const char* name, WFlags fl ); | 41 | detailView->setTextFormat( PlainText ); |
37 | ~ModulesDetail(); | ||
38 | 42 | ||
39 | QComboBox* CommandCB; | 43 | layout->addWidget( detailView ); |
40 | QTextView* ModulesView; | 44 | } |
41 | QPushButton* SendButton; | ||
42 | 45 | ||
43 | QString modname; | 46 | Detail::~Detail() |
47 | { | ||
48 | } | ||
44 | 49 | ||
45 | private slots: | ||
46 | void slotSendClicked(); | ||
47 | }; | ||
48 | 50 | ||
49 | #endif // MODULESDETAIL_H | ||
diff --git a/noncore/settings/sysinfo/modulesdetail.h b/noncore/settings/sysinfo/detail.h index 5515c4b..7ca9d45 100644 --- a/noncore/settings/sysinfo/modulesdetail.h +++ b/noncore/settings/sysinfo/detail.h | |||
@@ -19,8 +19,8 @@ | |||
19 | ** | 19 | ** |
20 | **********************************************************************/ | 20 | **********************************************************************/ |
21 | 21 | ||
22 | #ifndef MODULESDETAIL_H | 22 | #ifndef DETAIL_H |
23 | #define MODULESDETAIL_H | 23 | #define DETAIL_H |
24 | 24 | ||
25 | #include <qwidget.h> | 25 | #include <qwidget.h> |
26 | #include <qcombo.h> | 26 | #include <qcombo.h> |
@@ -28,22 +28,15 @@ | |||
28 | #include <qpushbutton.h> | 28 | #include <qpushbutton.h> |
29 | #include <qlistview.h> | 29 | #include <qlistview.h> |
30 | 30 | ||
31 | class ModulesDetail : public QWidget | 31 | class Detail : public QWidget |
32 | { | 32 | { |
33 | Q_OBJECT | 33 | Q_OBJECT |
34 | 34 | ||
35 | public: | 35 | public: |
36 | ModulesDetail( QWidget* parent, const char* name, WFlags fl ); | 36 | Detail( QWidget * = 0x0, const char * = 0x0, WFlags = 0 ); |
37 | ~ModulesDetail(); | 37 | ~Detail(); |
38 | 38 | ||
39 | QComboBox* CommandCB; | 39 | QTextView* detailView; |
40 | QTextView* ModulesView; | ||
41 | QPushButton* SendButton; | ||
42 | |||
43 | QString modname; | ||
44 | |||
45 | private slots: | ||
46 | void slotSendClicked(); | ||
47 | }; | 40 | }; |
48 | 41 | ||
49 | #endif // MODULESDETAIL_H | 42 | #endif // DETAIL_H |
diff --git a/noncore/settings/sysinfo/modulesdetail.cpp b/noncore/settings/sysinfo/modulesdetail.cpp deleted file mode 100644 index ea9cdfa..0000000 --- a/noncore/settings/sysinfo/modulesdetail.cpp +++ b/dev/null | |||
@@ -1,89 +0,0 @@ | |||
1 | /********************************************************************** | ||
2 | ** ModulesDetail | ||
3 | ** | ||
4 | ** Display module information | ||
5 | ** | ||
6 | ** Copyright (C) 2002, Michael Lauer | ||
7 | ** mickey@tm.informatik.uni-frankfurt.de | ||
8 | ** http://www.Vanille.de | ||
9 | ** | ||
10 | ** Based on ProcessDetail by Dan Williams <williamsdr@acm.org> | ||
11 | ** | ||
12 | ** This file may be distributed and/or modified under the terms of the | ||
13 | ** GNU General Public License version 2 as published by the Free Software | ||
14 | ** Foundation and appearing in the file LICENSE.GPL included in the | ||
15 | ** packaging of this file. | ||
16 | ** | ||
17 | ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE | ||
18 | ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. | ||
19 | ** | ||
20 | **********************************************************************/ | ||
21 | |||
22 | #include "modulesdetail.h" | ||
23 | |||
24 | #include <sys/types.h> | ||
25 | #include <stdio.h> | ||
26 | |||
27 | #include <qcombobox.h> | ||
28 | #include <qlayout.h> | ||
29 | #include <qlistview.h> | ||
30 | #include <qmessagebox.h> | ||
31 | #include <qpushbutton.h> | ||
32 | #include <qtextview.h> | ||
33 | #include <qwhatsthis.h> | ||
34 | |||
35 | ModulesDetail::ModulesDetail( QWidget* parent, const char* name, WFlags ) | ||
36 | : QWidget( parent, name, WStyle_ContextHelp ) | ||
37 | { | ||
38 | modname = ""; | ||
39 | |||
40 | QGridLayout *layout = new QGridLayout( this ); | ||
41 | layout->setSpacing( 4 ); | ||
42 | layout->setMargin( 4 ); | ||
43 | |||
44 | CommandCB = new QComboBox( FALSE, this, "CommandCB" ); | ||
45 | CommandCB->insertItem( "modprobe -r" ); | ||
46 | CommandCB->insertItem( "rmmod" ); | ||
47 | // I can't think of other useful commands yet. Anyone? | ||
48 | layout->addWidget( CommandCB, 1, 0 ); | ||
49 | QWhatsThis::add( CommandCB, tr( "Select a command here and then click the Send button to the right to send the command." ) ); | ||
50 | |||
51 | ModulesView = new QTextView( this, "ModulesView" ); | ||
52 | layout->addMultiCellWidget( ModulesView, 0, 0, 0, 1 ); | ||
53 | QWhatsThis::add( ModulesView, tr( "This area shows detailed information about this module." ) ); | ||
54 | |||
55 | SendButton = new QPushButton( this, "SendButton" ); | ||
56 | SendButton->setMinimumSize( QSize( 50, 24 ) ); | ||
57 | SendButton->setMaximumSize( QSize( 50, 24 ) ); | ||
58 | SendButton->setText( tr( "Send" ) ); | ||
59 | connect( SendButton, SIGNAL( clicked() ), this, SLOT( slotSendClicked() ) ); | ||
60 | layout->addWidget( SendButton, 1, 1 ); | ||
61 | QWhatsThis::add( SendButton, tr( "Click here to send the selected command to this module." ) ); | ||
62 | } | ||
63 | |||
64 | ModulesDetail::~ModulesDetail() | ||
65 | { | ||
66 | } | ||
67 | |||
68 | void ModulesDetail::slotSendClicked() | ||
69 | { | ||
70 | QString command = QString( "/sbin/" ) | ||
71 | + CommandCB->currentText() | ||
72 | + QString( " " ) + modname; | ||
73 | |||
74 | if ( QMessageBox::warning( this, caption(), | ||
75 | tr( "You really want to \n" + CommandCB->currentText() + "\nthis Module?"), | ||
76 | QMessageBox::Yes | QMessageBox::Default, QMessageBox::No | QMessageBox::Escape ) | ||
77 | == QMessageBox::Yes ) | ||
78 | { | ||
79 | FILE* stream = popen( command, "r" ); | ||
80 | if ( stream ) | ||
81 | pclose( stream ); | ||
82 | { | ||
83 | hide(); | ||
84 | } | ||
85 | } | ||
86 | |||
87 | } | ||
88 | |||
89 | |||
diff --git a/noncore/settings/sysinfo/modulesinfo.cpp b/noncore/settings/sysinfo/modulesinfo.cpp index c558fad..8b58fe9 100644 --- a/noncore/settings/sysinfo/modulesinfo.cpp +++ b/noncore/settings/sysinfo/modulesinfo.cpp | |||
@@ -33,6 +33,7 @@ | |||
33 | #include <qwhatsthis.h> | 33 | #include <qwhatsthis.h> |
34 | 34 | ||
35 | #include "modulesinfo.h" | 35 | #include "modulesinfo.h" |
36 | #include "detail.h" | ||
36 | 37 | ||
37 | ModulesInfo::ModulesInfo( QWidget* parent, const char* name, WFlags fl ) | 38 | ModulesInfo::ModulesInfo( QWidget* parent, const char* name, WFlags fl ) |
38 | : QWidget( parent, name, fl ) | 39 | : QWidget( parent, name, fl ) |
@@ -51,6 +52,14 @@ ModulesInfo::ModulesInfo( QWidget* parent, const char* name, WFlags fl ) | |||
51 | ModulesView->setAllColumnsShowFocus( TRUE ); | 52 | ModulesView->setAllColumnsShowFocus( TRUE ); |
52 | layout->addMultiCellWidget( ModulesView, 0, 0, 0, 1 ); | 53 | layout->addMultiCellWidget( ModulesView, 0, 0, 0, 1 ); |
53 | QWhatsThis::add( ModulesView, tr( "This is a list of all the kernel modules currently loaded on this handheld device.\n\nClick and hold on a module to see additional information about the module, or to unload it." ) ); | 54 | QWhatsThis::add( ModulesView, tr( "This is a list of all the kernel modules currently loaded on this handheld device.\n\nClick and hold on a module to see additional information about the module, or to unload it." ) ); |
55 | |||
56 | // Test if we have /sbin/modinfo, and if so, allow module detail window | ||
57 | if ( QFile::exists( "/sbin/modinfo" ) ) | ||
58 | { | ||
59 | QPEApplication::setStylusOperation( ModulesView->viewport(), QPEApplication::RightOnHold ); | ||
60 | connect( ModulesView, SIGNAL( rightButtonPressed( QListViewItem *, const QPoint &, int ) ), | ||
61 | this, SLOT( viewModules( QListViewItem * ) ) ); | ||
62 | } | ||
54 | 63 | ||
55 | CommandCB = new QComboBox( FALSE, this ); | 64 | CommandCB = new QComboBox( FALSE, this ); |
56 | CommandCB->insertItem( "modprobe -r" ); | 65 | CommandCB->insertItem( "modprobe -r" ); |
@@ -70,8 +79,11 @@ ModulesInfo::ModulesInfo( QWidget* parent, const char* name, WFlags fl ) | |||
70 | QTimer *t = new QTimer( this ); | 79 | QTimer *t = new QTimer( this ); |
71 | connect( t, SIGNAL( timeout() ), this, SLOT( updateData() ) ); | 80 | connect( t, SIGNAL( timeout() ), this, SLOT( updateData() ) ); |
72 | t->start( 5000 ); | 81 | t->start( 5000 ); |
73 | 82 | ||
74 | updateData(); | 83 | updateData(); |
84 | |||
85 | ModulesDtl = new Detail(); | ||
86 | QWhatsThis::add( ModulesDtl->detailView, tr( "This area shows detailed information about this module." ) ); | ||
75 | } | 87 | } |
76 | 88 | ||
77 | ModulesInfo::~ModulesInfo() | 89 | ModulesInfo::~ModulesInfo() |
@@ -114,20 +126,49 @@ void ModulesInfo::slotSendClicked() | |||
114 | capstr.append( CommandCB->currentText() ); | 126 | capstr.append( CommandCB->currentText() ); |
115 | capstr.append( "\nfor this module?" ); | 127 | capstr.append( "\nfor this module?" ); |
116 | 128 | ||
117 | if ( QMessageBox::warning( this, caption(), capstr, | 129 | QString modname = ModulesView->currentItem()->text( 0 ); |
130 | |||
131 | if ( QMessageBox::warning( this, modname, capstr, | ||
118 | QMessageBox::Yes | QMessageBox::Default, QMessageBox::No | QMessageBox::Escape ) == QMessageBox::Yes ) | 132 | QMessageBox::Yes | QMessageBox::Default, QMessageBox::No | QMessageBox::Escape ) == QMessageBox::Yes ) |
119 | { | 133 | { |
120 | QString command = "/sbin/"; | 134 | QString command = "/sbin/"; |
121 | command.append( CommandCB->currentText() ); | 135 | command.append( CommandCB->currentText() ); |
122 | command.append( " " ); | 136 | command.append( " " ); |
123 | command.append( ModulesView->currentItem()->text( 0 ) ); | 137 | command.append( modname ); |
124 | 138 | ||
125 | FILE* stream = popen( command, "r" ); | 139 | FILE* stream = popen( command, "r" ); |
126 | if ( stream ) | 140 | if ( stream ) |
127 | pclose( stream ); | 141 | pclose( stream ); |
128 | //{ | ||
129 | // hide(); | ||
130 | //} | ||
131 | } | 142 | } |
132 | 143 | ||
133 | } | 144 | } |
145 | |||
146 | void ModulesInfo::viewModules( QListViewItem *modules ) | ||
147 | { | ||
148 | QString modname = modules->text( 0 ); | ||
149 | QString capstr = "Module: "; | ||
150 | capstr.append( modname ); | ||
151 | ModulesDtl->setCaption( capstr ); | ||
152 | QString command = "/sbin/modinfo -nad "; | ||
153 | command.append( modname ); | ||
154 | FILE* modinfo = popen( command, "r" ); | ||
155 | |||
156 | if ( modinfo ) | ||
157 | { | ||
158 | char line[200]; | ||
159 | ModulesDtl->detailView->setText( " Details:\n------------\n" ); | ||
160 | |||
161 | while( true ) | ||
162 | { | ||
163 | int success = fscanf( modinfo, "%[^\n]\n", line ); | ||
164 | if ( success == EOF ) | ||
165 | break; | ||
166 | ModulesDtl->detailView->append( line ); | ||
167 | } | ||
168 | |||
169 | pclose( modinfo ); | ||
170 | } | ||
171 | |||
172 | ModulesDtl->showMaximized(); | ||
173 | } | ||
174 | |||
diff --git a/noncore/settings/sysinfo/modulesinfo.h b/noncore/settings/sysinfo/modulesinfo.h index ef1f805..e974610 100644 --- a/noncore/settings/sysinfo/modulesinfo.h +++ b/noncore/settings/sysinfo/modulesinfo.h | |||
@@ -24,8 +24,10 @@ | |||
24 | 24 | ||
25 | #include <qwidget.h> | 25 | #include <qwidget.h> |
26 | 26 | ||
27 | class Detail; | ||
27 | class QComboBox; | 28 | class QComboBox; |
28 | class QListView; | 29 | class QListView; |
30 | class QListViewItem; | ||
29 | 31 | ||
30 | class ModulesInfo : public QWidget | 32 | class ModulesInfo : public QWidget |
31 | { | 33 | { |
@@ -35,12 +37,15 @@ public: | |||
35 | ~ModulesInfo(); | 37 | ~ModulesInfo(); |
36 | 38 | ||
37 | private: | 39 | private: |
38 | QListView* ModulesView; | 40 | QListView* ModulesView; |
39 | QComboBox* CommandCB; | 41 | QComboBox* CommandCB; |
40 | 42 | ||
43 | Detail* ModulesDtl; | ||
44 | |||
41 | private slots: | 45 | private slots: |
42 | void updateData(); | 46 | void updateData(); |
43 | void slotSendClicked(); | 47 | void slotSendClicked(); |
48 | void viewModules( QListViewItem * ); | ||
44 | }; | 49 | }; |
45 | 50 | ||
46 | #endif | 51 | #endif |
diff --git a/noncore/settings/sysinfo/processdetail.cpp b/noncore/settings/sysinfo/processdetail.cpp deleted file mode 100644 index fcb871f..0000000 --- a/noncore/settings/sysinfo/processdetail.cpp +++ b/dev/null | |||
@@ -1,92 +0,0 @@ | |||
1 | /********************************************************************** | ||
2 | ** ProcessDetail | ||
3 | ** | ||
4 | ** Display process information | ||
5 | ** | ||
6 | ** Copyright (C) 2002, Dan Williams | ||
7 | ** williamsdr@acm.org | ||
8 | ** http://draknor.net | ||
9 | ** | ||
10 | ** This file may be distributed and/or modified under the terms of the | ||
11 | ** GNU General Public License version 2 as published by the Free Software | ||
12 | ** Foundation and appearing in the file LICENSE.GPL included in the | ||
13 | ** packaging of this file. | ||
14 | ** | ||
15 | ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE | ||
16 | ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. | ||
17 | ** | ||
18 | **********************************************************************/ | ||
19 | |||
20 | #include "processdetail.h" | ||
21 | |||
22 | #include <sys/types.h> | ||
23 | #include <signal.h> | ||
24 | |||
25 | #include <qcombobox.h> | ||
26 | #include <qlayout.h> | ||
27 | #include <qlistview.h> | ||
28 | #include <qmessagebox.h> | ||
29 | #include <qpushbutton.h> | ||
30 | #include <qtextview.h> | ||
31 | #include <qwhatsthis.h> | ||
32 | |||
33 | ProcessDetail::ProcessDetail( QWidget* parent, const char* name, WFlags ) | ||
34 | : QWidget( parent, name, WStyle_ContextHelp ) | ||
35 | { | ||
36 | pid = 0; | ||
37 | |||
38 | QGridLayout *layout = new QGridLayout( this ); | ||
39 | layout->setSpacing( 4 ); | ||
40 | layout->setMargin( 4 ); | ||
41 | |||
42 | SignalCB = new QComboBox( FALSE, this, "SignalCB" ); | ||
43 | SignalCB->insertItem( " 1: SIGHUP" ); | ||
44 | SignalCB->insertItem( " 2: SIGINT" ); | ||
45 | SignalCB->insertItem( " 3: SIGQUIT" ); | ||
46 | SignalCB->insertItem( " 5: SIGTRAP" ); | ||
47 | SignalCB->insertItem( " 6: SIGABRT" ); | ||
48 | SignalCB->insertItem( " 9: SIGKILL" ); | ||
49 | SignalCB->insertItem( "14: SIGALRM" ); | ||
50 | SignalCB->insertItem( "15: SIGTERM" ); | ||
51 | SignalCB->insertItem( "18: SIGCONT" ); | ||
52 | SignalCB->insertItem( "19: SIGSTOP" ); | ||
53 | layout->addWidget( SignalCB, 1, 0 ); | ||
54 | QWhatsThis::add( SignalCB, tr( "Select a signal here and then click the Send button to the right to send to this process." ) ); | ||
55 | |||
56 | ProcessView = new QTextView( this, "ProcessView" ); | ||
57 | layout->addMultiCellWidget( ProcessView, 0, 0, 0, 1 ); | ||
58 | QWhatsThis::add( ProcessView, tr( "This area shows detailed information about this process." ) ); | ||
59 | |||
60 | SendButton = new QPushButton( this, "SendButton" ); | ||
61 | SendButton->setMinimumSize( QSize( 50, 24 ) ); | ||
62 | SendButton->setMaximumSize( QSize( 50, 24 ) ); | ||
63 | SendButton->setText( tr( "Send" ) ); | ||
64 | connect( SendButton, SIGNAL( clicked() ), this, SLOT( slotSendClicked() ) ); | ||
65 | layout->addWidget( SendButton, 1, 1 ); | ||
66 | QWhatsThis::add( SendButton, tr( "Click here to send the selected signal to this process." ) ); | ||
67 | } | ||
68 | |||
69 | ProcessDetail::~ProcessDetail() | ||
70 | { | ||
71 | } | ||
72 | |||
73 | void ProcessDetail::slotSendClicked() | ||
74 | { | ||
75 | QString sigstr = SignalCB->currentText(); | ||
76 | sigstr.truncate(2); | ||
77 | int sigid = sigstr.toUInt(); | ||
78 | |||
79 | if ( QMessageBox::warning( this, caption(), | ||
80 | tr( "You really want to send\n" + SignalCB->currentText() + "\nto this process?"), | ||
81 | QMessageBox::Yes | QMessageBox::Default, QMessageBox::No | QMessageBox::Escape ) | ||
82 | == QMessageBox::Yes ) | ||
83 | { | ||
84 | if ( kill( pid, sigid ) == 0 ) | ||
85 | { | ||
86 | hide(); | ||
87 | } | ||
88 | } | ||
89 | |||
90 | } | ||
91 | |||
92 | |||
diff --git a/noncore/settings/sysinfo/processdetail.h b/noncore/settings/sysinfo/processdetail.h deleted file mode 100644 index 22e196f..0000000 --- a/noncore/settings/sysinfo/processdetail.h +++ b/dev/null | |||
@@ -1,47 +0,0 @@ | |||
1 | /********************************************************************** | ||
2 | ** ProcessDetail | ||
3 | ** | ||
4 | ** Display process information | ||
5 | ** | ||
6 | ** Copyright (C) 2002, Dan Williams | ||
7 | ** williamsdr@acm.org | ||
8 | ** http://draknor.net | ||
9 | ** | ||
10 | ** This file may be distributed and/or modified under the terms of the | ||
11 | ** GNU General Public License version 2 as published by the Free Software | ||
12 | ** Foundation and appearing in the file LICENSE.GPL included in the | ||
13 | ** packaging of this file. | ||
14 | ** | ||
15 | ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE | ||
16 | ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. | ||
17 | ** | ||
18 | **********************************************************************/ | ||
19 | |||
20 | #ifndef PROCESSDETAIL_H | ||
21 | #define PROCESSDETAIL_H | ||
22 | |||
23 | #include <qwidget.h> | ||
24 | #include <qcombo.h> | ||
25 | #include <qtextview.h> | ||
26 | #include <qpushbutton.h> | ||
27 | #include <qlistview.h> | ||
28 | |||
29 | class ProcessDetail : public QWidget | ||
30 | { | ||
31 | Q_OBJECT | ||
32 | |||
33 | public: | ||
34 | ProcessDetail( QWidget* parent, const char* name, WFlags fl ); | ||
35 | ~ProcessDetail(); | ||
36 | |||
37 | QComboBox* SignalCB; | ||
38 | QTextView* ProcessView; | ||
39 | QPushButton* SendButton; | ||
40 | |||
41 | int pid; | ||
42 | |||
43 | private slots: | ||
44 | void slotSendClicked(); | ||
45 | }; | ||
46 | |||
47 | #endif // PROCESSDETAIL_H | ||
diff --git a/noncore/settings/sysinfo/processinfo.cpp b/noncore/settings/sysinfo/processinfo.cpp index 86133a9..35d7ba1 100644 --- a/noncore/settings/sysinfo/processinfo.cpp +++ b/noncore/settings/sysinfo/processinfo.cpp | |||
@@ -24,15 +24,23 @@ | |||
24 | #include <qheader.h> | 24 | #include <qheader.h> |
25 | #include <qlayout.h> | 25 | #include <qlayout.h> |
26 | #include <qlistview.h> | 26 | #include <qlistview.h> |
27 | #include <qmessagebox.h> | ||
27 | #include <qtimer.h> | 28 | #include <qtimer.h> |
28 | #include <qwhatsthis.h> | 29 | #include <qwhatsthis.h> |
29 | 30 | ||
31 | #include <sys/types.h> | ||
32 | #include <signal.h> | ||
33 | |||
30 | #include "processinfo.h" | 34 | #include "processinfo.h" |
35 | #include "detail.h" | ||
31 | 36 | ||
32 | ProcessInfo::ProcessInfo( QWidget* parent, const char* name, WFlags fl ) | 37 | ProcessInfo::ProcessInfo( QWidget* parent, const char* name, WFlags fl ) |
33 | : QWidget( parent, name, fl ) | 38 | : QWidget( parent, name, fl ) |
34 | { | 39 | { |
35 | QVBoxLayout *layout = new QVBoxLayout( this, 5 ); | 40 | QGridLayout *layout = new QGridLayout( this ); |
41 | layout->setSpacing( 4 ); | ||
42 | layout->setMargin( 4 ); | ||
43 | |||
36 | 44 | ||
37 | ProcessView = new QListView( this, "ProcessView" ); | 45 | ProcessView = new QListView( this, "ProcessView" ); |
38 | int colnum = ProcessView->addColumn( tr( "PID" ) ); | 46 | int colnum = ProcessView->addColumn( tr( "PID" ) ); |
@@ -45,8 +53,30 @@ ProcessInfo::ProcessInfo( QWidget* parent, const char* name, WFlags fl ) | |||
45 | QPEApplication::setStylusOperation( ProcessView->viewport(), QPEApplication::RightOnHold ); | 53 | QPEApplication::setStylusOperation( ProcessView->viewport(), QPEApplication::RightOnHold ); |
46 | connect( ProcessView, SIGNAL( rightButtonPressed( QListViewItem *, const QPoint &, int ) ), | 54 | connect( ProcessView, SIGNAL( rightButtonPressed( QListViewItem *, const QPoint &, int ) ), |
47 | this, SLOT( viewProcess( QListViewItem * ) ) ); | 55 | this, SLOT( viewProcess( QListViewItem * ) ) ); |
48 | layout->addWidget( ProcessView ); | 56 | layout->addMultiCellWidget( ProcessView, 0, 0, 0, 1 ); |
49 | QWhatsThis::add( ProcessView, tr( "This is a list of all the processes on this handheld device.\n\nClick and hold on a process to see additional information about the process, or to send a signal to it." ) ); | 57 | QWhatsThis::add( ProcessView, tr( "This is a list of all the processes on this handheld device.\n\nClick and hold on a process to see additional information about the process, or to send a signal to it." ) ); |
58 | |||
59 | SignalCB = new QComboBox( FALSE, this, "SignalCB" ); | ||
60 | SignalCB->insertItem( " 1: SIGHUP" ); | ||
61 | SignalCB->insertItem( " 2: SIGINT" ); | ||
62 | SignalCB->insertItem( " 3: SIGQUIT" ); | ||
63 | SignalCB->insertItem( " 5: SIGTRAP" ); | ||
64 | SignalCB->insertItem( " 6: SIGABRT" ); | ||
65 | SignalCB->insertItem( " 9: SIGKILL" ); | ||
66 | SignalCB->insertItem( "14: SIGALRM" ); | ||
67 | SignalCB->insertItem( "15: SIGTERM" ); | ||
68 | SignalCB->insertItem( "18: SIGCONT" ); | ||
69 | SignalCB->insertItem( "19: SIGSTOP" ); | ||
70 | layout->addWidget( SignalCB, 1, 0 ); | ||
71 | QWhatsThis::add( SignalCB, tr( "Select a signal here and then click the Send button to the right to send to this process." ) ); | ||
72 | |||
73 | SendButton = new QPushButton( this, "SendButton" ); | ||
74 | SendButton->setMinimumSize( QSize( 50, 24 ) ); | ||
75 | SendButton->setMaximumSize( QSize( 50, 24 ) ); | ||
76 | SendButton->setText( tr( "Send" ) ); | ||
77 | connect( SendButton, SIGNAL( clicked() ), this, SLOT( slotSendClicked() ) ); | ||
78 | layout->addWidget( SendButton, 1, 1 ); | ||
79 | QWhatsThis::add( SendButton, tr( "Click here to send the selected signal to this process." ) ); | ||
50 | 80 | ||
51 | QTimer *t = new QTimer( this ); | 81 | QTimer *t = new QTimer( this ); |
52 | connect( t, SIGNAL( timeout() ), this, SLOT( updateData() ) ); | 82 | connect( t, SIGNAL( timeout() ), this, SLOT( updateData() ) ); |
@@ -54,8 +84,8 @@ ProcessInfo::ProcessInfo( QWidget* parent, const char* name, WFlags fl ) | |||
54 | 84 | ||
55 | updateData(); | 85 | updateData(); |
56 | 86 | ||
57 | ProcessDtl = new ProcessDetail( 0, 0, 0 ); | 87 | ProcessDtl = new Detail(); |
58 | ProcessDtl->ProcessView->setTextFormat( RichText ); | 88 | QWhatsThis::add( ProcessDtl->detailView, tr( "This area shows detailed information about this process." ) ); |
59 | } | 89 | } |
60 | 90 | ||
61 | ProcessInfo::~ProcessInfo() | 91 | ProcessInfo::~ProcessInfo() |
@@ -112,21 +142,42 @@ void ProcessInfo::updateData() | |||
112 | delete procdir; | 142 | delete procdir; |
113 | } | 143 | } |
114 | 144 | ||
145 | void ProcessInfo::slotSendClicked() | ||
146 | { | ||
147 | QString capstr = tr( "You really want to send\n" ); | ||
148 | capstr.append( SignalCB->currentText() ); | ||
149 | capstr.append( "\nto this process?" ); | ||
150 | |||
151 | QListViewItem *currprocess = ProcessView->currentItem(); | ||
152 | |||
153 | if ( QMessageBox::warning( this, currprocess->text( 1 ), capstr, | ||
154 | QMessageBox::Yes | QMessageBox::Default, QMessageBox::No | QMessageBox::Escape ) == QMessageBox::Yes ) | ||
155 | { | ||
156 | QString sigstr = SignalCB->currentText(); | ||
157 | sigstr.truncate(2); | ||
158 | int sigid = sigstr.toUInt(); | ||
159 | if ( kill( currprocess->text( 0 ).stripWhiteSpace().toUInt(), sigid ) == 0 ) | ||
160 | { | ||
161 | hide(); | ||
162 | } | ||
163 | } | ||
164 | |||
165 | } | ||
166 | |||
115 | void ProcessInfo::viewProcess( QListViewItem *process ) | 167 | void ProcessInfo::viewProcess( QListViewItem *process ) |
116 | { | 168 | { |
117 | QString pid= process->text( 0 ).stripWhiteSpace(); | 169 | QString pid= process->text( 0 ).stripWhiteSpace(); |
118 | QString command = process->text( 1 ); | 170 | QString command = process->text( 1 ); |
119 | ProcessDtl->setCaption( pid + " - " + command ); | 171 | ProcessDtl->setCaption( pid + " - " + command ); |
120 | ProcessDtl->pid = pid.toUInt(); | ||
121 | FILE *statfile = fopen( ( QString ) ( "/proc/" + pid + "/status"), "r"); | 172 | FILE *statfile = fopen( ( QString ) ( "/proc/" + pid + "/status"), "r"); |
122 | if ( statfile ) | 173 | if ( statfile ) |
123 | { | 174 | { |
124 | char line[81]; | 175 | char line[81]; |
125 | fgets( line, 81, statfile ); | 176 | fgets( line, 81, statfile ); |
126 | ProcessDtl->ProcessView->setText( line ); | 177 | ProcessDtl->detailView->setText( line ); |
127 | while ( fgets( line, 81, statfile ) ) | 178 | while ( fgets( line, 81, statfile ) ) |
128 | { | 179 | { |
129 | ProcessDtl->ProcessView->append( line ); | 180 | ProcessDtl->detailView->append( line ); |
130 | } | 181 | } |
131 | fclose( statfile ); | 182 | fclose( statfile ); |
132 | } | 183 | } |
diff --git a/noncore/settings/sysinfo/processinfo.h b/noncore/settings/sysinfo/processinfo.h index 24b190e..687e080 100644 --- a/noncore/settings/sysinfo/processinfo.h +++ b/noncore/settings/sysinfo/processinfo.h | |||
@@ -23,7 +23,10 @@ | |||
23 | #include <qwidget.h> | 23 | #include <qwidget.h> |
24 | #include <qlistview.h> | 24 | #include <qlistview.h> |
25 | 25 | ||
26 | #include "processdetail.h" | 26 | class Detail; |
27 | class QComboBox; | ||
28 | class QListView; | ||
29 | class QListViewItem; | ||
27 | 30 | ||
28 | class ProcessInfo : public QWidget | 31 | class ProcessInfo : public QWidget |
29 | { | 32 | { |
@@ -32,13 +35,17 @@ public: | |||
32 | ProcessInfo( QWidget *parent = 0, const char *name = 0, WFlags f = 0 ); | 35 | ProcessInfo( QWidget *parent = 0, const char *name = 0, WFlags f = 0 ); |
33 | ~ProcessInfo(); | 36 | ~ProcessInfo(); |
34 | 37 | ||
38 | private: | ||
39 | QListView* ProcessView; | ||
40 | QComboBox* SignalCB; | ||
41 | QPushButton* SendButton; | ||
42 | |||
43 | Detail *ProcessDtl; | ||
44 | |||
35 | private slots: | 45 | private slots: |
36 | void updateData(); | 46 | void updateData(); |
47 | void slotSendClicked(); | ||
37 | void viewProcess( QListViewItem * ); | 48 | void viewProcess( QListViewItem * ); |
38 | |||
39 | private: | ||
40 | QListView* ProcessView; | ||
41 | ProcessDetail *ProcessDtl; | ||
42 | }; | 49 | }; |
43 | 50 | ||
44 | #endif | 51 | #endif |
diff --git a/noncore/settings/sysinfo/sysinfo.pro b/noncore/settings/sysinfo/sysinfo.pro index 7e66451..b6217c3 100644 --- a/noncore/settings/sysinfo/sysinfo.pro +++ b/noncore/settings/sysinfo/sysinfo.pro | |||
@@ -6,8 +6,8 @@ HEADERS = memory.h \ | |||
6 | load.h \ | 6 | load.h \ |
7 | storage.h \ | 7 | storage.h \ |
8 | processinfo.h \ | 8 | processinfo.h \ |
9 | processdetail.h \ | ||
10 | modulesinfo.h \ | 9 | modulesinfo.h \ |
10 | detail.h \ | ||
11 | versioninfo.h \ | 11 | versioninfo.h \ |
12 | sysinfo.h | 12 | sysinfo.h |
13 | SOURCES = main.cpp \ | 13 | SOURCES = main.cpp \ |
@@ -17,7 +17,7 @@ SOURCES = main.cpp \ | |||
17 | storage.cpp \ | 17 | storage.cpp \ |
18 | processinfo.cpp \ | 18 | processinfo.cpp \ |
19 | modulesinfo.cpp \ | 19 | modulesinfo.cpp \ |
20 | processdetail.cpp \ | 20 | detail.cpp \ |
21 | versioninfo.cpp \ | 21 | versioninfo.cpp \ |
22 | sysinfo.cpp | 22 | sysinfo.cpp |
23 | INTERFACES = | 23 | INTERFACES = |