summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (show 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.cpp71
-rw-r--r--noncore/settings/sysinfo/modulesinfo.h14
-rw-r--r--noncore/settings/sysinfo/processdetail.cpp2
-rw-r--r--noncore/settings/sysinfo/storage.cpp26
-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, 73 insertions, 52 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
@@ -3,210 +3,210 @@
**
** 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 ) {
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 )
-{
- 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 )
+void ModulesInfo::slotSendClicked()
{
- char line[200];
- ModulesDtl->ModulesView->setText( " Details:\n------------\n" );
+ QString capstr = tr( "You really want to execute\n" );
+ capstr.append( CommandCB->currentText() );
+ capstr.append( "\nfor this module?" );
- while( true )
+ if ( QMessageBox::warning( this, caption(), capstr,
+ QMessageBox::Yes | QMessageBox::Default, QMessageBox::No | QMessageBox::Escape ) == QMessageBox::Yes )
{
- 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;
+ 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