author | drw <drw> | 2003-03-27 01:52:50 (UTC) |
---|---|---|
committer | drw <drw> | 2003-03-27 01:52:50 (UTC) |
commit | 0fc0190f424cf7e05f82a5c506db74c1e7f98e3b (patch) (unidiff) | |
tree | b74eaef3196d6a29163e81ddbf7e7ed60486cc14 /noncore/settings/sysinfo/storage.cpp | |
parent | 2196cc8e860a470796fdff12a1690818644d5a43 (diff) | |
download | opie-0fc0190f424cf7e05f82a5c506db74c1e7f98e3b.zip opie-0fc0190f424cf7e05f82a5c506db74c1e7f98e3b.tar.gz opie-0fc0190f424cf7e05f82a5c506db74c1e7f98e3b.tar.bz2 |
Use libqpe's StorageInfo class for storage tab. This 1. reduces executable size by ~10% and 2. should now recognize MMC cards on iPaq's (can't verify myself, let me know if it doesn't work). Also added QScrollView on version tab so all info is visible when screen is landscape or input method is visible.
Diffstat (limited to 'noncore/settings/sysinfo/storage.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r-- | noncore/settings/sysinfo/storage.cpp | 198 |
1 files changed, 61 insertions, 137 deletions
diff --git a/noncore/settings/sysinfo/storage.cpp b/noncore/settings/sysinfo/storage.cpp index eb157ef..c4474d5 100644 --- a/noncore/settings/sysinfo/storage.cpp +++ b/noncore/settings/sysinfo/storage.cpp | |||
@@ -18,6 +18,9 @@ | |||
18 | ** | 18 | ** |
19 | **********************************************************************/ | 19 | **********************************************************************/ |
20 | // additions copyright 2002 by L.J. Potter | 20 | // additions copyright 2002 by L.J. Potter |
21 | |||
22 | #include <qpe/storage.h> | ||
23 | |||
21 | #include <qlabel.h> | 24 | #include <qlabel.h> |
22 | #include <qlayout.h> | 25 | #include <qlayout.h> |
23 | #include <qscrollview.h> | 26 | #include <qscrollview.h> |
@@ -33,137 +36,76 @@ | |||
33 | #include <mntent.h> | 36 | #include <mntent.h> |
34 | #endif | 37 | #endif |
35 | 38 | ||
36 | StorageInfo::StorageInfo( QWidget *parent, const char *name ) | 39 | FileSysInfo::FileSysInfo( QWidget *parent, const char *name ) |
37 | : QWidget( parent, name ) | 40 | : QWidget( parent, name ) |
38 | { | 41 | { |
39 | QVBoxLayout *tmpvb = new QVBoxLayout( this ); | 42 | QVBoxLayout *tmpvb = new QVBoxLayout( this ); |
40 | QScrollView *sv = new QScrollView( this ); | 43 | QScrollView *sv = new QScrollView( this ); |
41 | tmpvb->addWidget( sv, 0, 0 ); | 44 | tmpvb->addWidget( sv, 0, 0 ); |
42 | sv->setResizePolicy( QScrollView::AutoOneFit ); | 45 | sv->setResizePolicy( QScrollView::AutoOneFit ); |
43 | sv->setFrameStyle( QFrame::NoFrame ); | 46 | sv->setFrameStyle( QFrame::NoFrame ); |
44 | container = new QWidget( sv->viewport() ); | 47 | container = new QWidget( sv->viewport() ); |
45 | sv->addChild( container ); | 48 | sv->addChild( container ); |
46 | vb = 0x0; | 49 | vb = 0x0; |
47 | 50 | ||
48 | disks.setAutoDelete(TRUE); | 51 | storage = new StorageInfo( this ); |
52 | connect( storage, SIGNAL( disksChanged() ), this, SLOT( disksChanged() ) ); | ||
53 | |||
49 | lines.setAutoDelete(TRUE); | 54 | lines.setAutoDelete(TRUE); |
55 | |||
56 | rebuildDisks = TRUE; | ||
50 | updateMounts(); | 57 | updateMounts(); |
51 | startTimer( 5000 ); | 58 | startTimer( 5000 ); |
52 | } | 59 | } |
53 | 60 | ||
54 | void StorageInfo::timerEvent(QTimerEvent*) | 61 | void FileSysInfo::timerEvent(QTimerEvent*) |
55 | { | 62 | { |
56 | updateMounts(); | 63 | updateMounts(); |
57 | } | 64 | } |
58 | 65 | ||
59 | static bool isCF(const QString& m) | 66 | void FileSysInfo::updateMounts() |
60 | { | ||
61 | FILE* f = fopen("/var/run/stab", "r"); | ||
62 | if (!f) f = fopen("/var/state/pcmcia/stab", "r"); | ||
63 | if (!f) f = fopen("/var/lib/pcmcia/stab", "r"); | ||
64 | if ( f ) { | ||
65 | char line[1024]; | ||
66 | char devtype[80]; | ||
67 | char devname[80]; | ||
68 | while ( fgets( line, 1024, f ) ) { | ||
69 | // 0 ide ide-cs 0 hda 3 0 | ||
70 | if ( sscanf(line,"%*d %s %*s %*s %s", devtype, devname )==2 ) { | ||
71 | if ( QString(devtype) == "ide" && m.find(devname)>0 ) { | ||
72 | fclose(f); | ||
73 | return TRUE; | ||
74 | } | ||
75 | } | ||
76 | } | ||
77 | fclose(f); | ||
78 | } | ||
79 | return FALSE; | ||
80 | } | ||
81 | |||
82 | void StorageInfo::updateMounts() | ||
83 | { | 67 | { |
84 | #if defined(_OS_LINUX_) || defined(Q_OS_LINUX) | 68 | storage->update(); |
85 | struct mntent *me; | 69 | |
86 | FILE *mntfp = setmntent( "/etc/mtab", "r" ); | 70 | if ( rebuildDisks ) |
87 | QStringList curdisks; | 71 | { |
88 | QStringList curfs; | 72 | // Cannot auto delete QDict<MountInfo> disks because it seems to delete |
89 | QStringList mountList; | 73 | // the filesystem object as well causing a segfault |
90 | QStringList fsT; | 74 | MountInfo *mi; |
91 | bool rebuild = FALSE; | 75 | for ( QDictIterator<MountInfo> delit(disks); delit.current(); ++delit ) |
92 | int n=0; | 76 | { |
93 | if ( mntfp ) { | 77 | mi = delit.current(); |
94 | while ( (me = getmntent( mntfp )) != 0 ) { | 78 | mi->fs = 0x0; |
95 | QString fs = me->mnt_fsname; | 79 | delete mi; |
96 | if ( fs.left(7)=="/dev/hd" || fs.left(7)=="/dev/sd" | ||
97 | || fs.left(8)=="/dev/mtd" || fs.left(9) == "/dev/mmcd" | ||
98 | || fs.left(9) == "/dev/root" || fs.left(5) == "/ramfs" | ||
99 | || fs.left(5) == "tmpfs" ) { | ||
100 | n++; | ||
101 | curdisks.append(fs); | ||
102 | QString d = me->mnt_dir; | ||
103 | curfs.append(d); | ||
104 | QString mount = me->mnt_dir; | ||
105 | mountList.append(mount); | ||
106 | QString t = me->mnt_type; | ||
107 | fsT.append(t); | ||
108 | if ( !disks.find(d) ) | ||
109 | rebuild = TRUE; | ||
110 | } | ||
111 | } | 80 | } |
112 | endmntent( mntfp ); | ||
113 | } | ||
114 | if ( rebuild || n != (int)disks.count() ) { | ||
115 | disks.clear(); | 81 | disks.clear(); |
116 | lines.clear(); | 82 | lines.clear(); |
83 | |||
117 | delete vb; | 84 | delete vb; |
118 | vb = new QVBoxLayout( container/*, n > 3 ? 1 : 5*/ ); | 85 | vb = new QVBoxLayout( container/*, n > 3 ? 1 : 5*/ ); |
119 | bool frst=TRUE; | ||
120 | QStringList::ConstIterator it = curdisks.begin(); | ||
121 | QStringList::ConstIterator fsit = curfs.begin(); | ||
122 | QStringList::ConstIterator fsmount = mountList.begin(); | ||
123 | QStringList::ConstIterator fsTit = fsT.begin(); | ||
124 | 86 | ||
125 | for (; it!=curdisks.end(); ++it, ++fsit) { | 87 | bool frst=TRUE; |
126 | if ( !frst ) { | 88 | |
89 | FileSystem *fs; | ||
90 | for ( QListIterator<FileSystem> it(storage->fileSystems()); it.current(); ++it ) | ||
91 | { | ||
92 | fs = it.current(); | ||
93 | |||
94 | if ( !frst ) | ||
95 | { | ||
127 | QFrame *f = new QFrame( container ); | 96 | QFrame *f = new QFrame( container ); |
128 | vb->addWidget(f); | 97 | vb->addWidget(f); |
129 | f->setFrameStyle( QFrame::HLine | QFrame::Sunken ); | 98 | f->setFrameStyle( QFrame::HLine | QFrame::Sunken ); |
130 | lines.append(f); | 99 | lines.append(f); |
131 | f->show(); | 100 | f->show(); |
132 | } frst=FALSE; | 101 | } |
133 | QString humanname=*it; | 102 | frst = FALSE; |
134 | if ( isCF(humanname) ) | 103 | |
135 | humanname = tr( "CF Card: " ); | 104 | MountInfo *mi = new MountInfo( fs, container ); |
136 | else if ( humanname == "/dev/hda1" ) | 105 | vb->addWidget( mi ); |
137 | humanname = tr( "Hard Disk " ); | 106 | disks.insert( fs->path(), mi ); |
138 | |||
139 | else if ( humanname.left(9) == "/dev/mmcd" ) | ||
140 | humanname = tr( "SD Card " ); | ||
141 | |||
142 | else if ( humanname.left(7) == "/dev/hd" ) | ||
143 | humanname = tr( "Hard Disk /dev/hd " ); | ||
144 | |||
145 | else if ( humanname.left(7) == "/dev/sd" ) | ||
146 | humanname = tr( "SCSI Hard Disk /dev/sd " ); | ||
147 | |||
148 | else if ( humanname == "/dev/mtdblock1" | ||
149 | || humanname.left(13) == "/dev/mtdblock" | ||
150 | || humanname.left(9) == "/dev/root") | ||
151 | humanname = tr( "Int. Storage " ); | ||
152 | |||
153 | else if ( humanname.left(5) == "tmpfs" ) | ||
154 | humanname = tr( "RAM disk" ); | ||
155 | // etc. | ||
156 | humanname.append( *fsmount ); | ||
157 | humanname.append( " " ); | ||
158 | humanname.append( *fsTit ); | ||
159 | humanname.append( " " ); | ||
160 | |||
161 | MountInfo* mi = new MountInfo( *fsit, humanname, container ); | ||
162 | vb->addWidget(mi); | ||
163 | disks.insert(*fsit,mi); | ||
164 | mi->show(); | 107 | mi->show(); |
165 | fsmount++;fsTit++; | 108 | QString tempstr = fs->name().left( 2 ); |
166 | QString tempstr = humanname.left( 2 ); | ||
167 | if ( tempstr == tr( "CF" ) ) | 109 | if ( tempstr == tr( "CF" ) ) |
168 | QWhatsThis::add( mi, tr( "This graph represents how much memory is currently used on this Compact Flash memory card." ) ); | 110 | QWhatsThis::add( mi, tr( "This graph represents how much memory is currently used on this Compact Flash memory card." ) ); |
169 | else if ( tempstr == tr( "Ha" ) ) | 111 | else if ( tempstr == tr( "Ha" ) ) |
@@ -178,24 +120,32 @@ void StorageInfo::updateMounts() | |||
178 | QWhatsThis::add( mi, tr( "This graph represents how much memory is currently used of the temporary RAM disk." ) ); | 120 | QWhatsThis::add( mi, tr( "This graph represents how much memory is currently used of the temporary RAM disk." ) ); |
179 | } | 121 | } |
180 | vb->addStretch(); | 122 | vb->addStretch(); |
181 | } else { | 123 | } |
182 | // just update them | 124 | else |
125 | { | ||
183 | for (QDictIterator<MountInfo> i(disks); i.current(); ++i) | 126 | for (QDictIterator<MountInfo> i(disks); i.current(); ++i) |
184 | i.current()->updateData(); | 127 | i.current()->updateData(); |
185 | } | 128 | } |
186 | #endif | 129 | |
130 | rebuildDisks = FALSE; | ||
187 | } | 131 | } |
188 | 132 | ||
133 | void FileSysInfo::disksChanged() | ||
134 | { | ||
135 | rebuildDisks = TRUE; | ||
136 | } | ||
189 | 137 | ||
190 | MountInfo::MountInfo( const QString &path, const QString &ttl, QWidget *parent, const char *name ) | 138 | MountInfo::MountInfo( FileSystem *filesys, QWidget *parent, const char *name ) |
191 | : QWidget( parent, name ), title(ttl) | 139 | : QWidget( parent, name ) |
192 | { | 140 | { |
193 | fs = new FileSystem( path ); | ||
194 | QVBoxLayout *vb = new QVBoxLayout( this, 3 ); | 141 | QVBoxLayout *vb = new QVBoxLayout( this, 3 ); |
195 | 142 | ||
196 | totalSize = new QLabel( this ); | 143 | totalSize = new QLabel( this ); |
197 | vb->addWidget( totalSize ); | 144 | vb->addWidget( totalSize ); |
198 | 145 | ||
146 | fs = filesys; | ||
147 | title = fs->name(); | ||
148 | |||
199 | data = new GraphData(); | 149 | data = new GraphData(); |
200 | graph = new BarGraph( this ); | 150 | graph = new BarGraph( this ); |
201 | graph->setFrameStyle( QFrame::Panel | QFrame::Sunken ); | 151 | graph->setFrameStyle( QFrame::Panel | QFrame::Sunken ); |
@@ -218,8 +168,6 @@ MountInfo::~MountInfo() | |||
218 | 168 | ||
219 | void MountInfo::updateData() | 169 | void MountInfo::updateData() |
220 | { | 170 | { |
221 | fs->update(); | ||
222 | |||
223 | long mult = fs->blockSize() / 1024; | 171 | long mult = fs->blockSize() / 1024; |
224 | long div = 1024 / fs->blockSize(); | 172 | long div = 1024 / fs->blockSize(); |
225 | if ( !mult ) mult = 1; | 173 | if ( !mult ) mult = 1; |
@@ -237,27 +185,3 @@ void MountInfo::updateData() | |||
237 | legend->show(); | 185 | legend->show(); |
238 | } | 186 | } |
239 | 187 | ||
240 | //--------------------------------------------------------------------------- | ||
241 | |||
242 | FileSystem::FileSystem( const QString &p ) | ||
243 | : fspath( p ), blkSize(512), totalBlks(0), availBlks(0) | ||
244 | { | ||
245 | update(); | ||
246 | } | ||
247 | |||
248 | void FileSystem::update() | ||
249 | { | ||
250 | #if defined(_OS_LINUX_) || defined(Q_OS_LINUX) | ||
251 | struct statfs fs; | ||
252 | if ( !statfs( fspath.latin1(), &fs ) ) { | ||
253 | blkSize = fs.f_bsize; | ||
254 | totalBlks = fs.f_blocks; | ||
255 | availBlks = fs.f_bavail; | ||
256 | } else { | ||
257 | blkSize = 0; | ||
258 | totalBlks = 0; | ||
259 | availBlks = 0; | ||
260 | } | ||
261 | #endif | ||
262 | } | ||
263 | |||