/////////////////////////////////////////////////////////////////////////////
// Name: emulator.cpp
-// Purpose: Emulator wxWindows sample
+// Purpose: Emulator wxWidgets sample
// Author: Julian Smart
// Modified by:
// Created: 04/01/98
// declarations
// ============================================================================
-#ifdef __GNUG__
- #pragma implementation "emulator.h"
-#endif
-
// ----------------------------------------------------------------------------
// headers
// ----------------------------------------------------------------------------
#endif
// for all others, include the necessary headers (this file is usually all you
-// need because it includes almost all "standard" wxWindows headers)
+// need because it includes almost all "standard" wxWidgets headers)
#ifndef WX_PRECOMP
#include "wx/wx.h"
#endif
#include "wx/fileconf.h"
#include "wx/cmdline.h"
#include "wx/image.h"
+#include "wx/file.h"
+#include "wx/filename.h"
-#ifdef __WXX11__
+#ifdef __WXX11__
#include "wx/x11/reparent.h"
#endif
// ----------------------------------------------------------------------------
// the application icon (under Windows and OS/2 it is in resources)
-#if defined(__WXGTK__) || defined(__WXMOTIF__) || defined(__WXMAC__) || defined(__WXMGL__) || defined(__WXX11__)
+#ifndef wxHAS_IMAGES_IN_RESOURCES
#include "emulator.xpm"
#endif
// ----------------------------------------------------------------------------
-// event tables and other macros for wxWindows
+// event tables and other macros for wxWidgets
// ----------------------------------------------------------------------------
-// the event tables connect the wxWindows events with the functions (event
+// the event tables connect the wxWidgets events with the functions (event
// handlers) which process them. It can be also done at run-time, but for the
// simple menu events like this the static method is much simpler.
BEGIN_EVENT_TABLE(wxEmulatorFrame, wxFrame)
EVT_CLOSE(wxEmulatorFrame::OnCloseWindow)
END_EVENT_TABLE()
-// Create a new application object: this macro will allow wxWindows to create
+// Create a new application object: this macro will allow wxWidgets to create
// the application object during program execution (it's better than using a
// static object for many reasons) and also declares the accessor function
// wxGetApp() which will return the reference of the right type (i.e. wxEmulatorApp and
static const wxCmdLineEntryDesc sg_cmdLineDesc[] =
{
- { wxCMD_LINE_OPTION, "u", "use-display", "display number to use (default 100)" },
+ { wxCMD_LINE_OPTION, "u", "use-display", "display number to use (default 100)" },
- { wxCMD_LINE_SWITCH, "h", "help", "displays help on the command line parameters" },
- { wxCMD_LINE_SWITCH, "v", "version", "print version" },
+ { wxCMD_LINE_SWITCH, "h", "help", "displays help on the command line parameters" },
+ { wxCMD_LINE_SWITCH, "v", "version", "print version" },
{ wxCMD_LINE_PARAM, NULL, NULL, "config file 1", wxCMD_LINE_VAL_STRING, wxCMD_LINE_PARAM_OPTIONAL },
- { wxCMD_LINE_NONE }
+ wxCMD_LINE_DESC_END
};
// 'Main program' equivalent: the program execution "starts" here
bool wxEmulatorApp::OnInit()
{
- wxLog::SetTimestamp(NULL);
+#if wxUSE_LOG
+ wxLog::DisableTimestamp();
+#endif // wxUSE_LOG
wxInitAllImageHandlers();
wxString currentDir = wxGetCwd();
// Use argv to get current app directory
m_appDir = wxFindAppPath(argv[0], currentDir, wxT("WXEMUDIR"));
-
+
// If the development version, go up a directory.
#ifdef __WXMSW__
- if ((m_appDir.Right(5).CmpNoCase("DEBUG") == 0) ||
- (m_appDir.Right(11).CmpNoCase("DEBUGSTABLE") == 0) ||
- (m_appDir.Right(7).CmpNoCase("RELEASE") == 0) ||
- (m_appDir.Right(13).CmpNoCase("RELEASESTABLE") == 0)
+ if ((m_appDir.Right(5).CmpNoCase(wxT("DEBUG")) == 0) ||
+ (m_appDir.Right(11).CmpNoCase(wxT("DEBUGSTABLE")) == 0) ||
+ (m_appDir.Right(7).CmpNoCase(wxT("RELEASE")) == 0) ||
+ (m_appDir.Right(13).CmpNoCase(wxT("RELEASESTABLE")) == 0)
)
m_appDir = wxPathOnly(m_appDir);
#endif
wxLog::SetActiveTarget(new wxLogStderr);
#endif
parser.Usage();
- return FALSE;
+ return false;
}
if (parser.Found(wxT("v")))
{
wxLog::SetActiveTarget(new wxLogStderr);
#endif
wxString msg;
- msg.Printf(wxT("wxWindows PDA Emulator (c) Julian Smart, 2002 Version %.2f, %s"), wxEMULATOR_VERSION, __DATE__);
+ msg.Printf(wxT("wxWidgets PDA Emulator (c) Julian Smart, 2002 Version %.2f, %s"), wxEMULATOR_VERSION, __DATE__);
wxLogMessage(msg);
- return FALSE;
+ return false;
}
if (parser.Found(wxT("u"), & m_displayNumber))
{
if (!LoadEmulator(m_appDir))
{
//wxMessageBox(wxT("Sorry, could not load this emulator. Please check bitmaps are valid."));
- return FALSE;
+ return false;
}
-
+
// create the main application window
- wxEmulatorFrame *frame = new wxEmulatorFrame(_T("wxEmulator"),
+ wxEmulatorFrame *frame = new wxEmulatorFrame(wxT("wxEmulator"),
wxPoint(50, 50), wxSize(450, 340));
-
+
+#if wxUSE_STATUSBAR
frame->SetStatusText(m_emulatorInfo.m_emulatorTitle, 0);
wxString sizeStr;
sizeStr.Printf(wxT("Screen: %dx%d"), (int) m_emulatorInfo.m_emulatorScreenSize.x,
(int) m_emulatorInfo.m_emulatorScreenSize.y);
frame->SetStatusText(sizeStr, 1);
+#endif // wxUSE_STATUSBAR
- m_containerWindow = new wxEmulatorContainer(frame, -1);
+ m_containerWindow = new wxEmulatorContainer(frame, wxID_ANY);
frame->SetClientSize(m_emulatorInfo.m_emulatorDeviceSize.x,
m_emulatorInfo.m_emulatorDeviceSize.y);
-
+
// and show it (the frames, unlike simple controls, are not shown when
// created initially)
- frame->Show(TRUE);
-
-#ifdef __WXX11__
+ frame->Show(true);
+
+#ifdef __WXX11__
m_xnestWindow = new wxAdoptedWindow;
wxString cmd;
{
frame->Destroy();
wxMessageBox(wxT("Sorry, could not run Xnest. Please check your PATH."));
- return FALSE;
+ return false;
}
-
+
wxReparenter reparenter;
if (!reparenter.WaitAndReparent(m_containerWindow, m_xnestWindow, wxT("Xnest")))
{
wxMessageBox(wxT("Sorry, could not reparent Xnest.."));
frame->Destroy();
- return FALSE;
+ return false;
}
#endif
m_containerWindow->DoResize();
// success: wxApp::OnRun() will be called which will enter the main message
- // loop and the application will run. If we returned FALSE here, the
+ // loop and the application will run. If we returned false here, the
// application would exit immediately.
- return TRUE;
+ return true;
}
// Prepend the current program directory to the name
path += '\\';
#endif
path += filename;
-
+
return path;
}
// ----------------------------------------------------------------------------
// frame constructor
-wxEmulatorFrame::wxEmulatorFrame(const wxString& title, const wxPoint& pos, const wxSize& size)
- : wxFrame(NULL, -1, title, pos, size)
+wxEmulatorFrame::wxEmulatorFrame(const wxString& title,
+ const wxPoint& pos, const wxSize& size)
+ : wxFrame(NULL, wxID_ANY, title, pos, size)
{
// set the frame icon
SetIcon(wxICON(emulator));
// the "About" item should be in the help menu
wxMenu *helpMenu = new wxMenu;
- helpMenu->Append(Emulator_About, _T("&About...\tF1"), _T("Show about dialog"));
+ helpMenu->Append(Emulator_About, wxT("&About\tF1"), wxT("Show about dialog"));
- menuFile->Append(Emulator_Quit, _T("E&xit\tAlt-X"), _T("Quit this program"));
+ menuFile->Append(Emulator_Quit, wxT("E&xit\tAlt-X"), wxT("Quit this program"));
// now append the freshly created menu to the menu bar...
wxMenuBar *menuBar = new wxMenuBar();
- menuBar->Append(menuFile, _T("&File"));
- menuBar->Append(helpMenu, _T("&Help"));
+ menuBar->Append(menuFile, wxT("&File"));
+ menuBar->Append(helpMenu, wxT("&Help"));
// ... and attach this menu bar to the frame
SetMenuBar(menuBar);
void wxEmulatorFrame::OnQuit(wxCommandEvent& WXUNUSED(event))
{
- // TRUE is to force the frame to close
- Close(TRUE);
+ // true is to force the frame to close
+ Close(true);
}
void wxEmulatorFrame::OnAbout(wxCommandEvent& WXUNUSED(event))
{
wxString msg;
- msg.Printf( _T("wxEmulator is an environment for testing embedded X11 apps.\n"));
+ msg.Printf( wxT("wxEmulator is an environment for testing embedded X11 apps.\n"));
- wxMessageBox(msg, _T("About wxEmulator"), wxOK | wxICON_INFORMATION, this);
+ wxMessageBox(msg, wxT("About wxEmulator"), wxOK | wxICON_INFORMATION, this);
}
-void wxEmulatorFrame::OnCloseWindow(wxCloseEvent& event)
+void wxEmulatorFrame::OnCloseWindow(wxCloseEvent& WXUNUSED(event))
{
#ifdef __WXX11__
if (wxGetApp().m_xnestWindow)
{
}
-void wxEmulatorContainer::OnSize(wxSizeEvent& event)
+void wxEmulatorContainer::OnSize(wxSizeEvent& WXUNUSED(event))
{
DoResize();
}
wxSize sz = GetClientSize();
if (wxGetApp().m_xnestWindow
#ifdef __WXX11__
- && wxGetApp().m_xnestWindow->GetMainWindow()
+ && wxGetApp().m_xnestWindow->X11GetMainWindow()
#endif
)
{
int deviceWidth = wxGetApp().m_emulatorInfo.m_emulatorDeviceSize.x;
int deviceHeight = wxGetApp().m_emulatorInfo.m_emulatorDeviceSize.y;
-
+
int x = wxMax(0, (int) ((sz.x - deviceWidth)/2.0));
int y = wxMax(0, (int) ((sz.y - deviceHeight)/2.0));
-
+
x += wxGetApp().m_emulatorInfo.m_emulatorScreenPosition.x;
y += wxGetApp().m_emulatorInfo.m_emulatorScreenPosition.y;
-
+
wxGetApp().m_xnestWindow->Move(x, y);
}
Refresh();
}
-void wxEmulatorContainer::OnPaint(wxPaintEvent& event)
+void wxEmulatorContainer::OnPaint(wxPaintEvent& WXUNUSED(event))
{
wxPaintDC dc(this);
-
+
wxSize sz = GetClientSize();
- if (wxGetApp().m_emulatorInfo.m_emulatorBackgroundBitmap.Ok())
+ if (wxGetApp().m_emulatorInfo.m_emulatorBackgroundBitmap.IsOk())
{
int deviceWidth = wxGetApp().m_emulatorInfo.m_emulatorDeviceSize.x;
int deviceHeight = wxGetApp().m_emulatorInfo.m_emulatorDeviceSize.y;
-
+
int x = wxMax(0, (int) ((sz.x - deviceWidth)/2.0));
int y = wxMax(0, (int) ((sz.y - deviceHeight)/2.0));
-
+
dc.DrawBitmap(wxGetApp().m_emulatorInfo.m_emulatorBackgroundBitmap, x, y);
}
}
void wxEmulatorContainer::OnEraseBackground(wxEraseEvent& event)
{
- wxDC* dc = NULL;
-
+ wxDC* dc wxDUMMY_INITIALIZE(NULL);
+
if (event.GetDC())
{
dc = event.GetDC();
{
dc = new wxClientDC(this);
}
-
+
dc->SetBackground(wxBrush(wxGetApp().m_emulatorInfo.m_emulatorBackgroundColour, wxSOLID));
dc->Clear();
-
+
if (!event.GetDC())
delete dc;
}
{
// Try to find absolute path
wxString absoluteConfigPath = m_emulatorFilename;
- if (!wxIsAbsolutePath(absoluteConfigPath))
+ if ( !::wxIsAbsolutePath(absoluteConfigPath) )
{
wxString currDir = wxGetCwd();
absoluteConfigPath = currDir + wxString(wxFILE_SEP_PATH) + m_emulatorFilename;
- if (!wxFileExists(absoluteConfigPath))
+ if ( !wxFile::Exists(absoluteConfigPath) )
{
- absoluteConfigPath = appDir + wxString(wxFILE_SEP_PATH) + m_emulatorFilename;
+ absoluteConfigPath = appDir + wxString(wxFILE_SEP_PATH)
+ + m_emulatorFilename;
}
}
- if (!wxFileExists(absoluteConfigPath))
+
+ if ( !wxFile::Exists(absoluteConfigPath) )
{
wxString str;
- str.Printf(wxT("Could not find config file %s"), absoluteConfigPath.c_str()),
+ str.Printf( wxT("Could not find config file %s"),
+ absoluteConfigPath.c_str() );
+
wxMessageBox(str);
- return FALSE;
+ return false;
}
wxString rootPath = wxPathOnly(absoluteConfigPath);
{
- wxFileConfig config(wxT("wxEmulator"), wxT("wxWindows"),
+ wxFileConfig config(wxT("wxEmulator"), wxT("wxWidgets"),
absoluteConfigPath, wxEmptyString, wxCONFIG_USE_LOCAL_FILE);
config.Read(wxT("/General/title"), & m_emulatorTitle);
m_emulatorScreenPosition = wxPoint(x, y);
m_emulatorScreenSize = wxSize(w, h);
}
-
- if (!m_emulatorBackgroundBitmapName.IsEmpty())
+
+ if (!m_emulatorBackgroundBitmapName.empty())
{
wxString absoluteBackgroundBitmapName = rootPath + wxString(wxFILE_SEP_PATH) + m_emulatorBackgroundBitmapName;
- if (!wxFileExists(absoluteBackgroundBitmapName))
+ if ( !wxFile::Exists(absoluteBackgroundBitmapName) )
{
wxString str;
- str.Printf(wxT("Could not find bitmap %s"), absoluteBackgroundBitmapName.c_str()),
+ str.Printf( wxT("Could not find bitmap %s"),
+ absoluteBackgroundBitmapName.c_str() );
wxMessageBox(str);
- return FALSE;
+ return false;
}
-
+
wxBitmapType type = wxDetermineImageType(m_emulatorBackgroundBitmapName);
if (type == wxBITMAP_TYPE_INVALID)
- return FALSE;
-
+ return false;
+
if (!m_emulatorBackgroundBitmap.LoadFile(m_emulatorBackgroundBitmapName, type))
{
wxString str;
- str.Printf(wxT("Could not load bitmap file %s"), m_emulatorBackgroundBitmapName.c_str()),
+ str.Printf( wxT("Could not load bitmap file %s"),
+ m_emulatorBackgroundBitmapName.c_str() );
wxMessageBox(str);
- return FALSE;
+ return false;
}
+
m_emulatorDeviceSize = wxSize(m_emulatorBackgroundBitmap.GetWidth(),
m_emulatorBackgroundBitmap.GetHeight());
}
- return TRUE;
+ return true;
}
// Returns the image type, or -1, determined from the extension.
{
wxString path, name, ext;
- wxSplitPath(filename, & path, & name, & ext);
+ wxFileName::SplitPath(filename, & path, & name, & ext);
ext.MakeLower();
- if (ext == "jpg" || ext == "jpeg")
+ if (ext == wxT("jpg") || ext == wxT("jpeg"))
return wxBITMAP_TYPE_JPEG;
- if (ext == "gif")
+ if (ext == wxT("gif"))
return wxBITMAP_TYPE_GIF;
- if (ext == "bmp")
+ if (ext == wxT("bmp"))
return wxBITMAP_TYPE_BMP;
- if (ext == "png")
+ if (ext == wxT("png"))
return wxBITMAP_TYPE_PNG;
- if (ext == "pcx")
+ if (ext == wxT("pcx"))
return wxBITMAP_TYPE_PCX;
- if (ext == "tif" || ext == "tiff")
- return wxBITMAP_TYPE_TIF;
-
+ if (ext == wxT("tif") || ext == wxT("tiff"))
+ return wxBITMAP_TYPE_TIFF;
+
return wxBITMAP_TYPE_INVALID;
}
// Convert 6-digit hex string to a colour
wxColour wxHexStringToColour(const wxString& hex)
{
- unsigned int r = 0;
- unsigned int g = 0;
- unsigned int b = 0;
- r = wxHexToDec(hex.Mid(0, 2));
- g = wxHexToDec(hex.Mid(2, 2));
- b = wxHexToDec(hex.Mid(4, 2));
+ unsigned char r = (unsigned char)wxHexToDec(hex.Mid(0, 2));
+ unsigned char g = (unsigned char)wxHexToDec(hex.Mid(2, 2));
+ unsigned char b = (unsigned char)wxHexToDec(hex.Mid(4, 2));
return wxColour(r, g, b);
}
wxString str;
// Try appVariableName
- if (!appVariableName.IsEmpty())
+ if (!appVariableName.empty())
{
str = wxGetenv(appVariableName);
- if (!str.IsEmpty())
+ if (!str.empty())
return str;
}
currentDir += wxFILE_SEP_PATH;
str = currentDir + argv0;
- if (wxFileExists(str))
+ if ( wxFile::Exists(str) )
return wxPathOnly(str);
}
wxPathList pathList;
pathList.AddEnvList(wxT("PATH"));
str = pathList.FindAbsoluteValidPath(argv0);
- if (!str.IsEmpty())
+ if (!str.empty())
return wxPathOnly(str);
// Failed