summaryrefslogtreecommitdiff
authordrw <drw>2002-12-16 01:55:56 (UTC)
committer drw <drw>2002-12-16 01:55:56 (UTC)
commit64bc40080abc56e6bd804dadb44d2510f25f2efa (patch) (unidiff)
tree20d1840b63dc76608aee6f80bf011811d392fbac
parente4057ee7fe74c83e2dc44f8b9870f65da60fc4fa (diff)
downloadopie-64bc40080abc56e6bd804dadb44d2510f25f2efa.zip
opie-64bc40080abc56e6bd804dadb44d2510f25f2efa.tar.gz
opie-64bc40080abc56e6bd804dadb44d2510f25f2efa.tar.bz2
1. Added RAM disk to storage tab (could someone verify works on Z?) 2. QScrollView for storage tab 3. Removed module detail dialog since it did not provide any useful information 4. Fix compiler warnings 5. Removed unneeded qDebugs
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/settings/sysinfo/load.cpp2
-rw-r--r--noncore/settings/sysinfo/memory.cpp2
-rw-r--r--noncore/settings/sysinfo/modulesdetail.cpp2
-rw-r--r--noncore/settings/sysinfo/modulesinfo.cpp83
-rw-r--r--noncore/settings/sysinfo/modulesinfo.h14
-rw-r--r--noncore/settings/sysinfo/processdetail.cpp2
-rw-r--r--noncore/settings/sysinfo/storage.cpp28
-rw-r--r--noncore/settings/sysinfo/storage.h2
-rw-r--r--noncore/settings/sysinfo/sysinfo.cpp2
-rw-r--r--noncore/settings/sysinfo/sysinfo.pro2
10 files changed, 80 insertions, 59 deletions
diff --git a/noncore/settings/sysinfo/load.cpp b/noncore/settings/sysinfo/load.cpp
index 900b3d3..d9d7a66 100644
--- a/noncore/settings/sysinfo/load.cpp
+++ b/noncore/settings/sysinfo/load.cpp
@@ -128,7 +128,7 @@ Load::Load( QWidget *parent, const char *name, WFlags f )
128 timeout(); 128 timeout();
129} 129}
130 130
131void Load::paintEvent( QPaintEvent *ev ) 131void Load::paintEvent( QPaintEvent * )
132{ 132{
133 QPainter p( this ); 133 QPainter p( this );
134 134
diff --git a/noncore/settings/sysinfo/memory.cpp b/noncore/settings/sysinfo/memory.cpp
index 30d42d5..4f612d8 100644
--- a/noncore/settings/sysinfo/memory.cpp
+++ b/noncore/settings/sysinfo/memory.cpp
@@ -28,7 +28,7 @@
28#include "graph.h" 28#include "graph.h"
29#include "memory.h" 29#include "memory.h"
30 30
31MemoryInfo::MemoryInfo( QWidget *parent, const char *name, WFlags f ) 31MemoryInfo::MemoryInfo( QWidget *parent, const char *name, WFlags )
32 : QWidget( parent, name, WStyle_ContextHelp ) 32 : QWidget( parent, name, WStyle_ContextHelp )
33{ 33{
34 QVBoxLayout *vb = new QVBoxLayout( this, 5 ); 34 QVBoxLayout *vb = new QVBoxLayout( this, 5 );
diff --git a/noncore/settings/sysinfo/modulesdetail.cpp b/noncore/settings/sysinfo/modulesdetail.cpp
index ea5f352..ea9cdfa 100644
--- a/noncore/settings/sysinfo/modulesdetail.cpp
+++ b/noncore/settings/sysinfo/modulesdetail.cpp
@@ -32,7 +32,7 @@
32#include <qtextview.h> 32#include <qtextview.h>
33#include <qwhatsthis.h> 33#include <qwhatsthis.h>
34 34
35ModulesDetail::ModulesDetail( QWidget* parent, const char* name, WFlags fl ) 35ModulesDetail::ModulesDetail( QWidget* parent, const char* name, WFlags )
36 : QWidget( parent, name, WStyle_ContextHelp ) 36 : QWidget( parent, name, WStyle_ContextHelp )
37{ 37{
38 modname = ""; 38 modname = "";
diff --git a/noncore/settings/sysinfo/modulesinfo.cpp b/noncore/settings/sysinfo/modulesinfo.cpp
index a0d26c7..c558fad 100644
--- a/noncore/settings/sysinfo/modulesinfo.cpp
+++ b/noncore/settings/sysinfo/modulesinfo.cpp
@@ -21,10 +21,14 @@
21 21
22#include <qpe/qpeapplication.h> 22#include <qpe/qpeapplication.h>
23 23
24#include <qcombobox.h>
24#include <qfile.h> 25#include <qfile.h>
25#include <qheader.h> 26#include <qheader.h>
26#include <qlayout.h> 27#include <qlayout.h>
27#include <qlistview.h> 28#include <qlistview.h>
29#include <qmessagebox.h>
30#include <qpushbutton.h>
31#include <qstring.h>
28#include <qtimer.h> 32#include <qtimer.h>
29#include <qwhatsthis.h> 33#include <qwhatsthis.h>
30 34
@@ -33,9 +37,11 @@
33ModulesInfo::ModulesInfo( QWidget* parent, const char* name, WFlags fl ) 37ModulesInfo::ModulesInfo( QWidget* parent, const char* name, WFlags fl )
34 : QWidget( parent, name, fl ) 38 : QWidget( parent, name, fl )
35{ 39{
36 QVBoxLayout *layout = new QVBoxLayout( this, 5 ); 40 QGridLayout *layout = new QGridLayout( this );
41 layout->setSpacing( 4 );
42 layout->setMargin( 4 );
37 43
38 ModulesView = new QListView( this, "ModulesView" ); 44 ModulesView = new QListView( this );
39 int colnum = ModulesView->addColumn( tr( "Module" ) ); 45 int colnum = ModulesView->addColumn( tr( "Module" ) );
40 colnum = ModulesView->addColumn( tr( "Size" ) ); 46 colnum = ModulesView->addColumn( tr( "Size" ) );
41 ModulesView->setColumnAlignment( colnum, Qt::AlignRight ); 47 ModulesView->setColumnAlignment( colnum, Qt::AlignRight );
@@ -43,20 +49,29 @@ ModulesInfo::ModulesInfo( QWidget* parent, const char* name, WFlags fl )
43 ModulesView->setColumnAlignment( colnum, Qt::AlignRight ); 49 ModulesView->setColumnAlignment( colnum, Qt::AlignRight );
44 colnum = ModulesView->addColumn( tr( "Used By" ) ); 50 colnum = ModulesView->addColumn( tr( "Used By" ) );
45 ModulesView->setAllColumnsShowFocus( TRUE ); 51 ModulesView->setAllColumnsShowFocus( TRUE );
46 QPEApplication::setStylusOperation( ModulesView->viewport(), QPEApplication::RightOnHold ); 52 layout->addMultiCellWidget( ModulesView, 0, 0, 0, 1 );
47 connect( ModulesView, SIGNAL( rightButtonPressed( QListViewItem *, const QPoint &, int ) ),
48 this, SLOT( viewModules( QListViewItem * ) ) );
49 layout->addWidget( ModulesView );
50 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." ) ); 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." ) );
51 54
55 CommandCB = new QComboBox( FALSE, this );
56 CommandCB->insertItem( "modprobe -r" );
57 CommandCB->insertItem( "rmmod" );
58 // I can't think of other useful commands yet. Anyone?
59 layout->addWidget( CommandCB, 1, 0 );
60 QWhatsThis::add( CommandCB, tr( "Select a command here and then click the Send button to the right to send the command to module selected above." ) );
61
62 QPushButton *btn = new QPushButton( this );
63 btn->setMinimumSize( QSize( 50, 24 ) );
64 btn->setMaximumSize( QSize( 50, 24 ) );
65 btn->setText( tr( "Send" ) );
66 connect( btn, SIGNAL( clicked() ), this, SLOT( slotSendClicked() ) );
67 layout->addWidget( btn, 1, 1 );
68 QWhatsThis::add( btn, tr( "Click here to send the selected command to the module selected above." ) );
69
52 QTimer *t = new QTimer( this ); 70 QTimer *t = new QTimer( this );
53 connect( t, SIGNAL( timeout() ), this, SLOT( updateData() ) ); 71 connect( t, SIGNAL( timeout() ), this, SLOT( updateData() ) );
54 t->start( 5000 ); 72 t->start( 5000 );
55 73
56 updateData(); 74 updateData();
57
58 ModulesDtl = new ModulesDetail( 0, 0, 0 );
59 ModulesDtl->ModulesView->setTextFormat( PlainText );
60} 75}
61 76
62ModulesInfo::~ModulesInfo() 77ModulesInfo::~ModulesInfo()
@@ -68,16 +83,16 @@ void ModulesInfo::updateData()
68 char modname[64]; 83 char modname[64];
69 char usage[200]; 84 char usage[200];
70 int modsize, usecount; 85 int modsize, usecount;
71 86
72 ModulesView->clear(); 87 ModulesView->clear();
73 88
74 FILE *procfile = fopen( ( QString ) ( "/proc/modules"), "r"); 89 FILE *procfile = fopen( ( QString ) ( "/proc/modules"), "r");
75 90
76 if ( procfile ) 91 if ( procfile )
77 { 92 {
78 while ( true ) { 93 while ( true ) {
79 int success = fscanf( procfile, "%s%d%d%[^\n]", modname, &modsize, &usecount, usage ); 94 int success = fscanf( procfile, "%s%d%d%[^\n]", modname, &modsize, &usecount, usage );
80 95
81 if ( success == EOF ) 96 if ( success == EOF )
82 break; 97 break;
83 98
@@ -85,38 +100,34 @@ void ModulesInfo::updateData()
85 QString qmodsize = QString::number( modsize ).rightJustify( 6, ' ' ); 100 QString qmodsize = QString::number( modsize ).rightJustify( 6, ' ' );
86 QString qusecount = QString::number( usecount ).rightJustify( 2, ' ' ); 101 QString qusecount = QString::number( usecount ).rightJustify( 2, ' ' );
87 QString qusage = QString( usage ); 102 QString qusage = QString( usage );
88 103
89 ( void ) new QListViewItem( ModulesView, qmodname, qmodsize, qusecount, qusage ); 104 ( void ) new QListViewItem( ModulesView, qmodname, qmodsize, qusecount, qusage );
90 } 105 }
91 106
92 fclose( procfile ); 107 fclose( procfile );
93 } 108 }
94} 109}
95 110
96void ModulesInfo::viewModules( QListViewItem *modules ) 111void ModulesInfo::slotSendClicked()
97{ 112{
98 QString modname = modules->text( 0 ); 113 QString capstr = tr( "You really want to execute\n" );
99 ModulesDtl->setCaption( QString( "Module: " ) + modname ); 114 capstr.append( CommandCB->currentText() );
100 ModulesDtl->modname = modname; 115 capstr.append( "\nfor this module?" );
101 QString command = QString( "/sbin/modinfo " ) + modules->text( 0 ); 116
102 117 if ( QMessageBox::warning( this, caption(), capstr,
103 FILE* modinfo = popen( command, "r" ); 118 QMessageBox::Yes | QMessageBox::Default, QMessageBox::No | QMessageBox::Escape ) == QMessageBox::Yes )
104
105 if ( modinfo )
106 { 119 {
107 char line[200]; 120 QString command = "/sbin/";
108 ModulesDtl->ModulesView->setText( " Details:\n------------\n" ); 121 command.append( CommandCB->currentText() );
109 122 command.append( " " );
110 while( true ) 123 command.append( ModulesView->currentItem()->text( 0 ) );
111 { 124
112 int success = fscanf( modinfo, "%[^\n]\n", line ); 125 FILE* stream = popen( command, "r" );
113 if ( success == EOF ) 126 if ( stream )
114 break; 127 pclose( stream );
115 ModulesDtl->ModulesView->append( line ); 128 //{
116 } 129 // hide();
117 130 //}
118 pclose( modinfo );
119 } 131 }
120 132
121 ModulesDtl->showMaximized();
122} 133}
diff --git a/noncore/settings/sysinfo/modulesinfo.h b/noncore/settings/sysinfo/modulesinfo.h
index c702f24..ef1f805 100644
--- a/noncore/settings/sysinfo/modulesinfo.h
+++ b/noncore/settings/sysinfo/modulesinfo.h
@@ -23,9 +23,9 @@
23#define MODULESINFO_H 23#define MODULESINFO_H
24 24
25#include <qwidget.h> 25#include <qwidget.h>
26#include <qlistview.h>
27 26
28#include "modulesdetail.h" 27class QComboBox;
28class QListView;
29 29
30class ModulesInfo : public QWidget 30class ModulesInfo : public QWidget
31{ 31{
@@ -34,13 +34,13 @@ public:
34 ModulesInfo( QWidget *parent = 0, const char *name = 0, WFlags f = 0 ); 34 ModulesInfo( QWidget *parent = 0, const char *name = 0, WFlags f = 0 );
35 ~ModulesInfo(); 35 ~ModulesInfo();
36 36
37private slots:
38 void updateData();
39 void viewModules( QListViewItem * );
40
41private: 37private:
42 QListView* ModulesView; 38 QListView* ModulesView;
43 ModulesDetail *ModulesDtl; 39 QComboBox* CommandCB;
40
41private slots:
42 void updateData();
43 void slotSendClicked();
44}; 44};
45 45
46#endif 46#endif
diff --git a/noncore/settings/sysinfo/processdetail.cpp b/noncore/settings/sysinfo/processdetail.cpp
index 661e32c..fcb871f 100644
--- a/noncore/settings/sysinfo/processdetail.cpp
+++ b/noncore/settings/sysinfo/processdetail.cpp
@@ -30,7 +30,7 @@
30#include <qtextview.h> 30#include <qtextview.h>
31#include <qwhatsthis.h> 31#include <qwhatsthis.h>
32 32
33ProcessDetail::ProcessDetail( QWidget* parent, const char* name, WFlags fl ) 33ProcessDetail::ProcessDetail( QWidget* parent, const char* name, WFlags )
34 : QWidget( parent, name, WStyle_ContextHelp ) 34 : QWidget( parent, name, WStyle_ContextHelp )
35{ 35{
36 pid = 0; 36 pid = 0;
diff --git a/noncore/settings/sysinfo/storage.cpp b/noncore/settings/sysinfo/storage.cpp
index c33663e..5d6cd1b 100644
--- a/noncore/settings/sysinfo/storage.cpp
+++ b/noncore/settings/sysinfo/storage.cpp
@@ -20,6 +20,7 @@
20// additions copyright 2002 by L.J. Potter 20// additions copyright 2002 by L.J. Potter
21#include <qlabel.h> 21#include <qlabel.h>
22#include <qlayout.h> 22#include <qlayout.h>
23#include <qscrollview.h>
23#include <qtimer.h> 24#include <qtimer.h>
24#include <qwhatsthis.h> 25#include <qwhatsthis.h>
25 26
@@ -35,8 +36,16 @@
35StorageInfo::StorageInfo( QWidget *parent, const char *name ) 36StorageInfo::StorageInfo( QWidget *parent, const char *name )
36 : QWidget( parent, name ) 37 : QWidget( parent, name )
37{ 38{
38 vb = 0; 39 QVBoxLayout *tmpvb = new QVBoxLayout( this );
39 disks.setAutoDelete(TRUE); 40 QScrollView *sv = new QScrollView( this );
41 tmpvb->addWidget( sv, 0, 0 );
42 sv->setResizePolicy( QScrollView::AutoOneFit );
43 sv->setFrameStyle( QFrame::NoFrame );
44 container = new QWidget( sv->viewport() );
45 sv->addChild( container );
46 vb = 0x0;
47
48 disks.setAutoDelete(TRUE);
40 lines.setAutoDelete(TRUE); 49 lines.setAutoDelete(TRUE);
41 updateMounts(); 50 updateMounts();
42 startTimer( 5000 ); 51 startTimer( 5000 );
@@ -84,10 +93,9 @@ void StorageInfo::updateMounts()
84 if ( mntfp ) { 93 if ( mntfp ) {
85 while ( (me = getmntent( mntfp )) != 0 ) { 94 while ( (me = getmntent( mntfp )) != 0 ) {
86 QString fs = me->mnt_fsname; 95 QString fs = me->mnt_fsname;
87 qDebug(fs+" "+(QString)me->mnt_type);
88 if ( fs.left(7)=="/dev/hd" || fs.left(7)=="/dev/sd" 96 if ( fs.left(7)=="/dev/hd" || fs.left(7)=="/dev/sd"
89 || fs.left(8)=="/dev/mtd" || fs.left(9) == "/dev/mmcd" 97 || fs.left(8)=="/dev/mtd" || fs.left(9) == "/dev/mmcd"
90 || fs.left(9) == "/dev/root" || fs.left(5) == "/ramfs") { 98 || fs.left(9) == "/dev/root" || fs.left(5) == "/ramfs" || fs.left(5) == "tmpfs" ) {
91 n++; 99 n++;
92 curdisks.append(fs); 100 curdisks.append(fs);
93 QString d = me->mnt_dir; 101 QString d = me->mnt_dir;
@@ -106,7 +114,7 @@ void StorageInfo::updateMounts()
106 disks.clear(); 114 disks.clear();
107 lines.clear(); 115 lines.clear();
108 delete vb; 116 delete vb;
109 vb = new QVBoxLayout( this, n > 3 ? 1 : 5 ); 117 vb = new QVBoxLayout( container/*, n > 3 ? 1 : 5*/ );
110 bool frst=TRUE; 118 bool frst=TRUE;
111 QStringList::ConstIterator it=curdisks.begin(); 119 QStringList::ConstIterator it=curdisks.begin();
112 QStringList::ConstIterator fsit=curfs.begin(); 120 QStringList::ConstIterator fsit=curfs.begin();
@@ -115,14 +123,13 @@ void StorageInfo::updateMounts()
115 123
116 for (; it!=curdisks.end(); ++it, ++fsit) { 124 for (; it!=curdisks.end(); ++it, ++fsit) {
117 if ( !frst ) { 125 if ( !frst ) {
118 QFrame *f = new QFrame( this ); 126 QFrame *f = new QFrame( container );
119 vb->addWidget(f); 127 vb->addWidget(f);
120 f->setFrameStyle( QFrame::HLine | QFrame::Sunken ); 128 f->setFrameStyle( QFrame::HLine | QFrame::Sunken );
121 lines.append(f); 129 lines.append(f);
122 f->show(); 130 f->show();
123 } frst=FALSE; 131 } frst=FALSE;
124 QString humanname=*it; 132 QString humanname=*it;
125// qDebug(humanname);
126 if ( isCF(humanname) ) 133 if ( isCF(humanname) )
127 humanname = tr( "CF Card: " ); 134 humanname = tr( "CF Card: " );
128 else if ( humanname == "/dev/hda1" ) 135 else if ( humanname == "/dev/hda1" )
@@ -141,13 +148,15 @@ void StorageInfo::updateMounts()
141 humanname = tr( "Int. Storage /dev/mtdblock " ); 148 humanname = tr( "Int. Storage /dev/mtdblock " );
142 else if ( humanname.left(9) == "/dev/root" ) 149 else if ( humanname.left(9) == "/dev/root" )
143 humanname = tr( "Int. Storage " ); 150 humanname = tr( "Int. Storage " );
151 else if ( humanname.left(5) == "tmpfs" )
152 humanname = tr( "RAM disk" );
144 // etc. 153 // etc.
145 humanname.append( *fsmount ); 154 humanname.append( *fsmount );
146 humanname.append( " " ); 155 humanname.append( " " );
147 humanname.append( *fsTit ); 156 humanname.append( *fsTit );
148 humanname.append( " " ); 157 humanname.append( " " );
149 158
150 MountInfo* mi = new MountInfo( *fsit, humanname, this ); 159 MountInfo* mi = new MountInfo( *fsit, humanname, container );
151 vb->addWidget(mi); 160 vb->addWidget(mi);
152 disks.insert(*fsit,mi); 161 disks.insert(*fsit,mi);
153 mi->show(); 162 mi->show();
@@ -163,6 +172,8 @@ void StorageInfo::updateMounts()
163 QWhatsThis::add( mi, tr( "This graph represents how much storage is currently used on this hard drive." ) ); 172 QWhatsThis::add( mi, tr( "This graph represents how much storage is currently used on this hard drive." ) );
164 else if ( tempstr == tr( "In" ) ) 173 else if ( tempstr == tr( "In" ) )
165 QWhatsThis::add( mi, tr( "This graph represents how much memory is currently used of the built-in memory (i.e. Flash memory) on this handheld device." ) ); 174 QWhatsThis::add( mi, tr( "This graph represents how much memory is currently used of the built-in memory (i.e. Flash memory) on this handheld device." ) );
175 else if ( tempstr == tr( "RA" ) )
176 QWhatsThis::add( mi, tr( "This graph represents how much memory is currently used of the temporary RAM disk." ) );
166 } 177 }
167 vb->addStretch(); 178 vb->addStretch();
168 } else { 179 } else {
@@ -177,7 +188,6 @@ void StorageInfo::updateMounts()
177MountInfo::MountInfo( const QString &path, const QString &ttl, QWidget *parent, const char *name ) 188MountInfo::MountInfo( const QString &path, const QString &ttl, QWidget *parent, const char *name )
178 : QWidget( parent, name ), title(ttl) 189 : QWidget( parent, name ), title(ttl)
179{ 190{
180 qDebug("new path is "+path);
181 fs = new FileSystem( path ); 191 fs = new FileSystem( path );
182 QVBoxLayout *vb = new QVBoxLayout( this, 3 ); 192 QVBoxLayout *vb = new QVBoxLayout( this, 3 );
183 193
diff --git a/noncore/settings/sysinfo/storage.h b/noncore/settings/sysinfo/storage.h
index 3fa5b79..7e8b4e0 100644
--- a/noncore/settings/sysinfo/storage.h
+++ b/noncore/settings/sysinfo/storage.h
@@ -29,6 +29,7 @@ class GraphLegend;
29class FileSystem; 29class FileSystem;
30class MountInfo; 30class MountInfo;
31class QVBoxLayout; 31class QVBoxLayout;
32class QWidget;
32 33
33 34
34class StorageInfo : public QWidget 35class StorageInfo : public QWidget
@@ -45,6 +46,7 @@ private:
45 QDict<MountInfo> disks; 46 QDict<MountInfo> disks;
46 QList<QFrame> lines; 47 QList<QFrame> lines;
47 QVBoxLayout *vb; 48 QVBoxLayout *vb;
49 QWidget *container;
48}; 50};
49 51
50class MountInfo : public QWidget 52class MountInfo : public QWidget
diff --git a/noncore/settings/sysinfo/sysinfo.cpp b/noncore/settings/sysinfo/sysinfo.cpp
index 6d2a64f..872492e 100644
--- a/noncore/settings/sysinfo/sysinfo.cpp
+++ b/noncore/settings/sysinfo/sysinfo.cpp
@@ -37,7 +37,7 @@
37 37
38#include <qlayout.h> 38#include <qlayout.h>
39 39
40SystemInfo::SystemInfo( QWidget *parent, const char *name, WFlags f ) 40SystemInfo::SystemInfo( QWidget *parent, const char *name, WFlags )
41 : QWidget( parent, name, WStyle_ContextHelp ) 41 : QWidget( parent, name, WStyle_ContextHelp )
42{ 42{
43 setIcon( Resource::loadPixmap( "system_icon" ) ); 43 setIcon( Resource::loadPixmap( "system_icon" ) );
diff --git a/noncore/settings/sysinfo/sysinfo.pro b/noncore/settings/sysinfo/sysinfo.pro
index 236fc02..7e66451 100644
--- a/noncore/settings/sysinfo/sysinfo.pro
+++ b/noncore/settings/sysinfo/sysinfo.pro
@@ -8,7 +8,6 @@ HEADERS = memory.h \
8 processinfo.h \ 8 processinfo.h \
9 processdetail.h \ 9 processdetail.h \
10 modulesinfo.h \ 10 modulesinfo.h \
11 modulesdetail.h \
12 versioninfo.h \ 11 versioninfo.h \
13 sysinfo.h 12 sysinfo.h
14SOURCES = main.cpp \ 13SOURCES = main.cpp \
@@ -19,7 +18,6 @@ SOURCES = main.cpp \
19 processinfo.cpp \ 18 processinfo.cpp \
20 modulesinfo.cpp \ 19 modulesinfo.cpp \
21 processdetail.cpp \ 20 processdetail.cpp \
22 modulesdetail.cpp \
23 versioninfo.cpp \ 21 versioninfo.cpp \
24 sysinfo.cpp 22 sysinfo.cpp
25INTERFACES = 23INTERFACES =