ultimatepp/uppdev/ErrorThread20070606/main.cpp
cxl 4a1c627474 Adding uppdev....
git-svn-id: svn://ultimatepp.org/upp/trunk@328 f0d560ea-af0d-0410-9eb7-867de7ffcac7
2008-08-15 08:36:24 +00:00

137 lines
2.7 KiB
C++

#include "main.h"
#include "threads.h"
App::App()
{
/* Begin: Main settings */
Title("ErrorThread20070606");
SetDefaultCharset(CHARSET_UTF8);
SetRect(0, 0, 800, 500);
/* End */
/* Begin: Main Ctrls */
AddFrame(menu);
MenuContent(menu);
Add(tab);
TabContent(tab);
AddFrame(status);
StatusContent(status);
/* End */
/* Begin: Main actions */
WhenClose = THISBACK(ActionExit);
/* End */
}
void App::MenuContent(MenuBar& menu)
{
menu.Add("File", THISBACK(MenuContent_File));
}
void App::MenuContent_File(Bar& bar)
{
bar.Add("Exit", THISBACK(ActionExit))
.Key(K_ESCAPE);
}
void App::TabContent(TabCtrl& tab)
{
tab.SizePos();
Content_Download(contentDownload);
tab.Add(contentDownload, "Home page");
}
void App::Content_Download(StaticRect& ctrl)
{
ctrl.SizePos();
ctrl.Color(SWhite);
ctrl.SetFrame(InsetFrame());
downloadButton.SetLabel("Download START (~46kB)");
downloadButton.LeftPos(10, 150).TopPos(10, 20);
downloadButton <<= THISBACK(ActionDownloadStart);
ctrl.Add(downloadButton);
cancelDownloadButton.SetLabel("Download STOP");
cancelDownloadButton.LeftPos(10, 150).TopPos(40, 20);
cancelDownloadButton.Disable();
cancelDownloadButton <<= THISBACK1(ActionDownloadStop, true);
ctrl.Add(cancelDownloadButton);
downloadResult.LeftPos(10, 750).TopPos(75, 330);
ctrl.Add(downloadResult);
}
void App::ActionDownloadStart()
{
if (isProgressCanceled) {
cancelDownloadButton.Enable();
CallerInfo caller;
caller.app = this;
httpThread.Run(callback1(DownloadThread, caller));
SetTimeCallback(-50, callback(this, &App::StatusUpdate), 0);
StatusUpdate();
}
}
void App::ActionDownloadStop(bool clearResult = false)
{
isProgressCanceled = true;
cancelDownloadButton.Disable();
statusInfo = "";
if (clearResult) {
String result = "";
downloadResult.Set(result);
}
progressDisplay.x = -95;
KillTimeCallback(0);
}
bool App::ProgressCanceled(int pos, int size)
{
return isProgressCanceled;
}
void App::StatusContent(StatusBar& status)
{
status = GetTitle().ToString();
statusInfo.SetDefault(" ");
statusInfo.Set("");
status.AddFrame(statusInfo.Right(150));
progressDisplay.x = -100;
isProgressCanceled = true;
}
void App::StatusUpdate()
{
PaintRect rect(progressDisplay);
statusInfo.Set(rect);
if (progressDisplay.x >= 150 - 5) {
progressDisplay.x = -95;
} else {
progressDisplay.x += 5;
}
}
void App::ActionExit()
{
isProgressCanceled = true;
Close();
}
bool App::Key(dword key, int count)
{
/*if(key == K_ESCAPE) {
ActionExit();
return true;
}*/
return TopWindow::Key(key, count);
}
GUI_APP_MAIN
{
App app;
app.Run();
}