summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--ChangeLog1
-rw-r--r--noncore/applets/memoryapplet/graph.cpp183
-rw-r--r--noncore/applets/memoryapplet/graph.h89
-rw-r--r--noncore/applets/memoryapplet/load.cpp212
-rw-r--r--noncore/applets/memoryapplet/load.h60
-rw-r--r--noncore/applets/memoryapplet/memory.cpp165
-rw-r--r--noncore/applets/memoryapplet/memory.h63
-rw-r--r--noncore/applets/memoryapplet/memoryapplet.pro14
-rw-r--r--noncore/applets/memoryapplet/swapfile.cpp15
9 files changed, 794 insertions, 8 deletions
diff --git a/ChangeLog b/ChangeLog
index f2cf5c5..14be30b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,193 +1,194 @@
1 2005-??-??Opie 1.1.9 1 2005-??-??Opie 1.1.9
2 2
3 New Features 3 New Features
4 ------------ 4 ------------
5 * Number of icon columns in Launcher is customizable through Launcher.conf (hrw,zecke,mickeyl) 5 * Number of icon columns in Launcher is customizable through Launcher.conf (hrw,zecke,mickeyl)
6 * Number of icon columns in Launcher is customizable through LauncherSettings (mickeyl) 6 * Number of icon columns in Launcher is customizable through LauncherSettings (mickeyl)
7 7
8 Fixed Bugs 8 Fixed Bugs
9 ---------- 9 ----------
10 * #1501 - Fixed bug in todo sql backend (eilers) 10 * #1501 - Fixed bug in todo sql backend (eilers)
11 * #1505 - Added more Swap sizes in memoryapplet (mickeyl)
11 * #1525 - Hopefully fixed double alarms and not removing alarms set with the Clock application (zecke) 12 * #1525 - Hopefully fixed double alarms and not removing alarms set with the Clock application (zecke)
12 * #1533 - Security Owner Dialog (shown in case of unsuccessfull authentiacation) wasn't able to display information in non latin1 encoding (zecke) 13 * #1533 - Security Owner Dialog (shown in case of unsuccessfull authentiacation) wasn't able to display information in non latin1 encoding (zecke)
13 * n.a. - Removed hard coded font sizes in a couple of inputmethods (mickeyl) 14 * n.a. - Removed hard coded font sizes in a couple of inputmethods (mickeyl)
14 * n.a. - Removed MediumDlg appearing prior to FirstUsage wizard (i.e. calibration) (mickeyl) 15 * n.a. - Removed MediumDlg appearing prior to FirstUsage wizard (i.e. calibration) (mickeyl)
15 16
16 Internal 17 Internal
17 -------- 18 --------
18 * Added the Qtopia 1.7 SDK macros for quick-apps to easa compilation of 3rd party apps against our headers (mickeyl) 19 * Added the Qtopia 1.7 SDK macros for quick-apps to easa compilation of 3rd party apps against our headers (mickeyl)
19 * You can now use the Opie build system in combination with a OpenEmbedded staging area which makes a nice cross development environment (mickeyl) 20 * You can now use the Opie build system in combination with a OpenEmbedded staging area which makes a nice cross development environment (mickeyl)
20 * Made Opie compilable with Qt/Embedded 2.3.10 (ar) 21 * Made Opie compilable with Qt/Embedded 2.3.10 (ar)
21 * Changed Launcher to get default orientation from ODevice w/ QWS_DISPLAY overriding (mickeyl) 22 * Changed Launcher to get default orientation from ODevice w/ QWS_DISPLAY overriding (mickeyl)
22 23
23 2004-11-26Opie 1.1.8 24 2004-11-26Opie 1.1.8
24 25
25 New Features 26 New Features
26 ------------ 27 ------------
27 * PackageManager supports installation of local ipkg files (drw) 28 * PackageManager supports installation of local ipkg files (drw)
28 * PackageManager supports linking of applications to root (drw) 29 * PackageManager supports linking of applications to root (drw)
29 * PackageManager supports src/gz feeds (drw,wimpie) 30 * PackageManager supports src/gz feeds (drw,wimpie)
30 * Added a syslog information tab to sysinfo (mickeyl) 31 * Added a syslog information tab to sysinfo (mickeyl)
31 * Added new, more consistent, PIM icons + a GIMP teplate (ar) 32 * Added new, more consistent, PIM icons + a GIMP teplate (ar)
32 33
33 Fixed Bugs 34 Fixed Bugs
34 ---------- 35 ----------
35 * #1017 - Tetrix doesn't display correctly for high resolution screens (drw) 36 * #1017 - Tetrix doesn't display correctly for high resolution screens (drw)
36 * #1269 - VCards were imported into personal area if it was activated (eilers) 37 * #1269 - VCards were imported into personal area if it was activated (eilers)
37 * #1464 - Packagemanager dont set active filter after install a package (drw) 38 * #1464 - Packagemanager dont set active filter after install a package (drw)
38 * #1479 - Improved VCard-Parser to import VCards created by Evolution 2 and Apple Addressbook (eilers) 39 * #1479 - Improved VCard-Parser to import VCards created by Evolution 2 and Apple Addressbook (eilers)
39 * #1493 - Fixed one column layout bug of the launcher (hrw) 40 * #1493 - Fixed one column layout bug of the launcher (hrw)
40 * n.a. - PackageManager - (Minor UI tweak) in filter dialog, when option is enabled, set focus to widget that corresponds to that option (drw) 41 * n.a. - PackageManager - (Minor UI tweak) in filter dialog, when option is enabled, set focus to widget that corresponds to that option (drw)
41 * n.a. - PackageManager - (Minor UI tweak) fix double entry in source feed configuration when adding a new feed (drw) 42 * n.a. - PackageManager - (Minor UI tweak) fix double entry in source feed configuration when adding a new feed (drw)
42 * n.a. - Battery Applet - fix sizing of battery info popup (drw,mickeyl) 43 * n.a. - Battery Applet - fix sizing of battery info popup (drw,mickeyl)
43 44
44 Internal 45 Internal
45 -------- 46 --------
46 * Moved libopie1 to unsupported (mickeyl) 47 * Moved libopie1 to unsupported (mickeyl)
47 * Implemented generic queryByExample() with incremental searching. A lot of internal changes of the Pim2-library (eilers) 48 * Implemented generic queryByExample() with incremental searching. A lot of internal changes of the Pim2-library (eilers)
48 * Added fast and full featured and incremental sorted() for SQL addressbook backend (eilers) 49 * Added fast and full featured and incremental sorted() for SQL addressbook backend (eilers)
49 50
50 2004-11-14Opie 1.1.7 51 2004-11-14Opie 1.1.7
51 52
52 New Features 53 New Features
53 ------------ 54 ------------
54 * libOpieDB now uses SQLite V3 instead V2. Remember to upgrade your database files! (eilers) 55 * libOpieDB now uses SQLite V3 instead V2. Remember to upgrade your database files! (eilers)
55 * Backup now uses the busy indicator when backing up and restore (ar) 56 * Backup now uses the busy indicator when backing up and restore (ar)
56 * OpiePlayer2 gained adding of Directories to the playlist (zecke) 57 * OpiePlayer2 gained adding of Directories to the playlist (zecke)
57 * OpiePlayer2 better error handling (zecke) 58 * OpiePlayer2 better error handling (zecke)
58 * OpiePlayer2 progress indication while streaming (zecke) 59 * OpiePlayer2 progress indication while streaming (zecke)
59 * OpiePlayer2 ported to use libxine 1.0.0-rc6a (brad,zecke) 60 * OpiePlayer2 ported to use libxine 1.0.0-rc6a (brad,zecke)
60 * Ported brightnessapplet from Qtopia 1.7 (mickeyl) 61 * Ported brightnessapplet from Qtopia 1.7 (mickeyl)
61 * Opie-Eye got a Digital Camera File Backend (alwin,zecke) 62 * Opie-Eye got a Digital Camera File Backend (alwin,zecke)
62 * Support for Tuxpad1 of Tradesquare.NL (mickeyl,zecke) 63 * Support for Tuxpad1 of Tradesquare.NL (mickeyl,zecke)
63 * Opie-Console use Custom Font and Size in a Profile (harlekin) 64 * Opie-Console use Custom Font and Size in a Profile (harlekin)
64 * Opie-Console transparently log the Output and Input to a file (harlekin) 65 * Opie-Console transparently log the Output and Input to a file (harlekin)
65 * Added new O-menu icon to lock the PDA immediately: opie-lockapplet (clem) 66 * Added new O-menu icon to lock the PDA immediately: opie-lockapplet (clem)
66 * Opie-Security now hides the plugin-based authentication tabs if no auth. plugin package is installed (clem) 67 * Opie-Security now hides the plugin-based authentication tabs if no auth. plugin package is installed (clem)
67 * Opie-Security gained a 'test authentication' button (clem) 68 * Opie-Security gained a 'test authentication' button (clem)
68 * Opie-Eye got a more unique layout (menubar), a slideshow, user can setup some defaults 69 * Opie-Eye got a more unique layout (menubar), a slideshow, user can setup some defaults
69 * Opie-Mail improve the handling of POP mail boxes (alwin) 70 * Opie-Mail improve the handling of POP mail boxes (alwin)
70 * Both Opie-Eye and Opie-Mail were greatly improved due the hard work of Rajko Albrecht(alwin) 71 * Both Opie-Eye and Opie-Mail were greatly improved due the hard work of Rajko Albrecht(alwin)
71 * Opie IRC - backports of the 'NeIRC fork' (zecke) 72 * Opie IRC - backports of the 'NeIRC fork' (zecke)
72 73
73 Fixed Bugs 74 Fixed Bugs
74 ---------- 75 ----------
75 * #501 - Pickboard is able to show 'Umlaute' (TT,zecke) 76 * #501 - Pickboard is able to show 'Umlaute' (TT,zecke)
76 * #608 - Make Opie usable for left handed users (zecke) 77 * #608 - Make Opie usable for left handed users (zecke)
77 * #957 - Import of VCards/VTodos/VEvents with BASE64 encoding (ljp,zecke) 78 * #957 - Import of VCards/VTodos/VEvents with BASE64 encoding (ljp,zecke)
78 * #1245 - Opie-Go 'paused' (zecke) 79 * #1245 - Opie-Go 'paused' (zecke)
79 * #1358 - DocTab didn't show any MimeTypes (was fixed earlier) (zecke) 80 * #1358 - DocTab didn't show any MimeTypes (was fixed earlier) (zecke)
80 * #1380 - QDateBookAccess::remove() doesn't remove entries (eilers, zecke) 81 * #1380 - QDateBookAccess::remove() doesn't remove entries (eilers, zecke)
81 * #1395 - Build VNC Backend with gcc3.4 82 * #1395 - Build VNC Backend with gcc3.4
82 * #1440 - The icon of opie-mobilemsg is missing (CoreDump) 83 * #1440 - The icon of opie-mobilemsg is missing (CoreDump)
83 * #1426 - Add missing opie-bartender Icon (CoreDump) 84 * #1426 - Add missing opie-bartender Icon (CoreDump)
84 * #1445 - Opie-Sheet Has No Icon (CoreDump) 85 * #1445 - Opie-Sheet Has No Icon (CoreDump)
85 * #1448 - Brightness Applet added (mickeyl) 86 * #1448 - Brightness Applet added (mickeyl)
86 * #1450 - ZSame didn't clear the bonus item after winning a game (zecke) 87 * #1450 - ZSame didn't clear the bonus item after winning a game (zecke)
87 * #1482 - Fix OFileSelector to be able to sort by size (zecke) 88 * #1482 - Fix OFileSelector to be able to sort by size (zecke)
88 * n.a. - Opie-mail: fixed some crasher, some layout-problems 89 * n.a. - Opie-mail: fixed some crasher, some layout-problems
89 * n.a. - Converted applications to not hardcode /opt/QtPalmtop but to use QPEApplication::qpeDir (zecke) 90 * n.a. - Converted applications to not hardcode /opt/QtPalmtop but to use QPEApplication::qpeDir (zecke)
90 * n.a. - Converted usage of qpeDir() not to include a '/' as first charachter of the string (zecke) 91 * n.a. - Converted usage of qpeDir() not to include a '/' as first charachter of the string (zecke)
91 * n.a. - Build system: Enable distcc and ccache when crosscompiling too, and use them everywhere we can (clem) 92 * n.a. - Build system: Enable distcc and ccache when crosscompiling too, and use them everywhere we can (clem)
92 * n.a. - Build system: Fix deps in several config.in (and fix scripts/deps.pl too) to stop breaking builds, especially with make -j highNumber (clem) 93 * n.a. - Build system: Fix deps in several config.in (and fix scripts/deps.pl too) to stop breaking builds, especially with make -j highNumber (clem)
93 * n.a. - Removed hardcoded icon size in a couple of applets (mickeyl) 94 * n.a. - Removed hardcoded icon size in a couple of applets (mickeyl)
94 95
95 Internal 96 Internal
96 -------- 97 --------
97 * Opie-Qashmoney has been moved to unsupported (mickeyl) 98 * Opie-Qashmoney has been moved to unsupported (mickeyl)
98 * Opie-Ubrowser has been moved to unsupported (mickeyl) 99 * Opie-Ubrowser has been moved to unsupported (mickeyl)
99 100
100 2004-09-17Opie 1.1.6 101 2004-09-17Opie 1.1.6
101 102
102 New Features 103 New Features
103 ------------ 104 ------------
104 * Fifteen gained configurable number of items (zecke) 105 * Fifteen gained configurable number of items (zecke)
105 * Fifteen can have custom background images (zecke) 106 * Fifteen can have custom background images (zecke)
106 * Added daemonizing capabilities to QWS Server [via Qt/Embedded] (mickeyl) 107 * Added daemonizing capabilities to QWS Server [via Qt/Embedded] (mickeyl)
107 * Integrated the new security framework into libopie2 (zecke,clem) 108 * Integrated the new security framework into libopie2 (zecke,clem)
108 * Converted the launcher to use the new security framework (zecke) 109 * Converted the launcher to use the new security framework (zecke)
109 * Backup can now handle custom locations for backup and restore (ar) 110 * Backup can now handle custom locations for backup and restore (ar)
110 * Implemented right-on-hold feedback (wimpie,zecke) 111 * Implemented right-on-hold feedback (wimpie,zecke)
111 * Lots of new features in opie-reader (tim,pohly) 112 * Lots of new features in opie-reader (tim,pohly)
112 * Build system cleanups (schurig) 113 * Build system cleanups (schurig)
113 114
114 Fixed Bugs 115 Fixed Bugs
115 -------- 116 --------
116 * #1005 - Fixed backup to CompactFlash (ar) 117 * #1005 - Fixed backup to CompactFlash (ar)
117 * #1167 - Fixed Opie write crashing on more text than one page (ar) 118 * #1167 - Fixed Opie write crashing on more text than one page (ar)
118 * #1225 - Fixed repeated light flashing on Zaurus with keyz (mickeyl) 119 * #1225 - Fixed repeated light flashing on Zaurus with keyz (mickeyl)
119 * #1359 - Fixed bookmarks in Gutenbrowser (ljp) 120 * #1359 - Fixed bookmarks in Gutenbrowser (ljp)
120 * #1361 - Fixed auto upercase in Opie-Addressbook (eilers) 121 * #1361 - Fixed auto upercase in Opie-Addressbook (eilers)
121 * #1370 - Pimconverter now reacts on cancel key (eilers) 122 * #1370 - Pimconverter now reacts on cancel key (eilers)
122 * #1376 - Bring back the capslock/numlock display (zecke) 123 * #1376 - Bring back the capslock/numlock display (zecke)
123 * #1383 - Language settings now warns about losing open apps (Markus Litz) 124 * #1383 - Language settings now warns about losing open apps (Markus Litz)
124 * #1393 - Fixed line wrap issues in opie-console for the default profile (mickeyl) 125 * #1393 - Fixed line wrap issues in opie-console for the default profile (mickeyl)
125 * #1394 - Fixed oversized headline in opie-login (coredump) 126 * #1394 - Fixed oversized headline in opie-login (coredump)
126 * #1396 - Opie-console captures the escape key and vim is working (zecke) 127 * #1396 - Opie-console captures the escape key and vim is working (zecke)
127 * #1401 - Scrollbar is now only visible if necessary in DocTab (mickeyl) 128 * #1401 - Scrollbar is now only visible if necessary in DocTab (mickeyl)
128 129
129 2004-07-06Opie 1.1.4 130 2004-07-06Opie 1.1.4
130 131
131 New Features 132 New Features
132 ------------ 133 ------------
133 * Added four themes courtesy Robert Griebl (http://www.softforge.de/zstyle) 134 * Added four themes courtesy Robert Griebl (http://www.softforge.de/zstyle)
134 * Added Conversion tool for pim-data (eilers) 135 * Added Conversion tool for pim-data (eilers)
135 * Introduced new OPimAccessFactory and OBackendFactory which simplyfies database access (eilers) 136 * Introduced new OPimAccessFactory and OBackendFactory which simplyfies database access (eilers)
136 * Modified the PIM API for providing generic use of OPimRecords (eilers) 137 * Modified the PIM API for providing generic use of OPimRecords (eilers)
137 * Clicking on the application symbol now iterates over the application's top level widgets if already raised (zecke) 138 * Clicking on the application symbol now iterates over the application's top level widgets if already raised (zecke)
138 139
139 Fixed Bugs 140 Fixed Bugs
140 -------- 141 --------
141 * #1068 - Country Drop Down Box Off Screen 142 * #1068 - Country Drop Down Box Off Screen
142 * #1291 - Opie tinykate does not open .desktop files (ar) 143 * #1291 - Opie tinykate does not open .desktop files (ar)
143 * #1291 - Opie sheet not saving correctly (ar) 144 * #1291 - Opie sheet not saving correctly (ar)
144 * #1294 - Opie does not know about British Summer Time 145 * #1294 - Opie does not know about British Summer Time
145 * #1314 - Drawpad initialization (mickeyl) 146 * #1314 - Drawpad initialization (mickeyl)
146 * #1317 - Packagemanager crashes on hold-down or install (chicken) 147 * #1317 - Packagemanager crashes on hold-down or install (chicken)
147 * #1321 - Batteryapplet graphic glitch (harlekin) 148 * #1321 - Batteryapplet graphic glitch (harlekin)
148 * #1324 - ZSafe not starting up (mickeyl) 149 * #1324 - ZSafe not starting up (mickeyl)
149 * #1328 - Personal Home Address fields is trimmed to 1char (eilers) 150 * #1328 - Personal Home Address fields is trimmed to 1char (eilers)
150 * #1327 - Opie-mail ipk does not depend on libopiedb2 (chicken) 151 * #1327 - Opie-mail ipk does not depend on libopiedb2 (chicken)
151 * #1345 - Networksettingsplugin wlan plugin dependency on libpcap0 (mickeyl) 152 * #1345 - Networksettingsplugin wlan plugin dependency on libpcap0 (mickeyl)
152 * #1348 - Datebook dependency on libopiedb2 (chicken) 153 * #1348 - Datebook dependency on libopiedb2 (chicken)
153 * #1328 - Switched SQLDatabase and VCards char encoding from latin1 to unicode (eilers) 154 * #1328 - Switched SQLDatabase and VCards char encoding from latin1 to unicode (eilers)
154 155
155 2004-04-25Opie 1.1.3 156 2004-04-25Opie 1.1.3
156 157
157 * Introduced first implementation of SQL-Support using SQLite (eilers) 158 * Introduced first implementation of SQL-Support using SQLite (eilers)
158 * Added a new Gutenberg Project reader app - opie-gutenbrowser (ljp) 159 * Added a new Gutenberg Project reader app - opie-gutenbrowser (ljp)
159 * Added a real system graffiti character set (brad) 160 * Added a real system graffiti character set (brad)
160 * Added Generic Keyconfig Widget (zecke) 161 * Added Generic Keyconfig Widget (zecke)
161 * Improved Screenshotapplet and Drawpad integration. You can now open a screenshot in drawpad and take notes (zecke) 162 * Improved Screenshotapplet and Drawpad integration. You can now open a screenshot in drawpad and take notes (zecke)
162 * Added new Bible reader app - opie-dagger (drw) 163 * Added new Bible reader app - opie-dagger (drw)
163 * Added a new Image Viewer. Work is ongoing (zecke,alwin) 164 * Added a new Image Viewer. Work is ongoing (zecke,alwin)
164 * Added namespace usage in libopie2 and everywhere (zecke,alwin) 165 * Added namespace usage in libopie2 and everywhere (zecke,alwin)
165 * Enabled the possibility to pass command line arguments to applications (mickeyl) 166 * Enabled the possibility to pass command line arguments to applications (mickeyl)
166 * Added an about applet showing some credits and information about Opie (mickeyl) 167 * Added an about applet showing some credits and information about Opie (mickeyl)
167 * Added benchmarking functionality to sysinfo (mickeyl) 168 * Added benchmarking functionality to sysinfo (mickeyl)
168 * Added applet and configuration application for switching hardware keyboard layouts (alwin) 169 * Added applet and configuration application for switching hardware keyboard layouts (alwin)
169 * Ported applications from libopie1 to libopie2* (drw,ar,alwin) 170 * Ported applications from libopie1 to libopie2* (drw,ar,alwin)
170 * Imported fullscreen and font improvements from the Qkonsole fork to embeddedkonsole (waspe) 171 * Imported fullscreen and font improvements from the Qkonsole fork to embeddedkonsole (waspe)
171 * Clean-up of package information in control files (drw) 172 * Clean-up of package information in control files (drw)
172 * Repaired mediummount which was broken since integrating the quicklauncher (alwin) 173 * Repaired mediummount which was broken since integrating the quicklauncher (alwin)
173 * Improved big-screen support (zecke,ar) 174 * Improved big-screen support (zecke,ar)
174 * Improved multikeyboard support, added keyboard layout switching applet (mouse) 175 * Improved multikeyboard support, added keyboard layout switching applet (mouse)
175 * Added a new mail client based on libetpan (harlekin,alwin,jgf) 176 * Added a new mail client based on libetpan (harlekin,alwin,jgf)
176 * Added new package manager - opie-packagemanager (drw) 177 * Added new package manager - opie-packagemanager (drw)
177 * Improved light-n-power for C7x0 (mickeyl) 178 * Improved light-n-power for C7x0 (mickeyl)
178 * Added automatic rotation support for C7x0 (treke) 179 * Added automatic rotation support for C7x0 (treke)
179 * Split libopie1 up into a set of smaller - functionally grouped - libraries (mickeyl) 180 * Split libopie1 up into a set of smaller - functionally grouped - libraries (mickeyl)
180 * Added scanning the wireless network neighbourhood to networksettings (mickeyl) 181 * Added scanning the wireless network neighbourhood to networksettings (mickeyl)
181 182
182 2003-11-29Opie 1.0.3 183 2003-11-29Opie 1.0.3
183 184
184 * Released as Version 1.0.3 185 * Released as Version 1.0.3
185 * Improved i18n (various contributors) 186 * Improved i18n (various contributors)
186 * Reduced application startup time by integrating the TT quicklauncher (zecke,harlekin) 187 * Reduced application startup time by integrating the TT quicklauncher (zecke,harlekin)
187 * Made the Documents Tab optional (mickeyl) 188 * Made the Documents Tab optional (mickeyl)
188 * Integrated basic support for HP iPAQ 54xx and the Jornada 5xx (chicken) 189 * Integrated basic support for HP iPAQ 54xx and the Jornada 5xx (chicken)
189 190
190 2003-08-04Opie 1.0.0 191 2003-08-04Opie 1.0.0
191 192
192 * Released as Version 1.0.0 193 * Released as Version 1.0.0
193 * Including a PPP module for easy dial up (tille,harlekin,zecke) 194 * Including a PPP module for easy dial up (tille,harlekin,zecke)
diff --git a/noncore/applets/memoryapplet/graph.cpp b/noncore/applets/memoryapplet/graph.cpp
new file mode 100644
index 0000000..0b02bf7
--- a/dev/null
+++ b/noncore/applets/memoryapplet/graph.cpp
@@ -0,0 +1,183 @@
1/**********************************************************************
2** Copyright (C) 2000 Trolltech AS. All rights reserved.
3**
4** This file is part of Qtopia Environment.
5**
6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file.
10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13**
14** See http://www.trolltech.com/gpl/ for GPL licensing information.
15**
16** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you.
18**
19**********************************************************************/
20
21#include <qpainter.h>
22#include <qpixmap.h>
23#include "graph.h"
24
25void GraphData::clear()
26{
27 names.clear();
28 values.resize(0);
29}
30
31void GraphData::addItem( const QString &name, int value )
32{
33 names.append( name );
34 values.resize( values.size() + 1 );
35 values[values.size()-1] = value;
36}
37
38Graph::Graph(QWidget *parent, const char *name, WFlags f )
39 : QFrame( parent, name, f )
40{
41}
42
43PieGraph::PieGraph(QWidget *parent, const char *name, WFlags f )
44 : Graph( parent, name, f )
45{
46}
47
48void PieGraph::drawContents( QPainter *p )
49{
50 int size = QMIN( contentsRect().width(), contentsRect().height() ) - 1;
51
52 int total = 0;
53 for ( unsigned i = 0; i < data->count(); i++ )
54 total += data->value(i);
55
56 int angle = 0;
57 for ( unsigned i = 0; i < data->count(); i++ ) {
58 int len;
59 if ( i == data->count() - 1 || !total )
60 len = 5760 - angle;
61 else
62 len = data->value(i) * 5760 / total;
63 QColor col;
64 col.setHsv( i * 360 / data->count(), 255, 255 );
65 p->setBrush( col );
66 p->drawPie ( contentsRect().x(), contentsRect().y(),
67 size, size, angle, len+32 );
68 angle += len;
69 }
70}
71
72BarGraph::BarGraph(QWidget *parent, const char *name, WFlags f )
73 : Graph( parent, name, f )
74{
75 setMinimumHeight( 10 );
76 setMaximumHeight( 45 );
77}
78
79void BarGraph::drawContents( QPainter *p )
80{
81 int h = contentsRect().height();
82 int y = contentsRect().top();
83
84 int total = 0;
85 for ( unsigned i = 0; i < data->count(); i++ )
86 total += data->value(i);
87
88 int pos = 0;
89 for ( unsigned i = 0; i < data->count(); i++ ) {
90 int len;
91 if ( i == data->count() - 1 || !total )
92 len = contentsRect().width() - pos;
93 else
94 len = data->value(i) * contentsRect().width() / total;
95 QColor col;
96 col.setHsv( i * 360 / data->count(), 255, 255 );
97 drawSegment( p, QRect(contentsRect().x() + pos, y, len, h), col );
98 pos += len;
99 }
100}
101
102void BarGraph::drawSegment( QPainter *p, const QRect &r, const QColor &c )
103{
104 if ( QPixmap::defaultDepth() > 8 ) {
105 QColor topgrad = c.light(170);
106 QColor botgrad = c.dark();
107
108 int h1, h2, s1, s2, v1, v2;
109 topgrad.hsv( &h1, &s1, &v1 );
110 botgrad.hsv( &h2, &s2, &v2 );
111 int ng = r.height();
112 for ( int j =0; j < ng; j++ ) {
113 p->setPen( QColor( h1 + ((h2-h1)*j)/(ng-1),
114 s1 + ((s2-s1)*j)/(ng-1),
115 v1 + ((v2-v1)*j)/(ng-1), QColor::Hsv ) );
116 p->drawLine( r.x(), r.top()+j, r.x()+r.width(), r.top()+j );
117 }
118 } else {
119 p->fillRect( r.x(), r.top(), r.width(), r.height(), c );
120 }
121}
122
123
124GraphLegend::GraphLegend( QWidget *parent, const char *name, WFlags f )
125 : QFrame( parent, name, f )
126{
127 horz = FALSE;
128}
129
130void GraphLegend::setOrientation(Orientation o)
131{
132 horz = o == Horizontal;
133}
134
135void GraphLegend::drawContents( QPainter *p )
136{
137 int total = 0;
138 for ( unsigned i = 0; i < data->count(); i++ )
139 total += data->value(i);
140
141 int tw = width()/data->count()-1;
142 int th = height()/(horz ? 1 : data->count());
143 if ( th > p->fontMetrics().height() )
144 th = p->fontMetrics().height();
145 int x = 0;
146 int y = 0;
147 for ( unsigned i = 0; i < data->count(); i++ ) {
148 QColor col;
149 col.setHsv( i * 360 / data->count(), 255, 255 );
150 p->setBrush( col );
151 p->drawRect( x+1, y+1, th - 2, th - 2 );
152 p->drawText( x+th + 1, y + p->fontMetrics().ascent()+1, data->name(i) );
153 if ( horz ) {
154 x += tw;
155 } else {
156 y += th;
157 }
158 }
159}
160
161QSize GraphLegend::sizeHint() const
162{
163 int th = fontMetrics().height() + 2;
164 int maxw = 0;
165 for ( unsigned i = 0; i < data->count(); i++ ) {
166 int w = fontMetrics().width( data->name(i) );
167 if ( w > maxw )
168 maxw = w;
169 }
170 if ( 0 && horz ) {
171 return QSize( maxw * data->count(), th );
172 } else {
173 return QSize( maxw, th * data->count() );
174 }
175}
176
177void GraphLegend::setData( const GraphData *p )
178{
179 data = p;
180 int th = fontMetrics().height();
181 setMinimumHeight( th * ( horz ? 1 : data->count() ) );
182 updateGeometry();
183}
diff --git a/noncore/applets/memoryapplet/graph.h b/noncore/applets/memoryapplet/graph.h
new file mode 100644
index 0000000..5a65e79
--- a/dev/null
+++ b/noncore/applets/memoryapplet/graph.h
@@ -0,0 +1,89 @@
1/**********************************************************************
2** Copyright (C) 2000 Trolltech AS. All rights reserved.
3**
4** This file is part of Qtopia Environment.
5**
6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file.
10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13**
14** See http://www.trolltech.com/gpl/ for GPL licensing information.
15**
16** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you.
18**
19**********************************************************************/
20
21#include <qframe.h>
22#include <qarray.h>
23#include <qstringlist.h>
24
25class GraphData
26{
27public:
28 void clear();
29 void addItem( const QString &name, int value );
30
31 const QString &name( int i ) const { return names[i]; }
32 int value( int i ) const { return values[i]; }
33 unsigned count() const { return values.size(); }
34
35private:
36 QStringList names;
37 QArray<int> values;
38};
39
40class Graph : public QFrame
41{
42 Q_OBJECT
43public:
44 Graph( QWidget *parent = 0, const char *name = 0, WFlags f = 0 );
45
46 void setData( const GraphData *p ) { data = p; }
47
48protected:
49 const GraphData *data;
50};
51
52class PieGraph : public Graph
53{
54 Q_OBJECT
55public:
56 PieGraph( QWidget *parent = 0, const char *name = 0, WFlags f = 0 );
57
58protected:
59 virtual void drawContents( QPainter *p );
60};
61
62class BarGraph : public Graph
63{
64 Q_OBJECT
65public:
66 BarGraph( QWidget *parent = 0, const char *name = 0, WFlags f = 0 );
67
68protected:
69 virtual void drawContents( QPainter *p );
70 void drawSegment( QPainter *p, const QRect &r, const QColor &c );
71};
72
73class GraphLegend : public QFrame
74{
75 Q_OBJECT
76public:
77 GraphLegend( QWidget *parent = 0, const char *name = 0, WFlags f = 0 );
78
79 void setData( const GraphData *p );
80 virtual QSize sizeHint() const;
81 void setOrientation(Orientation o);
82
83protected:
84 virtual void drawContents( QPainter *p );
85
86private:
87 const GraphData *data;
88 bool horz;
89};
diff --git a/noncore/applets/memoryapplet/load.cpp b/noncore/applets/memoryapplet/load.cpp
new file mode 100644
index 0000000..d9d7a66
--- a/dev/null
+++ b/noncore/applets/memoryapplet/load.cpp
@@ -0,0 +1,212 @@
1/**********************************************************************
2** Copyright (C) 2000 Trolltech AS. All rights reserved.
3**
4** This file is part of Qtopia Environment.
5**
6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file.
10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13**
14** See http://www.trolltech.com/gpl/ for GPL licensing information.
15**
16** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you.
18**
19**********************************************************************/
20
21#include <stdio.h>
22
23#include <qfile.h>
24#include <qlayout.h>
25#include <qlabel.h>
26#include <qpainter.h>
27#include <qpixmap.h>
28#include <qtextstream.h>
29#include <qtimer.h>
30#include <qwhatsthis.h>
31
32#include "load.h"
33
34LoadInfo::LoadInfo( QWidget *parent, const char *name, WFlags f )
35 : QWidget( parent, name, f )
36{
37 QVBoxLayout *vb = new QVBoxLayout( this, 6 );
38
39 QString cpuInfo = getCpuInfo();
40 if ( !cpuInfo.isNull() )
41 vb->addWidget( new QLabel( cpuInfo, this ) );
42 vb->addWidget( new Load( this ), 100 );
43 QLabel *l = new QLabel( this );
44 l->setPixmap( makeLabel( red, tr("Application CPU usage (%)") ) );
45 vb->addWidget( l, 1 );
46 l = new QLabel( this );
47 l->setPixmap( makeLabel( green, tr("System CPU usage (%)") ) );
48 vb->addWidget( l, 1 );
49 vb->addStretch(50);
50
51 QWhatsThis::add( this, tr( "This page shows how much this device's processor is being used." ) );
52}
53
54QPixmap LoadInfo::makeLabel( const QColor &col, const QString &text )
55{
56 int h = fontMetrics().height();
57 QPixmap pm( 20 + fontMetrics().width( text ), h );
58 QPainter p( &pm );
59 p.fillRect( pm.rect(), colorGroup().background() );
60 p.fillRect( 0, h/2-4, 18, h/2+3, black );
61 p.setPen( col );
62 p.drawLine( 2, h/2, 15, h/2 );
63 p.setPen( colorGroup().text() );
64 p.drawText( 20, fontMetrics().ascent(), text );
65
66 return pm;
67}
68
69QString LoadInfo::getCpuInfo()
70{
71 bool haveInfo = FALSE;
72 QString info = tr("Type: ");
73 QFile f( "/proc/cpuinfo" );
74 if ( f.open( IO_ReadOnly ) ) {
75 QTextStream ts( &f );
76
77 while ( !ts.atEnd() ) {
78 QString s = ts.readLine();
79 if ( s.find( "model name" ) == 0 ) {
80 info += s.mid( s.find( ':' ) + 2 );
81 haveInfo = TRUE;
82 } else if ( s.find( "cpu MHz" ) == 0 ) {
83 double mhz = s.mid( s.find( ':' ) + 2 ).toDouble();
84 info += " " + QString::number( mhz, 'f', 0 );
85 info += "MHz";
86 break;
87 } else if ( s.find( "Processor" ) == 0 ) {
88 info += s.mid( s.find( ':' ) + 2 );
89 haveInfo = TRUE;
90 break;
91#ifdef __MIPSEL__
92 } else if ( s.find( "cpu model" ) == 0 ) {
93 info += " " + s.mid( s.find( ':' ) + 2 );
94 break;
95 } else if ( s.find( "cpu" ) == 0 ) {
96 info += s.mid( s.find( ':' ) + 2 );
97 haveInfo = TRUE;
98#endif
99 }
100 }
101 }
102
103 if ( !haveInfo )
104 info = QString();
105
106 return info;
107}
108
109Load::Load( QWidget *parent, const char *name, WFlags f )
110 : QWidget( parent, name, f )
111{
112 setMinimumHeight( 30 );
113 setBackgroundColor( black );
114 points = 100;
115 setMinimumWidth( points );
116 userLoad = new double [points];
117 systemLoad = new double [points];
118 for ( int i = 0; i < points; i++ ) {
119 userLoad[i] = 0.0;
120 systemLoad[i] = 0.0;
121 }
122 maxLoad = 1.3;
123 QTimer *timer = new QTimer( this );
124 connect( timer, SIGNAL(timeout()), SLOT(timeout()) );
125 timer->start( 2000 );
126 gettimeofday( &last, 0 );
127 first = TRUE;
128 timeout();
129}
130
131void Load::paintEvent( QPaintEvent * )
132{
133 QPainter p( this );
134
135 int h = height() - 5;
136
137 int mult = (int)(h / maxLoad);
138
139 p.setPen( gray );
140 p.drawLine( 0, h - mult, width(), h - mult );
141 p.drawText( 0, h - mult, "100" );
142 p.drawText( 0, h, "0" );
143
144 p.setPen( green );
145 for ( int i = 1; i < points; i++ ) {
146 int x1 = (i - 1) * width() / points;
147 int x2 = i * width() / points;
148 p.drawLine( x1, h - systemLoad[i-1] * mult,
149 x2, h - systemLoad[i] * mult );
150 }
151
152 p.setPen( red );
153 for ( int i = 1; i < points; i++ ) {
154 int x1 = (i - 1) * width() / points;
155 int x2 = i * width() / points;
156 p.drawLine( x1, h - userLoad[i-1] * mult,
157 x2, h - userLoad[i] * mult );
158 }
159}
160
161void Load::timeout()
162{
163 int user;
164 int usernice;
165 int sys;
166 int idle;
167 FILE *fp;
168 fp = fopen( "/proc/stat", "r" );
169 fscanf( fp, "cpu %d %d %d %d", &user, &usernice, &sys, &idle );
170 fclose( fp );
171 struct timeval now;
172 gettimeofday( &now, 0 );
173 int tdiff = now.tv_usec - last.tv_usec;
174 tdiff += (now.tv_sec - last.tv_sec) * 1000000;
175 tdiff /= 10000;
176
177 int udiff = user - lastUser;
178 int sdiff = sys - lastSys;
179 if ( tdiff > 0 ) {
180 double uload = (double)udiff / (double)tdiff;
181 double sload = (double)sdiff / (double)tdiff;
182 if ( !first ) {
183 for ( int i = 1; i < points; i++ ) {
184 userLoad[i-1] = userLoad[i];
185 systemLoad[i-1] = systemLoad[i];
186 }
187 userLoad[points-1] = uload;
188 systemLoad[points-1] = sload;
189 // scroll( -width()/points, 0, QRect( 0, 0, width() - width()/points + 1, height() ) );
190 repaint( TRUE );
191 double ml = 1.3;
192 /*
193 for ( int i = 0; i < points; i++ ) {
194 if ( userLoad[i] > ml )
195 ml = userLoad[i];
196 }
197 */
198 if ( maxLoad != ml ) {
199 maxLoad = ml;
200 update();
201 }
202 }
203
204 last = now;
205 lastUser = user;
206 lastSys = sys;
207 first = FALSE;
208 } else if ( tdiff < 0 ) {
209 last = now;
210 }
211}
212
diff --git a/noncore/applets/memoryapplet/load.h b/noncore/applets/memoryapplet/load.h
new file mode 100644
index 0000000..e7f5388
--- a/dev/null
+++ b/noncore/applets/memoryapplet/load.h
@@ -0,0 +1,60 @@
1/**********************************************************************
2** Copyright (C) 2000 Trolltech AS. All rights reserved.
3**
4** This file is part of Qtopia Environment.
5**
6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file.
10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13**
14** See http://www.trolltech.com/gpl/ for GPL licensing information.
15**
16** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you.
18**
19**********************************************************************/
20
21#include <sys/time.h>
22#include <qwidget.h>
23
24/*
25 Little load meter
26*/
27class Load : public QWidget {
28 Q_OBJECT
29public:
30 Load( QWidget *parent = 0, const char *name = 0, WFlags f = 0 );
31
32protected:
33 void paintEvent( QPaintEvent *ev );
34
35private slots:
36 void timeout();
37
38private:
39 int points;
40 double *userLoad;
41 double *systemLoad;
42 double maxLoad;
43 struct timeval last;
44 int lastUser;
45 int lastUsernice;
46 int lastSys;
47 int lastIdle;
48 bool first;
49};
50
51class LoadInfo : public QWidget
52{
53 Q_OBJECT
54public:
55 LoadInfo( QWidget *parent = 0, const char *name = 0, WFlags f = 0 );
56
57private:
58 QPixmap makeLabel( const QColor &col, const QString &text );
59 QString getCpuInfo();
60};
diff --git a/noncore/applets/memoryapplet/memory.cpp b/noncore/applets/memoryapplet/memory.cpp
new file mode 100644
index 0000000..05349e4
--- a/dev/null
+++ b/noncore/applets/memoryapplet/memory.cpp
@@ -0,0 +1,165 @@
1/**********************************************************************
2** Copyright (C) 2000 Trolltech AS. All rights reserved.
3**
4** This file is part of Qtopia Environment.
5**
6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file.
10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13**
14** See http://www.trolltech.com/gpl/ for GPL licensing information.
15**
16** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you.
18**
19**********************************************************************/
20
21#include <qlabel.h>
22#include <qtimer.h>
23#include <qfile.h>
24#include <qtextstream.h>
25#include <qlayout.h>
26#include <qwhatsthis.h>
27#include "graph.h"
28#include "memory.h"
29
30MemoryInfo::MemoryInfo( QWidget *parent, const char *name, WFlags f )
31 : QWidget( parent, name, f )
32{
33 QVBoxLayout *vb = new QVBoxLayout( this, 5 );
34
35 totalMem = new QLabel( this );
36 vb->addWidget( totalMem );
37
38 data = new GraphData();
39 graph = new BarGraph( this );
40 graph->setFrameStyle( QFrame::Panel | QFrame::Sunken );
41 vb->addWidget( graph, 1 );
42 graph->setData( data );
43
44 legend = new GraphLegend( this );
45 vb->addWidget( legend );
46 legend->setData( data );
47
48 swapMem = new QLabel( this );
49 vb->addWidget( swapMem );
50
51 swapdata = new GraphData();
52 swapgraph = new BarGraph( this );
53 swapgraph->setFrameStyle( QFrame::Panel | QFrame::Sunken );
54 vb->addWidget( swapgraph, 1 );
55 swapgraph->setData( swapdata );
56
57 swaplegend = new GraphLegend( this );
58 vb->addWidget( swaplegend );
59 swaplegend->setData( swapdata );
60
61 vb->addStretch( 1 );
62 updateData();
63
64 QTimer *t = new QTimer( this );
65 connect( t, SIGNAL( timeout() ), this, SLOT( updateData() ) );
66 t->start( 5000 );
67
68 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." ) );
69
70}
71
72MemoryInfo::~MemoryInfo()
73{
74 delete data;
75}
76
77void MemoryInfo::updateData()
78{
79 QFile file( "/proc/meminfo" );
80
81 if ( file.open( IO_ReadOnly ) )
82 {
83 // local variables
84 QString line;
85 QString identifier;
86 QString value;
87 int position;
88 QTextStream t( &file );
89
90 while ( !t.atEnd() )
91 {
92 // read a line
93 line = t.readLine();
94
95 // extract identifier and value from line
96 position = line.find( ":" );
97 identifier = line.left( position );
98 value = line.mid( position + 1, line.length() - position - 3 );
99 value = value.stripWhiteSpace();
100
101 // copy values in variables
102 if ( identifier == "MemTotal" )
103 {
104 total = value.toULong();
105 } else if ( identifier == "MemFree" )
106 {
107 memfree = value.toULong();
108 } else if ( identifier == "Buffers" )
109 {
110 buffers = value.toULong();
111 } else if ( identifier == "Cached" )
112 {
113 cached = value.toULong();
114 } else if ( identifier == "SwapCached" )
115 {
116 } else if ( identifier == "SwapTotal" )
117 {
118 swaptotal = value.toULong();
119 } else if ( identifier == "SwapFree" )
120 {
121 swapfree = value.toULong();
122 }
123 }
124
125 file.close();
126
127 // calculate values
128 used = total - memfree;
129 swapused = swaptotal - swapfree;
130 realUsed = total - ( buffers + cached + memfree );
131
132 // visualize values
133 totalMem->setText( tr( "Total Memory: %1 kB" ).arg( total ) );
134 data->clear();
135 data->addItem( tr("Used (%1 kB)").arg(realUsed), realUsed );
136 data->addItem( tr("Buffers (%1 kB)").arg(buffers), buffers );
137 data->addItem( tr("Cached (%1 kB)").arg(cached), cached );
138 data->addItem( tr("Free (%1 kB)").arg(memfree), memfree );
139
140 graph->hide();
141 graph->show();
142 legend->update();
143
144 if (swaptotal > 0)
145 {
146 swapMem->setText( tr( "Total Swap: %1 kB" ).arg( swaptotal ) );
147 swapdata->clear();
148 swapdata->addItem( tr("Used (%1 kB)").arg(swapused), swapused );
149 swapdata->addItem( tr("Free (%1 kB)").arg(swapfree), swapfree );
150
151 swapMem->show();
152 swapgraph->show();
153 swaplegend->show();
154
155 swapgraph->repaint( FALSE );
156 swaplegend->update();
157 }
158 else
159 {
160 swapMem->hide();
161 swapgraph->hide();
162 swaplegend->hide();
163 }
164 }
165}
diff --git a/noncore/applets/memoryapplet/memory.h b/noncore/applets/memoryapplet/memory.h
new file mode 100644
index 0000000..f655604
--- a/dev/null
+++ b/noncore/applets/memoryapplet/memory.h
@@ -0,0 +1,63 @@
1/**********************************************************************
2** Copyright (C) 2000 Trolltech AS. All rights reserved.
3**
4** This file is part of Qtopia Environment.
5**
6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file.
10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13**
14** See http://www.trolltech.com/gpl/ for GPL licensing information.
15**
16** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you.
18**
19**********************************************************************/
20
21#ifndef MEMORY_H
22#define MEMORY_H
23
24#include <qwidget.h>
25
26class GraphData;
27class Graph;
28class GraphLegend;
29class QLabel;
30
31class MemoryInfo : public QWidget
32{
33 Q_OBJECT
34public:
35 MemoryInfo( QWidget *parent = 0, const char *name = 0, WFlags f = 0 );
36 ~MemoryInfo();
37
38 unsigned long total;
39 unsigned long used;
40 unsigned long memfree;
41 unsigned long buffers;
42 unsigned long cached;
43 unsigned long realUsed;
44 unsigned long swaptotal;
45 unsigned long swapused;
46 unsigned long swapfree;
47
48private slots:
49 void updateData();
50
51private:
52 QLabel *totalMem;
53 GraphData *data;
54 Graph *graph;
55 GraphLegend *legend;
56
57 QLabel* swapMem;
58 GraphData *swapdata;
59 Graph *swapgraph;
60 GraphLegend *swaplegend;
61};
62
63#endif
diff --git a/noncore/applets/memoryapplet/memoryapplet.pro b/noncore/applets/memoryapplet/memoryapplet.pro
index 57bb1c9..1dfc02f 100644
--- a/noncore/applets/memoryapplet/memoryapplet.pro
+++ b/noncore/applets/memoryapplet/memoryapplet.pro
@@ -1,22 +1,22 @@
1TEMPLATE = lib 1TEMPLATE = lib
2CONFIG += qt plugin warn_on 2CONFIG += qt plugin warn_on
3HEADERS = ../../settings/sysinfo/graph.h \ 3HEADERS = graph.h \
4 ../../settings/sysinfo/load.h \ 4 load.h \
5 ../../settings/sysinfo/memory.h \ 5 memory.h \
6 memorymeter.h \ 6 memorymeter.h \
7 memorystatus.h \ 7 memorystatus.h \
8 swapfile.h 8 swapfile.h
9SOURCES = ../../settings/sysinfo/graph.cpp \ 9SOURCES = graph.cpp \
10 ../../settings/sysinfo/load.cpp \ 10 load.cpp \
11 ../../settings/sysinfo/memory.cpp \ 11 memory.cpp \
12 memorymeter.cpp \ 12 memorymeter.cpp \
13 memorystatus.cpp \ 13 memorystatus.cpp \
14 swapfile.cpp 14 swapfile.cpp
15TARGET = memoryapplet 15TARGET = memoryapplet
16DESTDIR = $(OPIEDIR)/plugins/applets 16DESTDIR = $(OPIEDIR)/plugins/applets
17INCLUDEPATH += $(OPIEDIR)/include 17INCLUDEPATH += $(OPIEDIR)/include
18DEPENDPATH += 18DEPENDPATH +=
19VERSION = 1.0.0 19VERSION = 1.0.1
20LIBS += -lqpe -lopiecore2 -lopieui2 20LIBS += -lqpe -lopiecore2 -lopieui2
21 21
22include( $(OPIEDIR)/include.pro ) 22include( $(OPIEDIR)/include.pro )
diff --git a/noncore/applets/memoryapplet/swapfile.cpp b/noncore/applets/memoryapplet/swapfile.cpp
index 96010c8..4609c13 100644
--- a/noncore/applets/memoryapplet/swapfile.cpp
+++ b/noncore/applets/memoryapplet/swapfile.cpp
@@ -1,439 +1,452 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2000 Trolltech AS. All rights reserved. 2** Copyright (C) 2000 Trolltech AS. All rights reserved.
3** 3**
4** This file is part of Qtopia Environment. 4** This file is part of Qtopia Environment.
5** 5**
6** This file may be distributed and/or modified under the terms of the 6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software 7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the 8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file. 9** packaging of this file.
10** 10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13** 13**
14** See http://www.trolltech.com/gpl/ for GPL licensing information. 14** See http://www.trolltech.com/gpl/ for GPL licensing information.
15** 15**
16** Contact info@trolltech.com if any conditions of this licensing are 16** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you. 17** not clear to you.
18** 18**
19**********************************************************************/ 19**********************************************************************/
20 20
21#include "swapfile.h" 21#include "swapfile.h"
22 22
23/* OPIE */ 23/* OPIE */
24#include <opie2/odebug.h> 24#include <opie2/odebug.h>
25#include <qpe/resource.h> 25#include <qpe/resource.h>
26using namespace Opie::Core; 26using namespace Opie::Core;
27 27
28/* QT */ 28/* QT */
29#include <qfile.h> 29#include <qfile.h>
30#include <qtextstream.h> 30#include <qtextstream.h>
31#include <qlabel.h> 31#include <qlabel.h>
32#include <qtimer.h> 32#include <qtimer.h>
33#include <qlayout.h> 33#include <qlayout.h>
34#include <qpushbutton.h> 34#include <qpushbutton.h>
35#include <qhbuttongroup.h> 35#include <qhbuttongroup.h>
36#include <qradiobutton.h> 36#include <qradiobutton.h>
37#include <qlineedit.h> 37#include <qlineedit.h>
38#include <qprogressbar.h> 38#include <qprogressbar.h>
39#include <qcombobox.h> 39#include <qcombobox.h>
40#include <qvgroupbox.h> 40#include <qvgroupbox.h>
41#include <qhbox.h> 41#include <qhbox.h>
42#include <qmessagebox.h> 42#include <qmessagebox.h>
43#include <qcopchannel_qws.h> 43#include <qcopchannel_qws.h>
44 44
45/* STD */ 45/* STD */
46#include <stdio.h> 46#include <stdio.h>
47#include <stdlib.h> 47#include <stdlib.h>
48#include <string.h> 48#include <string.h>
49#include <unistd.h> 49#include <unistd.h>
50#include <fcntl.h> 50#include <fcntl.h>
51#include <sys/vfs.h> 51#include <sys/vfs.h>
52#include <mntent.h> 52#include <mntent.h>
53#include <unistd.h> 53#include <unistd.h>
54#include <sys/types.h> 54#include <sys/types.h>
55 55
56Swapfile::Swapfile( QWidget *parent, const char *name, WFlags f ) 56Swapfile::Swapfile( QWidget *parent, const char *name, WFlags f )
57 : QWidget( parent, name, f ) 57 : QWidget( parent, name, f )
58{ 58{
59 // are we running as root? 59 // are we running as root?
60 isRoot = geteuid() == 0; 60 isRoot = geteuid() == 0;
61 61
62 QVBoxLayout* vb = new QVBoxLayout(this, 5); 62 QVBoxLayout* vb = new QVBoxLayout(this, 5);
63 63
64 QHButtonGroup* cfsdRBG = new QHButtonGroup(tr("Swapfile location"), this); 64 QHButtonGroup* cfsdRBG = new QHButtonGroup(tr("Swapfile location"), this);
65 cfsdRBG->setRadioButtonExclusive(true); 65 cfsdRBG->setRadioButtonExclusive(true);
66 vb->addWidget(cfsdRBG); 66 vb->addWidget(cfsdRBG);
67 67
68 ramRB = new QRadioButton(tr("RAM"), cfsdRBG); 68 ramRB = new QRadioButton(tr("RAM"), cfsdRBG);
69 cfRB = new QRadioButton(tr("CF Card"), cfsdRBG); 69 cfRB = new QRadioButton(tr("CF Card"), cfsdRBG);
70 sdRB = new QRadioButton(tr("SD Card"), cfsdRBG); 70 sdRB = new QRadioButton(tr("SD Card"), cfsdRBG);
71 71
72 QHBox *hb1 = new QHBox(this); 72 QHBox *hb1 = new QHBox(this);
73 hb1->setSpacing(5); 73 hb1->setSpacing(5);
74 74
75 swapPath1 = new QLineEdit(hb1); 75 swapPath1 = new QLineEdit(hb1);
76 swapPath1->setEnabled(false); 76 swapPath1->setEnabled(false);
77 77
78 QPushButton* swapOn = new QPushButton(tr(" On "), hb1); 78 QPushButton* swapOn = new QPushButton(tr(" On "), hb1);
79 QPushButton* swapOff = new QPushButton(tr(" Off "), hb1); 79 QPushButton* swapOff = new QPushButton(tr(" Off "), hb1);
80 vb->addWidget(hb1); 80 vb->addWidget(hb1);
81 81
82 QVGroupBox* box1 = new QVGroupBox(tr("Manage Swapfile"), this); 82 QVGroupBox* box1 = new QVGroupBox(tr("Manage Swapfile"), this);
83 vb->addWidget(box1); 83 vb->addWidget(box1);
84 84
85 QHBox *hb2 = new QHBox(box1); 85 QHBox *hb2 = new QHBox(box1);
86 hb2->setSpacing(5); 86 hb2->setSpacing(5);
87 QPushButton* mkSwap = new QPushButton(tr("Generate"), hb2); 87 QPushButton* mkSwap = new QPushButton(tr("Generate"), hb2);
88 QPushButton* rmSwap = new QPushButton(tr("Remove"), hb2); 88 QPushButton* rmSwap = new QPushButton(tr("Remove"), hb2);
89 89
90 QHBox *hb3 = new QHBox(box1); 90 QHBox *hb3 = new QHBox(box1);
91 hb3->setSpacing(5); 91 hb3->setSpacing(5);
92 swapSize = new QComboBox(hb3); 92 swapSize = new QComboBox(hb3);
93 swapSize->insertStringList(QStringList::split(",", tr("2 Mb,4 Mb,6 Mb,8 Mb"))); 93 swapSize->insertStringList(QStringList::split(",", tr("2 Mb,4 Mb,6 Mb,8 Mb,16 Mb,32 Mb,64 Mb")));
94 94
95 mkswapProgress = new QProgressBar(3, hb3); 95 mkswapProgress = new QProgressBar(3, hb3);
96 mkswapProgress->setCenterIndicator(true); 96 mkswapProgress->setCenterIndicator(true);
97 97
98 QHBox *hb4 = new QHBox(this); 98 QHBox *hb4 = new QHBox(this);
99 hb4->setSpacing(5); 99 hb4->setSpacing(5);
100 100
101 swapStatusIcon = new QLabel(hb4); 101 swapStatusIcon = new QLabel(hb4);
102 swapStatus = new QLabel("", hb4); 102 swapStatus = new QLabel("", hb4);
103 hb4->setStretchFactor(swapStatus, 99); 103 hb4->setStretchFactor(swapStatus, 99);
104 vb->addWidget(hb4); 104 vb->addWidget(hb4);
105 105
106 connect(swapOn, SIGNAL(clicked()), this, SLOT(swapon())); 106 connect(swapOn, SIGNAL(clicked()), this, SLOT(swapon()));
107 connect(swapOff, SIGNAL(clicked()), this, SLOT(swapoff())); 107 connect(swapOff, SIGNAL(clicked()), this, SLOT(swapoff()));
108 connect(cfRB, SIGNAL(clicked()), this, SLOT(cfsdchecked())); 108 connect(cfRB, SIGNAL(clicked()), this, SLOT(cfsdchecked()));
109 connect(sdRB, SIGNAL(clicked()), this, SLOT(cfsdchecked())); 109 connect(sdRB, SIGNAL(clicked()), this, SLOT(cfsdchecked()));
110 connect(ramRB, SIGNAL(clicked()), this, SLOT(cfsdchecked())); 110 connect(ramRB, SIGNAL(clicked()), this, SLOT(cfsdchecked()));
111 connect(mkSwap, SIGNAL(clicked()), this, SLOT(makeswapfile())); 111 connect(mkSwap, SIGNAL(clicked()), this, SLOT(makeswapfile()));
112 connect(rmSwap, SIGNAL(clicked()), this, SLOT(removeswapfile())); 112 connect(rmSwap, SIGNAL(clicked()), this, SLOT(removeswapfile()));
113 113
114 cfRB->setEnabled(FALSE); 114 cfRB->setEnabled(FALSE);
115 sdRB->setEnabled(FALSE); 115 sdRB->setEnabled(FALSE);
116 116
117 QCopChannel *pcmciaChannel = new QCopChannel("QPE/Card", this); 117 QCopChannel *pcmciaChannel = new QCopChannel("QPE/Card", this);
118 connect(pcmciaChannel, SIGNAL(received(const QCString&,const QByteArray&)), this, SLOT(cardnotify(const QCString&,const QByteArray&))); 118 connect(pcmciaChannel, SIGNAL(received(const QCString&,const QByteArray&)), this, SLOT(cardnotify(const QCString&,const QByteArray&)));
119 QCopChannel *sdChannel = new QCopChannel("QPE/Card", this); 119 QCopChannel *sdChannel = new QCopChannel("QPE/Card", this);
120 connect(sdChannel, SIGNAL(received(const QCString&,const QByteArray&)), this, SLOT(cardnotify(const QCString&,const QByteArray&))); 120 connect(sdChannel, SIGNAL(received(const QCString&,const QByteArray&)), this, SLOT(cardnotify(const QCString&,const QByteArray&)));
121 121
122 cardInPcmcia0 = FALSE; 122 cardInPcmcia0 = FALSE;
123 cardInPcmcia1 = FALSE; 123 cardInPcmcia1 = FALSE;
124 cardInSd = FALSE; 124 cardInSd = FALSE;
125 125
126 Swapfile::status(); 126 Swapfile::status();
127 Swapfile::getStatusPcmcia(); 127 Swapfile::getStatusPcmcia();
128 Swapfile::getStatusSd(); 128 Swapfile::getStatusSd();
129} 129}
130 130
131int Swapfile::exec(const QString& arg) 131int Swapfile::exec(const QString& arg)
132{ 132{
133 return system((!isRoot ? "sudo " : "") + arg); 133 return system((!isRoot ? "sudo " : "") + arg);
134} 134}
135 135
136 136
137Swapfile::~Swapfile() 137Swapfile::~Swapfile()
138{ 138{
139} 139}
140 140
141void Swapfile::cardnotify(const QCString & msg, const QByteArray &) 141void Swapfile::cardnotify(const QCString & msg, const QByteArray &)
142{ 142{
143 if (msg == "stabChanged()") 143 if (msg == "stabChanged()")
144 { 144 {
145 getStatusPcmcia(); 145 getStatusPcmcia();
146 } 146 }
147 else if (msg == "mtabChanged()") 147 else if (msg == "mtabChanged()")
148 { 148 {
149 getStatusSd(); 149 getStatusSd();
150 } 150 }
151} 151}
152 152
153void Swapfile::getStatusPcmcia() 153void Swapfile::getStatusPcmcia()
154{ 154{
155 155
156 bool cardWas0 = cardInPcmcia0;// remember last state 156 bool cardWas0 = cardInPcmcia0;// remember last state
157 bool cardWas1 = cardInPcmcia1; 157 bool cardWas1 = cardInPcmcia1;
158 158
159 QString fileName; 159 QString fileName;
160 160
161 // one of these 3 files should exist 161 // one of these 3 files should exist
162 if (QFile::exists("/var/run/stab")) { 162 if (QFile::exists("/var/run/stab")) {
163 fileName = "/var/run/stab"; 163 fileName = "/var/run/stab";
164 } else if (QFile::exists("/var/state/pcmcia/stab")) { 164 } else if (QFile::exists("/var/state/pcmcia/stab")) {
165 fileName = "/var/state/pcmcia/stab"; 165 fileName = "/var/state/pcmcia/stab";
166 } else { 166 } else {
167 fileName = "/var/lib/pcmcia/stab"; 167 fileName = "/var/lib/pcmcia/stab";
168 } 168 }
169 169
170 QFile f(fileName); 170 QFile f(fileName);
171 171
172 if (f.open(IO_ReadOnly)) { 172 if (f.open(IO_ReadOnly)) {
173 QStringList list; 173 QStringList list;
174 QTextStream stream(&f); 174 QTextStream stream(&f);
175 QString streamIn; 175 QString streamIn;
176 streamIn = stream.read(); 176 streamIn = stream.read();
177 list = QStringList::split("\n", streamIn); 177 list = QStringList::split("\n", streamIn);
178 for (QStringList::Iterator line = list.begin(); line != list.end(); 178 for (QStringList::Iterator line = list.begin(); line != list.end();
179 line++) { 179 line++) {
180 if ((*line).startsWith("Socket 0:")) { 180 if ((*line).startsWith("Socket 0:")) {
181 if ((*line).startsWith("Socket 0: empty") && cardInPcmcia0) { 181 if ((*line).startsWith("Socket 0: empty") && cardInPcmcia0) {
182 cardInPcmcia0 = FALSE; 182 cardInPcmcia0 = FALSE;
183 } else if (!(*line).startsWith("Socket 0: empty") 183 } else if (!(*line).startsWith("Socket 0: empty")
184 && !cardInPcmcia0) { 184 && !cardInPcmcia0) {
185 cardInPcmcia0 = TRUE; 185 cardInPcmcia0 = TRUE;
186 } 186 }
187 } else if ((*line).startsWith("Socket 1:")) { 187 } else if ((*line).startsWith("Socket 1:")) {
188 if ((*line).startsWith("Socket 1: empty") && cardInPcmcia1) { 188 if ((*line).startsWith("Socket 1: empty") && cardInPcmcia1) {
189 cardInPcmcia1 = FALSE; 189 cardInPcmcia1 = FALSE;
190 } else if (!(*line).startsWith("Socket 1: empty") 190 } else if (!(*line).startsWith("Socket 1: empty")
191 && !cardInPcmcia1) { 191 && !cardInPcmcia1) {
192 cardInPcmcia1 = TRUE; 192 cardInPcmcia1 = TRUE;
193 } 193 }
194 } 194 }
195 } 195 }
196 f.close(); 196 f.close();
197 197
198 if (cardWas0 != cardInPcmcia0 || cardWas1 != cardInPcmcia1) { 198 if (cardWas0 != cardInPcmcia0 || cardWas1 != cardInPcmcia1) {
199 QString text = QString::null; 199 QString text = QString::null;
200 QString what = QString::null; 200 QString what = QString::null;
201 if (cardWas0 != cardInPcmcia0) { 201 if (cardWas0 != cardInPcmcia0) {
202 if (cardInPcmcia0) { 202 if (cardInPcmcia0) {
203 cfRB->setEnabled(TRUE); 203 cfRB->setEnabled(TRUE);
204 } else { 204 } else {
205 cfRB->setChecked(FALSE); 205 cfRB->setChecked(FALSE);
206 cfRB->setEnabled(FALSE); 206 cfRB->setEnabled(FALSE);
207 } 207 }
208 } 208 }
209 209
210 if (cardWas1 != cardInPcmcia1) { 210 if (cardWas1 != cardInPcmcia1) {
211 if (cardInPcmcia1) { 211 if (cardInPcmcia1) {
212 cfRB->setEnabled(TRUE); 212 cfRB->setEnabled(TRUE);
213 } else { 213 } else {
214 cfRB->setChecked(FALSE); 214 cfRB->setChecked(FALSE);
215 cfRB->setEnabled(FALSE); 215 cfRB->setEnabled(FALSE);
216 } 216 }
217 } 217 }
218 } 218 }
219 } else { 219 } else {
220 // no file found 220 // no file found
221 odebug << "no file found" << oendl; 221 odebug << "no file found" << oendl;
222 cardInPcmcia0 = FALSE; 222 cardInPcmcia0 = FALSE;
223 cardInPcmcia1 = FALSE; 223 cardInPcmcia1 = FALSE;
224 } 224 }
225 Swapfile::cfsdchecked(); 225 Swapfile::cfsdchecked();
226} 226}
227 227
228 228
229void Swapfile::getStatusSd() 229void Swapfile::getStatusSd()
230{ 230{
231 231
232 bool cardWas = cardInSd;// remember last state 232 bool cardWas = cardInSd;// remember last state
233 cardInSd = FALSE; 233 cardInSd = FALSE;
234 234
235#if defined(_OS_LINUX_) || defined(Q_OS_LINUX) 235#if defined(_OS_LINUX_) || defined(Q_OS_LINUX)
236 struct mntent *me; 236 struct mntent *me;
237 FILE *mntfp = setmntent("/etc/mtab", "r"); 237 FILE *mntfp = setmntent("/etc/mtab", "r");
238 238
239 if (mntfp) { 239 if (mntfp) {
240 while ((me = getmntent(mntfp)) != 0) { 240 while ((me = getmntent(mntfp)) != 0) {
241 QString fs = me->mnt_fsname; 241 QString fs = me->mnt_fsname;
242 if (fs.left(14) == "/dev/mmc/part1" || fs.left(7) == "/dev/sd" 242 if (fs.left(14) == "/dev/mmc/part1" || fs.left(7) == "/dev/sd"
243 || fs.left(9) == "/dev/mmcd") { 243 || fs.left(9) == "/dev/mmcd") {
244 cardInSd = TRUE; 244 cardInSd = TRUE;
245 show(); 245 show();
246 } 246 }
247 } 247 }
248 endmntent(mntfp); 248 endmntent(mntfp);
249 } 249 }
250 250
251 if (cardWas != cardInSd) { 251 if (cardWas != cardInSd) {
252 QString text = QString::null; 252 QString text = QString::null;
253 QString what = QString::null; 253 QString what = QString::null;
254 if (cardInSd) { 254 if (cardInSd) {
255 sdRB->setEnabled(TRUE); 255 sdRB->setEnabled(TRUE);
256 } else { 256 } else {
257 sdRB->setChecked(FALSE); 257 sdRB->setChecked(FALSE);
258 sdRB->setEnabled(FALSE); 258 sdRB->setEnabled(FALSE);
259 } 259 }
260 } 260 }
261#else 261#else
262#error "Not on Linux" 262#error "Not on Linux"
263#endif 263#endif
264 Swapfile::cfsdchecked(); 264 Swapfile::cfsdchecked();
265} 265}
266 266
267int rc=0; 267int rc=0;
268 268
269void Swapfile::swapon() 269void Swapfile::swapon()
270{ 270{
271 char swapcmd[128] ="swapon "; 271 char swapcmd[128] ="swapon ";
272 Swapfile::cfsdchecked(); 272 Swapfile::cfsdchecked();
273 strcat(swapcmd,swapPath1->text()); 273 strcat(swapcmd,swapPath1->text());
274 char *runcmd = swapcmd; 274 char *runcmd = swapcmd;
275 rc = exec(QString("%1").arg(runcmd)); 275 rc = exec(QString("%1").arg(runcmd));
276 if (rc != 0) { 276 if (rc != 0) {
277 setStatusMessage("Failed to attach swapfile.", true); 277 setStatusMessage("Failed to attach swapfile.", true);
278 } 278 }
279 else { 279 else {
280 /* QMessageBox::information(this, "Information", "Swapfile is active!"); */ 280 /* QMessageBox::information(this, "Information", "Swapfile is active!"); */
281 setStatusMessage("Swapfile activated."); 281 setStatusMessage("Swapfile activated.");
282 } 282 }
283 Swapfile::status(); 283 Swapfile::status();
284} 284}
285 285
286 286
287void Swapfile::setStatusMessage(const QString& text, bool error /* = false */) 287void Swapfile::setStatusMessage(const QString& text, bool error /* = false */)
288{ 288{
289 swapStatus->setText("<b>" + text + "</b>"); 289 swapStatus->setText("<b>" + text + "</b>");
290 swapStatusIcon->setPixmap(Resource::loadPixmap(error ? "close" : "done")); 290 swapStatusIcon->setPixmap(Resource::loadPixmap(error ? "close" : "done"));
291} 291}
292 292
293 293
294void Swapfile::swapoff() 294void Swapfile::swapoff()
295{ 295{
296 char swapcmd[128] ="swapoff "; 296 char swapcmd[128] ="swapoff ";
297 if (Swapfile::cfRB->isChecked() == TRUE) 297 if (Swapfile::cfRB->isChecked() == TRUE)
298 Swapfile::cfsdchecked(); 298 Swapfile::cfsdchecked();
299 strcat(swapcmd,swapPath1->text()); 299 strcat(swapcmd,swapPath1->text());
300 char *runcmd = swapcmd; 300 char *runcmd = swapcmd;
301 rc = exec(QString("%1").arg(runcmd)); 301 rc = exec(QString("%1").arg(runcmd));
302 if (rc != 0) { 302 if (rc != 0) {
303 setStatusMessage(tr("Failed to detach swapfile."), true); 303 setStatusMessage(tr("Failed to detach swapfile."), true);
304 } 304 }
305 else { 305 else {
306 /* QMessageBox::information(this, "Information", "Swapfile is inactive!"); */ 306 /* QMessageBox::information(this, "Information", "Swapfile is inactive!"); */
307 setStatusMessage(tr("Swapfile deactivated.")); 307 setStatusMessage(tr("Swapfile deactivated."));
308 /* Swapfile::swapPath->clear();*/ 308 /* Swapfile::swapPath->clear();*/
309 } 309 }
310 Swapfile::status(); 310 Swapfile::status();
311} 311}
312 312
313void Swapfile::cfsdchecked() 313void Swapfile::cfsdchecked()
314{ 314{
315 /* Swapfile::swapPath->clear();*/ 315 /* Swapfile::swapPath->clear();*/
316 Swapfile::swapPath1->clear(); 316 Swapfile::swapPath1->clear();
317 if (Swapfile::ramRB->isChecked() == TRUE) 317 if (Swapfile::ramRB->isChecked() == TRUE)
318 { 318 {
319 Swapfile::swapPath1->insert("/home/swapfile"); 319 Swapfile::swapPath1->insert("/home/swapfile");
320 } 320 }
321 if (Swapfile::sdRB->isChecked() == TRUE) 321 if (Swapfile::sdRB->isChecked() == TRUE)
322 { 322 {
323 Swapfile::swapPath1->insert("/mnt/card/swapfile"); 323 Swapfile::swapPath1->insert("/mnt/card/swapfile");
324 } 324 }
325 if (Swapfile::cfRB->isChecked() == TRUE) 325 if (Swapfile::cfRB->isChecked() == TRUE)
326 { 326 {
327 Swapfile::swapPath1->insert("/mnt/cf/swapfile"); 327 Swapfile::swapPath1->insert("/mnt/cf/swapfile");
328 } 328 }
329 /*Swapfile::swapPath->insert(Swapfile::swapPath1->text());*/ 329 /*Swapfile::swapPath->insert(Swapfile::swapPath1->text());*/
330} 330}
331 331
332void Swapfile::makeswapfile() 332void Swapfile::makeswapfile()
333{ 333{
334 int i = swapSize->currentItem(); 334 int i = swapSize->currentItem();
335 335
336 mkswapProgress->setProgress(1); 336 mkswapProgress->setProgress(1);
337 switch ( i ) { 337 switch ( i ) {
338 case 0: rc=exec(QString("dd if=/dev/zero of=%1 bs=1k count=2048").arg(swapPath1->text())); 338 case 0: rc=exec(QString("dd if=/dev/zero of=%1 bs=1k count=2048").arg(swapPath1->text()));
339 break; 339 break;
340 case 1: rc=exec(QString("dd if=/dev/zero of=%1 bs=1k count=4096").arg(swapPath1->text())); 340 case 1: rc=exec(QString("dd if=/dev/zero of=%1 bs=1k count=4096").arg(swapPath1->text()));
341 break; 341 break;
342 case 2: rc=exec(QString("dd if=/dev/zero of=%1 bs=1k count=6144").arg(swapPath1->text())); 342 case 2: rc=exec(QString("dd if=/dev/zero of=%1 bs=1k count=6144").arg(swapPath1->text()));
343 break; 343 break;
344 case 3: rc=exec(QString("dd if=/dev/zero of=%1 bs=1k count=8192").arg(swapPath1->text())); 344 case 3: rc=exec(QString("dd if=/dev/zero of=%1 bs=1k count=8192").arg(swapPath1->text()));
345 break; 345 break;
346 case 4: rc=exec(QString("dd if=/dev/zero of=%1 bs=1k count=16384").arg(swapPath1->text()));
347 break;
348 case 5: rc=exec(QString("dd if=/dev/zero of=%1 bs=1k count=32768").arg(swapPath1->text()));
349 break;
350 case 6: rc=exec(QString("dd if=/dev/zero of=%1 bs=1k count=65536").arg(swapPath1->text()));
351 break;
352
346 } 353 }
347 if (rc != 0) { 354 if (rc != 0) {
348 setStatusMessage(tr("Failed to create swapfile."), true); 355 setStatusMessage(tr("Failed to create swapfile."), true);
349 } 356 }
350 357
351 mkswapProgress->setProgress(2); 358 mkswapProgress->setProgress(2);
352 rc=exec(QString("mkswap %1").arg(swapPath1->text())); 359 rc=exec(QString("mkswap %1").arg(swapPath1->text()));
353 if (rc != 0) { 360 if (rc != 0) {
354 setStatusMessage(tr("Failed to initialize swapfile."), true); 361 setStatusMessage(tr("Failed to initialize swapfile."), true);
355 } 362 }
356 mkswapProgress->setProgress(3); 363 mkswapProgress->setProgress(3);
357 mkswapProgress->reset(); 364 mkswapProgress->reset();
358 setStatusMessage(tr("Swapfile created.")); 365 setStatusMessage(tr("Swapfile created."));
359} 366}
360 367
361void Swapfile::removeswapfile() 368void Swapfile::removeswapfile()
362{ 369{
363 exec(QString("swapoff %1").arg(swapPath1->text())); 370 exec(QString("swapoff %1").arg(swapPath1->text()));
364 rc=exec(QString("rm -rf %1").arg(swapPath1->text())); 371 rc=exec(QString("rm -rf %1").arg(swapPath1->text()));
365 if (rc != 0) { 372 if (rc != 0) {
366 setStatusMessage(tr("Failed to remove swapfile."), true); 373 setStatusMessage(tr("Failed to remove swapfile."), true);
367 } 374 }
368 Swapfile::status(); 375 Swapfile::status();
369 Swapfile::cfsdchecked(); 376 Swapfile::cfsdchecked();
370 setStatusMessage(tr("Swapfile removed.")); 377 setStatusMessage(tr("Swapfile removed."));
371} 378}
372 379
373void Swapfile::status() 380void Swapfile::status()
374{ 381{
375 FILE *fp; 382 FILE *fp;
376 char buffer[128], swapfile[128], temp[128]; 383 char buffer[128], swapfile[128], temp[128];
377 int swapsize=2000, i=1; 384 int swapsize=2000, i=1;
378 385
379 fp=fopen("/proc/swaps", "r"); 386 fp=fopen("/proc/swaps", "r");
380 while ( (fgets(buffer,128,fp)) != NULL ) { 387 while ( (fgets(buffer,128,fp)) != NULL ) {
381 sscanf(buffer, "%s %s %d %s %s\n", swapfile, temp, &swapsize, temp, temp); 388 sscanf(buffer, "%s %s %d %s %s\n", swapfile, temp, &swapsize, temp, temp);
382 } 389 }
383 fclose(fp); 390 fclose(fp);
384 391
385 ramRB->setChecked(FALSE); 392 ramRB->setChecked(FALSE);
386 cfRB->setChecked(FALSE); 393 cfRB->setChecked(FALSE);
387 sdRB->setChecked(FALSE); 394 sdRB->setChecked(FALSE);
388 395
389 i=strcmp(swapfile, "/home/swapfile"); 396 i=strcmp(swapfile, "/home/swapfile");
390 if ( i == 0 ) { 397 if ( i == 0 ) {
391 ramRB->setChecked(TRUE); 398 ramRB->setChecked(TRUE);
392 /* QMessageBox::information(this, "Information", "Swapfile is active!"); */ 399 /* QMessageBox::information(this, "Information", "Swapfile is active!"); */
393 setStatusMessage(tr("Swapfile activated.")); 400 setStatusMessage(tr("Swapfile activated."));
394 } 401 }
395 i=strcmp(swapfile, "/usr/mnt.rom/cf/swapfile"); 402 i=strcmp(swapfile, "/usr/mnt.rom/cf/swapfile");
396 if ( i == 0 ) { 403 if ( i == 0 ) {
397 cfRB->setChecked(TRUE); 404 cfRB->setChecked(TRUE);
398 /* QMessageBox::information(this, "Information", "Swapfile is active!"); */ 405 /* QMessageBox::information(this, "Information", "Swapfile is active!"); */
399 setStatusMessage(tr("Swapfile activated.")); 406 setStatusMessage(tr("Swapfile activated."));
400 } 407 }
401 i=strcmp(swapfile, "/mnt/cf/swapfile"); 408 i=strcmp(swapfile, "/mnt/cf/swapfile");
402 if ( i == 0 ) { 409 if ( i == 0 ) {
403 cfRB->setChecked(TRUE); 410 cfRB->setChecked(TRUE);
404 /* QMessageBox::information(this, "Information", "Swapfile is active!"); */ 411 /* QMessageBox::information(this, "Information", "Swapfile is active!"); */
405 setStatusMessage(tr("Swapfile activated.")); 412 setStatusMessage(tr("Swapfile activated."));
406 } 413 }
407 i=strcmp(swapfile, "/usr/mnt.rom/card/swapfile"); 414 i=strcmp(swapfile, "/usr/mnt.rom/card/swapfile");
408 if ( i == 0 ) { 415 if ( i == 0 ) {
409 sdRB->setChecked(TRUE); 416 sdRB->setChecked(TRUE);
410 /* QMessageBox::information(this, "Information", "Swapfile is active!"); */ 417 /* QMessageBox::information(this, "Information", "Swapfile is active!"); */
411 setStatusMessage(tr("Swapfile activated.")); 418 setStatusMessage(tr("Swapfile activated."));
412 } 419 }
413 i=strcmp(swapfile, "/mnt/card/swapfile"); 420 i=strcmp(swapfile, "/mnt/card/swapfile");
414 if ( i == 0 ) { 421 if ( i == 0 ) {
415 sdRB->setChecked(TRUE); 422 sdRB->setChecked(TRUE);
416 /* QMessageBox::information(this, "Information", "Swapfile is active!"); */ 423 /* QMessageBox::information(this, "Information", "Swapfile is active!"); */
417 setStatusMessage(tr("Swapfile activated.")); 424 setStatusMessage(tr("Swapfile activated."));
418 } 425 }
419 426
420 Swapfile::cfsdchecked(); 427 Swapfile::cfsdchecked();
421 428
422 429
423 swapsize /=1000; 430 swapsize /=1000;
424 431
425 switch ( swapsize ) { 432 switch ( swapsize ) {
426 case 2: swapSize->setCurrentItem(0); 433 case 2: swapSize->setCurrentItem(0);
427 break; 434 break;
428 case 4: swapSize->setCurrentItem(1); 435 case 4: swapSize->setCurrentItem(1);
429 break; 436 break;
430 case 6: swapSize->setCurrentItem(2); 437 case 6: swapSize->setCurrentItem(2);
431 break; 438 break;
432 case 8: swapSize->setCurrentItem(3); 439 case 8: swapSize->setCurrentItem(3);
433 break; 440 break;
441 case 16: swapSize->setCurrentItem(4);
442 break;
443 case 32: swapSize->setCurrentItem(5);
444 break;
445 case 64: swapSize->setCurrentItem(6);
446 break;
434 } 447 }
435 448
436 449
437} 450}
438 451
439 452