-rw-r--r-- | noncore/settings/sysinfo/memory.cpp | 70 | ||||
-rw-r--r-- | noncore/settings/sysinfo/memory.h | 1 |
2 files changed, 47 insertions, 24 deletions
diff --git a/noncore/settings/sysinfo/memory.cpp b/noncore/settings/sysinfo/memory.cpp index 23dd8bd..05349e4 100644 --- a/noncore/settings/sysinfo/memory.cpp +++ b/noncore/settings/sysinfo/memory.cpp @@ -51,91 +51,115 @@ MemoryInfo::MemoryInfo( QWidget *parent, const char *name, WFlags f ) swapdata = new GraphData(); swapgraph = new BarGraph( this ); swapgraph->setFrameStyle( QFrame::Panel | QFrame::Sunken ); vb->addWidget( swapgraph, 1 ); swapgraph->setData( swapdata ); swaplegend = new GraphLegend( this ); vb->addWidget( swaplegend ); swaplegend->setData( swapdata ); 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 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 ) ) { + // local variables + QString line; + QString identifier; + QString value; + int position; QTextStream t( &file ); - QString dummy = t.readLine(); // title - t >> dummy; - t >> total; - total /= 1000; - t >> used; - used /= 1000; - t >> memfree; - memfree /= 1000; - t >> shared; - shared /= 1000; - t >> buffers; - buffers /= 1000; - t >> cached; - cached /= 1000; + + while ( !t.atEnd() ) + { + // read a line + line = t.readLine(); + + // extract identifier and value from line + position = line.find( ":" ); + identifier = line.left( position ); + value = line.mid( position + 1, line.length() - position - 3 ); + value = value.stripWhiteSpace(); + + // copy values in variables + if ( identifier == "MemTotal" ) + { + total = value.toULong(); + } else if ( identifier == "MemFree" ) + { + memfree = value.toULong(); + } else if ( identifier == "Buffers" ) + { + buffers = value.toULong(); + } else if ( identifier == "Cached" ) + { + cached = value.toULong(); + } else if ( identifier == "SwapCached" ) + { + } else if ( identifier == "SwapTotal" ) + { + swaptotal = value.toULong(); + } else if ( identifier == "SwapFree" ) + { + swapfree = value.toULong(); + } + } + + file.close(); + + // calculate values + used = total - memfree; + swapused = swaptotal - swapfree; realUsed = total - ( buffers + cached + memfree ); + // visualize values totalMem->setText( tr( "Total Memory: %1 kB" ).arg( total ) ); 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 ); graph->hide(); graph->show(); legend->update(); - // swapfile - t >> dummy; - t >> swaptotal; - swaptotal /= 1000; - t >> swapused; - swapused /= 1000; - t >> swapfree; - swapfree /= 1000; - if (swaptotal > 0) { swapMem->setText( tr( "Total Swap: %1 kB" ).arg( swaptotal ) ); swapdata->clear(); swapdata->addItem( tr("Used (%1 kB)").arg(swapused), swapused ); swapdata->addItem( tr("Free (%1 kB)").arg(swapfree), swapfree ); swapMem->show(); swapgraph->show(); swaplegend->show(); swapgraph->repaint( FALSE ); swaplegend->update(); } else { swapMem->hide(); swapgraph->hide(); swaplegend->hide(); } } } diff --git a/noncore/settings/sysinfo/memory.h b/noncore/settings/sysinfo/memory.h index c2af948..f655604 100644 --- a/noncore/settings/sysinfo/memory.h +++ b/noncore/settings/sysinfo/memory.h @@ -9,56 +9,55 @@ ** 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. ** **********************************************************************/ #ifndef MEMORY_H #define MEMORY_H #include <qwidget.h> class GraphData; class Graph; class GraphLegend; class QLabel; class MemoryInfo : public QWidget { Q_OBJECT public: MemoryInfo( QWidget *parent = 0, const char *name = 0, WFlags f = 0 ); ~MemoryInfo(); unsigned long total; unsigned long used; unsigned long memfree; - unsigned long shared; unsigned long buffers; unsigned long cached; unsigned long realUsed; unsigned long swaptotal; unsigned long swapused; unsigned long swapfree; private slots: void updateData(); private: QLabel *totalMem; GraphData *data; Graph *graph; GraphLegend *legend; QLabel* swapMem; GraphData *swapdata; Graph *swapgraph; GraphLegend *swaplegend; }; #endif |