/*
* main.cxx
*
* PWLib application source file for $$PRODUCT_NAME$$
*
* Main program entry point.
*
* Copyright (c) $$YEAR$$ $$COPYRIGHT_HOLDER$$
*
* The contents of this file are subject to the Mozilla Public License
* Version 1.0 (the "License"); you may not use this file except in
* compliance with the License. You may obtain a copy of the License at
* http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS"
* basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
* the License for the specific language governing rights and limitations
* under the License.
*
* The Original Code is Portable Windows Library.
*
* The Initial Developer of the Original Code is Equivalence Pty. Ltd.
*
* Contributor(s): ______________________________________.
*
* $Log$
*/
#include "precompile.h"
#include "main.h"
$$IF(IS_GUI)
#include "resources.h"
$$ENDIF
$$IF(HAS_HTTP)
#include "custom.h"
$$ELSE
#include "version.h"
$$ENDIF
PCREATE_PROCESS($$APP_CLASS_NAME$$);
$$IF(HAS_HTTP)
const WORD DefaultHTTPPort = 6666;
static const char UsernameKey[] = "Username";
static const char PasswordKey[] = "Password";
static const char LogLevelKey[] = "Log Level";
static const char HttpPortKey[] = "HTTP Port";
$$ENDIF
$$APP_CLASS_NAME$$::$$APP_CLASS_NAME$$()
$$IF(HAS_HTTP)
: $$PARENT_APP_CLASS$$(ProductInfo)
$$ELSE
: $$PARENT_APP_CLASS$$("$$MANUFACTURER$$", "$$PRODUCT_NAME$$", MAJOR_VERSION, MINOR_VERSION, BUILD_TYPE, BUILD_NUMBER)
$$ENDIF
{
}
$$IF(IS_SERVICE)
BOOL $$APP_CLASS_NAME$$::OnStart()
{
// change to the default directory to the one containing the executable
PDirectory exeDir = GetFile().GetDirectory();
#if defined(_WIN32) && defined(_DEBUG)
// Special check to aid in using DevStudio for debugging.
if (exeDir.Find("\\Debug\\") != P_MAX_INDEX)
exeDir = exeDir.GetParent();
#endif
exeDir.Change();
$$IF(HAS_HTTP)
httpNameSpace.AddResource(new PHTTPDirectory("data", "data"));
httpNameSpace.AddResource(new PServiceHTTPDirectory("html", "html"));
return $$PARENT_APP_CLASS$$::OnStart();
$$ELSE
return TRUE;
$$ENDIF
}
void $$APP_CLASS_NAME$$::OnStop()
{
$$PARENT_APP_CLASS$$::OnStop();
}
void $$APP_CLASS_NAME$$::OnControl()
{
}
$$IF(HAS_HTTP)
void $$APP_CLASS_NAME$$::OnConfigChanged()
{
}
$$IF(HAS_SIGNATURE)
void $$APP_CLASS_NAME$$::AddUnregisteredText(PHTML &)
{
}
$$ENDIF
BOOL $$APP_CLASS_NAME$$::Initialise(const char * initMsg)
{
PConfig cfg("Parameters");
// Sert log level as early as possible
SetLogLevel((PSystemLog::Level)cfg.GetInteger(LogLevelKey, GetLogLevel()));
#if PTRACING
if (GetLogLevel() >= PSystemLog::Warning)
PTrace::SetLevel(GetLogLevel()-PSystemLog::Warning);
else
PTrace::SetLevel(0);
PTrace::ClearOptions(PTrace::Timestamp);
PTrace::SetOptions(PTrace::DateAndTime);
#endif
// Get the HTTP basic authentication info
PString username = cfg.GetString(UsernameKey);
PString password = PHTTPPasswordField::Decrypt(cfg.GetString(PasswordKey));
PHTTPSimpleAuth authority(GetName(), username, password);
// Create the parameters URL page, and start adding fields to it
PConfigPage * rsrc = new PConfigPage(*this, "Parameters", "Parameters", authority);
// HTTP authentication username/password
rsrc->Add(new PHTTPStringField(UsernameKey, 25, username));
rsrc->Add(new PHTTPPasswordField(PasswordKey, 25, password));
// Log level for messages
rsrc->Add(new PHTTPIntegerField(LogLevelKey,
PSystemLog::Fatal, PSystemLog::NumLogLevels-1,
GetLogLevel(),
"1=Fatal only, 2=Errors, 3=Warnings, 4=Info, 5=Debug"));
// HTTP Port number to use.
WORD httpPort = (WORD)cfg.GetInteger(HttpPortKey, DefaultHTTPPort);
rsrc->Add(new PHTTPIntegerField(HttpPortKey, 1, 32767, httpPort));
// Finished the resource to add, generate HTML for it and add to name space
PServiceHTML html("System Parameters");
rsrc->BuildHTML(html);
httpNameSpace.AddResource(rsrc, PHTTPSpace::Overwrite);
// Create the home page
static const char welcomeHtml[] = "welcome.html";
if (PFile::Exists(welcomeHtml))
httpNameSpace.AddResource(new PServiceHTTPFile(welcomeHtml, TRUE), PHTTPSpace::Overwrite);
else {
PHTML html;
html << PHTML::Title("Welcome to " + GetName())
<< PHTML::Body()
<< GetPageGraphic()
<< PHTML::Paragraph() << "<center>"
<< PHTML::HotLink("Parameters") << "Parameters" << PHTML::HotLink()
<< PHTML::Paragraph();
if (!systemLogFileName && systemLogFileName != "-")
html << PHTML::HotLink("logfile.txt") << "Full Log File" << PHTML::HotLink()
<< PHTML::BreakLine()
<< PHTML::HotLink("tail_logfile") << "Tail Log File" << PHTML::HotLink()
<< PHTML::Paragraph();
html << PHTML::HRule()
<< GetCopyrightText()
<< PHTML::Body();
httpNameSpace.AddResource(new PServiceHTTPString("welcome.html", html), PHTTPSpace::Overwrite);
}
// set up the HTTP port for listening & start the first HTTP thread
if (ListenForHTTP(httpPort))
PSYSTEMLOG(Info, "Opened master socket for HTTP: " << httpListeningSocket->GetPort());
else {
PSYSTEMLOG(Fatal, "Cannot run without HTTP port: " << httpListeningSocket->GetErrorText());
return FALSE;
}
PSYSTEMLOG(Info, "Service " << GetName() << ' ' << initMsg);
return TRUE;
}
$$ENDIF
$$ENDIF
void $$APP_CLASS_NAME$$::Main()
{
$$IF(HAS_HTTP)
Suspend();
$$ELSE
$$IF(IS_GUI)
SetAboutDialogID(IDD_ABOUT);
PNEW MainWindow(GetArguments());
PApplication::Main();
$$ELSE
PArgList & args = GetArguments();
$$ENDIF
$$ENDIF
}
$$IF(IS_GUI)
MainWindow::MainWindow(PArgList & /*args*/)
{
SetTitle(PResourceString(IDS_TITLE));
SetIcon(PIcon(IDI_MAIN_WINDOW));
SetMenu(new MainMenu(this));
UpdateCommandSources();
ShowAll();
}
void MainWindow::NewCmd(PMenuItem &, INT)
{
// New document
}
void MainWindow::OpenCmd(PMenuItem &, INT)
{
POpenFileDialog dlg(this);
if (dlg.RunModal()) {
// Open existing document
}
}
void MainWindow::CloseCmd(PMenuItem &, INT)
{
// Close document
}
void MainWindow::SaveCmd(PMenuItem &, INT)
{
// Save current document
}
void MainWindow::SaveAsCmd(PMenuItem &, INT)
{
PSaveFileDialog dlg(this);
if (dlg.RunModal()) {
// Save document to new name
}
}
void MainWindow::PrintCmd(PMenuItem &, INT)
{
PPrintJobDialog dlg(this, printInfo);
if (dlg.RunModal()) {
printInfo = dlg.GetPrintInfo();
PPrintCanvas canvas("$$PRODUCT_NAME$$", printInfo);
// Add printing code here
}
}
void MainWindow::PrinterSetupCmd(PMenuItem &, INT)
{
PPrinterSetupDialog dlg(this, printInfo);
if (dlg.RunModal())
printInfo = dlg.GetPrintInfo();
}
void MainWindow::ExitCmd(PMenuItem &, INT)
// The Exit menu ... well ... exits.
{
owner->Terminate();
}
void MainWindow::CopyCmd()
{
PClipboard clip(this);
// Do something with the clipboard
}
BOOL MainWindow::CanCopy()
{
// If want copy menu enabled
return TRUE;
}
void MainWindow::PasteCmd()
{
PClipboard clip(this);
// Do something with the clipboard
}
BOOL MainWindow::CanPaste()
{
// If want paste menu enabled, ie clipboard has right format
return TRUE;
}
$$ENDIF
// End of File ///////////////////////////////////////////////////////////////
syntax highlighted by Code2HTML, v. 0.9.1