summaryrefslogtreecommitdiffstats
path: root/installerbuilder/libinstaller/3rdparty/p7zip_9.04/unix/CPP/Windows/Control
diff options
context:
space:
mode:
Diffstat (limited to 'installerbuilder/libinstaller/3rdparty/p7zip_9.04/unix/CPP/Windows/Control')
-rw-r--r--installerbuilder/libinstaller/3rdparty/p7zip_9.04/unix/CPP/Windows/Control/ComboBox.h67
-rw-r--r--installerbuilder/libinstaller/3rdparty/p7zip_9.04/unix/CPP/Windows/Control/Controls.cpp467
-rw-r--r--installerbuilder/libinstaller/3rdparty/p7zip_9.04/unix/CPP/Windows/Control/Dialog.cpp525
-rw-r--r--installerbuilder/libinstaller/3rdparty/p7zip_9.04/unix/CPP/Windows/Control/Dialog.h172
-rw-r--r--installerbuilder/libinstaller/3rdparty/p7zip_9.04/unix/CPP/Windows/Control/DialogImpl.h61
-rw-r--r--installerbuilder/libinstaller/3rdparty/p7zip_9.04/unix/CPP/Windows/Control/Edit.h24
-rw-r--r--installerbuilder/libinstaller/3rdparty/p7zip_9.04/unix/CPP/Windows/Control/ListView.h157
-rw-r--r--installerbuilder/libinstaller/3rdparty/p7zip_9.04/unix/CPP/Windows/Control/ProgressBar.h34
-rw-r--r--installerbuilder/libinstaller/3rdparty/p7zip_9.04/unix/CPP/Windows/Control/Static.h23
-rw-r--r--installerbuilder/libinstaller/3rdparty/p7zip_9.04/unix/CPP/Windows/Control/StatusBar.h56
-rw-r--r--installerbuilder/libinstaller/3rdparty/p7zip_9.04/unix/CPP/Windows/Control/Window2.cpp211
-rw-r--r--installerbuilder/libinstaller/3rdparty/p7zip_9.04/unix/CPP/Windows/Control/Window2.h107
12 files changed, 1904 insertions, 0 deletions
diff --git a/installerbuilder/libinstaller/3rdparty/p7zip_9.04/unix/CPP/Windows/Control/ComboBox.h b/installerbuilder/libinstaller/3rdparty/p7zip_9.04/unix/CPP/Windows/Control/ComboBox.h
new file mode 100644
index 000000000..726a62b5c
--- /dev/null
+++ b/installerbuilder/libinstaller/3rdparty/p7zip_9.04/unix/CPP/Windows/Control/ComboBox.h
@@ -0,0 +1,67 @@
+// Windows/Control/ComboBox.h
+
+#ifndef __WINDOWS_WX_CONTROL_COMBOBOX_H
+#define __WINDOWS_WX_CONTROL_COMBOBOX_H
+
+#include "Windows/Window.h"
+#include "Windows/Defs.h"
+
+#ifndef _WIN32
+#define CB_ERR (-1) // wxNOT_FOUND
+#endif
+
+class wxComboBox;
+
+namespace NWindows {
+ namespace NControl {
+
+ class CComboBox // : public CWindow
+ {
+ wxComboBox* _choice;
+ public:
+ CComboBox() : _choice(0) {}
+
+ void Attach(wxWindow * newWindow);
+ wxWindow * Detach();
+
+ int AddString(const TCHAR * txt);
+
+ void SetText(LPCTSTR s);
+
+ void GetText(CSysString &s);
+
+ int GetCount() const ;
+ void GetLBText(int index, CSysString &s);
+
+ void SetCurSel(int index);
+ int GetCurSel();
+
+ void SetItemData(int index, int val);
+
+ int GetItemData(int index);
+
+ void Enable(bool state);
+
+ void ResetContent();
+ };
+
+ class CComboBoxEx : public CComboBox // : public CWindow
+ {
+ public:
+ /* FIXME
+ LRESULT DeleteItem(int index)
+ { return SendMessage(CBEM_DELETEITEM, index, 0); }
+ LRESULT InsertItem(COMBOBOXEXITEM *item)
+ { return SendMessage(CBEM_INSERTITEM, 0, (LPARAM)item); }
+ DWORD SetExtendedStyle(DWORD exMask, DWORD exStyle)
+ { return (DWORD)SendMessage(CBEM_SETEXTENDEDSTYLE, exMask, exStyle); }
+ HWND GetEditControl()
+ { return (HWND)SendMessage(CBEM_GETEDITCONTROL, 0, 0); }
+ */
+ };
+
+
+ }
+}
+
+#endif // __WINDOWS_WX_CONTROL_COMBOBOX_H
diff --git a/installerbuilder/libinstaller/3rdparty/p7zip_9.04/unix/CPP/Windows/Control/Controls.cpp b/installerbuilder/libinstaller/3rdparty/p7zip_9.04/unix/CPP/Windows/Control/Controls.cpp
new file mode 100644
index 000000000..837f31a3e
--- /dev/null
+++ b/installerbuilder/libinstaller/3rdparty/p7zip_9.04/unix/CPP/Windows/Control/Controls.cpp
@@ -0,0 +1,467 @@
+// Dialog.cpp
+
+#include "StdAfx.h"
+
+// For compilers that support precompilation, includes "wx/wx.h".
+#include "wx/wxprec.h"
+
+#ifdef __BORLANDC__
+ #pragma hdrstop
+#endif
+
+// for all others, include the necessary headers (this file is usually all you
+// need because it includes almost all "standard" wxWidgets headers)
+#ifndef WX_PRECOMP
+ #include "wx/wx.h"
+ #include "wx/imaglist.h"
+ #include "wx/listctrl.h"
+#endif
+
+#include "Windows/Control/Dialog.h"
+
+class LockGUI
+{
+ bool _IsMain;
+ public:
+ LockGUI() {
+ _IsMain = wxThread::IsMain();
+ if (!_IsMain) {
+ // DEBUG printf("GuiEnter(0x%lx)\n",wxThread::GetCurrentId());
+ wxMutexGuiEnter();
+ }
+ }
+ ~LockGUI() {
+ if (!_IsMain) {
+ wxMutexGuiLeave();
+ // DEBUG printf("GuiLeave(0x%lx)\n",wxThread::GetCurrentId());
+ }
+ }
+};
+/////////////////////////
+
+namespace NWindows {
+ namespace NControl {
+
+ void CDialogChildControl::SetText(LPCWSTR s)
+ {
+ LockGUI lock;
+ ((wxTextCtrl *)_window)->SetValue(s);
+ }
+
+ bool CDialogChildControl::GetText(CSysString &s)
+ {
+ wxString str;
+ {
+ LockGUI lock;
+ str = ((wxTextCtrl *)_window)->GetValue();
+ }
+ s = str;
+ return true;
+ }
+ }
+}
+
+///////////////////////// Windows/Control/ComboBox.cpp
+#include "Windows/Control/ComboBox.h"
+
+namespace NWindows {
+ namespace NControl {
+
+ void CComboBox::Attach(wxWindow * newWindow) { _choice = (wxComboBox*)newWindow; }
+
+ wxWindow * CComboBox::Detach()
+ {
+ wxWindow * window = _choice;
+ _choice = NULL;
+ return window;
+ }
+
+ int CComboBox::AddString(const TCHAR * txt) {
+ LockGUI lock;
+ wxString item(txt);
+ return _choice->Append(item);
+ }
+
+ void CComboBox::SetText(LPCTSTR s) {
+ LockGUI lock;
+ wxString str(s);
+ _choice->SetValue(str);
+ }
+
+ void CComboBox::GetText(CSysString &s) {
+ LockGUI lock;
+ wxString str = _choice->GetValue();
+ s = str;
+ }
+
+ int CComboBox::GetCount() const {
+ LockGUI lock;
+ return _choice->GetCount();
+ }
+
+ void CComboBox::GetLBText(int index, CSysString &s) {
+ LockGUI lock;
+ wxString str = _choice->GetString(index);
+ s = str;
+ }
+
+ void CComboBox::SetCurSel(int index) {
+ LockGUI lock;
+ _choice->SetSelection(index);
+ }
+
+ int CComboBox::GetCurSel() {
+ LockGUI lock;
+ return _choice->GetSelection();
+ }
+
+ void CComboBox::SetItemData(int index, int val) {
+ LockGUI lock;
+ _choice->SetClientData( index, (void *)(((char *)0) + val));
+ }
+
+ int CComboBox::GetItemData(int index)
+ {
+ LockGUI lock;
+ void * data = _choice->GetClientData(index);
+ int ret = (int)(((char *)data) - ((char *)0));
+ return ret;
+ }
+
+ void CComboBox::Enable(bool state) {
+ LockGUI lock;
+ _choice->Enable(state);
+ }
+
+ void CComboBox::ResetContent() {
+ LockGUI lock;
+ _choice->Clear();
+ }
+ }
+}
+
+///////////////////////// Windows/Control/Edit.cpp
+#include "Windows/Control/Edit.h"
+
+namespace NWindows {
+ namespace NControl {
+
+ void CEdit::SetPasswordChar(WPARAM c) // Warning : does not work for wxMSW
+ {
+ LockGUI lock;
+ long style = _window->GetWindowStyle();
+ if ( c == 0 ) style &= ~(wxTE_PASSWORD);
+ else style |= wxTE_PASSWORD;
+ _window->SetWindowStyle(style);
+ _window->Refresh();
+ }
+
+
+ void CEdit::Show(int cmdShow)
+ {
+ LockGUI lock;
+ // FIXME _window->Show(cmdShow != SW_HIDE);
+ _window->Enable(cmdShow != SW_HIDE);
+ }
+
+ void CEdit::SetText(LPCWSTR s)
+ {
+ LockGUI lock;
+ ((wxTextCtrl *)_window)->SetValue(s);
+ }
+
+ bool CEdit::GetText(CSysString &s)
+ {
+ wxString str;
+ {
+ LockGUI lock;
+ str = ((wxTextCtrl *)_window)->GetValue();
+ }
+ s = str;
+ return true;
+ }
+
+ }
+}
+
+///////////////////////// Windows/Control/ProgressBar.cpp
+#include "Windows/Control/ProgressBar.h"
+
+namespace NWindows {
+ namespace NControl {
+
+ CProgressBar::CProgressBar(wxWindow* newWindow):
+ _window((wxGauge *)newWindow) , _minValue(0), _range(0) { }
+
+ void CProgressBar::Attach(wxWindow* newWindow) {
+ _window = (wxGauge *)newWindow;
+ _minValue = 0;
+ _range = 0;
+ }
+
+ void CProgressBar::SetRange32(int minValue, int maxValue) {
+ int range = maxValue - minValue;
+ if (range >= 1)
+ {
+ LockGUI lock;
+ _minValue = minValue;
+ _range = range;
+ _window->SetRange(_range);
+ }
+ }
+
+ void CProgressBar::SetPos(int pos) {
+ if (_range >= 1)
+ {
+ LockGUI lock;
+ int value = pos - _minValue;
+ if ((value >= 0) && (value <= _range)) _window->SetValue(value);
+ }
+ }
+
+ }
+}
+
+///////////////////////// Windows/Control/StatusBar.cpp
+#include "Windows/Control/StatusBar.h"
+
+namespace NWindows {
+ namespace NControl {
+
+ void CStatusBar::Attach(wxWindow * newWindow) { _statusBar = (wxStatusBar*)newWindow; }
+
+ wxWindow * CStatusBar::Detach()
+ {
+ wxWindow * window = _statusBar;
+ _statusBar = NULL;
+ return window;
+ }
+
+ void CStatusBar::SetText(int index, LPCTSTR text)
+ {
+ _statusBar->SetStatusText(text,index);
+ }
+
+ }
+
+}
+
+///////////////////////// Windows/Control/ListView.cpp
+#include "Windows/Control/ListView.h"
+
+namespace NWindows {
+namespace NControl {
+
+ void CListView::Attach(wxWindow * newWindow) { _list = (wxListCtrl *)newWindow; }
+
+ CListView::operator HWND() const { return (HWND)_list; }
+
+ int CListView::GetItemCount() const {return _list->GetItemCount(); }
+
+ int CListView::InsertItem(int index, LPCTSTR text) { return _list->InsertItem(index, text); }
+ int CListView::InsertItem(const LVITEM* item) {
+ /*
+ int col = item->iSubItem;
+ wxString text;
+ if (item->mask & LVIF_TEXT) text = item->pszText;
+
+ // printf("%p->InsertItem(id=%d,%ls)\n",_list,item->iItem, (const wchar_t *)text);
+ return _list->InsertItem(item->iItem, text);
+ */
+ wxListItem info;
+ long mask = 0;
+ info.SetId(item->iItem);
+ if (item->mask & LVIF_TEXT)
+ {
+ info.SetText(item->pszText);
+ mask |= wxLIST_MASK_TEXT;
+ }
+ if (item->mask & LVIF_PARAM)
+ {
+ info.SetData(item->lParam);
+ mask |= wxLIST_MASK_DATA;
+ }
+ if (item->mask & LVIF_STATE)
+ {
+ info.SetState(item->state);
+ mask |= wxLIST_MASK_STATE;
+ }
+ // FIXME if (item->mask & LVIF_IMAGE)
+
+ info.SetMask(mask);
+
+ return _list->InsertItem(info);
+ }
+
+ void CListView::SetItem(const LVITEM* item) {
+ int col = item->iSubItem;
+ wxString text;
+ if (item->mask & LVIF_TEXT) text = item->pszText;
+ // printf("%p->SetItem(id=%d,col=%d,%ls)\n",_list,item->iItem, col,(const wchar_t *)text);
+ _list->SetItem(item->iItem, col, text);
+ }
+
+ int CListView::SetSubItem(int index, int subIndex, LPCTSTR text)
+ {
+ return _list->SetItem(index, subIndex, text);
+ }
+
+ void SetUnicodeFormat(bool fUnicode) { return ; }
+
+ void CListView::InsertColumn(int columnIndex, LPCTSTR text, int width)
+ {
+ _list->InsertColumn(columnIndex, text, wxLIST_FORMAT_LEFT, width);
+ }
+
+ void CListView::InsertColumn(int columnIndex, const LVCOLUMNW *columnInfo)
+ {
+ wxString text;
+ int format = wxLIST_FORMAT_LEFT;
+ int width = -1;
+ if (columnInfo->mask & LVCF_FMT)
+ {
+ if (columnInfo->fmt == LVCFMT_LEFT) format = wxLIST_FORMAT_LEFT;
+ if (columnInfo->fmt == LVCFMT_RIGHT) format = wxLIST_FORMAT_RIGHT;
+ }
+ if (columnInfo->mask & LVCF_TEXT) text = columnInfo->pszText;
+ if (columnInfo->mask & LVCF_WIDTH) width = columnInfo->cx;
+ // FIXME LVCF_SUBITEM
+ // printf("%p->InsertColumn(%d,%ls)\n",_list,columnIndex,(const wchar_t *)heading);
+ _list->InsertColumn(columnIndex, text, format, width);
+ }
+
+ void CListView::DeleteAllItems() { _list->DeleteAllItems(); printf("%p->DeleteAllItems()\n",_list); }
+
+ void CListView::SetRedraw(bool b) {
+ if (b) _list->Thaw();
+ else _list->Freeze();
+ printf(" %p->SetRedraw()\n",_list);
+ }
+
+ void CListView::SetItemCount(int count) {
+ _list->SetItemCount(count);
+ printf(" %p->SetItemCount(%d)\n",_list,count);
+ }
+
+ void CListView::InvalidateRect(void *, bool) { printf("FIXME %p->InvalidateRect()\n",_list);/* FIXME */ }
+
+ int CListView::GetSelectedCount() const {
+ int nb = _list->GetSelectedItemCount();
+ printf(" %p->GetSelectedCount()=>%d\n",_list,nb);
+ return nb;
+ }
+
+ void /* bool */ CListView::EnsureVisible(int index, bool partialOK) {
+ _list->EnsureVisible(index);
+ printf(" %p->EnsureVisible(%d)\n",_list,index);
+ // return true;
+ }
+
+ void CListView::SetItemState(int index, UINT state, UINT mask) {
+ // don't work _list->SetItemState(index, state, mask); !?
+ // try SetItem ...
+ /*
+ wxListItem info;
+
+ info.m_mask = wxLIST_MASK_STATE;
+ info.m_itemId = index;
+ info.m_col = 0;
+ info.m_state = state;
+ info.m_mask = mask;
+
+ _list->SetItem(info);
+ */
+ if (mask & LVIS_FOCUSED) {
+ _list->SetItemState(index, state & LVIS_FOCUSED, mask & LVIS_FOCUSED);
+ }
+
+ if (mask & LVIS_SELECTED) {
+ _list->SetItemState(index, state & LVIS_SELECTED, mask & LVIS_SELECTED);
+ }
+
+ printf("FIXME %p->SetItemState(index=%d,state=0x%x,mask=0x%x)\n",_list,index,(unsigned)state,(unsigned)mask); /* FIXME */
+ }
+
+ UINT CListView::GetItemState(int index, UINT mask) const
+ {
+ UINT state = _list->GetItemState(index, mask);
+ printf("FIXME %p->GetItemState(index=%d,mask=0x%x)=0x%x\n",_list,index,(unsigned)mask,(unsigned)state); /* FIXME */
+
+ return state;
+ }
+
+ void /* bool */ CListView::Update() { printf("FIXME %p->Update()\n",_list); /* FIXME */ }
+
+ bool CListView::DeleteColumn(int columnIndex) {
+ // printf("%p->DeleteColumn()\n",_list);
+ if (_list->GetColumnCount() < 1) return false;
+ return _list->DeleteColumn(columnIndex); // always return true !?
+ }
+
+ bool CListView::GetItemParam(int itemIndex, LPARAM &param) const
+ {
+ param = _list->GetItemData(itemIndex);
+
+ // printf(" %p->GetItemParam(%d) => %ld\n",_list,itemIndex,(long)param);
+
+ return true;
+ }
+
+ int CListView::GetNextItem(int startIndex, UINT flags) const
+ {
+ int item = _list->GetNextItem(startIndex, wxLIST_NEXT_ALL, flags);
+ printf(" %p->GetNextItem(%d) => %d\n",_list,startIndex,item);
+ return item;
+
+ }
+
+ int CListView::GetFocusedItem() const
+ {
+ int item = _list->GetNextItem(-1, wxLIST_NEXT_ALL, wxLIST_STATE_FOCUSED);
+ printf(" %p->GetFocusedItem() => %d\n",_list,item);
+ return item;
+ }
+
+ void CListView::RedrawAllItems()
+ {
+ printf("FIXME %p->RedrawAllItems()\n",_list);
+ }
+
+ // FIXME added
+ int CListView::GetColumnCount()
+ {
+ return _list->GetColumnCount();
+ }
+
+ void CListView::SetFocus() { /* FIXME */ }
+
+ void CListView::RedrawItem(int item) { /* FIXME */ }
+
+ bool CListView::SortItems(PFNLVCOMPARE compareFunction, LPARAM dataParam) {
+ printf(" %p->SortItems()\n",_list);
+ return _list->SortItems(compareFunction, dataParam);
+ }
+
+ bool CListView::GetColumn(int columnIndex, LVCOLUMN* columnInfo)
+ {
+ wxListItem item;
+ bool ret = _list->GetColumn(columnIndex, item);
+
+ if (ret)
+ {
+ columnInfo->iOrder = 0; // FIXME
+ columnInfo->cx = item.GetWidth();
+ }
+
+ return ret;
+
+ }
+
+ // HWND EditLabel(int itemIndex)
+ void CListView::EditLabel(int itemIndex)
+ {
+ /* FIXME */
+ }
+
+}}
+
diff --git a/installerbuilder/libinstaller/3rdparty/p7zip_9.04/unix/CPP/Windows/Control/Dialog.cpp b/installerbuilder/libinstaller/3rdparty/p7zip_9.04/unix/CPP/Windows/Control/Dialog.cpp
new file mode 100644
index 000000000..d6ef1efc9
--- /dev/null
+++ b/installerbuilder/libinstaller/3rdparty/p7zip_9.04/unix/CPP/Windows/Control/Dialog.cpp
@@ -0,0 +1,525 @@
+// Dialog.cpp
+
+#include "StdAfx.h"
+
+// For compilers that support precompilation, includes "wx/wx.h".
+#include "wx/wxprec.h"
+
+#ifdef __BORLANDC__
+ #pragma hdrstop
+#endif
+
+// for all others, include the necessary headers (this file is usually all you
+// need because it includes almost all "standard" wxWidgets headers)
+#ifndef WX_PRECOMP
+ #include "wx/wx.h"
+#endif
+
+#include "Windows/Control/DialogImpl.h"
+#include "Windows/Synchronization.h"
+
+// #include "../GUI/p7zip_32.xpm"
+extern const char * p7zip_32_xpm[];
+
+const TCHAR * nameWindowToUnix(const TCHAR * lpFileName) {
+ if ((lpFileName[0] == wxT('c')) && (lpFileName[1] == wxT(':'))) return lpFileName+2;
+ return lpFileName;
+}
+
+
+extern time_t g_T0; // FIXME
+
+extern wxWindow * g_window;
+
+enum { // FIXME - duplicate
+ WORKER_EVENT=100 // this one gets sent from the worker thread
+};
+
+#define DIALOG_ID_MESSAGEBOX 8100
+#define DIALOG_ID_DIR_DIALOG 8101
+#define DIALOG_ID_FILE_DIALOG 8102
+#define DIALOG_ID_POST_DIALOG 8190
+#define DIALOG_ID_END_DIALOG 8199
+
+static struct
+{
+ bool busy;
+
+ int id;
+ wxWindow *parentWindow;
+
+ // CreateDialog
+ NWindows::NControl::CModalDialog * dialog;
+
+ // EndModal
+ int value;
+ NWindows::NControl::CModalDialogImpl * window;
+
+ // MessageBox
+ const TCHAR * msg;
+ const TCHAR * title;
+ int flag;
+
+ //
+ LPCWSTR initialFolderOrFile;
+
+ wxSemaphore * sem;
+ int ret;
+
+ UString resultPath;
+
+#define MAX_CREATE 16
+} g_tabCreate[MAX_CREATE];
+
+static int myCreateHandle2(int n);
+
+static int findFreeInd()
+{
+static NWindows::NSynchronization::CCriticalSection g_CriticalSection;
+
+ g_CriticalSection.Enter();
+ int ind = 0;
+ while (ind < MAX_CREATE)
+ {
+ if (g_tabCreate[ind].busy == false)
+ {
+ g_tabCreate[ind].busy = true;
+ break;
+ }
+ ind++;
+ }
+ g_CriticalSection.Leave();
+
+ return ind;
+}
+
+static int WaitInd(int ind,int id,wxWindow * parent,UString &resultPath)
+{
+ int ret = 0;
+
+ g_tabCreate[ind].id = id;
+ g_tabCreate[ind].parentWindow = parent;
+ g_tabCreate[ind].ret = 0;
+ g_tabCreate[ind].resultPath = wxEmptyString;
+
+ if (wxThread::IsMain())
+ {
+ ret = myCreateHandle2(ind);
+ resultPath = g_tabCreate[ind].resultPath;
+ }
+ else
+ {
+ g_tabCreate[ind].sem = new wxSemaphore(0);
+
+ // create any type of command event here
+ wxCommandEvent event( wxEVT_COMMAND_MENU_SELECTED, WORKER_EVENT );
+ event.SetInt( ind );
+
+ // send in a thread-safe way
+ // DEBUG printf("T=0x%lx - %d : WaitInd(%d,%p): BEGIN\n", wxThread::GetCurrentId(),time(0)-g_T0,g_tabCreate[ind].id,g_tabCreate[ind].parentWindow);
+ wxPostEvent( g_window, event );
+
+ g_tabCreate[ind].sem->Wait();
+
+ ret = g_tabCreate[ind].ret;
+ resultPath = g_tabCreate[ind].resultPath;
+ // DEBUG printf("T=0x%lx - %d : WaitInd(%d,%p): ret=%d\n", wxThread::GetCurrentId(),time(0)-g_T0,g_tabCreate[ind].id,g_tabCreate[ind].parentWindow,ret);
+ delete g_tabCreate[ind].sem;
+ g_tabCreate[ind].sem = 0;
+ }
+
+ g_tabCreate[ind].busy = false;
+
+ return ret;
+}
+
+static int WaitInd(int ind,int id,wxWindow * parent)
+{
+ UString resultPath;
+ return WaitInd(ind,id,parent,resultPath);
+}
+
+class LockGUI
+{
+ bool _IsMain;
+ public:
+ LockGUI() {
+ _IsMain = wxThread::IsMain();
+ if (!_IsMain) {
+ // DEBUG printf("GuiEnter(0x%lx)\n",wxThread::GetCurrentId());
+ wxMutexGuiEnter();
+ }
+ }
+ ~LockGUI() {
+ if (!_IsMain) {
+ wxMutexGuiLeave();
+ // DEBUG printf("GuiLeave(0x%lx)\n",wxThread::GetCurrentId());
+ }
+ }
+};
+
+static const unsigned int kNumDialogsMax = 32;
+static unsigned int g_NumDialogs = 0;
+static const CDialogInfo *g_Dialogs[kNumDialogsMax];
+
+void RegisterDialog(const CDialogInfo *dialogInfo)
+{
+ // DEBUG printf("RegisterDialog : %d\n",dialogInfo->id);
+ if (g_NumDialogs < kNumDialogsMax)
+ g_Dialogs[g_NumDialogs++] = dialogInfo;
+}
+
+namespace NWindows {
+
+ CSysString MyLoadString(unsigned int resourceID)
+ {
+ for(int i=0; i < g_NumDialogs; i++) {
+ if (g_Dialogs[i]->stringTable) {
+ int j = 0;
+ while(g_Dialogs[i]->stringTable[j].str) {
+ if (resourceID == g_Dialogs[i]->stringTable[j].id) {
+ return g_Dialogs[i]->stringTable[j].str;
+ }
+
+ j++;
+ }
+ }
+ }
+ return L"FIXME-MyLoadStringW-";
+ }
+
+ namespace NControl {
+
+/////////////////////////////////////////// CModalDialog //////////////////////////////////
+
+ bool CModalDialog::CheckButton(int buttonID, UINT checkState)
+ {
+ LockGUI lock;
+ wxCheckBox* w = (wxCheckBox*)_window->FindWindow(buttonID);
+ if (w)
+ {
+ w->SetValue(checkState == BST_CHECKED);
+ return true;
+ }
+ return false;
+ }
+
+ UINT CModalDialog::IsButtonChecked(int buttonID) const
+ {
+ LockGUI lock;
+ wxCheckBox* w = (wxCheckBox*)_window->FindWindow(buttonID);
+ if (w)
+ {
+ bool bret = w->GetValue();
+ if (bret) return BST_CHECKED;
+ }
+ return BST_UNCHECKED;
+ }
+
+ void CModalDialog::EnableItem(int id, bool state)
+ {
+ LockGUI lock;
+ wxWindow* w = _window->FindWindow(id);
+ if (w) w->Enable(state);
+ }
+
+ void CModalDialog::SetItemText(int id, const TCHAR *txt)
+ {
+ LockGUI lock;
+ wxWindow* w = _window->FindWindow(id);
+ if (w)
+ {
+ wxString label(txt);
+ w->SetLabel(label);
+ }
+ }
+
+ wxWindow * CModalDialog::GetItem(long id) const
+ {
+ LockGUI lock;
+ return _window->FindWindow(id);
+ }
+
+ void CModalDialog::ShowItem(int itemID, int cmdShow) const
+ {
+ LockGUI lock;
+ // cmdShow = SW_HIDE or SW_SHOW (sometimes false or true !)
+ wxWindow* w = _window->FindWindow(itemID);
+ if (w)
+ {
+// FIXME w->Show(cmdShow != SW_HIDE);
+ w->Enable(cmdShow != SW_HIDE);
+ }
+ }
+
+ UINT_PTR CModalDialog::SetTimer(UINT_PTR idEvent , unsigned milliseconds)
+ {
+ LockGUI lock;
+ return _window->SetTimer(idEvent , milliseconds);
+ }
+
+ void CModalDialog::KillTimer(UINT_PTR idEvent)
+ {
+ LockGUI lock;
+ _window->KillTimer(idEvent);
+ }
+
+ void CModalDialog::SetText(const TCHAR *_title) {
+ LockGUI lock;
+ _window->SetTitle(_title);
+ }
+
+
+ bool CModalDialog::GetText(CSysString &s) {
+ wxString str;
+ {
+ LockGUI lock;
+ str = _window->GetTitle();
+ }
+ s = str;
+ return true;
+ }
+
+ INT_PTR CModalDialog::Create(int id , HWND parentWindow)
+ {
+ int ind = findFreeInd();
+
+ g_tabCreate[ind].dialog = this;
+
+ return WaitInd(ind,id,parentWindow);
+ }
+
+ void CModalDialog::End(int result)
+ {
+ int ind = findFreeInd();
+
+ g_tabCreate[ind].window = _window;
+ g_tabCreate[ind].value = result;
+
+ WaitInd(ind,DIALOG_ID_END_DIALOG,0);
+ }
+
+ void CModalDialog::PostMessage(UINT message)
+ {
+ int ind = findFreeInd();
+
+ g_tabCreate[ind].dialog = this;
+ g_tabCreate[ind].value = message;
+
+ WaitInd(ind,DIALOG_ID_POST_DIALOG,0);
+ }
+
+/////////////////////////////////////////// CModalDialogImpl ///////////////////////////////////////
+
+ CModalDialogImpl::CModalDialogImpl(CDialog *dialog, wxWindow* parent, wxWindowID id,
+ const wxString& title, const wxPoint& pos,
+ const wxSize& size, long style) :
+ wxDialog(parent, id, title , pos , size, style /* | wxDIALOG_NO_PARENT */ ) ,
+ _timer(this, TIMER_ID_IMPL), _dialog(dialog)
+ {
+ // set the frame icon
+ this->SetIcon(wxICON(p7zip_32));
+ }
+
+ void CModalDialogImpl::OnAnyButton(wxCommandEvent& event)
+ {
+ int id = event.GetId();
+ if (id == wxID_OK)
+ {
+ if (_dialog) _dialog->OnOK();
+ // event.Skip(true);
+ }
+ else if (id == wxID_CANCEL)
+ {
+ if (_dialog) _dialog->OnCancel();
+ // event.Skip(true);
+ }
+ else if (id == wxID_HELP)
+ {
+ if (_dialog) _dialog->OnHelp();
+ }
+ else
+ {
+ if (_dialog)
+ {
+ bool bret = _dialog->OnButtonClicked(id, FindWindow(id) );
+ }
+ }
+ }
+
+ void CModalDialogImpl::OnAnyChoice(wxCommandEvent &event)
+ {
+ int itemID = event.GetId();
+ if (_dialog) _dialog->OnCommand(CBN_SELCHANGE, itemID, 0);
+ }
+
+ void CModalDialogImpl::OnAnyTimer(wxTimerEvent &event)
+ {
+ int timerID = event.GetId();
+ if (_dialog) _dialog->OnTimer(timerID , 0);
+ }
+ }
+}
+
+///////////////////////// myCreateHandle
+
+
+static int myCreateHandle2(int n)
+{
+ int id = g_tabCreate[n].id;
+ wxWindow * parentWindow = g_tabCreate[n].parentWindow;
+ NWindows::NControl::CModalDialogImpl * window = 0;
+
+ // DEBUG printf("T=0x%lx - %d : myCreateHandle(%d): BEGIN\n", wxThread::GetCurrentId(),time(0)-g_T0,n);
+
+ if (id == DIALOG_ID_END_DIALOG)
+ {
+ /* FIXME : the dialog must be shown before ending it ?
+ while (!_window->IsShownOnScreen()) Sleep(200);
+ Sleep(200);
+ */
+ g_tabCreate[n].window->EndModal(g_tabCreate[n].value);
+ return 0;
+ }
+
+ if (id == DIALOG_ID_POST_DIALOG)
+ {
+ g_tabCreate[n].dialog->OnMessage(g_tabCreate[n].value, 0, 0);
+ return 0;
+ }
+
+ if (id == DIALOG_ID_MESSAGEBOX)
+ {
+ long style = g_tabCreate[n].flag;
+ long decorated_style = style;
+ if ( ( style & ( wxICON_EXCLAMATION | wxICON_HAND | wxICON_INFORMATION |
+ wxICON_QUESTION ) ) == 0 )
+ {
+ decorated_style |= ( style & wxYES ) ? wxICON_QUESTION : wxICON_INFORMATION ;
+ }
+ wxMessageDialog dialog(parentWindow, g_tabCreate[n].msg, g_tabCreate[n].title, decorated_style);
+ dialog.SetIcon(wxICON(p7zip_32));
+ int ret = dialog.ShowModal();
+
+ return ret;
+ }
+
+ if (id == DIALOG_ID_DIR_DIALOG)
+ {
+ wxString defaultDir = g_tabCreate[n].initialFolderOrFile;
+ wxDirDialog dirDialog(g_tabCreate[n].parentWindow,
+ g_tabCreate[n].title, defaultDir);
+ dirDialog.SetIcon(wxICON(p7zip_32));
+ int ret = dirDialog.ShowModal();
+ if (ret == wxID_OK) g_tabCreate[n].resultPath = dirDialog.GetPath();
+ return ret;
+ }
+
+ if (id == DIALOG_ID_FILE_DIALOG)
+ {
+ wxString defaultFilename = g_tabCreate[n].initialFolderOrFile;
+ wxFileDialog fileDialog(g_tabCreate[n].parentWindow, g_tabCreate[n].title,
+ wxEmptyString, defaultFilename,
+ wxT("All Files (*.*)|*.*"), wxSAVE|wxOVERWRITE_PROMPT);
+ fileDialog.SetIcon(wxICON(p7zip_32));
+ int ret = fileDialog.ShowModal();
+ if (ret == wxID_OK) g_tabCreate[n].resultPath = fileDialog.GetPath();
+ return ret;
+ }
+
+ for(int i=0; i < g_NumDialogs; i++) {
+ if (id == g_Dialogs[i]->id) {
+ // DEBUG printf("%d : Create(%d,%p): CreateDialog-1\n",time(0)-g_T0,id,parentWindow);
+ window = (g_Dialogs[i]->createDialog)(g_tabCreate[n].dialog,g_tabCreate[n].parentWindow);
+ // DEBUG printf("%d : Create(%d,%p): CreateDialog-2\n",time(0)-g_T0,id,parentWindow);
+ break;
+ }
+ }
+
+ if (window) {
+
+ // DEBUG printf("%d : Create(%d,%p): %p->ShowModal()\n",time(0)-g_T0,id,parentWindow,window);
+
+ INT_PTR ret = window->ShowModal();
+
+ // DEBUG printf("%d : Create(%d,%p): %p->ShowModal() - ret=%d\n",time(0)-g_T0,id,parentWindow,window,ret);
+ window->Detach();
+ window->Destroy();
+
+ // DEBUG printf("%d : Create(%d,%p): END\n",time(0)-g_T0,id,parentWindow,window);
+
+ return ret;
+ }
+
+ // FIXME
+ printf("INTERNAL ERROR : cannot find dialog %d\n",id);
+
+ return 0;
+}
+
+void myCreateHandle(int n)
+{
+ int ret = myCreateHandle2(n);
+ g_tabCreate[n].ret = ret;
+ g_tabCreate[n].sem->Post();
+}
+
+int MessageBoxW(wxWindow * parent, const TCHAR * msg, const TCHAR * title,int flag)
+{
+ int ind = findFreeInd();
+
+ g_tabCreate[ind].msg = msg;
+ g_tabCreate[ind].title = title;
+ g_tabCreate[ind].flag = flag;
+
+ return WaitInd(ind,DIALOG_ID_MESSAGEBOX,parent);
+}
+
+
+
+// FIXME : should be in Windows/Shell.cpp
+
+namespace NWindows{
+namespace NShell{
+
+bool BrowseForFolder(HWND owner, LPCWSTR title, LPCWSTR initialFolder, UString &resultPath)
+{
+ int ind = findFreeInd();
+
+ g_tabCreate[ind].title = title;
+ g_tabCreate[ind].initialFolderOrFile = nameWindowToUnix(initialFolder);
+
+ UString resTmp;
+ int ret = WaitInd(ind,DIALOG_ID_DIR_DIALOG,owner,resTmp);
+ if(ret == wxID_OK)
+ {
+ resultPath = resTmp;
+ return true;
+ }
+ return false;
+}
+
+}}
+
+/////////////////////////// CPP/Windows/CommonDialog.cpp
+namespace NWindows
+{
+
+ bool MyGetOpenFileName(HWND hwnd, LPCWSTR title, LPCWSTR fullFileName, LPCWSTR s, UString &resPath)
+ {
+ int ind = findFreeInd();
+
+ g_tabCreate[ind].title = title;
+ g_tabCreate[ind].initialFolderOrFile = nameWindowToUnix(fullFileName);
+
+ UString resTmp;
+ int ret = WaitInd(ind,DIALOG_ID_FILE_DIALOG,hwnd,resTmp);
+ if(ret == wxID_OK)
+ {
+ resPath = resTmp;
+ return true;
+ }
+ return false;
+ }
+}
+
diff --git a/installerbuilder/libinstaller/3rdparty/p7zip_9.04/unix/CPP/Windows/Control/Dialog.h b/installerbuilder/libinstaller/3rdparty/p7zip_9.04/unix/CPP/Windows/Control/Dialog.h
new file mode 100644
index 000000000..1b4712352
--- /dev/null
+++ b/installerbuilder/libinstaller/3rdparty/p7zip_9.04/unix/CPP/Windows/Control/Dialog.h
@@ -0,0 +1,172 @@
+// Windows/Control/Dialog.h
+
+#ifndef __WINDOWS_CONTROL_DIALOG_H
+#define __WINDOWS_CONTROL_DIALOG_H
+
+#include "Windows/Window.h"
+
+#ifndef _WIN32
+#define SW_HIDE 0
+#define SW_SHOW 5
+
+#define WM_SETTEXT (6000) // wxID_HIGHEST + 1
+#define WM_USER (6999) // wxID_HIGHEST + 1000
+
+#endif
+
+#ifndef _WIN32
+#define CBN_SELCHANGE 1
+#endif
+
+// FIXME
+#define IDOK (5100) // wxID_OK
+#define IDCANCEL (5101) // wxID_CANCEL
+#define IDABORT (5115) // wxID_ABORT
+#define IDYES (5103) // wxID_YES
+#define IDNO (5104) // wxID_NO
+#define IDHELP (5009) // wxID_HELP
+
+#define BST_CHECKED 1
+#define BST_UNCHECKED 0
+// #define BST_INDETERMINATE 0x0002
+
+#define wsprintf(a,b,c,d,e) swprintf(a,9999,b,c,d,e) // FIXME
+
+namespace NWindows {
+ namespace NControl {
+
+ class CModalDialogImpl;
+
+ class CDialog
+ {
+ protected:
+ CModalDialogImpl * _window;
+ public:
+ operator HWND() const { return HWND(_window); }
+
+ bool OnInit(CModalDialogImpl * window) {
+ _window = window;
+ return OnInit();
+ }
+ virtual bool OnInit() { return false; }
+ virtual void OnOK() {}
+ virtual void OnCancel() {}
+ virtual void OnHelp() {}
+ virtual bool OnButtonClicked(int buttonID, wxWindow * buttonHWND) { return false; }
+ virtual bool OnMessage(UINT message, WPARAM wParam, LPARAM lParam) { return false; }
+ virtual bool OnCommand(int code, int itemID, LPARAM lParam) { return false; }
+ virtual bool OnTimer(WPARAM /* timerID */, LPARAM /* callback */) { return false; }
+ };
+
+ class CModalDialog : public CDialog
+ {
+ public:
+
+
+ ////////////////// COMPATIBILITY
+
+ bool CheckRadioButton(int firstButtonID, int lastButtonID, int checkButtonID)
+ {
+/*
+ for(int id = firstButtonID; id <= lastButtonID; id++)
+ {
+ CheckButton(id,id == checkButtonID);
+ }
+*/
+ this->CheckButton(checkButtonID,true);
+
+ return true;
+ }
+
+
+ bool CheckButton(int buttonID, UINT checkState);
+ bool CheckButton(int buttonID, bool checkState)
+ {
+ return CheckButton(buttonID, UINT(checkState ? BST_CHECKED : BST_UNCHECKED));
+ }
+
+
+ UINT IsButtonChecked(int buttonID) const;
+
+ bool IsButtonCheckedBool(long buttonID) const
+ { return (IsButtonChecked(buttonID) == BST_CHECKED); }
+
+ void EnableItem(int id, bool state);
+
+ void SetItemText(int id, const TCHAR *txt);
+
+ wxWindow * GetItem(long id) const ;
+
+ void ShowItem(int itemID, int cmdShow) const;
+
+ void End(int result);
+
+ void SetText(const TCHAR *_title); // { _dialog->SetTitle(_title); }
+
+ bool GetText(CSysString &s);
+
+ INT_PTR Create(int id , HWND parentWindow);
+
+ void PostMessage(UINT message);
+
+ virtual void OnHelp() {}
+
+ UINT_PTR SetTimer(UINT_PTR idEvent , unsigned milliseconds);
+
+ void KillTimer(UINT_PTR idEvent);
+
+ virtual void OnOK() { End(IDOK); }
+ virtual void OnCancel() { End(IDCANCEL); }
+ };
+
+class CDialogChildControl : public NWindows::CWindow
+{
+public:
+ CDialogChildControl() {}
+
+ int m_ID;
+ void Init(const NWindows::NControl::CModalDialog &parentDialog, int id)
+ {
+ m_ID = id;
+ this->Attach(parentDialog.GetItem(id));
+ }
+ virtual void SetText(LPCWSTR s);
+ virtual bool GetText(CSysString &s);
+};
+
+}
+}
+
+struct CStringTable
+{
+ int id;
+ const wchar_t *str;
+};
+
+struct CDialogInfo
+{
+ int id;
+ NWindows::NControl::CModalDialogImpl * (*createDialog)(NWindows::NControl::CModalDialog * dialog, HWND parentWindow);
+ CStringTable * stringTable;
+};
+
+void RegisterDialog(const CDialogInfo *dialogInfo);
+
+#define REGISTER_DIALOG_NAME(x) CRegister ## x
+
+#define REGISTER_DIALOG(id,x,stringTable) \
+ static NWindows::NControl::CModalDialogImpl * myCreate##x(NWindows::NControl::CModalDialog * dialog,HWND parentWindow) \
+ { return new x##Impl(dialog,parentWindow,id); } \
+ static struct CDialogInfo g_DialogInfo = { id , myCreate##x, stringTable }; \
+ struct REGISTER_DIALOG_NAME(x) { \
+ REGISTER_DIALOG_NAME(x)() { RegisterDialog(&g_DialogInfo); }}; \
+ static REGISTER_DIALOG_NAME(x) g_RegisterDialog;
+
+#define REGISTER_STRINGTABLE(stringTable) \
+ static struct CDialogInfo g_DialogInfo = { -1 , 0 , stringTable }; \
+ struct REGISTER_DIALOG_NAME(x) { \
+ REGISTER_DIALOG_NAME(x)() { RegisterDialog(&g_DialogInfo); }}; \
+ static REGISTER_DIALOG_NAME(x) g_RegisterDialog;
+
+#endif
+
diff --git a/installerbuilder/libinstaller/3rdparty/p7zip_9.04/unix/CPP/Windows/Control/DialogImpl.h b/installerbuilder/libinstaller/3rdparty/p7zip_9.04/unix/CPP/Windows/Control/DialogImpl.h
new file mode 100644
index 000000000..f76af1570
--- /dev/null
+++ b/installerbuilder/libinstaller/3rdparty/p7zip_9.04/unix/CPP/Windows/Control/DialogImpl.h
@@ -0,0 +1,61 @@
+// Windows/Control/DialogImpl.h
+
+#ifndef __WINDOWS_CONTROL_DIALOGIMPL_H
+#define __WINDOWS_CONTROL_DIALOGIMPL_H
+
+#include "Windows/Window.h"
+#include "Windows/Control/Dialog.h"
+
+namespace NWindows {
+ namespace NControl {
+
+#define TIMER_ID_IMPL (1234)
+
+ class CModalDialogImpl : public wxDialog
+ {
+ wxTimer _timer;
+
+ CDialog *_dialog;
+ public:
+ CModalDialogImpl(CDialog *dialog, wxWindow* parent, wxWindowID id, const wxString& title,
+ const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize,
+ long style = wxDEFAULT_DIALOG_STYLE );
+
+ CDialog * Detach()
+ {
+ CDialog * oldDialog = _dialog;
+ _dialog = NULL;
+ return oldDialog;
+ }
+
+ void OnInit()
+ {
+ if (_dialog) _dialog->OnInit(this);
+ }
+
+ void OnAnyButton(wxCommandEvent& event);
+ void OnAnyChoice(wxCommandEvent &event);
+ void OnAnyTimer(wxTimerEvent &event);
+
+ virtual void SetLabel(const wxString &title)
+ {
+ // Why we must do this "alias" ?
+ this->SetTitle(title);
+ }
+
+ //////////////////
+ UINT_PTR SetTimer(UINT_PTR /* FIXME idEvent */, unsigned milliseconds)
+ {
+ _timer.Start(milliseconds);
+ return TIMER_ID_IMPL;
+ }
+ void KillTimer(UINT_PTR idEvent)
+ {
+ if (idEvent == TIMER_ID_IMPL) _timer.Stop();
+ }
+ };
+}
+}
+
+#endif
+
diff --git a/installerbuilder/libinstaller/3rdparty/p7zip_9.04/unix/CPP/Windows/Control/Edit.h b/installerbuilder/libinstaller/3rdparty/p7zip_9.04/unix/CPP/Windows/Control/Edit.h
new file mode 100644
index 000000000..e6930e5d4
--- /dev/null
+++ b/installerbuilder/libinstaller/3rdparty/p7zip_9.04/unix/CPP/Windows/Control/Edit.h
@@ -0,0 +1,24 @@
+// Windows/Control/Edit.h
+
+#ifndef __WINDOWS_CONTROL_EDIT_H
+#define __WINDOWS_CONTROL_EDIT_H
+
+#include "Windows/Window.h"
+#include "Windows/Defs.h"
+
+namespace NWindows {
+namespace NControl {
+
+class CEdit: public CWindow
+{
+public:
+ void SetPasswordChar(WPARAM c);
+ void Show(int cmdShow);
+ virtual void SetText(LPCWSTR s);
+ virtual bool GetText(CSysString &s);
+};
+
+}}
+
+#endif
+
diff --git a/installerbuilder/libinstaller/3rdparty/p7zip_9.04/unix/CPP/Windows/Control/ListView.h b/installerbuilder/libinstaller/3rdparty/p7zip_9.04/unix/CPP/Windows/Control/ListView.h
new file mode 100644
index 000000000..1756aa1b5
--- /dev/null
+++ b/installerbuilder/libinstaller/3rdparty/p7zip_9.04/unix/CPP/Windows/Control/ListView.h
@@ -0,0 +1,157 @@
+// Windows/Control/ListView.h
+
+#ifndef __WINDOWS_CONTROL_LISTVIEW_H
+#define __WINDOWS_CONTROL_LISTVIEW_H
+
+#include "Windows/Window.h"
+#include "Windows/Defs.h"
+
+/*
+#include <commctrl.h>
+*/
+
+#ifndef _WIN32
+
+#define LVCF_FMT 0x0001
+#define LVCF_WIDTH 0x0002
+#define LVCF_TEXT 0x0004
+#define LVCF_SUBITEM 0x0008
+#define LVCF_IMAGE 0x0010
+#define LVCF_ORDER 0x0020
+
+#define LVCFMT_LEFT 0x0000
+#define LVCFMT_RIGHT 0x0001
+#define LVCFMT_CENTER 0x0002
+#define LVCFMT_JUSTIFYMASK 0x0003
+
+
+// state
+#define LVIS_FOCUSED 0x0002 /* wxLIST_STATE_FOCUSED */
+#define LVIS_SELECTED 0x0004 /* wxLIST_STATE_SELECTED */
+
+#define LVNI_SELECTED 0x0004 /* wxLIST_STATE_SELECTED */
+
+typedef INT (CALLBACK *PFNLVCOMPARE)(LPARAM, LPARAM, LPARAM);
+
+typedef struct tagLVCOLUMNW
+{
+ UINT mask;
+ int fmt;
+ int cx;
+ LPWSTR pszText;
+ int cchTextMax;
+ int iSubItem;
+ int iOrder; // FIXME
+} LVCOLUMNW;
+
+#define LVCOLUMN LVCOLUMNW
+#define LV_COLUMNW LVCOLUMNW /* FIXME */
+
+
+
+typedef struct tagLVITEMW
+{
+ UINT mask;
+ int iItem;
+ int iSubItem;
+ UINT state;
+ UINT stateMask;
+ LPWSTR pszText;
+ int cchTextMax;
+ int iImage;
+ LPARAM lParam;
+#if (_WIN32_IE >= 0x0300)
+ int iIndent;
+#endif
+#if (_WIN32_WINNT >= 0x501)
+ int iGroupId;
+ UINT cColumns; // tile view columns
+ PUINT puColumns;
+#endif
+} LVITEMW;
+
+#define LVITEM LVITEMW
+
+#define LVIF_TEXT 0x0001
+// FIXME - mask
+#define LVIF_PARAM 2
+#define LVIF_IMAGE 4
+#define LVIF_STATE 8
+
+#endif
+
+class wxListCtrl;
+
+namespace NWindows {
+namespace NControl {
+
+class CListView // : public NWindows::CWindow
+{
+ wxListCtrl *_list;
+public:
+ CListView() : _list(0) {}
+ void Attach(wxWindow * newWindow);
+
+ operator HWND() const;
+
+ int GetItemCount() const;
+
+ int InsertItem(int index, LPCTSTR text);
+ int InsertItem(const LVITEM* item);
+
+ void SetItem(const LVITEM* item);
+
+ int SetSubItem(int index, int subIndex, LPCTSTR text);
+
+ void SetUnicodeFormat(bool fUnicode) { return ; }
+
+ void InsertColumn(int columnIndex, LPCTSTR text, int width);
+
+ void InsertColumn(int columnIndex, const LVCOLUMNW *columnInfo);
+
+ void DeleteAllItems();
+
+ void SetRedraw(bool);
+
+ void SetItemCount(int );
+
+ void InvalidateRect(void *, bool);
+
+ int GetSelectedCount() const;
+
+ void /* bool */ EnsureVisible(int index, bool partialOK);
+
+ void SetItemState(int index, UINT state, UINT mask);
+
+ UINT GetItemState(int index, UINT mask) const;
+
+ void /* bool */ Update();
+
+ bool DeleteColumn(int columnIndex);
+
+ bool GetItemParam(int itemIndex, LPARAM &param) const;
+
+ int GetNextItem(int startIndex, UINT flags) const;
+
+ int GetFocusedItem() const;
+
+ void RedrawAllItems();
+ // FIXME added
+ int GetColumnCount();
+
+ void SetFocus();
+
+ void RedrawItem(int item);
+
+ bool SortItems(PFNLVCOMPARE compareFunction, LPARAM dataParam);
+
+ bool GetColumn(int columnIndex, LVCOLUMN* columnInfo);
+
+ // HWND EditLabel(int itemIndex)
+ void EditLabel(int itemIndex);
+
+};
+
+}}
+#endif
+
diff --git a/installerbuilder/libinstaller/3rdparty/p7zip_9.04/unix/CPP/Windows/Control/ProgressBar.h b/installerbuilder/libinstaller/3rdparty/p7zip_9.04/unix/CPP/Windows/Control/ProgressBar.h
new file mode 100644
index 000000000..c7bfa8e8d
--- /dev/null
+++ b/installerbuilder/libinstaller/3rdparty/p7zip_9.04/unix/CPP/Windows/Control/ProgressBar.h
@@ -0,0 +1,34 @@
+// Windows/Control/ProgressBar.h
+
+#ifndef __WINDOWS_CONTROL_PROGRESSBAR_H
+#define __WINDOWS_CONTROL_PROGRESSBAR_H
+
+#include "Windows/Window.h"
+#include "Windows/Defs.h"
+
+class wxGauge;
+
+namespace NWindows {
+namespace NControl {
+
+
+class CProgressBar : public CWindow
+{
+protected:
+ wxGauge* _window;
+ int _minValue;
+ int _range;
+public:
+ CProgressBar(wxWindow* newWindow = NULL);
+
+ void Attach(wxWindow* newWindow);
+
+ void SetRange32(int minValue, int maxValue);
+
+ void SetPos(int pos);
+};
+
+}}
+
+#endif
+
diff --git a/installerbuilder/libinstaller/3rdparty/p7zip_9.04/unix/CPP/Windows/Control/Static.h b/installerbuilder/libinstaller/3rdparty/p7zip_9.04/unix/CPP/Windows/Control/Static.h
new file mode 100644
index 000000000..36469c18f
--- /dev/null
+++ b/installerbuilder/libinstaller/3rdparty/p7zip_9.04/unix/CPP/Windows/Control/Static.h
@@ -0,0 +1,23 @@
+// Windows/Control/Static.h
+
+#ifndef __WINDOWS_CONTROL_STATIC_H
+#define __WINDOWS_CONTROL_STATIC_H
+
+#include "Windows/Window.h"
+#include "Windows/Defs.h"
+
+typedef void * HICON;
+
+namespace NWindows {
+namespace NControl {
+
+class CStatic : public CWindow
+{
+public:
+
+ HICON SetIcon(HICON icon) { return 0; } // FIXME
+};
+
+}}
+
+#endif
diff --git a/installerbuilder/libinstaller/3rdparty/p7zip_9.04/unix/CPP/Windows/Control/StatusBar.h b/installerbuilder/libinstaller/3rdparty/p7zip_9.04/unix/CPP/Windows/Control/StatusBar.h
new file mode 100644
index 000000000..6b4417d10
--- /dev/null
+++ b/installerbuilder/libinstaller/3rdparty/p7zip_9.04/unix/CPP/Windows/Control/StatusBar.h
@@ -0,0 +1,56 @@
+// Windows/Control/StatusBar.h
+
+#ifndef __WINDOWS_CONTROL_STATUSBAR_H
+#define __WINDOWS_CONTROL_STATUSBAR_H
+
+#include "Windows/Window.h"
+#include "Windows/Defs.h"
+
+class wxStatusBar;
+
+namespace NWindows {
+namespace NControl {
+
+class CStatusBar // : public NWindows::CWindow
+{
+ wxStatusBar * _statusBar;
+public:
+ CStatusBar() : _statusBar(0) {}
+
+ void Attach(wxWindow * newWindow);
+ wxWindow * Detach();
+
+ void SetText(int index, LPCTSTR text);
+
+/* FIXME
+ bool Create(LONG style, LPCTSTR text, HWND hwndParent, UINT id)
+ { return (_window = ::CreateStatusWindow(style, text, hwndParent, id)) != 0; }
+ bool SetParts(int numParts, const int *edgePostions)
+ { return LRESULTToBool(SendMessage(SB_SETPARTS, numParts, (LPARAM)edgePostions)); }
+ bool SetText(LPCTSTR text)
+ { return CWindow::SetText(text); }
+
+ bool SetText(int index, LPCTSTR text, UINT type)
+ { return LRESULTToBool(SendMessage(SB_SETTEXT, index | type, (LPARAM)text)); }
+ bool SetText(int index, LPCTSTR text)
+ { return SetText(index, text, 0); }
+ void Simple(bool simple)
+ { SendMessage(SB_SIMPLE, BoolToBOOL(simple), 0); }
+
+ #ifndef _UNICODE
+ bool Create(LONG style, LPCWSTR text, HWND hwndParent, UINT id)
+ { return (_window = ::CreateStatusWindowW(style, text, hwndParent, id)) != 0; }
+ bool SetText(LPCWSTR text)
+ { return CWindow::SetText(text); }
+ bool SetText(int index, LPCWSTR text, UINT type)
+ { return LRESULTToBool(SendMessage(SB_SETTEXTW, index | type, (LPARAM)text)); }
+ bool SetText(int index, LPCWSTR text)
+ { return SetText(index, text, 0); }
+ #endif
+*/
+};
+
+}}
+
+#endif
+
diff --git a/installerbuilder/libinstaller/3rdparty/p7zip_9.04/unix/CPP/Windows/Control/Window2.cpp b/installerbuilder/libinstaller/3rdparty/p7zip_9.04/unix/CPP/Windows/Control/Window2.cpp
new file mode 100644
index 000000000..dda1da090
--- /dev/null
+++ b/installerbuilder/libinstaller/3rdparty/p7zip_9.04/unix/CPP/Windows/Control/Window2.cpp
@@ -0,0 +1,211 @@
+// Windows/Control/Window2.cpp
+
+#include "StdAfx.h"
+
+#ifndef _UNICODE
+#include "Common/StringConvert.h"
+#endif
+#include "Windows/Control/Window2.h"
+
+// extern HINSTANCE g_hInstance;
+#ifndef _UNICODE
+extern bool g_IsNT;
+#endif
+
+namespace NWindows {
+
+#ifndef _UNICODE
+ATOM MyRegisterClass(CONST WNDCLASSW *wndClass);
+#endif
+
+namespace NControl {
+
+#ifdef _WIN32
+static LRESULT CALLBACK WindowProcedure(HWND aHWND, UINT message,
+ WPARAM wParam, LPARAM lParam)
+{
+ CWindow tempWindow(aHWND);
+ if (message == WM_NCCREATE)
+ tempWindow.SetUserDataLongPtr(
+ LONG_PTR(((LPCREATESTRUCT)lParam)->lpCreateParams));
+ CWindow2 *window = (CWindow2*)(tempWindow.GetUserDataLongPtr());
+ if (window != NULL && message == WM_NCCREATE)
+ window->Attach(aHWND);
+ if (window == 0)
+ {
+ #ifndef _UNICODE
+ if (g_IsNT)
+ return DefWindowProcW(aHWND, message, wParam, lParam);
+ else
+ #endif
+ return DefWindowProc(aHWND, message, wParam, lParam);
+ }
+ return window->OnMessage(message, wParam, lParam);
+}
+
+bool CWindow2::CreateEx(DWORD exStyle, LPCTSTR className,
+ LPCTSTR windowName, DWORD style,
+ int x, int y, int width, int height,
+ HWND parentWindow, HMENU idOrHMenu,
+ HINSTANCE instance)
+{
+ WNDCLASS windowClass;
+ if(!::GetClassInfo(instance, className, &windowClass))
+ {
+ // windowClass.style = CS_HREDRAW | CS_VREDRAW;
+ windowClass.style = 0;
+
+ windowClass.lpfnWndProc = WindowProcedure;
+ windowClass.cbClsExtra = NULL;
+ windowClass.cbWndExtra = NULL;
+ windowClass.hInstance = instance;
+ windowClass.hIcon = NULL;
+ windowClass.hCursor = LoadCursor(NULL, IDC_ARROW);
+ windowClass.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
+ windowClass.lpszMenuName = NULL;
+ windowClass.lpszClassName = className;
+ if (::RegisterClass(&windowClass) == 0)
+ return false;
+ }
+ return CWindow::CreateEx(exStyle, className, windowName,
+ style, x, y, width, height, parentWindow,
+ idOrHMenu, instance, this);
+}
+
+#ifndef _UNICODE
+
+bool CWindow2::CreateEx(DWORD exStyle, LPCWSTR className,
+ LPCWSTR windowName, DWORD style,
+ int x, int y, int width, int height,
+ HWND parentWindow, HMENU idOrHMenu,
+ HINSTANCE instance)
+{
+ bool needRegister;
+ if(g_IsNT)
+ {
+ WNDCLASSW windowClass;
+ needRegister = ::GetClassInfoW(instance, className, &windowClass) == 0;
+ }
+ else
+ {
+ WNDCLASSA windowClassA;
+ AString classNameA;
+ LPCSTR classNameP;
+ if (IS_INTRESOURCE(className))
+ classNameP = (LPCSTR)className;
+ else
+ {
+ classNameA = GetSystemString(className);
+ classNameP = classNameA;
+ }
+ needRegister = ::GetClassInfoA(instance, classNameP, &windowClassA) == 0;
+ }
+ if (needRegister)
+ {
+ WNDCLASSW windowClass;
+ // windowClass.style = CS_HREDRAW | CS_VREDRAW;
+ windowClass.style = 0;
+ windowClass.lpfnWndProc = WindowProcedure;
+ windowClass.cbClsExtra = NULL;
+ windowClass.cbWndExtra = NULL;
+ windowClass.hInstance = instance;
+ windowClass.hIcon = NULL;
+ windowClass.hCursor = LoadCursor(NULL, IDC_ARROW);
+ windowClass.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
+ windowClass.lpszMenuName = NULL;
+ windowClass.lpszClassName = className;
+ if (MyRegisterClass(&windowClass) == 0)
+ return false;
+ }
+ return CWindow::CreateEx(exStyle, className, windowName,
+ style, x, y, width, height, parentWindow,
+ idOrHMenu, instance, this);
+
+}
+#endif
+
+LRESULT CWindow2::DefProc(UINT message, WPARAM wParam, LPARAM lParam)
+{
+ #ifndef _UNICODE
+ if (g_IsNT)
+ return DefWindowProcW(_window, message, wParam, lParam);
+ else
+ #endif
+ return DefWindowProc(_window, message, wParam, lParam);
+}
+#endif
+
+LRESULT CWindow2::OnMessage(UINT message, WPARAM wParam, LPARAM lParam)
+{
+ LRESULT result;
+ switch (message)
+ {
+ case WM_CREATE:
+ if (!OnCreate((CREATESTRUCT *)lParam))
+ return -1;
+ break;
+ case WM_COMMAND:
+ if (OnCommand(wParam, lParam, result))
+ return result;
+ break;
+ case WM_NOTIFY:
+ if (OnNotify((UINT)wParam, (LPNMHDR) lParam, result))
+ return result;
+ break;
+ case WM_DESTROY:
+ OnDestroy();
+ break;
+ case WM_CLOSE:
+ OnClose();
+ return 0;
+#ifdef _WIN32
+ case WM_SIZE:
+ if (OnSize(wParam, LOWORD(lParam), HIWORD(lParam)))
+ return 0;
+#endif
+ }
+#ifdef _WIN32
+ return DefProc(message, wParam, lParam);
+#else
+ return 0;
+#endif
+}
+
+bool CWindow2::OnCommand(WPARAM wParam, LPARAM lParam, LRESULT &result)
+{
+ return OnCommand(HIWORD(wParam), LOWORD(wParam), lParam, result);
+}
+
+bool CWindow2::OnCommand(int /* code */, int /* itemID */, LPARAM /* lParam */, LRESULT & /* result */)
+{
+ return false;
+ // return DefProc(message, wParam, lParam);
+ /*
+ if (code == BN_CLICKED)
+ return OnButtonClicked(itemID, (HWND)lParam);
+ */
+}
+
+/*
+bool CDialog::OnButtonClicked(int buttonID, HWND buttonHWND)
+{
+ switch(aButtonID)
+ {
+ case IDOK:
+ OnOK();
+ break;
+ case IDCANCEL:
+ OnCancel();
+ break;
+ case IDHELP:
+ OnHelp();
+ break;
+ default:
+ return false;
+ }
+ return true;
+}
+
+*/
+
+}}
diff --git a/installerbuilder/libinstaller/3rdparty/p7zip_9.04/unix/CPP/Windows/Control/Window2.h b/installerbuilder/libinstaller/3rdparty/p7zip_9.04/unix/CPP/Windows/Control/Window2.h
new file mode 100644
index 000000000..cec666b16
--- /dev/null
+++ b/installerbuilder/libinstaller/3rdparty/p7zip_9.04/unix/CPP/Windows/Control/Window2.h
@@ -0,0 +1,107 @@
+// Windows/Control/Window2.h
+
+#ifndef __WINDOWS_CONTROL_WINDOW2_H
+#define __WINDOWS_CONTROL_WINDOW2_H
+
+#include "Windows/Window.h"
+#include "Windows/Defs.h"
+
+#ifndef _WIN32
+typedef void * WNDPROC;
+typedef void * CREATESTRUCT;
+typedef struct
+{
+ HWND hwndFrom;
+
+ UINT code;
+#define NM_DBLCLK 1
+#define LVN_ITEMCHANGED 2
+#define LVN_COLUMNCLICK 3
+} NMHDR;
+typedef NMHDR * LPNMHDR;
+
+typedef struct tagNMLISTVIEW
+{
+ NMHDR hdr;
+ INT iItem;
+ INT iSubItem;
+ UINT uNewState;
+ UINT uOldState;
+ // UINT uChanged;
+ // POINT ptAction;
+ LPARAM lParam;
+} NMLISTVIEW, *LPNMLISTVIEW;
+
+typedef void * LPNMITEMACTIVATE;
+
+#define NM_RCLICK 1234 /* FIXME */
+
+// FIXME
+#define WM_CREATE 1
+#define WM_COMMAND 2
+#define WM_NOTIFY 3
+#define WM_DESTROY 4
+#define WM_CLOSE 5
+
+#define HIWORD(l) ((WORD)((DWORD_PTR)(l) >> 16))
+#define LOWORD(l) ((WORD)((DWORD_PTR)(l) & 0xFFFF))
+
+
+#endif
+
+namespace NWindows {
+namespace NControl {
+
+class CWindow2 // : public CWindow
+{
+ // LRESULT DefProc(UINT message, WPARAM wParam, LPARAM lParam);
+public:
+ // CWindow2(HWND newWindow = NULL): CWindow(newWindow){};
+ CWindow2() {}
+ virtual ~CWindow2() {}
+
+#ifdef _WIN32
+ bool CreateEx(DWORD exStyle, LPCTSTR className,
+ LPCTSTR windowName, DWORD style,
+ int x, int y, int width, int height,
+ HWND parentWindow, HMENU idOrHMenu,
+ HINSTANCE instance);
+
+ #ifndef _UNICODE
+ bool CreateEx(DWORD exStyle, LPCWSTR className,
+ LPCWSTR windowName, DWORD style,
+ int x, int y, int width, int height,
+ HWND parentWindow, HMENU idOrHMenu,
+ HINSTANCE instance);
+ #endif
+#endif
+
+ virtual LRESULT OnMessage(UINT message, WPARAM wParam, LPARAM lParam);
+ virtual bool OnCreate(CREATESTRUCT * /* createStruct */) { return true; }
+ // virtual LRESULT OnCommand(WPARAM wParam, LPARAM lParam);
+ virtual bool OnCommand(WPARAM wParam, LPARAM lParam, LRESULT &result);
+ virtual bool OnCommand(int code, int itemID, LPARAM lParam, LRESULT &result);
+ virtual bool OnSize(WPARAM /* wParam */, int /* xSize */, int /* ySize */) { return false; }
+ virtual bool OnNotify(UINT /* controlID */, LPNMHDR /* lParam */, LRESULT & /* result */) { return false; }
+ virtual void OnDestroy() { /* FIXME PostQuitMessage(0); */ }
+ virtual void OnClose() { /* FIXME Destroy(); */ }
+ /*
+ virtual LRESULT OnHelp(LPHELPINFO helpInfo) { OnHelp(); };
+ virtual LRESULT OnHelp() {};
+ virtual bool OnButtonClicked(int buttonID, HWND buttonHWND);
+ virtual void OnOK() {};
+ virtual void OnCancel() {};
+ */
+
+#ifdef _WIN32
+ LONG_PTR SetMsgResult(LONG_PTR newLongPtr )
+ { return SetLongPtr(DWLP_MSGRESULT, newLongPtr); }
+ LONG_PTR GetMsgResult() const
+ { return GetLongPtr(DWLP_MSGRESULT); }
+#endif
+};
+
+}}
+
+#endif
+