ultimatepp/bazaar/SysInfo_demo_gui/main.cpp
koldo eb3618be87 SysInfo_demo_gui: Keyb_ and Mouse_ functions supported in Linux
git-svn-id: svn://ultimatepp.org/upp/trunk@1842 f0d560ea-af0d-0410-9eb7-867de7ffcac7
2009-12-25 21:28:18 +00:00

483 lines
14 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include <CtrlLib/CtrlLib.h>
#include "SysInfo/SysInfo.h"
#include "SysInfo_demo_gui.h"
#define IMAGEFILE <SysInfo_demo_gui/SysInfo_demo_gui.iml>
#define IMAGECLASS Images
#include <Draw/iml.h>
#define LAYOUTFILE <SysInfo_demo_gui/SysInfo_demo_gui.lay>
using namespace Upp;
GUI_APP_MAIN {
SysInfoDemo program;
SetLanguage(LNGC_('E','N','U','S', CHARSET_UTF8));
program.Run();
}
void SpecialFolders::Fill() {
TextDesktop.SetText(GetDesktopFolder());
TextPrograms.SetText(GetProgramsFolder());
TextApplication.SetText(GetAppDataFolder());
TextMusic.SetText(GetMusicFolder());
TextPictures.SetText(GetPicturesFolder());
TextVideo.SetText(GetVideoFolder());
TextPersonal.SetText(GetPersonalFolder());
TextTemplates.SetText(GetTemplatesFolder());
TextDownload.SetText(GetDownloadFolder());
TextTemp.SetText(GetTempFolder());
TextOs.SetText(GetOsFolder());
TextSystem.SetText(GetSystemFolder());
DefaultExes.Reset();
DefaultExes.AddColumn("Extension", 5);
DefaultExes.AddColumn("Program", 40);
const char *ext[] = {".html", ".doc", ".png", ".pdf", ".txt", ".xyz", ""};
for (int i = 0; *ext[i] != 0; ++i)
DefaultExes.Add(ext[i], GetExtExecutable(ext[i]));
#if defined(PLATFORM_WIN32)
ButInstalledSoftware.WhenPush = THISBACK(ButInstalledSoftware_Push);
#else
SoftwareInstalled.Enable(false);
ButInstalledSoftware.Enable(false);
#endif
}
void SpecialFolders::ButInstalledSoftware_Push() {
#if defined(PLATFORM_WIN32)
ButInstalledSoftware.SetLabel("Getting list ...");
ButInstalledSoftware.ProcessEvents();
SoftwareInstalled.Reset();
SoftwareInstalled.AddColumn("Name", 60);
SoftwareInstalled.AddColumn("Version", 15);
SoftwareInstalled.AddColumn("Vendor", 30);
SoftwareInstalled.AddColumn("Install Date", 15);
SoftwareInstalled.AddColumn("Caption", 60);
SoftwareInstalled.AddColumn("Description", 60);
SoftwareInstalled.AddColumn("Install State", 10);
Array <Value> name, version, vendor, caption, installDate, description, state;
if (GetPackagesInfo(name, version, vendor, installDate, caption, description, state)) {
for (int i = 0; i < name.GetCount(); ++i)
SoftwareInstalled.Add(name[i], version[i], vendor[i], installDate[i], caption[i], description[i], state[i]);
}
ButInstalledSoftware.SetLabel("Get installed software list");
#endif
}
void SystemInfo::Fill() {
String manufacturer, productName, version;
Date releaseDate;
int numberOfProcessors;
GetSystemInfo(manufacturer, productName, version, numberOfProcessors);
TextManufacturer.SetText(manufacturer);
TextProductName.SetText(productName);
TextVersion.SetText(version);
TextNumber.SetText(AsString(numberOfProcessors));
TextSpeed.SetText(Format("%.3f GHz", GetCpuSpeed()/1000.));
String biosVersion;
Date biosReleaseDate;
GetBiosInfo(biosVersion, biosReleaseDate);
TextBiosVersion.SetText(biosVersion);
TextBiosRelease.SetText(AsString(biosReleaseDate));
String kernel, kerVersion, kerArchitecture, distro, distVersion, desktop, deskVersion;
if (GetOsInfo(kernel, kerVersion, kerArchitecture, distro, distVersion, desktop, deskVersion)) {
TextKernel.SetText(kernel);
TextKerVersion.SetText(kerVersion);
TextKerArchitecture.SetText(kerArchitecture);
TextDistro.SetText(distro);
TextDistVersion.SetText(distVersion);
TextDesktop.SetText(desktop);
TextDeskVersion.SetText(deskVersion);
}
int memoryLoad;
uint64 totalPhys, freePhys, totalPageFile, freePageFile, totalVirtual, freeVirtual;
if (GetMemoryInfo(memoryLoad, totalPhys, freePhys, totalPageFile, freePageFile, totalVirtual, freeVirtual)) {
TextMemPercentage.SetText(FormatInt(memoryLoad));
TextMemTotPhysicalbytes.SetText(Format64(totalPhys));
TextMemTotPhysical.SetText(BytesToString(totalPhys));
TextMemFreePhysicalbytes.SetText(Format64(freePhys));
TextMemFreePhysical.SetText(BytesToString(freePhys));
TextMemTotPagingbytes.SetText(Format64(totalPageFile));
TextMemTotPaging.SetText(BytesToString(totalPageFile));
TextMemFreePagingbytes.SetText(Format64(freePageFile));
TextMemFreePaging.SetText(BytesToString(freePageFile));
TextMemTotVirtualbytes.SetText(Format64(totalVirtual));
TextMemTotVirtual.SetText(BytesToString(totalVirtual));
TextMemFreeVirtualbytes.SetText(Format64(freeVirtual));
TextMemFreeVirtual.SetText(BytesToString(freeVirtual));
}
String compiler, date;
int compilerVersion;
GetCompilerInfo(compiler, compilerVersion, date);
TextCompiler.SetText(compiler);
TextCompilerVersion.SetText(FormatInt(compilerVersion));
TextCompilationDate.SetText(date);
Processors.Reset();
Processors.AddColumn("Processor", 6);
Processors.AddColumn("Vendor", 12);
Processors.AddColumn("Identifier", 40);
Processors.AddColumn("Architecture", 30);
Processors.AddColumn("Speed MHz", 10);
String vendor, identifier, architecture;
int speed;
for (int i = 0; i < numberOfProcessors; ++i) {
GetProcessorInfo(i, vendor, identifier, architecture, speed);
Processors.Add(Format("#%d", i), vendor, identifier, architecture, FormatInt(speed));
}
#if defined(PLATFORM_WIN32)
Video.Reset();
Video.AddColumn("Name", 10);
Video.AddColumn("Description", 10);
Video.AddColumn("Video Processor", 10);
Video.AddColumn("Adapter RAM Mb", 6);
Video.AddColumn("Video Mode Description", 10);
Array <Value> name, description, videoProcessor, videoMode, ram;
if (GetVideoInfo(name, description, videoProcessor, ram, videoMode)) {
for (int i = 0; i < name.GetCount(); ++i)
Video.Add(name[i], description[i], videoProcessor[i], ram[i], videoMode[i]);
} else
Video.Add("Video data not accesible");
#else
Video.Enable(false);
#endif
Drives.Reset();
Drives.AddColumn("Path", 10);
Drives.AddColumn("Type", 10);
Drives.AddColumn("Volume", 10);
Drives.AddColumn("Max name", 5);
Drives.AddColumn("File System", 5);
Drives.AddColumn("Total User bytes", 10);
Drives.AddColumn("Total User", 6);
Drives.AddColumn("Free User bytes", 10);
Drives.AddColumn("Free User", 6);
Drives.AddColumn("Total Free bytes", 10);
Drives.AddColumn("Total Free", 6);
Array<String> drives;
drives = GetDriveList();
for (int i = 0; i < drives.GetCount(); ++i) {
Vector <Value> row;
row.Clear();
row.Add(drives[i]);
String type, volume, fileSystem;
int maxName;
bool mounted = GetDriveInformation(drives[i], type, volume, maxName, fileSystem);
if (mounted) {
row.Add(type);
row.Add(volume);
row.Add(maxName);
row.Add(fileSystem);
uint64 freeBytesUser, totalBytesUser, totalFreeBytes;
if(!GetDriveSpace(drives[i], freeBytesUser, totalBytesUser, totalFreeBytes))
row.Add("Installed but no access to drive");
else {
row.Add(Format64(totalBytesUser));
row.Add(BytesToString(totalBytesUser));
row.Add(Format64(freeBytesUser));
row.Add(BytesToString(freeBytesUser));
row.Add(Format64(totalFreeBytes));
row.Add(BytesToString(totalFreeBytes));
}
} else
row.Add("Not mounted");
Drives.Add(row);
}
ButUpdate.WhenPush = THISBACK(ButUpdate_Push);
}
void SystemInfo::ButUpdate_Push() {
Fill();
}
void WindowsList_::Fill() {
Windows.Reset();
Windows.AddColumn("Title", 30);
Windows.AddColumn("Window handle", 6);
Windows.AddColumn("Process Id", 6);
Windows.AddColumn("Name", 20);
Windows.AddColumn("File name", 30);
Array<long> widL, pidL;
Array<String> name, fileName, caption;
GetWindowsList(widL, pidL, name, fileName, caption);
for (int i = 0; i < widL.GetCount(); ++i)
Windows.Add(caption[i], FormatLong(widL[i]), FormatLong(pidL[i]), name[i], fileName[i]);
ButUpdate.WhenPush = THISBACK(ButUpdate_Push);
}
void WindowsList_::ButUpdate_Push() {
Fill();
}
void ProcessList::Fill() {
Process.Reset();
Process.AddColumn("Id", 6);
Process.AddColumn("Priority", 6);
Process.AddColumn("Program", 12);
Array<long> pidL;
pidL.Clear();
Array<String> pNames;
if (!GetProcessList(pidL, pNames))
Process.Add("Error getting process info");
else {
for (int i = 0; i < pidL.GetCount(); ++i) {
int priority = GetProcessPriority(pidL[i]);
Process.Add(FormatLong(pidL[i]), priority >= 0? FormatInt(priority): "Not accesible", pNames[i]);
}
}
ButUpdate.WhenPush = THISBACK(ButUpdate_Push);
}
void ProcessList::ButUpdate_Push() {
Fill();
}
void ScreenGrabTab::Fill() {
EditFileNameGrab <<= AppendFileName(GetDesktopFolder(), "ScreenGrab.avi");
EditTime <<= 5;
EditFrameRate <<= 1;
OpGrabMouse <<= true;
SwGrabMode.Add("Desktop");
SwGrabMode.Add("Window");
#if defined(PLATFORM_WIN32)
SwGrabMode.Add("Rectangle");
#endif
SwGrabMode.MinCaseHeight(20);
SwGrabMode.SetData(0);
SwGrabMode.WhenAction = THISBACK(SwGrabMode_Action);
SwGrabMode_Action();
#if defined(PLATFORM_WIN32)
ButGrab.WhenPush = THISBACK(ButGrab_Push);
#else
ButGrab.Enable(false);
EditFileNameGrab.Enable(false);
EditTime.Enable(false);
EditFrameRate.Enable(false);
OpGrabMouse.Enable(false);
EditLeft.Hide();
EditTop.Hide();
EditWidth.Hide();
EditHeight.Hide();
Left.Hide();
Top.Hide();
Width.Hide();
Height.Hide();
#endif
String extension;
#if defined(PLATFORM_WIN32)
extension = "bmp";
#else
extension = "xwd";
#endif
EditFileNameSnap <<= AppendFileName(GetDesktopFolder(), "ScreenSnap." + extension);
ButSnap.WhenPush = THISBACK(ButSnap_Push);
}
void ScreenGrabTab::SwGrabMode_Action() {
switch((int)SwGrabMode.GetData()) {
case 0:
EditLeft.Enable(false);
EditTop.Enable(false);
EditWidth.Enable(false);
EditHeight.Enable(false);
EditWindowTitle.Enable(false);
break;
case 1:
EditLeft.Enable(false);
EditTop.Enable(false);
EditWidth.Enable(false);
EditHeight.Enable(false);
EditWindowTitle.Enable(true);
break;
case 2:
EditLeft.Enable(true);
EditTop.Enable(true);
EditWidth.Enable(true);
EditHeight.Enable(true);
EditWindowTitle.Enable(false);
break;
}
}
void ScreenGrabTab::ButGrab_Push() {
#if defined(PLATFORM_WIN32)
FileDelete(EditFileNameGrab.GetData().ToString());
if (SwGrabMode.GetData() == 0)
Record_Desktop(EditFileNameGrab, EditTime, EditFrameRate, OpGrabMouse);
else if (SwGrabMode.GetData() == 1)
Record_Window(EditFileNameGrab, EditTime, GetWindowIdFromCaption(EditWindowTitle, false), EditFrameRate, OpGrabMouse);
else if (SwGrabMode.GetData() == 2)
Record_DesktopRectangle(EditFileNameGrab, EditTime, EditLeft, EditTop, EditWidth, EditHeight, EditFrameRate, OpGrabMouse);
else
throw Exc("Unexpected value");
#endif
}
void MouseKeyboard::Fill() {
OnTimer();
capsLock.WhenAction = THISBACK(OnButLock);
numLock.WhenAction = THISBACK(OnButLock);
scrollLock.WhenAction = THISBACK(OnButLock);
butKey.WhenAction = THISBACK(OnButKey);
butMouse.WhenAction = THISBACK(OnButMouse);
editAccents <<= "Århus Ørsted Ñandú\ncrème brûlée";
editAccents.SetFont(Courier(12));
OnRemoveAccents();
butRemoveAccents.WhenAction = THISBACK(OnRemoveAccents);
}
void MouseKeyboard::OnTimer() {
bool caps, num, scroll;
GetKeyLockStatus(caps, num, scroll);
capsLock <<= caps;
numLock <<= num;
scrollLock <<= scroll;
}
void MouseKeyboard::OnRemoveAccents() {
labNoAccents = RemoveAccents(~editAccents);
}
void MouseKeyboard::OnButLock() {
SetKeyLockStatus(~capsLock, ~numLock, ~scrollLock);
}
void MouseKeyboard::OnButKey() {
String fileTest = AppendFileName(GetDesktopFolder(), "test.txt");
SaveFile(fileTest, "Please wait a second...");
LaunchFile(fileTest);
{
TimeStop t;
long windowId;
while(-1 == (windowId = GetWindowIdFromCaption("test.txt", false))) {
if (t.Elapsed() > 10000)
break;
}
if (windowId != -1) {
Sleep(1000);
Mouse_SetPos(200, 200, windowId);
Mouse_LeftClick();
Keyb_SendKeys("{HOME}This text is added by Keyb_SendKeys.\n");
Keyb_SendKeys("Some chars just for test: \\/:;,.ºª^[]{}´?¿~#@!¡\n");
Keyb_SendKeys("These are accented: äáéíóúñÄÁÉÍÓÚÑ\n");
//Keyb_SendKeys("And these are not latin at all: 雅言 한국말 韓國말 조선어 朝鮮語\n");
Keyb_SendKeys("And these are not latin at all: 韓于页\n");
}
}
}
void MouseKeyboard::OnButMouse()
{
long wnd = GetWindowIdFromCaption("SysInfo", true);
if (wnd == -1) {
Exclamation("Window not found");
return;
}
long left, top, right, bottom;
Window_GetRect(wnd, left, top, right, bottom);
#ifdef PLATFORM_POSIX
top -= 10;
#endif
Mouse_SetPos(left+100, top+5, 0);
Sleep(100);
Mouse_LeftDown();
Sleep(100);
Mouse_SetPos(left+100, top+200, 0);
Sleep(100);
Mouse_LeftUp();
Ctrl::ProcessEvents();
Sleep(300);
Mouse_LeftDown();
Sleep(100);
Mouse_SetPos(left+300, top+200, 0);
Sleep(100);
Mouse_LeftUp();
Ctrl::ProcessEvents();
Sleep(300);
Mouse_LeftDown();
Sleep(100);
Mouse_SetPos(left+100, top+5, 0);
Sleep(100);
Mouse_LeftUp();
}
void ScreenGrabTab::ButSnap_Push()
{
FileDelete(EditFileNameSnap.GetData().ToString());
if (SwGrabMode.GetData() == 0)
Snap_Desktop(EditFileNameSnap);
else if (SwGrabMode.GetData() == 1)
Snap_Window(EditFileNameSnap, GetWindowIdFromCaption(EditWindowTitle, false));
else if (SwGrabMode.GetData() == 2)
Snap_DesktopRectangle(EditFileNameSnap, EditLeft, EditTop, EditWidth, EditHeight);
else
throw Exc("Unexpected value");
}
SysInfoDemo::SysInfoDemo()
{
Title("SysInfo");
Icon(Images::Computer());
LargeIcon(Images::Computer());
systemInfo.Fill();
filesTab.Add(systemInfo.SizePos(), "System Info");
windowsList.Fill();
filesTab.Add(windowsList.SizePos(), "Windows list");
processList.Fill();
filesTab.Add(processList.SizePos(), "Process list");
specialFolders.Fill();
filesTab.Add(specialFolders.SizePos(), "Special Folders/Executables/Installed Software");
screenGrab.Fill();
filesTab.Add(screenGrab.SizePos(), "Screen Grab");
mouseKeyboard.Fill();
filesTab.Add(mouseKeyboard.SizePos(), "Mouse & Keyboard");
AddFrame(menu);
AddFrame(TopSeparatorFrame());
AddFrame(info);
Add(filesTab.SizePos());
menu.Set(THISBACK(MainMenu));
menu.WhenHelp = info;
SetTimeCallback(-500, THISBACK(TimerFun));
Sizeable().Zoomable();
}
void SysInfoDemo::TimerFun() {
mouseKeyboard.OnTimer();
}
void SysInfoDemo::MainMenu(Bar& bar) {
menu.Add("Menu", THISBACK(FileMenu));
}
void SysInfoDemo::FileMenu(Bar& bar)
{
bar.Add("About...", THISBACK(About)).Help("SysInfo demo gui: SysInfo package demo");
bar.Separator();
bar.Add("Exit", THISBACK(Exit)).Help("Leave the program");
}
void SysInfoDemo::About()
{
Prompt("SysInfo demo gui", Images::Computer(), DeQtf("SysInfo package demo"), "Close");
}
void SysInfoDemo::Exit()
{
Break();
}