/*
* DiskSpaceViewer.cpp
* Copyright (c) 2009 Antillia.com TOSHIYUKI ARAI. ALL RIGHTS RESERVED.
*/
// SOL++2000
#include <sol\ApplicationView.h>
#include <sol\ListView.h>
#include <sol\Profile.h>
#include <sol\MessageFont.h>
#include <sol\Stdio.h>
#include <sol\DiskSpace.h>
#include <sol\StringList.h>
#include "resource.h"
namespace SOL {
class DiskSpaceViewer :public ApplicationView {
private:
Profile profile;
MessageFont font;
ListView listView;
DiskSpace diskSpace;
/*
*/
public:
DiskSpaceViewer(Application& applet, const TCHAR* name, Args& args)
:ApplicationView(applet, name, args)
{
Args ar;
font.create(9);
ar.reset();
ar.set(XmNexStyle, (ulong)WS_EX_CLIENTEDGE);
ar.set(XmNstyle, (ulong)LVS_REPORT);
listView.create(this, _T(""), ar);
listView.setFont(&font);
ListViewColumn items[] = {
{_T("Drive"),LVCFMT_LEFT, 60},
{_T("Free Space (MB)"), LVCFMT_RIGHT,140},
{_T("Total Space (MB)"), LVCFMT_RIGHT, 140},
{_T("Used Ratio (%)"), LVCFMT_RIGHT, 140},
};
listView.setColumn(items, XtNumber(items));
add(&listView);
addEventHandler(WM_CLOSE, this,
(Handler)&DiskSpaceViewer::close, NULL);
restorePlacement();
showDiskSpace();
TCHAR caption[256];
_stprintf(caption, _T("DiskSpaceViewer on %s"), getOSName());
setText(caption);
addCallback(XmNmenuCallback, IDM_REFRESH, this,
(Callback)&DiskSpaceViewer::refresh, NULL);
addCallback(XmNmenuCallback, IDM_EXIT, this,
(Callback)&DiskSpaceViewer::exit, NULL);
}
private:
const TCHAR* getOSName()
{
OSVERSIONINFO ver;
memset(&ver, 0, sizeof(ver));
ver.dwOSVersionInfoSize = sizeof(ver);
GetVersionEx(&ver);
const TCHAR* name = _T("Unknown");
if (ver.dwPlatformId ==VER_PLATFORM_WIN32_WINDOWS) {
if (ver.dwMinorVersion== 0) {
name = _T("Windows 95");
} else if (ver.dwMinorVersion==10) {
name = _T("Windows 98");
}
}
if (ver.dwPlatformId == VER_PLATFORM_WIN32_NT) {
if (ver.dwMajorVersion==4) {
name = _T("Windows NT4.0");
} else if (ver.dwMajorVersion==5) {
if (ver.dwMinorVersion== 0) {
name = _T("Windows 2000");
} else if (ver.dwMinorVersion==1) {
name = _T("Windows XP");
}
} else if (ver.dwMajorVersion==6) {
if (ver.dwMinorVersion== 0) {
name = _T("Windows Vista");
} else if (ver.dwMinorVersion==1) {
name = _T("Windows 7");
}
}
}
return name;
}
private:
void refresh(Action& action)
{
listView.deleteAllItems();
showDiskSpace();
}
private:
void showDiskSpace()
{
DWORD drives = GetLogicalDrives();
int n = 0;
for (int x= 0; x <26; x++) {
if ((drives & 1) != 0) {
TCHAR d = 'A' + x;
TCHAR buff[3];
_stprintf(buff, _T("%c:\\"), d);
int type = GetDriveType(buff);
if (type == DRIVE_FIXED) {
double free =0.0;
double total = 0.0;
diskSpace.get(buff, free, total);
TCHAR f[80];
TCHAR t[80];
TCHAR u[80];
_stprintf(f, _T("%6.1f"), free);
_stprintf(t, _T("%6.1f"), total);
double used = total- free;
_stprintf(u, _T("%6.1f"), used*100.0/total);
StringList list;
list.add(new String(buff));
list.add(new String(f));
list.add(new String(t));
list.add(new String(u));
listView.insertLine(n, &list);
n++;
}
}
drives = drives >>1;
}
}
private:
long close(Event& event)
{
savePlacement();
return defaultProc(event);
}
};
}
// DiskSpaceViewer Main
void Main(int argc, TCHAR** argv)
{
const String appClass = "DiskSpaceViewer";
try {
Application applet(appClass, argc, argv);
Args args;
args.set(XmNwidth, 400);
args.set(XmNheight, 300);
DiskSpaceViewer viewer(applet, appClass, args);
viewer.realize();
applet.run();
} catch (...) {
}
}
|