-rw-r--r-- | noncore/settings/sysinfo/load.cpp | 2 | ||||
-rw-r--r-- | noncore/settings/sysinfo/memory.cpp | 2 | ||||
-rw-r--r-- | noncore/settings/sysinfo/modulesdetail.cpp | 2 | ||||
-rw-r--r-- | noncore/settings/sysinfo/modulesinfo.cpp | 83 | ||||
-rw-r--r-- | noncore/settings/sysinfo/modulesinfo.h | 14 | ||||
-rw-r--r-- | noncore/settings/sysinfo/processdetail.cpp | 2 | ||||
-rw-r--r-- | noncore/settings/sysinfo/storage.cpp | 28 | ||||
-rw-r--r-- | noncore/settings/sysinfo/storage.h | 2 | ||||
-rw-r--r-- | noncore/settings/sysinfo/sysinfo.cpp | 2 | ||||
-rw-r--r-- | noncore/settings/sysinfo/sysinfo.pro | 2 |
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 @@ -1,212 +1,212 @@ /********************************************************************** ** Copyright (C) 2000 Trolltech AS. All rights reserved. ** ** This file is part of Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #include <stdio.h> #include <qfile.h> #include <qlayout.h> #include <qlabel.h> #include <qpainter.h> #include <qpixmap.h> #include <qtextstream.h> #include <qtimer.h> #include <qwhatsthis.h> #include "load.h" LoadInfo::LoadInfo( QWidget *parent, const char *name, WFlags f ) : QWidget( parent, name, f ) { QVBoxLayout *vb = new QVBoxLayout( this, 6 ); QString cpuInfo = getCpuInfo(); if ( !cpuInfo.isNull() ) vb->addWidget( new QLabel( cpuInfo, this ) ); vb->addWidget( new Load( this ), 100 ); QLabel *l = new QLabel( this ); l->setPixmap( makeLabel( red, tr("Application CPU usage (%)") ) ); vb->addWidget( l, 1 ); l = new QLabel( this ); l->setPixmap( makeLabel( green, tr("System CPU usage (%)") ) ); vb->addWidget( l, 1 ); vb->addStretch(50); QWhatsThis::add( this, tr( "This page shows how much this device's processor is being used." ) ); } QPixmap LoadInfo::makeLabel( const QColor &col, const QString &text ) { int h = fontMetrics().height(); QPixmap pm( 20 + fontMetrics().width( text ), h ); QPainter p( &pm ); p.fillRect( pm.rect(), colorGroup().background() ); p.fillRect( 0, h/2-4, 18, h/2+3, black ); p.setPen( col ); p.drawLine( 2, h/2, 15, h/2 ); p.setPen( colorGroup().text() ); p.drawText( 20, fontMetrics().ascent(), text ); return pm; } QString LoadInfo::getCpuInfo() { bool haveInfo = FALSE; QString info = tr("Type: "); QFile f( "/proc/cpuinfo" ); if ( f.open( IO_ReadOnly ) ) { QTextStream ts( &f ); while ( !ts.atEnd() ) { QString s = ts.readLine(); if ( s.find( "model name" ) == 0 ) { info += s.mid( s.find( ':' ) + 2 ); haveInfo = TRUE; } else if ( s.find( "cpu MHz" ) == 0 ) { double mhz = s.mid( s.find( ':' ) + 2 ).toDouble(); info += " " + QString::number( mhz, 'f', 0 ); info += "MHz"; break; } else if ( s.find( "Processor" ) == 0 ) { info += s.mid( s.find( ':' ) + 2 ); haveInfo = TRUE; break; #ifdef __MIPSEL__ } else if ( s.find( "cpu model" ) == 0 ) { info += " " + s.mid( s.find( ':' ) + 2 ); break; } else if ( s.find( "cpu" ) == 0 ) { info += s.mid( s.find( ':' ) + 2 ); haveInfo = TRUE; #endif } } } if ( !haveInfo ) info = QString(); return info; } Load::Load( QWidget *parent, const char *name, WFlags f ) : QWidget( parent, name, f ) { setMinimumHeight( 30 ); setBackgroundColor( black ); points = 100; setMinimumWidth( points ); userLoad = new double [points]; systemLoad = new double [points]; for ( int i = 0; i < points; i++ ) { userLoad[i] = 0.0; systemLoad[i] = 0.0; } maxLoad = 1.3; QTimer *timer = new QTimer( this ); connect( timer, SIGNAL(timeout()), SLOT(timeout()) ); timer->start( 2000 ); gettimeofday( &last, 0 ); first = TRUE; timeout(); } -void Load::paintEvent( QPaintEvent *ev ) +void Load::paintEvent( QPaintEvent * ) { QPainter p( this ); int h = height() - 5; int mult = (int)(h / maxLoad); p.setPen( gray ); p.drawLine( 0, h - mult, width(), h - mult ); p.drawText( 0, h - mult, "100" ); p.drawText( 0, h, "0" ); p.setPen( green ); for ( int i = 1; i < points; i++ ) { int x1 = (i - 1) * width() / points; int x2 = i * width() / points; p.drawLine( x1, h - systemLoad[i-1] * mult, x2, h - systemLoad[i] * mult ); } p.setPen( red ); for ( int i = 1; i < points; i++ ) { int x1 = (i - 1) * width() / points; int x2 = i * width() / points; p.drawLine( x1, h - userLoad[i-1] * mult, x2, h - userLoad[i] * mult ); } } void Load::timeout() { int user; int usernice; int sys; int idle; FILE *fp; fp = fopen( "/proc/stat", "r" ); fscanf( fp, "cpu %d %d %d %d", &user, &usernice, &sys, &idle ); fclose( fp ); struct timeval now; gettimeofday( &now, 0 ); int tdiff = now.tv_usec - last.tv_usec; tdiff += (now.tv_sec - last.tv_sec) * 1000000; tdiff /= 10000; int udiff = user - lastUser; int sdiff = sys - lastSys; if ( tdiff > 0 ) { double uload = (double)udiff / (double)tdiff; double sload = (double)sdiff / (double)tdiff; if ( !first ) { for ( int i = 1; i < points; i++ ) { userLoad[i-1] = userLoad[i]; systemLoad[i-1] = systemLoad[i]; } userLoad[points-1] = uload; systemLoad[points-1] = sload; // scroll( -width()/points, 0, QRect( 0, 0, width() - width()/points + 1, height() ) ); repaint( TRUE ); double ml = 1.3; /* for ( int i = 0; i < points; i++ ) { if ( userLoad[i] > ml ) ml = userLoad[i]; } */ if ( maxLoad != ml ) { maxLoad = ml; update(); } } last = now; lastUser = user; lastSys = sys; first = FALSE; } else if ( tdiff < 0 ) { last = now; } } 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 @@ -1,98 +1,98 @@ /********************************************************************** ** Copyright (C) 2000 Trolltech AS. All rights reserved. ** ** This file is part of Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #include <qlabel.h> #include <qfile.h> #include <qlayout.h> #include <qtextstream.h> #include <qtimer.h> #include <qwhatsthis.h> #include "graph.h" #include "memory.h" -MemoryInfo::MemoryInfo( QWidget *parent, const char *name, WFlags f ) +MemoryInfo::MemoryInfo( QWidget *parent, const char *name, WFlags ) : QWidget( parent, name, WStyle_ContextHelp ) { QVBoxLayout *vb = new QVBoxLayout( this, 5 ); totalMem = new QLabel( this ); vb->addWidget( totalMem ); data = new GraphData(); // graph = new PieGraph( this ); graph = new BarGraph( this ); graph->setFrameStyle( QFrame::Panel | QFrame::Sunken ); vb->addWidget( graph, 1 ); graph->setData( data ); legend = new GraphLegend( this ); vb->addWidget( legend ); legend->setData( data ); vb->addStretch( 1 ); updateData(); QTimer *t = new QTimer( this ); connect( t, SIGNAL( timeout() ), this, SLOT( updateData() ) ); t->start( 5000 ); QWhatsThis::add( this, tr( "This page shows how memory (i.e. RAM) is being allocated on your handheld device.\nMemory is categorized as follows:\n\n1. Used - memory used to by Opie and any running applications.\n2. Buffers - temporary storage used to improve performance\n3. Cached - information that has recently been used, but has not been freed yet.\n4. Free - memory not currently used by Opie or any running applications." ) ); } MemoryInfo::~MemoryInfo() { delete data; } void MemoryInfo::updateData() { QFile file( "/proc/meminfo" ); if ( file.open( IO_ReadOnly ) ) { QTextStream t( &file ); QString dummy = t.readLine(); // title t >> dummy; int total, used, memfree, shared, buffers, cached; t >> total; total /= 1000; t >> used; used /= 1000; t >> memfree; memfree /= 1000; t >> shared; shared /= 1000; t >> buffers; buffers /= 1000; t >> cached; cached /= 1000; int realUsed = total - ( buffers + cached + memfree ); data->clear(); data->addItem( tr("Used (%1 kB)").arg(realUsed), realUsed ); data->addItem( tr("Buffers (%1 kB)").arg(buffers), buffers ); data->addItem( tr("Cached (%1 kB)").arg(cached), cached ); data->addItem( tr("Free (%1 kB)").arg(memfree), memfree ); totalMem->setText( tr( "Total Memory: %1 kB" ).arg( total ) ); graph->repaint( FALSE ); legend->update(); } } 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 @@ -1,89 +1,89 @@ /********************************************************************** ** ModulesDetail ** ** Display module information ** ** Copyright (C) 2002, Michael Lauer ** mickey@tm.informatik.uni-frankfurt.de ** http://www.Vanille.de ** ** Based on ProcessDetail by Dan Williams <williamsdr@acm.org> ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** **********************************************************************/ #include "modulesdetail.h" #include <sys/types.h> #include <stdio.h> #include <qcombobox.h> #include <qlayout.h> #include <qlistview.h> #include <qmessagebox.h> #include <qpushbutton.h> #include <qtextview.h> #include <qwhatsthis.h> -ModulesDetail::ModulesDetail( QWidget* parent, const char* name, WFlags fl ) +ModulesDetail::ModulesDetail( QWidget* parent, const char* name, WFlags ) : QWidget( parent, name, WStyle_ContextHelp ) { modname = ""; QGridLayout *layout = new QGridLayout( this ); layout->setSpacing( 4 ); layout->setMargin( 4 ); CommandCB = new QComboBox( FALSE, this, "CommandCB" ); CommandCB->insertItem( "modprobe -r" ); CommandCB->insertItem( "rmmod" ); // I can't think of other useful commands yet. Anyone? layout->addWidget( CommandCB, 1, 0 ); QWhatsThis::add( CommandCB, tr( "Select a command here and then click the Send button to the right to send the command." ) ); ModulesView = new QTextView( this, "ModulesView" ); layout->addMultiCellWidget( ModulesView, 0, 0, 0, 1 ); QWhatsThis::add( ModulesView, tr( "This area shows detailed information about this module." ) ); SendButton = new QPushButton( this, "SendButton" ); SendButton->setMinimumSize( QSize( 50, 24 ) ); SendButton->setMaximumSize( QSize( 50, 24 ) ); SendButton->setText( tr( "Send" ) ); connect( SendButton, SIGNAL( clicked() ), this, SLOT( slotSendClicked() ) ); layout->addWidget( SendButton, 1, 1 ); QWhatsThis::add( SendButton, tr( "Click here to send the selected command to this module." ) ); } ModulesDetail::~ModulesDetail() { } void ModulesDetail::slotSendClicked() { QString command = QString( "/sbin/" ) + CommandCB->currentText() + QString( " " ) + modname; if ( QMessageBox::warning( this, caption(), tr( "You really want to \n" + CommandCB->currentText() + "\nthis Module?"), QMessageBox::Yes | QMessageBox::Default, QMessageBox::No | QMessageBox::Escape ) == QMessageBox::Yes ) { FILE* stream = popen( command, "r" ); if ( stream ) pclose( stream ); { hide(); } } } 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 @@ -1,122 +1,133 @@ /********************************************************************** ** ModulesInfo ** ** Display Modules information ** ** Copyright (C) 2002, Michael Lauer ** mickey@tm.informatik.uni-frankfurt.de ** http://www.Vanille.de ** ** Based on ProcessInfo by Dan Williams <williamsdr@acm.org> ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** **********************************************************************/ #include <qpe/qpeapplication.h> +#include <qcombobox.h> #include <qfile.h> #include <qheader.h> #include <qlayout.h> #include <qlistview.h> +#include <qmessagebox.h> +#include <qpushbutton.h> +#include <qstring.h> #include <qtimer.h> #include <qwhatsthis.h> #include "modulesinfo.h" ModulesInfo::ModulesInfo( QWidget* parent, const char* name, WFlags fl ) : QWidget( parent, name, fl ) { - QVBoxLayout *layout = new QVBoxLayout( this, 5 ); + QGridLayout *layout = new QGridLayout( this ); + layout->setSpacing( 4 ); + layout->setMargin( 4 ); - ModulesView = new QListView( this, "ModulesView" ); + ModulesView = new QListView( this ); int colnum = ModulesView->addColumn( tr( "Module" ) ); colnum = ModulesView->addColumn( tr( "Size" ) ); ModulesView->setColumnAlignment( colnum, Qt::AlignRight ); colnum = ModulesView->addColumn( tr( "Use#" ) ); ModulesView->setColumnAlignment( colnum, Qt::AlignRight ); colnum = ModulesView->addColumn( tr( "Used By" ) ); ModulesView->setAllColumnsShowFocus( TRUE ); - QPEApplication::setStylusOperation( ModulesView->viewport(), QPEApplication::RightOnHold ); - connect( ModulesView, SIGNAL( rightButtonPressed( QListViewItem *, const QPoint &, int ) ), - this, SLOT( viewModules( QListViewItem * ) ) ); - layout->addWidget( ModulesView ); + layout->addMultiCellWidget( ModulesView, 0, 0, 0, 1 ); 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." ) ); + CommandCB = new QComboBox( FALSE, this ); + CommandCB->insertItem( "modprobe -r" ); + CommandCB->insertItem( "rmmod" ); + // I can't think of other useful commands yet. Anyone? + layout->addWidget( CommandCB, 1, 0 ); + 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." ) ); + + QPushButton *btn = new QPushButton( this ); + btn->setMinimumSize( QSize( 50, 24 ) ); + btn->setMaximumSize( QSize( 50, 24 ) ); + btn->setText( tr( "Send" ) ); + connect( btn, SIGNAL( clicked() ), this, SLOT( slotSendClicked() ) ); + layout->addWidget( btn, 1, 1 ); + QWhatsThis::add( btn, tr( "Click here to send the selected command to the module selected above." ) ); + QTimer *t = new QTimer( this ); connect( t, SIGNAL( timeout() ), this, SLOT( updateData() ) ); t->start( 5000 ); updateData(); - - ModulesDtl = new ModulesDetail( 0, 0, 0 ); - ModulesDtl->ModulesView->setTextFormat( PlainText ); } ModulesInfo::~ModulesInfo() { } void ModulesInfo::updateData() { char modname[64]; char usage[200]; int modsize, usecount; - + ModulesView->clear(); FILE *procfile = fopen( ( QString ) ( "/proc/modules"), "r"); if ( procfile ) { - while ( true ) { + while ( true ) { int success = fscanf( procfile, "%s%d%d%[^\n]", modname, &modsize, &usecount, usage ); - + if ( success == EOF ) break; QString qmodname = QString( modname ); QString qmodsize = QString::number( modsize ).rightJustify( 6, ' ' ); QString qusecount = QString::number( usecount ).rightJustify( 2, ' ' ); QString qusage = QString( usage ); - + ( void ) new QListViewItem( ModulesView, qmodname, qmodsize, qusecount, qusage ); } - + fclose( procfile ); } } -void ModulesInfo::viewModules( QListViewItem *modules ) +void ModulesInfo::slotSendClicked() { - QString modname = modules->text( 0 ); - ModulesDtl->setCaption( QString( "Module: " ) + modname ); - ModulesDtl->modname = modname; - QString command = QString( "/sbin/modinfo " ) + modules->text( 0 ); - - FILE* modinfo = popen( command, "r" ); - - if ( modinfo ) + QString capstr = tr( "You really want to execute\n" ); + capstr.append( CommandCB->currentText() ); + capstr.append( "\nfor this module?" ); + + if ( QMessageBox::warning( this, caption(), capstr, + QMessageBox::Yes | QMessageBox::Default, QMessageBox::No | QMessageBox::Escape ) == QMessageBox::Yes ) { - char line[200]; - ModulesDtl->ModulesView->setText( " Details:\n------------\n" ); - - while( true ) - { - int success = fscanf( modinfo, "%[^\n]\n", line ); - if ( success == EOF ) - break; - ModulesDtl->ModulesView->append( line ); - } - - pclose( modinfo ); + QString command = "/sbin/"; + command.append( CommandCB->currentText() ); + command.append( " " ); + command.append( ModulesView->currentItem()->text( 0 ) ); + + FILE* stream = popen( command, "r" ); + if ( stream ) + pclose( stream ); + //{ + // hide(); + //} } - ModulesDtl->showMaximized(); } 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 @@ -1,46 +1,46 @@ /********************************************************************** ** ModulesInfo ** ** Display modules information ** ** Copyright (C) 2002, Michael Lauer ** mickey@tm.informatik.uni-frankfurt.de ** http://www.Vanille.de ** ** Based on ProcessInfo by Dan Williams <williamsdr@acm.org> ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** **********************************************************************/ #ifndef MODULESINFO_H #define MODULESINFO_H #include <qwidget.h> -#include <qlistview.h> -#include "modulesdetail.h" +class QComboBox; +class QListView; class ModulesInfo : public QWidget { Q_OBJECT public: ModulesInfo( QWidget *parent = 0, const char *name = 0, WFlags f = 0 ); ~ModulesInfo(); -private slots: - void updateData(); - void viewModules( QListViewItem * ); - private: QListView* ModulesView; - ModulesDetail *ModulesDtl; + QComboBox* CommandCB; + +private slots: + void updateData(); + void slotSendClicked(); }; #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 @@ -1,92 +1,92 @@ /********************************************************************** ** ProcessDetail ** ** Display process information ** ** Copyright (C) 2002, Dan Williams ** williamsdr@acm.org ** http://draknor.net ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** **********************************************************************/ #include "processdetail.h" #include <sys/types.h> #include <signal.h> #include <qcombobox.h> #include <qlayout.h> #include <qlistview.h> #include <qmessagebox.h> #include <qpushbutton.h> #include <qtextview.h> #include <qwhatsthis.h> -ProcessDetail::ProcessDetail( QWidget* parent, const char* name, WFlags fl ) +ProcessDetail::ProcessDetail( QWidget* parent, const char* name, WFlags ) : QWidget( parent, name, WStyle_ContextHelp ) { pid = 0; QGridLayout *layout = new QGridLayout( this ); layout->setSpacing( 4 ); layout->setMargin( 4 ); SignalCB = new QComboBox( FALSE, this, "SignalCB" ); SignalCB->insertItem( " 1: SIGHUP" ); SignalCB->insertItem( " 2: SIGINT" ); SignalCB->insertItem( " 3: SIGQUIT" ); SignalCB->insertItem( " 5: SIGTRAP" ); SignalCB->insertItem( " 6: SIGABRT" ); SignalCB->insertItem( " 9: SIGKILL" ); SignalCB->insertItem( "14: SIGALRM" ); SignalCB->insertItem( "15: SIGTERM" ); SignalCB->insertItem( "18: SIGCONT" ); SignalCB->insertItem( "19: SIGSTOP" ); layout->addWidget( SignalCB, 1, 0 ); QWhatsThis::add( SignalCB, tr( "Select a signal here and then click the Send button to the right to send to this process." ) ); ProcessView = new QTextView( this, "ProcessView" ); layout->addMultiCellWidget( ProcessView, 0, 0, 0, 1 ); QWhatsThis::add( ProcessView, tr( "This area shows detailed information about this process." ) ); SendButton = new QPushButton( this, "SendButton" ); SendButton->setMinimumSize( QSize( 50, 24 ) ); SendButton->setMaximumSize( QSize( 50, 24 ) ); SendButton->setText( tr( "Send" ) ); connect( SendButton, SIGNAL( clicked() ), this, SLOT( slotSendClicked() ) ); layout->addWidget( SendButton, 1, 1 ); QWhatsThis::add( SendButton, tr( "Click here to send the selected signal to this process." ) ); } ProcessDetail::~ProcessDetail() { } void ProcessDetail::slotSendClicked() { QString sigstr = SignalCB->currentText(); sigstr.truncate(2); int sigid = sigstr.toUInt(); if ( QMessageBox::warning( this, caption(), tr( "You really want to send\n" + SignalCB->currentText() + "\nto this process?"), QMessageBox::Yes | QMessageBox::Default, QMessageBox::No | QMessageBox::Escape ) == QMessageBox::Yes ) { if ( kill( pid, sigid ) == 0 ) { hide(); } } } 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 @@ -1,251 +1,261 @@ /********************************************************************** ** Copyright (C) 2000 Trolltech AS. All rights reserved. ** ** This file is part of Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ // additions copyright 2002 by L.J. Potter #include <qlabel.h> #include <qlayout.h> +#include <qscrollview.h> #include <qtimer.h> #include <qwhatsthis.h> #include "graph.h" #include "storage.h" #include <stdio.h> #if defined(_OS_LINUX_) || defined(Q_OS_LINUX) #include <sys/vfs.h> #include <mntent.h> #endif StorageInfo::StorageInfo( QWidget *parent, const char *name ) : QWidget( parent, name ) { - vb = 0; - disks.setAutoDelete(TRUE); + QVBoxLayout *tmpvb = new QVBoxLayout( this ); + QScrollView *sv = new QScrollView( this ); + tmpvb->addWidget( sv, 0, 0 ); + sv->setResizePolicy( QScrollView::AutoOneFit ); + sv->setFrameStyle( QFrame::NoFrame ); + container = new QWidget( sv->viewport() ); + sv->addChild( container ); + vb = 0x0; + + disks.setAutoDelete(TRUE); lines.setAutoDelete(TRUE); updateMounts(); startTimer( 5000 ); } void StorageInfo::timerEvent(QTimerEvent*) { updateMounts(); } static bool isCF(const QString& m) { FILE* f = fopen("/var/run/stab", "r"); if (!f) f = fopen("/var/state/pcmcia/stab", "r"); if (!f) f = fopen("/var/lib/pcmcia/stab", "r"); if ( f ) { char line[1024]; char devtype[80]; char devname[80]; while ( fgets( line, 1024, f ) ) { // 0 ide ide-cs 0 hda 3 0 if ( sscanf(line,"%*d %s %*s %*s %s", devtype, devname )==2 ) { if ( QString(devtype) == "ide" && m.find(devname)>0 ) { fclose(f); return TRUE; } } } fclose(f); } return FALSE; } void StorageInfo::updateMounts() { #if defined(_OS_LINUX_) || defined(Q_OS_LINUX) struct mntent *me; FILE *mntfp = setmntent( "/etc/mtab", "r" ); QStringList curdisks; QStringList curfs; QStringList mountList; QStringList fsT; bool rebuild = FALSE; int n=0; if ( mntfp ) { while ( (me = getmntent( mntfp )) != 0 ) { QString fs = me->mnt_fsname; - qDebug(fs+" "+(QString)me->mnt_type); if ( fs.left(7)=="/dev/hd" || fs.left(7)=="/dev/sd" || fs.left(8)=="/dev/mtd" || fs.left(9) == "/dev/mmcd" - || fs.left(9) == "/dev/root" || fs.left(5) == "/ramfs") { + || fs.left(9) == "/dev/root" || fs.left(5) == "/ramfs" || fs.left(5) == "tmpfs" ) { n++; curdisks.append(fs); QString d = me->mnt_dir; curfs.append(d); QString mount = me->mnt_dir; mountList.append(mount); QString t = me->mnt_type; fsT.append(t); if ( !disks.find(d) ) rebuild = TRUE; } } endmntent( mntfp ); } if ( rebuild || n != (int)disks.count() ) { disks.clear(); lines.clear(); delete vb; - vb = new QVBoxLayout( this, n > 3 ? 1 : 5 ); + vb = new QVBoxLayout( container/*, n > 3 ? 1 : 5*/ ); bool frst=TRUE; QStringList::ConstIterator it=curdisks.begin(); QStringList::ConstIterator fsit=curfs.begin(); QStringList::ConstIterator fsmount=mountList.begin(); QStringList::ConstIterator fsTit=fsT.begin(); for (; it!=curdisks.end(); ++it, ++fsit) { if ( !frst ) { - QFrame *f = new QFrame( this ); + QFrame *f = new QFrame( container ); vb->addWidget(f); f->setFrameStyle( QFrame::HLine | QFrame::Sunken ); lines.append(f); f->show(); } frst=FALSE; QString humanname=*it; -// qDebug(humanname); if ( isCF(humanname) ) humanname = tr( "CF Card: " ); else if ( humanname == "/dev/hda1" ) humanname = tr( "Hard Disk " ); else if ( humanname.left(9) == "/dev/mmcd" ) humanname = tr( "SD Card " ); else if ( humanname.left(7) == "/dev/hd" ) humanname = tr( "Hard Disk /dev/hd " ); else if ( humanname.left(7) == "/dev/sd" ) humanname = tr( "SCSI Hard Disk /dev/sd " ); else if ( humanname == "/dev/mtdblock1" || humanname == "/dev/mtdblock/1" ) humanname = tr( "Int. Storage " ); else if ( humanname.left(14) == "/dev/mtdblock/" ) humanname = tr( "Int. Storage /dev/mtdblock/ " ); else if ( humanname.left(13) == "/dev/mtdblock" ) humanname = tr( "Int. Storage /dev/mtdblock " ); else if ( humanname.left(9) == "/dev/root" ) humanname = tr( "Int. Storage " ); + else if ( humanname.left(5) == "tmpfs" ) + humanname = tr( "RAM disk" ); // etc. humanname.append( *fsmount ); humanname.append( " " ); humanname.append( *fsTit ); humanname.append( " " ); - MountInfo* mi = new MountInfo( *fsit, humanname, this ); + MountInfo* mi = new MountInfo( *fsit, humanname, container ); vb->addWidget(mi); disks.insert(*fsit,mi); mi->show(); fsmount++;fsTit++; QString tempstr = humanname.left( 2 ); if ( tempstr == tr( "CF" ) ) QWhatsThis::add( mi, tr( "This graph represents how much memory is currently used on this Compact Flash memory card." ) ); else if ( tempstr == tr( "Ha" ) ) QWhatsThis::add( mi, tr( "This graph represents how much storage is currently used on this hard drive." ) ); else if ( tempstr == tr( "SD" ) ) QWhatsThis::add( mi, tr( "This graph represents how much memory is currently used on this Secure Digital memory card." ) ); else if ( tempstr == tr( "SC" ) ) QWhatsThis::add( mi, tr( "This graph represents how much storage is currently used on this hard drive." ) ); else if ( tempstr == tr( "In" ) ) 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." ) ); + else if ( tempstr == tr( "RA" ) ) + QWhatsThis::add( mi, tr( "This graph represents how much memory is currently used of the temporary RAM disk." ) ); } vb->addStretch(); } else { // just update them for (QDictIterator<MountInfo> i(disks); i.current(); ++i) i.current()->updateData(); } #endif } MountInfo::MountInfo( const QString &path, const QString &ttl, QWidget *parent, const char *name ) : QWidget( parent, name ), title(ttl) { - qDebug("new path is "+path); fs = new FileSystem( path ); QVBoxLayout *vb = new QVBoxLayout( this, 3 ); totalSize = new QLabel( this ); vb->addWidget( totalSize ); data = new GraphData(); graph = new BarGraph( this ); graph->setFrameStyle( QFrame::Panel | QFrame::Sunken ); vb->addWidget( graph, 1 ); graph->setData( data ); legend = new GraphLegend( this ); legend->setOrientation(Horizontal); vb->addWidget( legend ); legend->setData( data ); updateData(); } MountInfo::~MountInfo() { delete data; delete fs; } void MountInfo::updateData() { fs->update(); long mult = fs->blockSize() / 1024; long div = 1024 / fs->blockSize(); if ( !mult ) mult = 1; if ( !div ) div = 1; long total = fs->totalBlocks() * mult / div; long avail = fs->availBlocks() * mult / div; long used = total - avail; totalSize->setText( title + tr(" : %1 kB").arg( total ) ); data->clear(); data->addItem( tr("Used (%1 kB)").arg(used), used ); data->addItem( tr("Available (%1 kB)").arg(avail), avail ); graph->repaint( FALSE ); legend->update(); graph->show(); legend->show(); } //--------------------------------------------------------------------------- FileSystem::FileSystem( const QString &p ) : fspath( p ), blkSize(512), totalBlks(0), availBlks(0) { update(); } void FileSystem::update() { #if defined(_OS_LINUX_) || defined(Q_OS_LINUX) struct statfs fs; if ( !statfs( fspath.latin1(), &fs ) ) { blkSize = fs.f_bsize; totalBlks = fs.f_blocks; availBlks = fs.f_bavail; } else { blkSize = 0; totalBlks = 0; availBlks = 0; } #endif } 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 @@ -1,87 +1,89 @@ /********************************************************************** ** Copyright (C) 2000 Trolltech AS. All rights reserved. ** ** This file is part of Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #include <qwidget.h> #include <qframe.h> #include <qlist.h> #include <qdict.h> class QLabel; class GraphData; class Graph; class GraphLegend; class FileSystem; class MountInfo; class QVBoxLayout; +class QWidget; class StorageInfo : public QWidget { Q_OBJECT public: StorageInfo( QWidget *parent=0, const char *name=0 ); protected: void timerEvent(QTimerEvent*); private: void updateMounts(); QDict<MountInfo> disks; QList<QFrame> lines; QVBoxLayout *vb; + QWidget *container; }; class MountInfo : public QWidget { Q_OBJECT public: MountInfo( const QString &path, const QString &ttl, QWidget *parent=0, const char *name=0 ); ~MountInfo(); void updateData(); private: QString title; FileSystem *fs; QLabel *totalSize; GraphData *data; Graph *graph; GraphLegend *legend; }; class FileSystem { public: FileSystem( const QString &p ); void update(); const QString &path() const { return fspath; } long blockSize() const { return blkSize; } long totalBlocks() const { return totalBlks; } long availBlocks() const { return availBlks; } private: QString fspath; long blkSize; long totalBlks; long availBlks; }; 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 @@ -1,70 +1,70 @@ /********************************************************************** ** Copyright (C) 2000 Trolltech AS. All rights reserved. ** ** This file is part of Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** ********************************************************************** ** ** Enhancements by: Dan Williams, <williamsdr@acm.org> ** **********************************************************************/ #include "memory.h" #include "load.h" #include "storage.h" #include "processinfo.h" #include "modulesinfo.h" #include "versioninfo.h" #include "sysinfo.h" #include <opie/otabwidget.h> #include <qpe/config.h> #include <qpe/resource.h> #include <qlayout.h> -SystemInfo::SystemInfo( QWidget *parent, const char *name, WFlags f ) +SystemInfo::SystemInfo( QWidget *parent, const char *name, WFlags ) : QWidget( parent, name, WStyle_ContextHelp ) { setIcon( Resource::loadPixmap( "system_icon" ) ); setCaption( tr("System Info") ); resize( 220, 180 ); Config config( "qpe" ); config.setGroup( "Appearance" ); bool advanced = config.readBoolEntry( "Advanced", TRUE ); QVBoxLayout *lay = new QVBoxLayout( this ); OTabWidget *tab = new OTabWidget( this, "tabwidget", OTabWidget::Global ); lay->addWidget( tab ); tab->addTab( new MemoryInfo( tab ), "sysinfo/memorytabicon.png", tr("Memory") ); #if defined(_OS_LINUX_) || defined(Q_OS_LINUX) tab->addTab( new StorageInfo( tab ), "sysinfo/storagetabicon.png", tr("Storage") ); #endif tab->addTab( new LoadInfo( tab ), "sysinfo/cputabicon.png", tr("CPU") ); if ( advanced ) { tab->addTab( new ProcessInfo( tab ), "sysinfo/processtabicon.png", tr("Process") ); tab->addTab( new ModulesInfo( tab ), "sysinfo/moduletabicon.png", tr("Modules") ); } tab->addTab( new VersionInfo( tab ), "sysinfo/versiontabicon.png", tr("Version") ); tab->setCurrentTab( tr( "Memory" ) ); } 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 @@ -1,46 +1,44 @@ TEMPLATE = app CONFIG = qt warn_on release DESTDIR = $(OPIEDIR)/bin HEADERS = memory.h \ graph.h \ load.h \ storage.h \ processinfo.h \ processdetail.h \ modulesinfo.h \ - modulesdetail.h \ versioninfo.h \ sysinfo.h SOURCES = main.cpp \ memory.cpp \ graph.cpp \ load.cpp \ storage.cpp \ processinfo.cpp \ modulesinfo.cpp \ processdetail.cpp \ - modulesdetail.cpp \ versioninfo.cpp \ sysinfo.cpp INTERFACES = INCLUDEPATH += $(OPIEDIR)/include DEPENDPATH += $(OPIEDIR)/include LIBS += -lqpe -lopie TARGET = sysinfo TRANSLATIONS = ../../../i18n/de/sysinfo.ts \ ../../../i18n/xx/sysinfo.ts \ ../../../i18n/en/sysinfo.ts \ ../../../i18n/es/sysinfo.ts \ ../../../i18n/fr/sysinfo.ts \ ../../../i18n/hu/sysinfo.ts \ ../../../i18n/ja/sysinfo.ts \ ../../../i18n/ko/sysinfo.ts \ ../../../i18n/no/sysinfo.ts \ ../../../i18n/pl/sysinfo.ts \ ../../../i18n/pt/sysinfo.ts \ ../../../i18n/pt_BR/sysinfo.ts \ ../../../i18n/sl/sysinfo.ts \ ../../../i18n/zh_CN/sysinfo.ts \ ../../../i18n/zh_TW/sysinfo.ts \ ../../../i18n/da/sysinfo.ts |