summaryrefslogtreecommitdiff
path: root/noncore/settings/sysinfo/processinfo.cpp
Unidiff
Diffstat (limited to 'noncore/settings/sysinfo/processinfo.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/settings/sysinfo/processinfo.cpp76
1 files changed, 39 insertions, 37 deletions
diff --git a/noncore/settings/sysinfo/processinfo.cpp b/noncore/settings/sysinfo/processinfo.cpp
index af0fe26..2a90b0f 100644
--- a/noncore/settings/sysinfo/processinfo.cpp
+++ b/noncore/settings/sysinfo/processinfo.cpp
@@ -14,28 +14,31 @@
14** 14**
15** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 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. 16** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
17** 17**
18**********************************************************************/ 18**********************************************************************/
19 19
20#include "processinfo.h"
21#include "detail.h"
22
23/* OPIE */
20#include <qpe/qpeapplication.h> 24#include <qpe/qpeapplication.h>
21 25
26/* QT */
22#include <qdir.h> 27#include <qdir.h>
23#include <qlayout.h> 28#include <qlayout.h>
24#include <qmessagebox.h> 29#include <qmessagebox.h>
25#include <qtimer.h> 30#include <qtimer.h>
26#include <qwhatsthis.h> 31#include <qwhatsthis.h>
27 32
33/* STD */
28#include <sys/types.h> 34#include <sys/types.h>
29#include <signal.h> 35#include <signal.h>
30 36
31#include "processinfo.h"
32#include "detail.h"
33
34ProcessInfo::ProcessInfo( QWidget* parent, const char* name, WFlags fl ) 37ProcessInfo::ProcessInfo( QWidget* parent, const char* name, WFlags fl )
35 : QWidget( parent, name, fl ) 38 : QWidget( parent, name, fl )
36{ 39{
37 QGridLayout *layout = new QGridLayout( this ); 40 QGridLayout *layout = new QGridLayout( this );
38 layout->setSpacing( 4 ); 41 layout->setSpacing( 4 );
39 layout->setMargin( 4 ); 42 layout->setMargin( 4 );
40 43
41 44
@@ -46,16 +49,16 @@ ProcessInfo::ProcessInfo( QWidget* parent, const char* name, WFlags fl )
46 colnum = ProcessView->addColumn( tr( "Status" ) ); 49 colnum = ProcessView->addColumn( tr( "Status" ) );
47 colnum = ProcessView->addColumn( tr( "Time" ) ); 50 colnum = ProcessView->addColumn( tr( "Time" ) );
48 ProcessView->setColumnAlignment( colnum, Qt::AlignRight ); 51 ProcessView->setColumnAlignment( colnum, Qt::AlignRight );
49 ProcessView->setAllColumnsShowFocus( TRUE ); 52 ProcessView->setAllColumnsShowFocus( TRUE );
50 QPEApplication::setStylusOperation( ProcessView->viewport(), QPEApplication::RightOnHold ); 53 QPEApplication::setStylusOperation( ProcessView->viewport(), QPEApplication::RightOnHold );
51 connect( ProcessView, SIGNAL( rightButtonPressed( QListViewItem *, const QPoint &, int ) ), 54 connect( ProcessView, SIGNAL( rightButtonPressed( QListViewItem *, const QPoint &, int ) ),
52 this, SLOT( viewProcess( QListViewItem * ) ) ); 55 this, SLOT( viewProcess( QListViewItem * ) ) );
53 layout->addMultiCellWidget( ProcessView, 0, 0, 0, 1 ); 56 layout->addMultiCellWidget( ProcessView, 0, 0, 0, 1 );
54 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." ) );
55 58
56 SignalCB = new QComboBox( FALSE, this, "SignalCB" ); 59 SignalCB = new QComboBox( FALSE, this, "SignalCB" );
57 SignalCB->insertItem( " 1: SIGHUP" ); 60 SignalCB->insertItem( " 1: SIGHUP" );
58 SignalCB->insertItem( " 2: SIGINT" ); 61 SignalCB->insertItem( " 2: SIGINT" );
59 SignalCB->insertItem( " 3: SIGQUIT" ); 62 SignalCB->insertItem( " 3: SIGQUIT" );
60 SignalCB->insertItem( " 5: SIGTRAP" ); 63 SignalCB->insertItem( " 5: SIGTRAP" );
61 SignalCB->insertItem( " 6: SIGABRT" ); 64 SignalCB->insertItem( " 6: SIGABRT" );
@@ -83,31 +86,30 @@ ProcessInfo::ProcessInfo( QWidget* parent, const char* name, WFlags fl )
83 86
84 ProcessDtl = new Detail(); 87 ProcessDtl = new Detail();
85 QWhatsThis::add( ProcessDtl->detailView, tr( "This area shows detailed information about this process." ) ); 88 QWhatsThis::add( ProcessDtl->detailView, tr( "This area shows detailed information about this process." ) );
86} 89}
87 90
88ProcessInfo::~ProcessInfo() 91ProcessInfo::~ProcessInfo()
89{ 92{}
90}
91 93
92void ProcessInfo::updateData() 94void ProcessInfo::updateData()
93{ 95{
94 int pid, ppid, pgrp, session, tty, tpgid, utime, stime, cutime, cstime, counter, priority, starttime, 96 int pid, ppid, pgrp, session, tty, tpgid, utime, stime, cutime, cstime, counter, priority, starttime,
95 signal, blocked, sigignore, sigcatch; 97 signal, blocked, sigignore, sigcatch;
96 uint flags, minflt, cminflt, majflt, cmajflt, timeout, itrealvalue, vsize, rss, rlim, startcode, 98 uint flags, minflt, cminflt, majflt, cmajflt, timeout, itrealvalue, vsize, rss, rlim, startcode,
97 endcode, startstack, kstkesp, kstkeip, wchan; 99 endcode, startstack, kstkesp, kstkeip, wchan;
98 char state; 100 char state;
99 char comm[64]; 101 char comm[64];
100 102
101 QString selectedpid; 103 QString selectedpid;
102 QListViewItem *curritem = ProcessView->currentItem(); 104 QListViewItem *curritem = ProcessView->currentItem();
103 if ( curritem ) 105 if ( curritem )
104 { 106 {
105 selectedpid = curritem->text( 0 ); 107 selectedpid = curritem->text( 0 );
106 } 108 }
107 109
108 ProcessView->clear(); 110 ProcessView->clear();
109 111
110 QListViewItem *newitem; 112 QListViewItem *newitem;
111 QListViewItem *selecteditem = 0x0; 113 QListViewItem *selecteditem = 0x0;
112 QDir *procdir = new QDir("/proc", 0, QDir::Name, QDir::Dirs); 114 QDir *procdir = new QDir("/proc", 0, QDir::Name, QDir::Dirs);
113 QFileInfoList *proclist = new QFileInfoList(*(procdir->entryInfoList())); 115 QFileInfoList *proclist = new QFileInfoList(*(procdir->entryInfoList()));
@@ -123,17 +125,17 @@ void ProcessInfo::updateData()
123 { 125 {
124 FILE *procfile = fopen( ( QString ) ( "/proc/" + processnum + "/stat"), "r"); 126 FILE *procfile = fopen( ( QString ) ( "/proc/" + processnum + "/stat"), "r");
125 127
126 if ( procfile ) 128 if ( procfile )
127 { 129 {
128 fscanf( procfile, 130 fscanf( procfile,
129 "%d %s %c %d %d %d %d %d %u %u %u %u %u %d %d %d %d %d %d %u %u %d %u %u %u %u %u %u %u %u %d %d %d %d %u", 131 "%d %s %c %d %d %d %d %d %u %u %u %u %u %d %d %d %d %d %d %u %u %d %u %u %u %u %u %u %u %u %d %d %d %d %u",
130 &pid, comm, &state, &ppid, &pgrp, &session,&tty, &tpgid, &flags, &minflt, &cminflt, 132 &pid, comm, &state, &ppid, &pgrp, &session,&tty, &tpgid, &flags, &minflt, &cminflt,
131 &majflt, &cmajflt, &utime, &stime, &cutime, &cstime, &counter, &priority, &timeout, 133 &majflt, &cmajflt, &utime, &stime, &cutime, &cstime, &counter, &priority, &timeout,
132 &itrealvalue, &starttime, &vsize, &rss, &rlim, &startcode, &endcode, &startstack, 134 &itrealvalue, &starttime, &vsize, &rss, &rlim, &startcode, &endcode, &startstack,
133 &kstkesp, &kstkeip, &signal, &blocked, &sigignore, &sigcatch, &wchan ); 135 &kstkesp, &kstkeip, &signal, &blocked, &sigignore, &sigcatch, &wchan );
134 processnum = processnum.rightJustify( 5, ' ' ); 136 processnum = processnum.rightJustify( 5, ' ' );
135 QString processcmd = QString( comm ).replace( QRegExp( "[()]" ), "" ); 137 QString processcmd = QString( comm ).replace( QRegExp( "[()]" ), "" );
136 QString processstatus = QChar(state); 138 QString processstatus = QChar(state);
137 QString processtime = QString::number( ( utime + stime ) / 100 ); 139 QString processtime = QString::number( ( utime + stime ) / 100 );
138 processtime = processtime.rightJustify( 9, ' ' ); 140 processtime = processtime.rightJustify( 9, ' ' );
139 fclose( procfile ); 141 fclose( procfile );
@@ -152,32 +154,32 @@ void ProcessInfo::updateData()
152 delete proclist; 154 delete proclist;
153 delete procdir; 155 delete procdir;
154} 156}
155 157
156void ProcessInfo::slotSendClicked() 158void ProcessInfo::slotSendClicked()
157{ 159{
158 QListViewItem *currprocess = ProcessView->currentItem(); 160 QListViewItem *currprocess = ProcessView->currentItem();
159 if ( !currprocess ) 161 if ( !currprocess )
160 { 162 {
161 return; 163 return;
162 } 164 }
163 165
164 QString capstr = tr( "Really want to send %1\nto this process?" ).arg( SignalCB->currentText() ); 166 QString capstr = tr( "Really want to send %1\nto this process?" ).arg( SignalCB->currentText() );
165 167
166 168
167 if ( QMessageBox::warning( this, currprocess->text( 1 ), capstr, 169 if ( QMessageBox::warning( this, currprocess->text( 1 ), capstr,
168 QMessageBox::Yes | QMessageBox::Default, QMessageBox::No | QMessageBox::Escape ) == QMessageBox::Yes ) 170 QMessageBox::Yes | QMessageBox::Default, QMessageBox::No | QMessageBox::Escape ) == QMessageBox::Yes )
169 { 171 {
170 currprocess = ProcessView->currentItem(); 172 currprocess = ProcessView->currentItem();
171 if ( currprocess ) 173 if ( currprocess )
172 { 174 {
173 QString sigstr = SignalCB->currentText(); 175 QString sigstr = SignalCB->currentText();
174 sigstr.truncate(2); 176 sigstr.truncate(2);
175 int sigid = sigstr.toUInt(); 177 int sigid = sigstr.toUInt();
176 kill( currprocess->text( 0 ).stripWhiteSpace().toUInt(), sigid ); 178 kill( currprocess->text( 0 ).stripWhiteSpace().toUInt(), sigid );
177 } 179 }
178 } 180 }
179 181
180} 182}
181 183
182void ProcessInfo::viewProcess( QListViewItem *process ) 184void ProcessInfo::viewProcess( QListViewItem *process )
183{ 185{
@@ -193,8 +195,8 @@ void ProcessInfo::viewProcess( QListViewItem *process )
193 while ( fgets( line, 81, statfile ) ) 195 while ( fgets( line, 81, statfile ) )
194 { 196 {
195 ProcessDtl->detailView->append( line ); 197 ProcessDtl->detailView->append( line );
196 } 198 }
197 fclose( statfile ); 199 fclose( statfile );
198 } 200 }
199 ProcessDtl->showMaximized(); 201 QPEApplication::showWidget( ProcessDtl );
200} 202}