Windows component restore

This commit is contained in:
Martin 2016-07-28 00:44:23 +02:00
parent 0d35b97ea7
commit 576a594ffe
17 changed files with 2234 additions and 452 deletions

File diff suppressed because it is too large Load Diff

View File

@ -1,85 +1,95 @@
#pragma once
#include "gui/GUIRestoreWindowsComponents.h"
#include "SelectWindowsComponents.h"
#include <wx/timer.h>
#include <wx/thread.h>
#include "Connector.h"
#include "SelectWindowsComponents.h"
wxString accessErrorToString(Connector::EAccessError access_error);
class RetrieveComponentBackups : public wxThread
struct SFileSpec
{
public:
RetrieveComponentBackups();
~RetrieveComponentBackups();
std::string path;
std::string spec;
bool recursive;
std::string altPath;
bool hasSuccess() { return success; }
std::vector<SBackupFile>& getFileList() { return filelist; }
Connector::EAccessError getAccessError() {
return access_error;
bool operator==(const SFileSpec& other) const
{
return path == other.path
&& spec == other.spec
&& recursive == other.recursive;
}
protected:
virtual ExitCode Entry();
private:
Connector::EAccessError access_error;
bool success;
std::vector<SBackupFile> filelist;
};
class RetrieveComponentConfig : public wxThread
struct SRestoreComponent
{
SFileSpec currspec;
std::vector<SFileSpec> redirected_locations;
std::string writerName;
VSS_ID writerId;
UINT componentIdx;
std::string componentName;
std::string filesPrefix;
UINT filesIdx;
std::string logicalPath;
VSS_COMPONENT_TYPE type;
};
class RestoreWindowsComponentsThread : public wxThread
{
public:
RetrieveComponentConfig();
~RetrieveComponentConfig();
RestoreWindowsComponentsThread(int backupid,
std::vector<SComponent> selected_components, wxString componentConfigDir);
~RestoreWindowsComponentsThread();
void reset(int pbackupid) {
backupid = pbackupid;
success = false; }
bool hasSuccess() { return success; }
Connector::EAccessError getAccessError() {
return access_error;
}
void log(const std::string& message);
void log(const wxString& message);
void log(const char* message) { log(std::string(message)); }
SComponent* getRoot() { return &root; }
std::vector<std::string> getNewLogMessages();
std::string getErrMsg() { return errmsg; }
wxString getMessage1();
wxString getMessage2();
void setMessage1(wxString msg);
void setMessage2(wxString msg);
int getProgressBarPc();
void setProgressBarPc(int pc);
protected:
virtual ExitCode Entry();
private:
bool restoreFiles(const SRestoreComponent& comp);
bool getFilespec(IVssWMFiledesc* wmFile, SFileSpec& filespec);
bool readAltLocations(std::vector<SFileSpec> alt_locations);
int backupid;
Connector::EAccessError access_error;
bool success;
SComponent root;
std::vector<SComponent*> components;
std::string errmsg;
std::vector<SComponent> selected_components;
wxString componentConfigDir;
wxCriticalSection log_section;
std::vector<std::string> log_messages;
std::vector<SRestoreComponent> restore_components;
int progress_bar_pc;
wxString message1;
wxString message2;
};
class SelectRestoreComponents : public GUISelectRestoreComponents, public wxTimer
class RestoreWindowsComponents : public GUIRestoreComponents, public wxTimer
{
public:
SelectRestoreComponents(wxWindow* parent);
RestoreWindowsComponents(wxWindow* parent, int backupid,
std::vector<SComponent> selected_components, wxString componentConfigDir);
protected:
virtual void Notify(void);
virtual void onListBoxSelected(wxCommandEvent& event);
virtual void onStartRestore(wxCommandEvent& event);
virtual void evtOnTreeStateImageClick(wxTreeEvent& event);
virtual void onCancel(wxCommandEvent& event);
virtual void onOkClick(wxCommandEvent& event);
private:
RetrieveComponentBackups retrieveComponentBackups;
std::auto_ptr<RetrieveComponentConfig> retrieveComponentConfig;
wxImageList* iconList;
wxImageList* selectList;
bool canSelectBackup;
bool retrievingBackupConfig;
std::map<wxTreeItemId, SComponent*> tree_components;
std::map<SComponent*, wxTreeItemId> tree_items;
RestoreWindowsComponentsThread restoreComponentsThread;
};

View File

@ -0,0 +1,402 @@
#include "SelectRestoreWindowsComponents.h"
#include "checked.xpm"
#include "unchecked.xpm"
#include <wx/filename.h>
#include <wx/dir.h>
#include <random>
#include "stringtools.h"
#include "SelectWindowsComponents.h"
#include "json/json.h"
#include "RestoreWindowsComponents.h"
extern wxString res_path;
extern wxString ico_ext;
extern wxBitmapType ico_type;
extern std::string g_res_path;
RetrieveComponentBackups::RetrieveComponentBackups()
: wxThread(wxTHREAD_JOINABLE), success(false)
{
}
RetrieveComponentBackups::~RetrieveComponentBackups()
{
}
wxThread::ExitCode RetrieveComponentBackups::Entry()
{
filelist = Connector::getFileList("windows_components_config", access_error);
if (Connector::hasError())
{
return NULL;
}
success = true;
return NULL;
}
SelectRestoreComponents::SelectRestoreComponents(wxWindow * parent)
: GUISelectRestoreComponents(parent), canSelectBackup(false), retrievingBackupConfig(false), backupid(0)
{
retrieveComponentBackups.Run();
Start(200);
m_listBox1->Append(_("Loading..."));
wxIcon icons[2];
icons[0] = wxIcon(unchecked_xpm);
icons[1] = wxIcon(checked_xpm);
int width = icons[0].GetWidth(),
height = icons[0].GetHeight();
selectList = new wxImageList(width, height, true);
iconList = new wxImageList(width, height, true);
for (size_t i = 0; i < WXSIZEOF(icons); i++)
selectList->Add(icons[i]);
m_treeCtrl1->AssignStateImageList(selectList);
m_treeCtrl1->AddRoot(_("Loading..."));
}
void SelectRestoreComponents::Notify(void)
{
if (!retrieveComponentBackups.IsAlive()
&& !canSelectBackup)
{
retrieveComponentBackups.Wait();
canSelectBackup = true;
if (!retrieveComponentBackups.hasSuccess())
{
Stop();
wxMessageBox(_("Error retrieving Windows component backups: ") +
accessErrorToString(retrieveComponentBackups.getAccessError()), wxT("UrBackup"), wxOK | wxICON_ERROR);
Start(200);
return;
}
m_listBox1->Clear();
for (size_t i = 0; i < retrieveComponentBackups.getFileList().size(); ++i)
{
wxDateTime logtime_dt((wxLongLong)(retrieveComponentBackups.getFileList()[i].backuptime * 1000));
m_listBox1->Append(logtime_dt.Format());
}
if (!retrieveComponentBackups.getFileList().empty())
{
m_listBox1->Select(0);
wxCommandEvent evt;
onListBoxSelected(evt);
}
}
if (retrievingBackupConfig
&& retrieveComponentConfig.get()
&& !retrieveComponentConfig->IsAlive())
{
retrieveComponentConfig->Wait();
retrievingBackupConfig = false;
if (!retrieveComponentConfig->hasSuccess())
{
wxString errmsg = accessErrorToString(retrieveComponentConfig->getAccessError());
if (!retrieveComponentConfig->getErrMsg().empty())
{
errmsg = retrieveComponentConfig->getErrMsg();
}
Stop();
wxMessageBox(_("Error retrieving Windows component configuration: ") +
errmsg, wxT("UrBackup"), wxOK | wxICON_ERROR);
Start(200);
retrieveComponentConfig.reset();
return;
}
m_treeCtrl1->Delete(m_treeCtrl1->GetRootItem());
wxTreeItemId rootId = m_treeCtrl1->AddRoot(_("Windows components"));
m_treeCtrl1->SetItemState(rootId, 0);
SComponent* root = retrieveComponentConfig->getRoot();
tree_components[rootId] = root;
tree_items[root] = rootId;
SelectWindowsComponents::addComponents(m_treeCtrl1, iconList, rootId, root, tree_components,
tree_items);
m_treeCtrl1->SetImageList(iconList);
SelectWindowsComponents::selectTreeItems(m_treeCtrl1, tree_items,
retrieveComponentConfig->getRoot(), retrieveComponentConfig->getRoot(), true);
for (std::map<SComponent*, wxTreeItemId>::iterator it = tree_items.begin();
it != tree_items.end(); ++it)
{
m_treeCtrl1->Toggle(it->second);
}
backupid = retrieveComponentConfig->getBackupid();
componentConfigDir = retrieveComponentConfig->getComponentConfigDir();
}
}
void SelectRestoreComponents::onListBoxSelected(wxCommandEvent & event)
{
if (!canSelectBackup)
{
return;
}
int sel = m_listBox1->GetSelection();
if (sel >= 0)
{
while (retrievingBackupConfig
&& retrieveComponentConfig.get()
&& retrieveComponentConfig->IsAlive() )
{
Sleep(100);
wxTheApp->SafeYield(NULL, false);
}
m_treeCtrl1->DeleteAllItems();
tree_components.clear();
tree_items.clear();
m_treeCtrl1->SetImageList(NULL);
iconList->RemoveAll();
m_treeCtrl1->AddRoot(_("Loading..."));
retrieveComponentConfig.reset(new RetrieveComponentConfig);
retrieveComponentConfig->reset(retrieveComponentBackups.getFileList()[sel].backupid);
retrieveComponentConfig->Run();
retrievingBackupConfig = true;
}
}
void SelectRestoreComponents::onStartRestore(wxCommandEvent & event)
{
if (backupid == 0)
{
wxMessageBox(_("No backup was selected"), wxT("UrBackup"), wxOK | wxICON_ERROR);
return;
}
std::vector<SComponent> selected_components;
for (std::map<SComponent*, wxTreeItemId>::iterator it = tree_items.begin();
it != tree_items.end(); ++it)
{
if (!it->first->is_root)
{
int state = m_treeCtrl1->GetItemState(it->second);
if (state == 1)
{
selected_components.push_back(*it->first);
}
}
}
if (selected_components.empty())
{
wxMessageBox(_("No components selected"), wxT("UrBackup"), wxOK | wxICON_ERROR);
return;
}
Close();
RestoreWindowsComponents* rwc = new RestoreWindowsComponents(NULL,
backupid, selected_components, componentConfigDir);
wxTheApp->SetTopWindow(rwc);
rwc->ShowModal();
rwc->Destroy();
}
void SelectRestoreComponents::evtOnTreeStateImageClick(wxTreeEvent & event)
{
SComponent* component = tree_components[event.GetItem()];
if (component == NULL
|| retrieveComponentConfig.get()==NULL)
{
return;
}
bool select = m_treeCtrl1->GetItemState(event.GetItem()) == 0;
SelectWindowsComponents::selectTreeItems(m_treeCtrl1, tree_items,
retrieveComponentConfig->getRoot(), component, select);
}
void SelectRestoreComponents::onCancel(wxCommandEvent & event)
{
Close();
}
RetrieveComponentConfig::RetrieveComponentConfig()
: wxThread(wxTHREAD_JOINABLE), success(false)
{
root.is_root = true;
}
RetrieveComponentConfig::~RetrieveComponentConfig()
{
for (size_t i = 0; i < components.size(); ++i)
{
delete components[i];
}
if (!componentConfigDir.empty())
{
wxFileName::Rmdir(componentConfigDir, wxPATH_RMDIR_RECURSIVE);
}
}
wxThread::ExitCode RetrieveComponentConfig::Entry()
{
wxMilliClock_t now = wxGetLocalTimeMillis();
std::random_device rd;
componentConfigDir = wxFileName::GetTempDir().Append(wxString::Format(wxT("\\urb_win_comps_%llu_%lu"), now, rd()));
if (!wxFileName::Mkdir(componentConfigDir))
{
componentConfigDir.clear();
return NULL;
}
SPathMap path_map;
path_map.source = "C:\\windows_components_config";
path_map.target = componentConfigDir.ToStdString();
std::vector<SPathMap> path_maps;
path_maps.push_back(path_map);
SStartRestore restore_info = Connector::startRestore("windows_components_config", backupid,
path_maps, access_error, false, true, false);
if (!restore_info.ok)
{
return NULL;
}
SConnection connection;
bool restore_finished = false;
while (!restore_finished)
{
Sleep(100);
SStatusDetails status = Connector::getStatusDetails(&connection);
if (status.ok)
{
for (size_t i = 0; i < status.finished_processes.size(); ++i)
{
if (status.finished_processes[i].id == restore_info.process_id)
{
restore_finished = true;
break;
}
}
}
else
{
return NULL;
}
}
std::string data = getFile((componentConfigDir + wxT("\\backupcom.xml")).ToStdWstring());
if (data.empty())
{
return NULL;
}
std::string info = getFile((componentConfigDir + wxT("\\info.json")).ToStdWstring());
if (info.empty())
{
return NULL;
}
wxDir dir(componentConfigDir);
if (!dir.IsOpened())
{
return NULL;
}
std::vector<std::string> componentXmls;
wxString filename;
bool cont = dir.GetFirst(&filename);
while (cont)
{
if ( filename != "backupcom.xml"
&& filename != "info.json" )
{
componentXmls.push_back(getFile((componentConfigDir + wxT("\\") + filename).ToStdWstring()));
}
cont = dir.GetNext(&filename);
}
Json::Value info_root;
Json::Reader reader;
if (!reader.parse(info, info_root, false))
{
return NULL;
};
std::vector<SComponent> filter_except;
try
{
Json::Value selected_components = info_root["selected_components"];
for (Json::ArrayIndex i = 0; i < selected_components.size(); ++i)
{
Json::Value compInfo = selected_components[i];
SComponent comp;
HRESULT hr = IIDFromString(ConvertToUnicode(compInfo["writerId"].asString()).c_str(),
&comp.writerId);
comp.logicalPath = compInfo["logicalPath"].asString();
comp.name = compInfo["componentName"].asString();
filter_except.push_back(comp);
}
}
catch (std::runtime_error&)
{
return NULL;
}
if (!WindowsComponentReader::readComponents(data, componentXmls, filter_except, root, components, errmsg))
{
return NULL;
}
success = true;
return ExitCode();
}
wxString accessErrorToString(Connector::EAccessError access_error)
{
switch (access_error)
{
case Connector::EAccessError_Ok:
return _("Unknown access error");
case Connector::EAccessError_NoServer:
return _("Currently not connected to a backup server. No backup server found.");
case Connector::EAccessError_NoTokens:
return _("No file backup access tokens found. Did you run a file backup yet?");
}
}

View File

@ -0,0 +1,95 @@
#pragma once
#include "gui/GUIRestoreWindowsComponents.h"
#include <wx/timer.h>
#include <wx/thread.h>
#include "Connector.h"
#include "SelectWindowsComponents.h"
wxString accessErrorToString(Connector::EAccessError access_error);
class RetrieveComponentBackups : public wxThread
{
public:
RetrieveComponentBackups();
~RetrieveComponentBackups();
bool hasSuccess() { return success; }
std::vector<SBackupFile>& getFileList() { return filelist; }
Connector::EAccessError getAccessError() {
return access_error;
}
protected:
virtual ExitCode Entry();
private:
Connector::EAccessError access_error;
bool success;
std::vector<SBackupFile> filelist;
};
class RetrieveComponentConfig : public wxThread
{
public:
RetrieveComponentConfig();
~RetrieveComponentConfig();
void reset(int pbackupid) {
backupid = pbackupid;
success = false; }
bool hasSuccess() { return success; }
Connector::EAccessError getAccessError() {
return access_error;
}
SComponent* getRoot() { return &root; }
std::string getErrMsg() { return errmsg; }
wxString getComponentConfigDir() {
return componentConfigDir;
}
int getBackupid() { return backupid; }
protected:
virtual ExitCode Entry();
private:
int backupid;
Connector::EAccessError access_error;
bool success;
SComponent root;
std::vector<SComponent*> components;
std::string errmsg;
wxString componentConfigDir;
};
class SelectRestoreComponents : public GUISelectRestoreComponents, public wxTimer
{
public:
SelectRestoreComponents(wxWindow* parent);
protected:
virtual void Notify(void);
virtual void onListBoxSelected(wxCommandEvent& event);
virtual void onStartRestore(wxCommandEvent& event);
virtual void evtOnTreeStateImageClick(wxTreeEvent& event);
virtual void onCancel(wxCommandEvent& event);
private:
RetrieveComponentBackups retrieveComponentBackups;
std::auto_ptr<RetrieveComponentConfig> retrieveComponentConfig;
wxImageList* iconList;
wxImageList* selectList;
bool canSelectBackup;
bool retrievingBackupConfig;
std::map<wxTreeItemId, SComponent*> tree_components;
std::map<SComponent*, wxTreeItemId> tree_items;
wxString componentConfigDir;
int backupid;
};

View File

@ -15,84 +15,6 @@ extern wxString res_path;
extern wxString ico_ext;
extern wxBitmapType ico_type;
namespace
{
template<typename T>
class ReleaseIUnknown
{
public:
ReleaseIUnknown(T*& unknown)
: unknown(unknown) {}
~ReleaseIUnknown() {
if (unknown != NULL) {
unknown->Release();
}
}
private:
T*& unknown;
};
#define TOKENPASTE2(x, y) x ## y
#define TOKENPASTE(x, y) TOKENPASTE2(x, y)
#define SCOPED_DECLARE_RELEASE_IUNKNOWN(t, x) t* x = NULL; ReleaseIUnknown<t> TOKENPASTE(ReleaseIUnknown_,__LINE__) (x)
class FreeBStr
{
public:
FreeBStr(BSTR& bstr)
: bstr(bstr)
{}
~FreeBStr() {
if (bstr != NULL) {
SysFreeString(bstr);
}
}
private:
BSTR bstr;
};
#define SCOPED_DECLARE_FREE_BSTR(x) BSTR x = NULL; FreeBStr TOKENPASTE(FreeBStr_, __LINE__) (x)
class FreeComponentInfo
{
public:
FreeComponentInfo(IVssWMComponent* wmComponent, PVSSCOMPONENTINFO& componentInfo)
: wmComponent(wmComponent), componentInfo(componentInfo)
{}
~FreeComponentInfo() {
if (wmComponent != NULL && componentInfo != NULL) {
wmComponent->FreeComponentInfo(componentInfo);
}
}
private:
IVssWMComponent* wmComponent;
PVSSCOMPONENTINFO componentInfo;
};
#define SCOPED_DECLARE_FREE_COMPONENTINFO(c, i) PVSSCOMPONENTINFO i = NULL; FreeComponentInfo TOKENPASTE(FreeComponentInfo_,__LINE__) (c, i);
std::string convert(VSS_ID id)
{
WCHAR GuidStr[128] = {};
int rc = StringFromGUID2(id, GuidStr, 128);
if (rc > 0)
{
return wxString(std::wstring(GuidStr, rc - 1)).ToStdString();
}
return std::string();
}
std::string ConvertFromWchar(std::wstring str)
{
return ConvertToUTF8(str);
}
}
SelectWindowsComponents::SelectWindowsComponents(wxWindow * parent)
: GUIWindowsComponents(parent)
{
@ -902,7 +824,7 @@ wxThread::ExitCode WindowsComponentReader::Entry()
return ExitCode();
}
std::string WindowsComponentReader::GetErrorHResErrStr(HRESULT res)
std::string GetErrorHResErrStr(HRESULT res)
{
#define CASE_VSS_ERROR(x) case x: return #x
switch (res)

View File

@ -29,6 +29,8 @@ struct SComponent
std::vector<SComponent*> dependencies;
};
std::string GetErrorHResErrStr(HRESULT res);
class WindowsComponentReader : public wxThread
{
public:
@ -40,13 +42,12 @@ public:
static bool readComponents(const std::string& restoreXml, const std::vector<std::string>& componentXmls,
const std::vector<SComponent>& filter_except, SComponent& root, std::vector<SComponent*>& components, std::string& errmsg);
static bool wait_for(IVssAsync *vsasync, const std::string& error_prefix, std::string& errmsg);
protected:
virtual ExitCode Entry();
private:
static std::string GetErrorHResErrStr(HRESULT res);
static bool wait_for(IVssAsync *vsasync, const std::string& error_prefix, std::string& errmsg);
std::string errmsg;
SComponent root;
@ -92,4 +93,82 @@ private:
std::map<wxTreeItemId, SComponent*> tree_components;
std::map<SComponent*, wxTreeItemId> tree_items;
};
};
namespace
{
template<typename T>
class ReleaseIUnknown
{
public:
ReleaseIUnknown(T*& unknown)
: unknown(unknown) {}
~ReleaseIUnknown() {
if (unknown != NULL) {
unknown->Release();
}
}
private:
T*& unknown;
};
#define TOKENPASTE2(x, y) x ## y
#define TOKENPASTE(x, y) TOKENPASTE2(x, y)
#define SCOPED_DECLARE_RELEASE_IUNKNOWN(t, x) t* x = NULL; ReleaseIUnknown<t> TOKENPASTE(ReleaseIUnknown_,__LINE__) (x)
class FreeBStr
{
public:
FreeBStr(BSTR& bstr)
: bstr(bstr)
{}
~FreeBStr() {
if (bstr != NULL) {
SysFreeString(bstr);
}
}
private:
BSTR bstr;
};
#define SCOPED_DECLARE_FREE_BSTR(x) BSTR x = NULL; FreeBStr TOKENPASTE(FreeBStr_, __LINE__) (x)
class FreeComponentInfo
{
public:
FreeComponentInfo(IVssWMComponent* wmComponent, PVSSCOMPONENTINFO& componentInfo)
: wmComponent(wmComponent), componentInfo(componentInfo)
{}
~FreeComponentInfo() {
if (wmComponent != NULL && componentInfo != NULL) {
wmComponent->FreeComponentInfo(componentInfo);
}
}
private:
IVssWMComponent* wmComponent;
PVSSCOMPONENTINFO componentInfo;
};
#define SCOPED_DECLARE_FREE_COMPONENTINFO(c, i) PVSSCOMPONENTINFO i = NULL; FreeComponentInfo TOKENPASTE(FreeComponentInfo_,__LINE__) (c, i);
std::string convert(VSS_ID id)
{
WCHAR GuidStr[128] = {};
int rc = StringFromGUID2(id, GuidStr, 128);
if (rc > 0)
{
return wxString(std::wstring(GuidStr, rc - 1)).ToStdString();
}
return std::string();
}
std::string ConvertFromWchar(std::wstring str)
{
return ConvertToUTF8(str);
}
}

View File

@ -31,3 +31,11 @@ wxString trans_2( wxString str, const wxString& ins1, const wxString& ins2 )
return str;
}
wxString trans_3(wxString str, const wxString & ins1, const wxString & ins2, const wxString & ins3)
{
str.Replace(wxT("_1_"), ins1);
str.Replace(wxT("_2_"), ins2);
str.Replace(wxT("_3_"), ins3);
return str;
}

View File

@ -1,4 +1,5 @@
#include <wx/string.h>
wxString trans_1(wxString str, const wxString& ins1);
wxString trans_2(wxString str, const wxString& ins1, const wxString& ins2);
wxString trans_2(wxString str, const wxString& ins1, const wxString& ins2);
wxString trans_3(wxString str, const wxString& ins1, const wxString& ins2, const wxString& ins3);

View File

@ -220,6 +220,7 @@
<ClCompile Include="Logs.cpp" />
<ClCompile Include="main.cpp" />
<ClCompile Include="RestoreWindowsComponents.cpp" />
<ClCompile Include="SelectRestoreWindowsComponents.cpp" />
<ClCompile Include="SelectWindowsComponents.cpp" />
<ClCompile Include="Settings.cpp" />
<ClCompile Include="SetupWizard.cpp" />
@ -246,6 +247,7 @@
<ClInclude Include="main.h" />
<ClInclude Include="resource.h" />
<ClInclude Include="RestoreWindowsComponents.h" />
<ClInclude Include="SelectRestoreWindowsComponents.h" />
<ClInclude Include="SelectWindowsComponents.h" />
<ClInclude Include="Settings.h" />
<ClInclude Include="SetupWizard.h" />
@ -256,6 +258,7 @@
<ClInclude Include="TranslationHelper.h" />
<ClInclude Include="TrayIcon.h" />
<ClInclude Include="gui\GUI.h" />
<ClInclude Include="types.h" />
</ItemGroup>
<ItemGroup>
<None Include="icon1.ico" />

View File

@ -87,6 +87,9 @@
<ClCompile Include="gui\GUIRestoreWindowsComponents.cpp">
<Filter>GUI</Filter>
</ClCompile>
<ClCompile Include="SelectRestoreWindowsComponents.cpp">
<Filter>Quelldateien</Filter>
</ClCompile>
<ClCompile Include="RestoreWindowsComponents.cpp">
<Filter>Quelldateien</Filter>
</ClCompile>
@ -161,9 +164,15 @@
<ClInclude Include="gui\GUIRestoreWindowsComponents.h">
<Filter>GUI</Filter>
</ClInclude>
<ClInclude Include="SelectRestoreWindowsComponents.h">
<Filter>Headerdateien</Filter>
</ClInclude>
<ClInclude Include="RestoreWindowsComponents.h">
<Filter>Headerdateien</Filter>
</ClInclude>
<ClInclude Include="types.h">
<Filter>Headerdateien</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<None Include="icon1.ico">

View File

@ -65,3 +65,56 @@ GUISelectRestoreComponents::~GUISelectRestoreComponents()
m_button2->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( GUISelectRestoreComponents::onCancel ), NULL, this );
}
GUIRestoreComponents::GUIRestoreComponents( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style )
{
this->SetSizeHints( wxDefaultSize, wxDefaultSize );
wxBoxSizer* bSizer4;
bSizer4 = new wxBoxSizer( wxVERTICAL );
m_staticText1 = new wxStaticText( this, wxID_ANY, _("Starting restore operation..."), wxDefaultPosition, wxDefaultSize, 0 );
m_staticText1->Wrap( -1 );
bSizer4->Add( m_staticText1, 0, wxALL, 5 );
m_staticText2 = new wxStaticText( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
m_staticText2->Wrap( -1 );
bSizer4->Add( m_staticText2, 0, wxALL, 5 );
m_gauge1 = new wxGauge( this, wxID_ANY, 100, wxDefaultPosition, wxDefaultSize, wxGA_HORIZONTAL );
m_gauge1->SetValue( 0 );
bSizer4->Add( m_gauge1, 0, wxALL|wxEXPAND, 5 );
m_textCtrl1 = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE|wxTE_READONLY );
bSizer4->Add( m_textCtrl1, 20, wxALL|wxEXPAND, 5 );
wxBoxSizer* bSizer5;
bSizer5 = new wxBoxSizer( wxHORIZONTAL );
bSizer5->Add( 0, 0, 1, wxEXPAND, 5 );
m_button3 = new wxButton( this, wxID_ANY, _("OK"), wxDefaultPosition, wxDefaultSize, 0 );
m_button3->Enable( false );
bSizer5->Add( m_button3, 0, wxALL, 5 );
bSizer4->Add( bSizer5, 1, wxEXPAND, 5 );
this->SetSizer( bSizer4 );
this->Layout();
this->Centre( wxBOTH );
// Connect Events
m_button3->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( GUIRestoreComponents::onOkClick ), NULL, this );
}
GUIRestoreComponents::~GUIRestoreComponents()
{
// Disconnect Events
m_button3->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( GUIRestoreComponents::onOkClick ), NULL, this );
}

View File

@ -21,6 +21,9 @@
#include <wx/sizer.h>
#include <wx/button.h>
#include <wx/dialog.h>
#include <wx/stattext.h>
#include <wx/gauge.h>
#include <wx/textctrl.h>
///////////////////////////////////////////////////////////////////////////
@ -52,4 +55,29 @@ class GUISelectRestoreComponents : public wxDialog
};
///////////////////////////////////////////////////////////////////////////////
/// Class GUIRestoreComponents
///////////////////////////////////////////////////////////////////////////////
class GUIRestoreComponents : public wxDialog
{
private:
protected:
wxStaticText* m_staticText1;
wxStaticText* m_staticText2;
wxGauge* m_gauge1;
wxTextCtrl* m_textCtrl1;
wxButton* m_button3;
// Virtual event handlers, overide them in your derived class
virtual void onOkClick( wxCommandEvent& event ) { event.Skip(); }
public:
GUIRestoreComponents( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Restoring Windows components"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 836,570 ), long style = wxDEFAULT_DIALOG_STYLE );
~GUIRestoreComponents();
};
#endif //__GUIRESTOREWINDOWSCOMPONENTS_H__

View File

@ -26,7 +26,7 @@
<property name="ui_table">UI</property>
<property name="use_enum">0</property>
<property name="use_microsoft_bom">0</property>
<object class="Dialog" expanded="1">
<object class="Dialog" expanded="0">
<property name="aui_managed">0</property>
<property name="aui_manager_style">wxAUI_MGR_DEFAULT</property>
<property name="bg"></property>
@ -88,25 +88,25 @@
<event name="OnSetFocus"></event>
<event name="OnSize"></event>
<event name="OnUpdateUI"></event>
<object class="wxBoxSizer" expanded="1">
<object class="wxBoxSizer" expanded="0">
<property name="minimum_size"></property>
<property name="name">bSizer1</property>
<property name="orient">wxVERTICAL</property>
<property name="permission">none</property>
<object class="sizeritem" expanded="1">
<object class="sizeritem" expanded="0">
<property name="border">5</property>
<property name="flag">wxEXPAND</property>
<property name="proportion">20</property>
<object class="wxBoxSizer" expanded="1">
<object class="wxBoxSizer" expanded="0">
<property name="minimum_size"></property>
<property name="name">bSizer2</property>
<property name="orient">wxHORIZONTAL</property>
<property name="permission">none</property>
<object class="sizeritem" expanded="1">
<object class="sizeritem" expanded="0">
<property name="border">5</property>
<property name="flag">wxALL|wxEXPAND</property>
<property name="proportion">15</property>
<object class="wxListBox" expanded="1">
<object class="wxListBox" expanded="0">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
@ -190,11 +190,11 @@
<event name="OnUpdateUI"></event>
</object>
</object>
<object class="sizeritem" expanded="1">
<object class="sizeritem" expanded="0">
<property name="border">5</property>
<property name="flag">wxALL|wxEXPAND</property>
<property name="proportion">85</property>
<object class="wxTreeCtrl" expanded="1">
<object class="wxTreeCtrl" expanded="0">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
@ -294,30 +294,30 @@
</object>
</object>
</object>
<object class="sizeritem" expanded="1">
<object class="sizeritem" expanded="0">
<property name="border">5</property>
<property name="flag">wxEXPAND</property>
<property name="proportion">1</property>
<object class="wxBoxSizer" expanded="1">
<object class="wxBoxSizer" expanded="0">
<property name="minimum_size"></property>
<property name="name">bSizer3</property>
<property name="orient">wxHORIZONTAL</property>
<property name="permission">none</property>
<object class="sizeritem" expanded="1">
<object class="sizeritem" expanded="0">
<property name="border">5</property>
<property name="flag">wxEXPAND</property>
<property name="proportion">1</property>
<object class="spacer" expanded="1">
<object class="spacer" expanded="0">
<property name="height">0</property>
<property name="permission">protected</property>
<property name="width">0</property>
</object>
</object>
<object class="sizeritem" expanded="1">
<object class="sizeritem" expanded="0">
<property name="border">5</property>
<property name="flag">wxALL</property>
<property name="proportion">0</property>
<object class="wxButton" expanded="1">
<object class="wxButton" expanded="0">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
@ -401,11 +401,11 @@
<event name="OnUpdateUI"></event>
</object>
</object>
<object class="sizeritem" expanded="1">
<object class="sizeritem" expanded="0">
<property name="border">5</property>
<property name="flag">wxALL</property>
<property name="proportion">0</property>
<object class="wxButton" expanded="1">
<object class="wxButton" expanded="0">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
@ -493,5 +493,527 @@
</object>
</object>
</object>
<object class="Dialog" expanded="1">
<property name="aui_managed">0</property>
<property name="aui_manager_style">wxAUI_MGR_DEFAULT</property>
<property name="bg"></property>
<property name="center">wxBOTH</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<property name="enabled">1</property>
<property name="event_handler">impl_virtual</property>
<property name="extra_style"></property>
<property name="fg"></property>
<property name="font"></property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="maximum_size"></property>
<property name="minimum_size"></property>
<property name="name">GUIRestoreComponents</property>
<property name="pos"></property>
<property name="size">836,570</property>
<property name="style">wxDEFAULT_DIALOG_STYLE</property>
<property name="subclass"></property>
<property name="title">Restoring Windows components</property>
<property name="tooltip"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnActivate"></event>
<event name="OnActivateApp"></event>
<event name="OnAuiFindManager"></event>
<event name="OnAuiPaneButton"></event>
<event name="OnAuiPaneClose"></event>
<event name="OnAuiPaneMaximize"></event>
<event name="OnAuiPaneRestore"></event>
<event name="OnAuiRender"></event>
<event name="OnChar"></event>
<event name="OnClose"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnHibernate"></event>
<event name="OnIconize"></event>
<event name="OnIdle"></event>
<event name="OnInitDialog"></event>
<event name="OnKeyDown"></event>
<event name="OnKeyUp"></event>
<event name="OnKillFocus"></event>
<event name="OnLeaveWindow"></event>
<event name="OnLeftDClick"></event>
<event name="OnLeftDown"></event>
<event name="OnLeftUp"></event>
<event name="OnMiddleDClick"></event>
<event name="OnMiddleDown"></event>
<event name="OnMiddleUp"></event>
<event name="OnMotion"></event>
<event name="OnMouseEvents"></event>
<event name="OnMouseWheel"></event>
<event name="OnPaint"></event>
<event name="OnRightDClick"></event>
<event name="OnRightDown"></event>
<event name="OnRightUp"></event>
<event name="OnSetFocus"></event>
<event name="OnSize"></event>
<event name="OnUpdateUI"></event>
<object class="wxBoxSizer" expanded="1">
<property name="minimum_size"></property>
<property name="name">bSizer4</property>
<property name="orient">wxVERTICAL</property>
<property name="permission">none</property>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxALL</property>
<property name="proportion">0</property>
<object class="wxStaticText" expanded="1">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
<property name="TopDockable">1</property>
<property name="aui_layer"></property>
<property name="aui_name"></property>
<property name="aui_position"></property>
<property name="aui_row"></property>
<property name="best_size"></property>
<property name="bg"></property>
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
<property name="close_button">1</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<property name="default_pane">0</property>
<property name="dock">Dock</property>
<property name="dock_fixed">0</property>
<property name="docking">Left</property>
<property name="enabled">1</property>
<property name="fg"></property>
<property name="floatable">1</property>
<property name="font"></property>
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">Starting restore operation...</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
<property name="min_size"></property>
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">m_staticText1</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
<property name="permission">protected</property>
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="resize">Resizable</property>
<property name="show">1</property>
<property name="size"></property>
<property name="style"></property>
<property name="subclass"></property>
<property name="toolbar_pane">0</property>
<property name="tooltip"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<property name="wrap">-1</property>
<event name="OnChar"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
<event name="OnKeyUp"></event>
<event name="OnKillFocus"></event>
<event name="OnLeaveWindow"></event>
<event name="OnLeftDClick"></event>
<event name="OnLeftDown"></event>
<event name="OnLeftUp"></event>
<event name="OnMiddleDClick"></event>
<event name="OnMiddleDown"></event>
<event name="OnMiddleUp"></event>
<event name="OnMotion"></event>
<event name="OnMouseEvents"></event>
<event name="OnMouseWheel"></event>
<event name="OnPaint"></event>
<event name="OnRightDClick"></event>
<event name="OnRightDown"></event>
<event name="OnRightUp"></event>
<event name="OnSetFocus"></event>
<event name="OnSize"></event>
<event name="OnUpdateUI"></event>
</object>
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxALL</property>
<property name="proportion">0</property>
<object class="wxStaticText" expanded="1">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
<property name="TopDockable">1</property>
<property name="aui_layer"></property>
<property name="aui_name"></property>
<property name="aui_position"></property>
<property name="aui_row"></property>
<property name="best_size"></property>
<property name="bg"></property>
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
<property name="close_button">1</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<property name="default_pane">0</property>
<property name="dock">Dock</property>
<property name="dock_fixed">0</property>
<property name="docking">Left</property>
<property name="enabled">1</property>
<property name="fg"></property>
<property name="floatable">1</property>
<property name="font"></property>
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label"></property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
<property name="min_size"></property>
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">m_staticText2</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
<property name="permission">protected</property>
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="resize">Resizable</property>
<property name="show">1</property>
<property name="size"></property>
<property name="style"></property>
<property name="subclass"></property>
<property name="toolbar_pane">0</property>
<property name="tooltip"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<property name="wrap">-1</property>
<event name="OnChar"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
<event name="OnKeyUp"></event>
<event name="OnKillFocus"></event>
<event name="OnLeaveWindow"></event>
<event name="OnLeftDClick"></event>
<event name="OnLeftDown"></event>
<event name="OnLeftUp"></event>
<event name="OnMiddleDClick"></event>
<event name="OnMiddleDown"></event>
<event name="OnMiddleUp"></event>
<event name="OnMotion"></event>
<event name="OnMouseEvents"></event>
<event name="OnMouseWheel"></event>
<event name="OnPaint"></event>
<event name="OnRightDClick"></event>
<event name="OnRightDown"></event>
<event name="OnRightUp"></event>
<event name="OnSetFocus"></event>
<event name="OnSize"></event>
<event name="OnUpdateUI"></event>
</object>
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxALL|wxEXPAND</property>
<property name="proportion">0</property>
<object class="wxGauge" expanded="1">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
<property name="TopDockable">1</property>
<property name="aui_layer"></property>
<property name="aui_name"></property>
<property name="aui_position"></property>
<property name="aui_row"></property>
<property name="best_size"></property>
<property name="bg"></property>
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
<property name="close_button">1</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<property name="default_pane">0</property>
<property name="dock">Dock</property>
<property name="dock_fixed">0</property>
<property name="docking">Left</property>
<property name="enabled">1</property>
<property name="fg"></property>
<property name="floatable">1</property>
<property name="font"></property>
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
<property name="min_size"></property>
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">m_gauge1</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
<property name="permission">protected</property>
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="range">100</property>
<property name="resize">Resizable</property>
<property name="show">1</property>
<property name="size"></property>
<property name="style">wxGA_HORIZONTAL</property>
<property name="subclass"></property>
<property name="toolbar_pane">0</property>
<property name="tooltip"></property>
<property name="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></property>
<property name="value">0</property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnChar"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
<event name="OnKeyUp"></event>
<event name="OnKillFocus"></event>
<event name="OnLeaveWindow"></event>
<event name="OnLeftDClick"></event>
<event name="OnLeftDown"></event>
<event name="OnLeftUp"></event>
<event name="OnMiddleDClick"></event>
<event name="OnMiddleDown"></event>
<event name="OnMiddleUp"></event>
<event name="OnMotion"></event>
<event name="OnMouseEvents"></event>
<event name="OnMouseWheel"></event>
<event name="OnPaint"></event>
<event name="OnRightDClick"></event>
<event name="OnRightDown"></event>
<event name="OnRightUp"></event>
<event name="OnSetFocus"></event>
<event name="OnSize"></event>
<event name="OnUpdateUI"></event>
</object>
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxALL|wxEXPAND</property>
<property name="proportion">20</property>
<object class="wxTextCtrl" expanded="1">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
<property name="TopDockable">1</property>
<property name="aui_layer"></property>
<property name="aui_name"></property>
<property name="aui_position"></property>
<property name="aui_row"></property>
<property name="best_size"></property>
<property name="bg"></property>
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
<property name="close_button">1</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<property name="default_pane">0</property>
<property name="dock">Dock</property>
<property name="dock_fixed">0</property>
<property name="docking">Left</property>
<property name="enabled">1</property>
<property name="fg"></property>
<property name="floatable">1</property>
<property name="font"></property>
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
<property name="maxlength"></property>
<property name="min_size"></property>
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">m_textCtrl1</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
<property name="permission">protected</property>
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="resize">Resizable</property>
<property name="show">1</property>
<property name="size"></property>
<property name="style">wxTE_MULTILINE|wxTE_READONLY</property>
<property name="subclass"></property>
<property name="toolbar_pane">0</property>
<property name="tooltip"></property>
<property name="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></property>
<property name="value"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnChar"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
<event name="OnKeyUp"></event>
<event name="OnKillFocus"></event>
<event name="OnLeaveWindow"></event>
<event name="OnLeftDClick"></event>
<event name="OnLeftDown"></event>
<event name="OnLeftUp"></event>
<event name="OnMiddleDClick"></event>
<event name="OnMiddleDown"></event>
<event name="OnMiddleUp"></event>
<event name="OnMotion"></event>
<event name="OnMouseEvents"></event>
<event name="OnMouseWheel"></event>
<event name="OnPaint"></event>
<event name="OnRightDClick"></event>
<event name="OnRightDown"></event>
<event name="OnRightUp"></event>
<event name="OnSetFocus"></event>
<event name="OnSize"></event>
<event name="OnText"></event>
<event name="OnTextEnter"></event>
<event name="OnTextMaxLen"></event>
<event name="OnTextURL"></event>
<event name="OnUpdateUI"></event>
</object>
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxEXPAND</property>
<property name="proportion">1</property>
<object class="wxBoxSizer" expanded="1">
<property name="minimum_size"></property>
<property name="name">bSizer5</property>
<property name="orient">wxHORIZONTAL</property>
<property name="permission">none</property>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxEXPAND</property>
<property name="proportion">1</property>
<object class="spacer" expanded="1">
<property name="height">0</property>
<property name="permission">protected</property>
<property name="width">0</property>
</object>
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxALL</property>
<property name="proportion">0</property>
<object class="wxButton" expanded="1">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
<property name="TopDockable">1</property>
<property name="aui_layer"></property>
<property name="aui_name"></property>
<property name="aui_position"></property>
<property name="aui_row"></property>
<property name="best_size"></property>
<property name="bg"></property>
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
<property name="close_button">1</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<property name="default">0</property>
<property name="default_pane">0</property>
<property name="dock">Dock</property>
<property name="dock_fixed">0</property>
<property name="docking">Left</property>
<property name="enabled">0</property>
<property name="fg"></property>
<property name="floatable">1</property>
<property name="font"></property>
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">OK</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
<property name="min_size"></property>
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">m_button3</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
<property name="permission">protected</property>
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="resize">Resizable</property>
<property name="show">1</property>
<property name="size"></property>
<property name="style"></property>
<property name="subclass"></property>
<property name="toolbar_pane">0</property>
<property name="tooltip"></property>
<property name="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnButtonClick">onOkClick</event>
<event name="OnChar"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
<event name="OnKeyUp"></event>
<event name="OnKillFocus"></event>
<event name="OnLeaveWindow"></event>
<event name="OnLeftDClick"></event>
<event name="OnLeftDown"></event>
<event name="OnLeftUp"></event>
<event name="OnMiddleDClick"></event>
<event name="OnMiddleDown"></event>
<event name="OnMiddleUp"></event>
<event name="OnMotion"></event>
<event name="OnMouseEvents"></event>
<event name="OnMouseWheel"></event>
<event name="OnPaint"></event>
<event name="OnRightDClick"></event>
<event name="OnRightDown"></event>
<event name="OnRightUp"></event>
<event name="OnSetFocus"></event>
<event name="OnSize"></event>
<event name="OnUpdateUI"></event>
</object>
</object>
</object>
</object>
</object>
</object>
</object>
</wxFormBuilder_Project>

View File

@ -40,7 +40,7 @@
#ifdef _WIN32
#include "SelectWindowsComponents.h"
#include "RestoreWindowsComponents.h"
#include "SelectRestoreWindowsComponents.h"
#endif
#include <wx/apptrait.h>

View File

@ -1149,6 +1149,32 @@ unsigned long hexToULong(const std::string &data)
return return_value;
}
std::string byteToHex(unsigned char ch)
{
std::string r;
r.resize(2);
r[0] = hex_array[ch / 16];
r[1] = hex_array[ch % 16];
return r;
}
std::string bytesToHex(const unsigned char *b, size_t bsize)
{
std::string r;
r.reserve(bsize * 2);
for (size_t i = 0; i<bsize; ++i)
{
r += byteToHex(b[i]);
}
return r;
}
std::string bytesToHex(const std::string& data)
{
return bytesToHex(reinterpret_cast<const unsigned char*>(data.data()), data.size());
}
string htmldecode(string str, bool html, char xc)
{

View File

@ -22,6 +22,7 @@
#include <string>
#include <vector>
#include <map>
#include "types.h"
std::string getafter(const std::string &str,const std::string &data);
std::string getafterinc(const std::string &str,const std::string &data);
@ -92,6 +93,9 @@ std::wstring UnescapeSQLString(std::wstring pStr);
void ParseParamStrHttp(const std::string &pStr, std::map<std::string, std::string> *pMap);
std::string FormatTime(int timeins);
bool IsHex(const std::string &str);
std::string byteToHex(unsigned char ch);
std::string bytesToHex(const unsigned char *b, size_t bsize);
std::string bytesToHex(const std::string& data);
unsigned long hexToULong(const std::string &data);
std::wstring htmldecode(std::string str, bool html=true, char xc='%');
bool checkhtml(const std::string &str);
@ -112,4 +116,226 @@ void replaceNonAlphaNumeric(std::string &str, char rch);
std::string conv_filename(std::string fn);
std::string EscapeParamString(const std::string &pStr);
namespace
{
bool is_big_endian(void)
{
union {
unsigned int i;
char c[4];
} bint = { 0x01020304 };
return bint.c[0] == 1;
}
unsigned int endian_swap(unsigned int x)
{
return (x >> 24) |
((x << 8) & 0x00FF0000) |
((x >> 8) & 0x0000FF00) |
(x << 24);
}
unsigned short endian_swap(unsigned short x)
{
return x = (x >> 8) |
(x << 8);
}
std::string endian_swap_utf16(std::string str)
{
for (size_t i = 0; i<str.size(); i += 2)
{
unsigned short *t = (unsigned short*)&str[i];
*t = endian_swap(*t);
}
return str;
}
unsigned long long int endian_swap(unsigned long long int x)
{
#ifdef _WIN32
return (x >> 56) |
((x << 40) & 0x00FF000000000000) |
((x << 24) & 0x0000FF0000000000) |
((x << 8) & 0x000000FF00000000) |
((x >> 8) & 0x00000000FF000000) |
((x >> 24) & 0x0000000000FF0000) |
((x >> 40) & 0x000000000000FF00) |
(x << 56);
#else
return (x >> 56) |
((x << 40) & 0x00FF000000000000LLU) |
((x << 24) & 0x0000FF0000000000LLU) |
((x << 8) & 0x000000FF00000000LLU) |
((x >> 8) & 0x00000000FF000000LLU) |
((x >> 24) & 0x0000000000FF0000LLU) |
((x >> 40) & 0x000000000000FF00LLU) |
(x << 56);
#endif
}
unsigned int little_endian(unsigned int x)
{
if (is_big_endian())
{
return endian_swap(x);
}
else
{
return x;
}
}
unsigned short little_endian(unsigned short x)
{
if (is_big_endian())
{
return endian_swap(x);
}
else
{
return x;
}
}
int little_endian(int x)
{
if (is_big_endian())
{
return static_cast<int>(endian_swap(static_cast<unsigned int>(x)));
}
else
{
return x;
}
}
uint64 little_endian(uint64 x)
{
if (is_big_endian())
{
return endian_swap(x);
}
else
{
return x;
}
}
int64 little_endian(int64 x)
{
if (is_big_endian())
{
return static_cast<int64>(endian_swap(static_cast<uint64>(x)));
}
else
{
return x;
}
}
float little_endian(float x)
{
if (is_big_endian())
{
unsigned int* ptr = reinterpret_cast<unsigned int*>(&x);
unsigned int ret = endian_swap(*ptr);
return *reinterpret_cast<float*>(&ret);
}
else
{
return x;
}
}
unsigned int big_endian(unsigned int x)
{
if (!is_big_endian())
{
return endian_swap(x);
}
else
{
return x;
}
}
unsigned short big_endian(unsigned short x)
{
if (!is_big_endian())
{
return endian_swap(x);
}
else
{
return x;
}
}
int big_endian(int x)
{
if (!is_big_endian())
{
return static_cast<int>(endian_swap(static_cast<unsigned int>(x)));
}
else
{
return x;
}
}
uint64 big_endian(uint64 x)
{
if (!is_big_endian())
{
return endian_swap(x);
}
else
{
return x;
}
}
int64 big_endian(int64 x)
{
if (!is_big_endian())
{
return static_cast<int64>(endian_swap(static_cast<uint64>(x)));
}
else
{
return x;
}
}
float big_endian(float x)
{
if (!is_big_endian())
{
unsigned int* ptr = reinterpret_cast<unsigned int*>(&x);
unsigned int ret = endian_swap(*ptr);
return *reinterpret_cast<float*>(&ret);
}
else
{
return x;
}
}
std::string big_endian_utf16(std::string str)
{
if (!is_big_endian())
{
return endian_swap_utf16(str);
}
else
{
return str;
}
}
}
#endif

23
types.h Normal file
View File

@ -0,0 +1,23 @@
#pragma once
#ifdef __linux__
typedef long long int __int64;
typedef unsigned long long int uint64;
#elif _WIN32
typedef unsigned __int64 uint64;
#else
typedef long long int __int64;
typedef unsigned long long int uint64;
#endif
#ifndef NULL
#define NULL 0
#endif
typedef __int64 int64;
typedef unsigned char uchar;
typedef int _i32;
typedef __int64 _i64;
typedef unsigned int _u32;
typedef unsigned short _u16;
typedef short _i16;