SOL9 2.0 Sample: DiskSpaceViewer

SOL9 2.0 Samples

1 Screenshot


2 Source code

/*
 * 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 (...) {

    }
}


Last modified: 11 Nov 2009

Copyright (c) 2009 Antillia.com ALL RIGHTS RESERVED.