1171 lines
35 KiB
C++
1171 lines
35 KiB
C++
|
#include "StdAfx.h"
|
||
|
|
||
|
// For compilers that support precompilation, includes "wx/wx.h".
|
||
|
#include "wx/wxprec.h"
|
||
|
|
||
|
#ifdef __BORLANDC__
|
||
|
#pragma hdrstop
|
||
|
#endif
|
||
|
|
||
|
#ifndef WX_PRECOMP
|
||
|
#include "wx/wx.h"
|
||
|
#endif
|
||
|
|
||
|
#include "wx/mimetype.h"
|
||
|
#include "wx/artprov.h"
|
||
|
#include "wx/imaglist.h"
|
||
|
|
||
|
#undef _WIN32
|
||
|
|
||
|
#include "resource.h"
|
||
|
|
||
|
#include "PropertyNameRes.h"
|
||
|
|
||
|
#include "App.h"
|
||
|
|
||
|
#include "Windows/Window.h" // FIXME
|
||
|
#include "Windows/Control/DialogImpl.h"
|
||
|
#include "Windows/Control/ListView.h"
|
||
|
#include "Windows/Control/Window2.h"
|
||
|
|
||
|
#define static const
|
||
|
#include "../GUI/p7zip_32.xpm"
|
||
|
#undef static
|
||
|
|
||
|
extern HWND g_HWND;
|
||
|
|
||
|
#define BASE_ID_PANEL_1 (1000 + 100 * 0)
|
||
|
#define BASE_ID_PANEL_2 (1000 + 100 * 1)
|
||
|
|
||
|
////////////////////////////////////// Tool bar images
|
||
|
#include "res/AddPNG.h"
|
||
|
#include "res/Add2PNG.h"
|
||
|
#include "res/ExtractPNG.h"
|
||
|
#include "res/Extract2PNG.h"
|
||
|
#include "res/TestPNG.h"
|
||
|
#include "res/Test2PNG.h"
|
||
|
#include "res/CopyPNG.h"
|
||
|
#include "res/Copy2PNG.h"
|
||
|
#include "res/MovePNG.h"
|
||
|
#include "res/Move2PNG.h"
|
||
|
#include "res/DeletePNG.h"
|
||
|
#include "res/Delete2PNG.h"
|
||
|
#include "res/InfoPNG.h"
|
||
|
#include "res/Info2PNG.h"
|
||
|
|
||
|
#include "LangUtils.h"
|
||
|
|
||
|
#include <wx/mstream.h>
|
||
|
#define wxGetBitmapFromMemory(name) _wxGetBitmapFromMemory(name ## _png, sizeof(name ## _png))
|
||
|
|
||
|
static inline wxBitmap _wxGetBitmapFromMemory(const unsigned char *data, int length) {
|
||
|
wxMemoryInputStream is(data, length);
|
||
|
return wxBitmap(wxImage(is, wxBITMAP_TYPE_ANY, -1), -1);
|
||
|
}
|
||
|
|
||
|
///////////////////////////////////// SevenZipPanel.h /////////////////////
|
||
|
|
||
|
#include <wx/listctrl.h>
|
||
|
|
||
|
typedef wxListCtrl CExplorerListCtrl;
|
||
|
|
||
|
class MyFrame;
|
||
|
class myToolBar;
|
||
|
|
||
|
class SevenZipPanel : public wxPanel
|
||
|
{
|
||
|
static int count;
|
||
|
|
||
|
MyFrame *m_frame;
|
||
|
|
||
|
CExplorerListCtrl *m_pListCtrlExplorer;
|
||
|
NWindows::NControl::CWindow2 *_wList;
|
||
|
|
||
|
|
||
|
wxBitmapButton *m_pBmpButtonParentFolder;
|
||
|
wxComboBox *m_pComboBoxPath;
|
||
|
wxStatusBar *m_pStatusBar;
|
||
|
|
||
|
wxImageList imgList;
|
||
|
|
||
|
int _panelIndex;
|
||
|
|
||
|
// wxString m_currentDirectory;
|
||
|
|
||
|
// int m_nbDirs;
|
||
|
|
||
|
// wxString m_prompt;
|
||
|
|
||
|
public:
|
||
|
SevenZipPanel(MyFrame *frame, wxWindow *parent,int id,int panelIndex);
|
||
|
|
||
|
void registerWindow2(NWindows::NControl::CWindow2 *w)
|
||
|
{
|
||
|
_wList = w;
|
||
|
_wList->OnMessage(WM_CREATE,0,0);
|
||
|
}
|
||
|
|
||
|
void OnAnyButton( wxCommandEvent &event );
|
||
|
void OnSelected(wxListEvent& event);
|
||
|
void OnDeselected(wxListEvent& event);
|
||
|
void OnActivated(wxListEvent& event);
|
||
|
void OnFocused(wxListEvent& event);
|
||
|
void OnLeftDownBeginDrag(wxListEvent& event);
|
||
|
void OnRightClick(wxListEvent& event);
|
||
|
void OnColumnClick(wxListEvent& event);
|
||
|
|
||
|
void OnLeftDown(wxMouseEvent &event );
|
||
|
void OnRightDown(wxMouseEvent &event );
|
||
|
|
||
|
void OnTextEnter(wxCommandEvent& event);
|
||
|
|
||
|
void WriteText(const wxString& text) {
|
||
|
printf("DEBUG : %ls",(const wchar_t *)text);
|
||
|
}
|
||
|
|
||
|
/* Don't work ...
|
||
|
void OnCloseWindow(wxCloseEvent& WXUNUSED(event)) {
|
||
|
_wList->OnDestroy();
|
||
|
}
|
||
|
*/
|
||
|
|
||
|
void evt_destroy() {
|
||
|
_wList->OnDestroy();
|
||
|
}
|
||
|
|
||
|
|
||
|
private:
|
||
|
DECLARE_EVENT_TABLE()
|
||
|
};
|
||
|
|
||
|
|
||
|
|
||
|
///////////////////////////////////// SevenZipPanel.h /////////////////////
|
||
|
|
||
|
|
||
|
|
||
|
class MyFrame: public wxFrame
|
||
|
{
|
||
|
public:
|
||
|
// ctor
|
||
|
MyFrame(void (*fct)(HWND),wxFrame *frame, const wxString& title, int x, int y, int w, int h);
|
||
|
// virtual ~MyFrame();
|
||
|
|
||
|
void registerWindow2(int baseID,NWindows::NControl::CWindow2 *w)
|
||
|
{
|
||
|
printf("MyFrame::registerWindow2(%d,%p)\n",baseID,w);
|
||
|
switch (baseID)
|
||
|
{
|
||
|
case BASE_ID_PANEL_1: _panel1->registerWindow2(w); break;
|
||
|
case BASE_ID_PANEL_2: _panel2->registerWindow2(w); break;
|
||
|
default: printf("FIXME - MyFrame::registerWindow2\n");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void PopulateToolbar(wxToolBar* toolBar);
|
||
|
void RecreateToolbar();
|
||
|
|
||
|
|
||
|
protected:
|
||
|
// callbacks
|
||
|
void OnWorkerEvent(wxCommandEvent& event);
|
||
|
void OnAnyMenu(wxCommandEvent& event)
|
||
|
{
|
||
|
extern bool OnMenuCommand(HWND hWnd, int id);
|
||
|
extern void ExecuteCommand(UINT commandID);
|
||
|
|
||
|
int wmId = event.GetId();
|
||
|
|
||
|
if (wmId >= kMenuCmdID_Toolbar_Start && wmId < kMenuCmdID_Toolbar_End)
|
||
|
{
|
||
|
ExecuteCommand(wmId);
|
||
|
return ; // 0;
|
||
|
}
|
||
|
OnMenuCommand(this, wmId);
|
||
|
}
|
||
|
void OnCloseWindow(wxCloseEvent& WXUNUSED(event))
|
||
|
{
|
||
|
if (_panel1) _panel1->evt_destroy();
|
||
|
if (_panel2) _panel2->evt_destroy();
|
||
|
|
||
|
extern void main_WM_DESTROY();
|
||
|
main_WM_DESTROY();
|
||
|
Destroy();
|
||
|
}
|
||
|
private:
|
||
|
SevenZipPanel * _panel1;
|
||
|
SevenZipPanel * _panel2;
|
||
|
myToolBar * m_toolBar;
|
||
|
DECLARE_EVENT_TABLE()
|
||
|
};
|
||
|
|
||
|
BEGIN_EVENT_TABLE(MyFrame, wxFrame)
|
||
|
EVT_MENU(WORKER_EVENT, MyFrame::OnWorkerEvent)
|
||
|
EVT_MENU(wxID_ANY, MyFrame::OnAnyMenu)
|
||
|
EVT_CLOSE(MyFrame::OnCloseWindow)
|
||
|
END_EVENT_TABLE()
|
||
|
|
||
|
|
||
|
static bool TEST_create(HWND hWnd) // FIXME
|
||
|
{
|
||
|
extern HWND g_HWND;
|
||
|
CMyListView _listView;
|
||
|
|
||
|
int _baseID = 1000;
|
||
|
|
||
|
HWND w = NWindows::GetDlgItem(g_HWND, _baseID + 1);
|
||
|
if (w == 0)
|
||
|
{
|
||
|
printf("Can't find id=%d\n",_baseID + 1);
|
||
|
return false;
|
||
|
}
|
||
|
printf("CPanel::OnCreate : _listView.Attach(%p)\n",w);
|
||
|
_listView.Attach(w);
|
||
|
|
||
|
_listView.SetRedraw(false);
|
||
|
|
||
|
_listView.DeleteAllItems();
|
||
|
|
||
|
_listView.DeleteColumn(1);
|
||
|
|
||
|
_listView.InsertColumn(0, L"toto", 100);
|
||
|
|
||
|
// _listView.SetItemCount(1);
|
||
|
|
||
|
_listView.InsertItem(0, L"item 1");
|
||
|
|
||
|
|
||
|
_listView.SetRedraw(true);
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
// My frame constructor
|
||
|
MyFrame::MyFrame(void (*wm_create)(HWND),wxFrame *frame, const wxString& title,
|
||
|
int x, int y, int w, int h)
|
||
|
: wxFrame(frame, wxID_ANY, title, wxPoint(x, y), wxSize(w, h))
|
||
|
{
|
||
|
printf("===MyFrame::MyFrame===BEGIN===\n");
|
||
|
|
||
|
m_toolBar = 0;
|
||
|
|
||
|
this->SetIcon(wxICON(p7zip_32));
|
||
|
|
||
|
g_HWND = this; // FIXME
|
||
|
|
||
|
SetMinSize(wxSize(800,700));
|
||
|
|
||
|
wxBoxSizer *topsizer = new wxBoxSizer( wxVERTICAL );
|
||
|
|
||
|
_panel1 = new SevenZipPanel(this,this,BASE_ID_PANEL_1,0); // FIXME panelIndex = 0
|
||
|
_panel2 = 0;
|
||
|
topsizer->Add(
|
||
|
_panel1,
|
||
|
1, // make vertically stretchable
|
||
|
wxEXPAND | // make horizontally stretchable
|
||
|
wxALL, // and make border all around
|
||
|
0 ); // set border width to 10
|
||
|
|
||
|
// Create the toolbar
|
||
|
// FIXME RecreateToolbar();
|
||
|
printf("===MyFrame::MyFrame===WM_CREATE===\n");
|
||
|
wm_create(this);
|
||
|
// FIXME TEST_create(this);
|
||
|
|
||
|
|
||
|
// Create the toolbar // FIXME
|
||
|
RecreateToolbar();
|
||
|
|
||
|
|
||
|
printf("===MyFrame::MyFrame===SIZER===\n");
|
||
|
|
||
|
SetSizer( topsizer ); // use the sizer for layout
|
||
|
|
||
|
topsizer->SetSizeHints( this ); // set size hints to honour minimum size
|
||
|
printf("===MyFrame::MyFrame===END===\n");
|
||
|
}
|
||
|
|
||
|
void myCreateHandle(int n);
|
||
|
void MyFrame::OnWorkerEvent(wxCommandEvent& event)
|
||
|
{
|
||
|
int n = event.GetInt();
|
||
|
// printf(" MyFrame::OnWorkerEvent(n=%d)\n",n);
|
||
|
myCreateHandle(n);
|
||
|
}
|
||
|
|
||
|
wxWindow * g_window=0;
|
||
|
HWND myCreateAndShowMainWindow(LPCTSTR title,void (*fct)(HWND))
|
||
|
{
|
||
|
MyFrame *frame = new MyFrame(fct,(wxFrame *)NULL, title, 40, 40, 800, 600);
|
||
|
|
||
|
g_window = frame;
|
||
|
|
||
|
// Don't Show the frame !
|
||
|
frame->Show(true); // FIXME
|
||
|
|
||
|
// FIXME : SetTopWindow(g_HWND);
|
||
|
|
||
|
return frame;
|
||
|
}
|
||
|
|
||
|
|
||
|
class myToolBar
|
||
|
{
|
||
|
wxToolBar * m_toolbar;
|
||
|
|
||
|
bool m_bShowText;
|
||
|
|
||
|
public:
|
||
|
myToolBar(wxToolBar * toolbar,bool bShowText ) : m_toolbar(toolbar), m_bShowText(bShowText) { }
|
||
|
|
||
|
myToolBar* AddTool(int toolId, const wxString& label, const wxBitmap& bitmap1, const wxString& shortHelpString = _T(""), wxItemKind kind = wxITEM_NORMAL)
|
||
|
{
|
||
|
wxString text = wxEmptyString;
|
||
|
if (m_bShowText) text = label;
|
||
|
|
||
|
wxSize tb_size = m_toolbar->GetToolBitmapSize();
|
||
|
int tb_witdh = tb_size.GetWidth();
|
||
|
int tb_height = tb_size.GetHeight();
|
||
|
|
||
|
if ((bitmap1.GetWidth() > tb_witdh) || ( bitmap1.GetHeight()> tb_height))
|
||
|
{
|
||
|
wxBitmap bmp(bitmap1.ConvertToImage().Scale(tb_witdh, tb_height));
|
||
|
m_toolbar->AddTool(toolId,text,bmp,shortHelpString,kind);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
m_toolbar->AddTool(toolId,text,bitmap1,shortHelpString,kind);
|
||
|
}
|
||
|
|
||
|
return this;
|
||
|
}
|
||
|
|
||
|
void SetToolBitmapSize(const wxSize& size)
|
||
|
{
|
||
|
m_toolbar->SetToolBitmapSize(size);
|
||
|
}
|
||
|
|
||
|
bool Realize()
|
||
|
{
|
||
|
return m_toolbar->Realize();
|
||
|
}
|
||
|
|
||
|
void AddSeparator() { m_toolbar->AddSeparator(); }
|
||
|
};
|
||
|
|
||
|
void MyFrame::PopulateToolbar(wxToolBar* p_toolBar)
|
||
|
{/*
|
||
|
toolBar->AddTool(wxID_NEW, _T("New"),toolBarBitmaps[Tool_new], wxNullBitmap, wxITEM_NORMAL,
|
||
|
_T("New file"), _T("This is help for new file tool"));
|
||
|
*/
|
||
|
m_toolBar = new myToolBar(p_toolBar,true);
|
||
|
|
||
|
const int kWidth = 24;
|
||
|
const int kHeight = 24;
|
||
|
|
||
|
|
||
|
UString msg;
|
||
|
|
||
|
// FIXME toolBar->SetToolBitmapSize(wxSize(24,24));
|
||
|
m_toolBar->SetToolBitmapSize(wxSize(kWidth,kHeight));
|
||
|
|
||
|
msg = LangString(IDS_ADD); // kMenuCmdID_Toolbar_Add, IDB_ADD, IDB_ADD2, IDS_ADD },
|
||
|
if (msg == L"") msg = L"Add";
|
||
|
m_toolBar->AddTool(kMenuCmdID_Toolbar_Add, (const wchar_t *)msg, wxGetBitmapFromMemory(ADD2));
|
||
|
|
||
|
msg = LangString(IDS_EXTRACT); // { kMenuCmdID_Toolbar_Extract, IDB_EXTRACT, IDB_EXTRACT2, IDS_EXTRACT },
|
||
|
if (msg == L"") msg = L"Extract";
|
||
|
m_toolBar->AddTool(kMenuCmdID_Toolbar_Extract,(const wchar_t *)msg, wxGetBitmapFromMemory(EXTRACT2));
|
||
|
|
||
|
msg = LangString(IDS_TEST); // { kMenuCmdID_Toolbar_Test, IDB_TEST, IDB_TEST2, IDS_TEST }
|
||
|
if (msg == L"") msg = L"Test";
|
||
|
m_toolBar->AddTool(kMenuCmdID_Toolbar_Test,(const wchar_t *)msg, wxGetBitmapFromMemory(TEST2));
|
||
|
|
||
|
m_toolBar->AddSeparator();
|
||
|
|
||
|
msg = LangString(IDS_BUTTON_COPY); // { IDM_COPY_TO, IDB_COPY, IDB_COPY2, IDS_BUTTON_COPY },
|
||
|
if (msg == L"") msg = L"Copy";
|
||
|
m_toolBar->AddTool(IDS_BUTTON_COPY, (const wchar_t *)msg, wxGetBitmapFromMemory(COPY2));
|
||
|
|
||
|
msg = LangString(IDS_BUTTON_MOVE); // { IDM_MOVE_TO, IDB_MOVE, IDB_MOVE2, IDS_BUTTON_MOVE }
|
||
|
if (msg == L"") msg = L"Move";
|
||
|
m_toolBar->AddTool(IDM_MOVE_TO, (const wchar_t *)msg, wxGetBitmapFromMemory(MOVE2));
|
||
|
|
||
|
msg = LangString(IDS_BUTTON_DELETE); // { IDM_DELETE, IDB_DELETE, IDB_DELETE2, IDS_BUTTON_DELETE } ,
|
||
|
if (msg == L"") msg = L"Delete";
|
||
|
m_toolBar->AddTool(IDM_DELETE, (const wchar_t *)msg, wxGetBitmapFromMemory(DELETE2));
|
||
|
|
||
|
msg = LangString(IDS_BUTTON_INFO); // { IDM_PROPERTIES, IDB_INFO, IDB_INFO2, IDS_BUTTON_INFO }
|
||
|
if (msg == L"") msg = L"Info";
|
||
|
m_toolBar->AddTool(IDM_PROPERTIES, (const wchar_t *)msg, wxGetBitmapFromMemory(INFO2));
|
||
|
|
||
|
#if 0
|
||
|
////////////////////////////////////////////////////////
|
||
|
|
||
|
/* FIXME
|
||
|
if (g_mimeDatabase)
|
||
|
{
|
||
|
toolBar.AddSeparator();
|
||
|
|
||
|
TryMime(&toolBar, _T("txt"));
|
||
|
TryMime(&toolBar, _T("rar"));
|
||
|
TryMime(&toolBar, _T("7z"));
|
||
|
}
|
||
|
|
||
|
toolBar.AddSeparator();
|
||
|
|
||
|
wxIcon i_plus = wxArtProvider::GetIcon(wxART_ADD_BOOKMARK , wxART_TOOLBAR , wxSize(kWidth,kHeight));
|
||
|
m_toolBar->AddTool(wxID_ANY, wxT("Add Bookmark"), i_plus);
|
||
|
|
||
|
wxIcon i_go_up_dir = wxArtProvider::GetIcon(wxART_GO_DIR_UP , wxART_TOOLBAR , wxSize(kWidth,kHeight));
|
||
|
m_toolBar->AddTool(wxID_ANY, wxT("Go up dir"), i_go_up_dir);
|
||
|
|
||
|
wxIcon i_folder = wxArtProvider::GetIcon(wxART_FOLDER , wxART_TOOLBAR , wxSize(kWidth,kHeight));
|
||
|
m_toolBar->AddTool(wxID_ANY, wxT("Folder"), i_folder);
|
||
|
|
||
|
wxIcon i_missing_image = wxArtProvider::GetIcon(wxART_MISSING_IMAGE , wxART_TOOLBAR , wxSize(kWidth,kHeight));
|
||
|
m_toolBar->AddTool(wxID_ANY, wxT("missing image"), i_missing_image);
|
||
|
*/
|
||
|
|
||
|
///////////////////////////////////////////////////////
|
||
|
|
||
|
#endif
|
||
|
m_toolBar->Realize();
|
||
|
|
||
|
// toolBar->SetRows(!(toolBar->IsVertical()) ? m_rows : 10 / m_rows);
|
||
|
}
|
||
|
void MyFrame::RecreateToolbar()
|
||
|
{
|
||
|
// delete and recreate the toolbar
|
||
|
wxToolBar *toolBar = GetToolBar();
|
||
|
// long style = toolBar ? toolBar->GetWindowStyle() : TOOLBAR_STYLE;
|
||
|
|
||
|
SetToolBar(NULL);
|
||
|
|
||
|
delete toolBar;
|
||
|
/*
|
||
|
style &= ~(wxTB_HORIZONTAL | wxTB_VERTICAL | wxTB_BOTTOM | wxTB_RIGHT | wxTB_HORZ_LAYOUT);
|
||
|
switch( m_toolbarPosition )
|
||
|
{
|
||
|
case TOOLBAR_LEFT:style |= wxTB_LEFT; break;
|
||
|
case TOOLBAR_TOP: style |= wxTB_TOP;break;
|
||
|
case TOOLBAR_RIGHT:style |= wxTB_RIGHT;break;
|
||
|
case TOOLBAR_BOTTOM:style |= wxTB_BOTTOM;break;
|
||
|
}
|
||
|
*/
|
||
|
long style = wxTB_FLAT | wxTB_NODIVIDER | wxTB_TEXT; // TOOLBAR_STYLE | wxTB_TOP;
|
||
|
/*
|
||
|
if ( m_showTooltips ) style &= ~wxTB_NO_TOOLTIPS;
|
||
|
else style |= wxTB_NO_TOOLTIPS;
|
||
|
|
||
|
if ( style & wxTB_TEXT && !(style & wxTB_NOICONS) && m_horzText ) style |= wxTB_HORZ_LAYOUT;
|
||
|
*/
|
||
|
toolBar = CreateToolBar(style, wxID_ANY);
|
||
|
|
||
|
PopulateToolbar(toolBar);
|
||
|
}
|
||
|
|
||
|
void registerWindow2(int baseID,NWindows::NControl::CWindow2 *w)
|
||
|
{
|
||
|
MyFrame * f = (MyFrame *) g_HWND;
|
||
|
f->registerWindow2(baseID,w);
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
/////////////////////////////////////////////////////////
|
||
|
#include "LangUtils.h"
|
||
|
|
||
|
static const UINT kOpenBookmarkMenuID = 730; // FIXME / duplicate
|
||
|
static const UINT kSetBookmarkMenuID = 740;
|
||
|
|
||
|
|
||
|
void rc_MyLoadMenu(HWND hWnd)
|
||
|
{
|
||
|
wxFrame *hwnd = (wxFrame *)hWnd;
|
||
|
wxMenu *m;
|
||
|
wxMenu *m_file = m = new wxMenu;
|
||
|
{
|
||
|
m->Append(IDM_OPEN, _T("&Open")); // FIXME "&Open\tEnter" - don't use Enter to support combobox enter ...
|
||
|
m->Append(IDM_OPEN_INSIDE,_T("Open &Inside\tCtrl+PgDn"));
|
||
|
m->Append(IDM_OPEN_INSIDE_ONE,_T("Open Inside *"));
|
||
|
m->Append(IDM_OPEN_INSIDE_PARSER,_T("Open Inside #"));
|
||
|
m->Append(IDM_OPEN_OUTSIDE,_T("Open O&utside\tShift+Enter"));
|
||
|
m->Append(IDM_FILE_VIEW,_T("&View\tF3"));
|
||
|
m->Append(IDM_FILE_EDIT,_T("&Edit\tF4"));
|
||
|
m->AppendSeparator();
|
||
|
m->Append(IDM_RENAME,_T("Rena&me\tF2"));
|
||
|
m->Append(IDM_COPY_TO,_T("&Copy To...\tF5"));
|
||
|
m->Append(IDM_MOVE_TO,_T("&Move To...\tF6"));
|
||
|
m->Append(IDM_DELETE,_T("&Delete\tDel"));
|
||
|
m->AppendSeparator();
|
||
|
m->Append(IDM_SPLIT,_T("&Split file..."));
|
||
|
m->Append(IDM_COMBINE,_T("Com&bine files..."));
|
||
|
m->AppendSeparator();
|
||
|
m->Append(IDM_PROPERTIES,_T("P&roperties\tAlt+Enter"));
|
||
|
m->Append(IDM_COMMENT,_T("Comme&nt\tCtrl+Z"));
|
||
|
|
||
|
wxMenu * subMenuCRC = new wxMenu;
|
||
|
subMenuCRC->Append(IDM_CRC32 ,_T("CRC-32"));
|
||
|
subMenuCRC->Append(IDM_CRC64 ,_T("CRC-64"));
|
||
|
subMenuCRC->Append(IDM_SHA1 ,_T("SHA-1"));
|
||
|
subMenuCRC->Append(IDM_SHA256 ,_T("SHA-256"));
|
||
|
subMenuCRC->Append(IDM_HASH_ALL,_T("*"));
|
||
|
m->AppendSubMenu(subMenuCRC,_T("CRC"));
|
||
|
|
||
|
m->Append(IDM_DIFF,_T("Di&ff"));
|
||
|
m->AppendSeparator();
|
||
|
m->Append(IDM_CREATE_FOLDER,_T("Create Folder\tF7"));
|
||
|
m->Append(IDM_CREATE_FILE,_T("Create File\tCtrl+N"));
|
||
|
m->AppendSeparator();
|
||
|
m->Append(IDEXIT,_T("E&xit\tAlt+F4"));
|
||
|
}
|
||
|
wxMenu *m_edit = m = new wxMenu;
|
||
|
{
|
||
|
// m->Append(IDM_EDIT_CUT, _T("Cu&t\tCtrl+X"))->Enable(true); // GRAYED
|
||
|
// m->Append(IDM_EDIT_COPY, _T("&Copy\tCtrl+C"))->Enable(true); // GRAYED
|
||
|
// m->Append(IDM_EDIT_PASTE, _T("&Paste\tCtrl+V"))->Enable(true); // GRAYED
|
||
|
// m->AppendSeparator();
|
||
|
m->Append(IDM_SELECT_ALL, _T("Select &All\tShift+[Grey +]"));
|
||
|
m->Append(IDM_DESELECT_ALL, _T("Deselect All\tShift+[Grey -]"));
|
||
|
m->Append(IDM_INVERT_SELECTION, _T("&Invert Selection\tGrey *"));
|
||
|
m->Append(IDM_SELECT, _T("Select...\tGrey +"));
|
||
|
m->Append(IDM_DESELECT, _T("Deselect...\tGrey -"));
|
||
|
// FIXME m->Append(IDM_SELECT_BY_TYPE, _T("Select by Type\tAlt+[Grey+]"));
|
||
|
// FIXME m->Append(IDM_DESELECT_BY_TYPE, _T("Deselect by Type\tAlt+[Grey -]"));
|
||
|
}
|
||
|
wxMenu *m_view = m = new wxMenu;
|
||
|
{
|
||
|
/*
|
||
|
m->AppendRadioItem(IDM_VIEW_LARGE_ICONS, _T("Lar&ge Icons\tCtrl+1"));
|
||
|
m->AppendRadioItem(IDM_VIEW_SMALL_ICONS, _T("S&mall Icons\tCtrl+2"));
|
||
|
m->AppendRadioItem(IDM_VIEW_LIST, _T("&List\tCtrl+3"));
|
||
|
m->AppendRadioItem(IDM_VIEW_DETAILS, _T("&Details\tCtrl+4"))->Check(true); // CHECKED
|
||
|
m->AppendSeparator();
|
||
|
m->Append(IDM_VIEW_ARANGE_BY_NAME, _T("Name\tCtrl+F3"));
|
||
|
m->Append(IDM_VIEW_ARANGE_BY_TYPE, _T("Type\tCtrl+F4"));
|
||
|
m->Append(IDM_VIEW_ARANGE_BY_DATE, _T("Date\tCtrl+F5"));
|
||
|
m->Append(IDM_VIEW_ARANGE_BY_SIZE, _T("Size\tCtrl+F6"));
|
||
|
m->Append(IDM_VIEW_ARANGE_NO_SORT, _T("Unsorted\tCtrl+F7"));
|
||
|
m->AppendSeparator();
|
||
|
m->AppendCheckItem(IDM_VIEW_FLAT_VIEW, _T("Flat View"));
|
||
|
m->AppendCheckItem(IDM_VIEW_TWO_PANELS, _T("&2 Panels\tF9"));
|
||
|
|
||
|
{
|
||
|
wxMenu* subMenu = new wxMenu;
|
||
|
subMenu->AppendCheckItem(IDM_VIEW_ARCHIVE_TOOLBAR, _T("Archive Toolbar"));
|
||
|
subMenu->AppendCheckItem(IDM_VIEW_STANDARD_TOOLBAR, _T("Standard Toolbar"));
|
||
|
subMenu->AppendSeparator();
|
||
|
subMenu->AppendCheckItem(IDM_VIEW_TOOLBARS_LARGE_BUTTONS, _T("Large Buttons"));
|
||
|
subMenu->AppendCheckItem(IDM_VIEW_TOOLBARS_SHOW_BUTTONS_TEXT, _T("Show Buttons Text"));
|
||
|
m->Append(12112, _T("Toolbars"), subMenu); // FIXME ID ?
|
||
|
}
|
||
|
m->AppendSeparator();
|
||
|
*/
|
||
|
// NO "/" is used on Unix Path ... m->Append(IDM_OPEN_ROOT_FOLDER, _T("Open Root Folder\t" STRING_PATH_SEPARATOR));
|
||
|
m->Append(IDM_OPEN_ROOT_FOLDER, _T("Open Root Folder\t" "\\"));
|
||
|
|
||
|
m->Append(IDM_OPEN_PARENT_FOLDER, _T("Up One Level\tBackspace"));
|
||
|
m->Append(IDM_FOLDERS_HISTORY, _T("Folders History...\tAlt+F12"));
|
||
|
m->AppendSeparator();
|
||
|
m->Append(IDM_VIEW_REFRESH, _T("&Refresh\tCtrl+R"));
|
||
|
}
|
||
|
wxMenu *m_favorites = m = new wxMenu;
|
||
|
{
|
||
|
{
|
||
|
wxMenu* subMenu = new wxMenu;
|
||
|
for (int i = 0; i < 10; i++)
|
||
|
{
|
||
|
UString s = LangString(IDS_BOOKMARK);
|
||
|
s += L" ";
|
||
|
wchar_t c = (wchar_t)(L'0' + i);
|
||
|
s += c;
|
||
|
s += L"\tAlt+Shift+";
|
||
|
s += c;
|
||
|
subMenu->Append( kSetBookmarkMenuID + i, wxString(s));
|
||
|
}
|
||
|
|
||
|
m->Append(12111, _T("&Add folder to Favorites as"), subMenu); // FIXME ID ?
|
||
|
}
|
||
|
m->AppendSeparator();
|
||
|
for (int i = 0; i < 10; i++)
|
||
|
{
|
||
|
UString s = g_App.AppState.FastFolders.GetString(i);
|
||
|
const int kMaxSize = 100;
|
||
|
const int kFirstPartSize = kMaxSize / 2;
|
||
|
if (s.Len() > kMaxSize)
|
||
|
{
|
||
|
s.Delete(kFirstPartSize, s.Len() - kMaxSize);
|
||
|
s.Insert(kFirstPartSize, L" ... ");
|
||
|
}
|
||
|
if (s.IsEmpty())
|
||
|
s = L'-';
|
||
|
s += L"\tAlt+";
|
||
|
s += (wchar_t)(L'0' + i);
|
||
|
// menu.AppendItem(MF_STRING, kOpenBookmarkMenuID + i, s);
|
||
|
m->Append( kOpenBookmarkMenuID + i, wxString(s));
|
||
|
}
|
||
|
|
||
|
}
|
||
|
wxMenu *m_tools = m = new wxMenu;
|
||
|
{
|
||
|
// m->Append(IDM_OPTIONS, _T("&Options..."));
|
||
|
m->Append(IDM_BENCHMARK, _T("&Benchmark"));
|
||
|
}
|
||
|
wxMenu *m_help = m = new wxMenu;
|
||
|
{
|
||
|
m->Append(IDM_HELP_CONTENTS, _T("&Contents...\tF1"));
|
||
|
m->AppendSeparator();
|
||
|
m->Append(IDM_ABOUT, _T("&About 7-Zip..."));
|
||
|
}
|
||
|
|
||
|
wxMenuBar *menuBar = new wxMenuBar;
|
||
|
|
||
|
menuBar->Append(m_file, _T("&File"));
|
||
|
menuBar->Append(m_edit, _T("&Edit"));
|
||
|
menuBar->Append(m_view, _T("&View"));
|
||
|
menuBar->Append(m_favorites, _T("F&avorites"));
|
||
|
menuBar->Append(m_tools, _T("&Tools"));
|
||
|
menuBar->Append(m_help, _T("&Help"));
|
||
|
hwnd->SetMenuBar(menuBar);
|
||
|
}
|
||
|
|
||
|
//////////////////////////////////////////////////////////////////
|
||
|
|
||
|
|
||
|
static CStringTable g_stringTable[] =
|
||
|
{
|
||
|
/* resource.rc */
|
||
|
/***************/
|
||
|
{ IDS_BOOKMARK ,L"Bookmark" },
|
||
|
|
||
|
{ IDS_OPTIONS ,L"Options" },
|
||
|
|
||
|
{ IDS_N_SELECTED_ITEMS ,L"{0} object(s) selected" },
|
||
|
|
||
|
{ IDS_FILE_EXIST ,L"File {0} is already exist" },
|
||
|
{ IDS_WANT_UPDATE_MODIFIED_FILE ,L"File '{0}' was modified.\nDo you want to update it in the archive?" },
|
||
|
{ IDS_CANNOT_UPDATE_FILE ,L"Can not update file\n'{0}'" },
|
||
|
{ IDS_CANNOT_START_EDITOR ,L"Cannot start editor." },
|
||
|
{ IDS_VIRUS ,L"The file looks like a virus (the file name contains long spaces in name)." },
|
||
|
{ IDS_MESSAGE_UNSUPPORTED_OPERATION_FOR_LONG_PATH_FOLDER ,L"The operation cannot be called from a folder that has a long path." },
|
||
|
{ IDS_SELECT_ONE_FILE ,L"You must select one file" },
|
||
|
{ IDS_SELECT_FILES ,L"You must select one or more files" },
|
||
|
{ IDS_TOO_MANY_ITEMS ,L"Too many items" },
|
||
|
|
||
|
{ IDS_COPY ,L"Copy" },
|
||
|
{ IDS_MOVE ,L"Move" },
|
||
|
{ IDS_COPY_TO ,L"Copy to:" },
|
||
|
{ IDS_MOVE_TO ,L"Move to:" },
|
||
|
{ IDS_COPYING ,L"Copying..." },
|
||
|
{ IDS_MOVING ,L"Moving..." },
|
||
|
{ IDS_RENAMING ,L"Renaming..." },
|
||
|
|
||
|
{ IDS_OPERATION_IS_NOT_SUPPORTED ,L"Operation is not supported." },
|
||
|
{ IDS_ERROR_RENAMING ,L"Error Renaming File or Folder" },
|
||
|
{ IDS_CONFIRM_FILE_COPY ,L"Confirm File Copy" },
|
||
|
{ IDS_WANT_TO_COPY_FILES ,L"Are you sure you want to copy files to archive" },
|
||
|
|
||
|
{ IDS_CONFIRM_FILE_DELETE ,L"Confirm File Delete" },
|
||
|
{ IDS_CONFIRM_FOLDER_DELETE ,L"Confirm Folder Delete" },
|
||
|
{ IDS_CONFIRM_ITEMS_DELETE ,L"Confirm Multiple File Delete" },
|
||
|
{ IDS_WANT_TO_DELETE_FILE ,L"Are you sure you want to delete '{0}'?" },
|
||
|
{ IDS_WANT_TO_DELETE_FOLDER ,L"Are you sure you want to delete the folder '{0}' and all its contents?" },
|
||
|
{ IDS_WANT_TO_DELETE_ITEMS ,L"Are you sure you want to delete these {0} items?" },
|
||
|
{ IDS_DELETING ,L"Deleting..." },
|
||
|
{ IDS_ERROR_DELETING ,L"Error Deleting File or Folder" },
|
||
|
{ IDS_ERROR_LONG_PATH_TO_RECYCLE ,L"The system cannot move a file with long path to the Recycle Bin" },
|
||
|
|
||
|
{ IDS_CREATE_FOLDER ,L"Create Folder" },
|
||
|
{ IDS_CREATE_FILE ,L"Create File" },
|
||
|
{ IDS_CREATE_FOLDER_NAME ,L"Folder name:" },
|
||
|
{ IDS_CREATE_FILE_NAME ,L"File Name:" },
|
||
|
{ IDS_CREATE_FOLDER_DEFAULT_NAME ,L"New Folder" },
|
||
|
{ IDS_CREATE_FILE_DEFAULT_NAME ,L"New File" },
|
||
|
{ IDS_CREATE_FOLDER_ERROR ,L"Error Creating Folder" },
|
||
|
{ IDS_CREATE_FILE_ERROR ,L"Error Creating File" },
|
||
|
|
||
|
{ IDS_COMMENT ,L"Comment" },
|
||
|
{ IDS_COMMENT2 ,L"&Comment:" },
|
||
|
{ IDS_SELECT ,L"Select" },
|
||
|
{ IDS_DESELECT ,L"Deselect" },
|
||
|
{ IDS_SELECT_MASK ,L"Mask:" },
|
||
|
|
||
|
{ IDS_PROPERTIES ,L"Properties" },
|
||
|
{ IDS_FOLDERS_HISTORY ,L"Folders History" },
|
||
|
|
||
|
{ IDS_COMPUTER ,L"Computer" },
|
||
|
{ IDS_NETWORK ,L"Network" },
|
||
|
{ IDS_DOCUMENTS ,L"Documents" },
|
||
|
{ IDS_SYSTEM ,L"System" },
|
||
|
|
||
|
{ IDS_ADD ,L"Add" },
|
||
|
{ IDS_EXTRACT ,L"Extract" },
|
||
|
{ IDS_TEST ,L"Test" },
|
||
|
{ IDS_BUTTON_COPY ,L"Copy" },
|
||
|
{ IDS_BUTTON_MOVE ,L"Move" },
|
||
|
{ IDS_BUTTON_DELETE ,L"Delete" },
|
||
|
{ IDS_BUTTON_INFO ,L"Info" },
|
||
|
|
||
|
{ IDS_SPLITTING ,L"Splitting..." },
|
||
|
{ IDS_SPLIT_CONFIRM_TITLE ,L"Confirm Splitting" },
|
||
|
{ IDS_SPLIT_CONFIRM_MESSAGE ,L"Are you sure you want to split file into {0} volumes?" },
|
||
|
{ IDS_SPLIT_VOL_MUST_BE_SMALLER ,L"Volume size must be smaller than size of original file" },
|
||
|
|
||
|
{ IDS_COMBINE ,L"Combine Files" },
|
||
|
{ IDS_COMBINE_TO ,L"&Combine to:" },
|
||
|
{ IDS_COMBINING ,L"Combining..." },
|
||
|
{ IDS_COMBINE_SELECT_ONE_FILE ,L"Select only first part of split file" },
|
||
|
{ IDS_COMBINE_CANT_DETECT_SPLIT_FILE ,L"Can not detect file as split file" },
|
||
|
{ IDS_COMBINE_CANT_FIND_MORE_THAN_ONE_PART ,L"Can not find more than one part of split file" },
|
||
|
|
||
|
|
||
|
|
||
|
/* PropertyName.rc */
|
||
|
/*******************/
|
||
|
{ IDS_PROP_PATH ,L"Path" },
|
||
|
{ IDS_PROP_NAME ,L"Name" },
|
||
|
{ IDS_PROP_EXTENSION ,L"Extension" },
|
||
|
{ IDS_PROP_IS_FOLDER ,L"Folder" },
|
||
|
{ IDS_PROP_SIZE ,L"Size" },
|
||
|
{ IDS_PROP_PACKED_SIZE ,L"Packed Size" },
|
||
|
{ IDS_PROP_ATTRIBUTES ,L"Attributes" },
|
||
|
{ IDS_PROP_CTIME ,L"Created" },
|
||
|
{ IDS_PROP_ATIME ,L"Accessed" },
|
||
|
{ IDS_PROP_MTIME ,L"Modified" },
|
||
|
{ IDS_PROP_SOLID ,L"Solid" },
|
||
|
{ IDS_PROP_C0MMENTED ,L"Commented" },
|
||
|
{ IDS_PROP_ENCRYPTED ,L"Encrypted" },
|
||
|
{ IDS_PROP_SPLIT_BEFORE ,L"Split Before" },
|
||
|
{ IDS_PROP_SPLIT_AFTER ,L"Split After" },
|
||
|
{ IDS_PROP_DICTIONARY_SIZE ,L"Dictionary" },
|
||
|
{ IDS_PROP_CRC ,L"CRC" },
|
||
|
{ IDS_PROP_FILE_TYPE ,L"Type" },
|
||
|
{ IDS_PROP_ANTI ,L"Anti" },
|
||
|
{ IDS_PROP_METHOD ,L"Method" },
|
||
|
{ IDS_PROP_HOST_OS ,L"Host OS" },
|
||
|
{ IDS_PROP_FILE_SYSTEM ,L"File System" },
|
||
|
{ IDS_PROP_USER ,L"User" },
|
||
|
{ IDS_PROP_GROUP ,L"Group" },
|
||
|
{ IDS_PROP_BLOCK ,L"Block" },
|
||
|
{ IDS_PROP_COMMENT ,L"Comment" },
|
||
|
{ IDS_PROP_POSITION ,L"Position" },
|
||
|
{ IDS_PROP_PREFIX ,L"Path Prefix" },
|
||
|
{ IDS_PROP_FOLDERS ,L"Folders" },
|
||
|
{ IDS_PROP_FILES ,L"Files" },
|
||
|
{ IDS_PROP_VERSION ,L"Version" },
|
||
|
{ IDS_PROP_VOLUME ,L"Volume" },
|
||
|
{ IDS_PROP_IS_VOLUME ,L"Multivolume" },
|
||
|
{ IDS_PROP_OFFSET ,L"Offset" },
|
||
|
{ IDS_PROP_LINKS ,L"Links" },
|
||
|
{ IDS_PROP_NUM_BLOCKS ,L"Blocks" },
|
||
|
{ IDS_PROP_NUM_VOLUMES ,L"Volumes" },
|
||
|
|
||
|
{ IDS_PROP_BIT64 ,L"64-bit" },
|
||
|
{ IDS_PROP_BIG_ENDIAN ,L"Big-endian" },
|
||
|
{ IDS_PROP_CPU ,L"CPU" },
|
||
|
{ IDS_PROP_PHY_SIZE ,L"Physical Size" },
|
||
|
{ IDS_PROP_HEADERS_SIZE ,L"Headers Size" },
|
||
|
{ IDS_PROP_CHECKSUM ,L"Checksum" },
|
||
|
{ IDS_PROP_CHARACTS ,L"Characteristics" },
|
||
|
{ IDS_PROP_VA ,L"Virtual Address" },
|
||
|
{ IDS_PROP_ID ,L"ID" },
|
||
|
{ IDS_PROP_SHORT_NAME ,L"Short Name" },
|
||
|
{ IDS_PROP_CREATOR_APP ,L"Creator Application" },
|
||
|
{ IDS_PROP_SECTOR_SIZE ,L"Sector Size" },
|
||
|
{ IDS_PROP_POSIX_ATTRIB ,L"Mode" },
|
||
|
{ IDS_PROP_SYM_LINK ,L"Symbolic Link" },
|
||
|
{ IDS_PROP_ERROR ,L"Error" },
|
||
|
{ IDS_PROP_TOTAL_SIZE ,L"Total Size" },
|
||
|
{ IDS_PROP_FREE_SPACE ,L"Free Space" },
|
||
|
{ IDS_PROP_CLUSTER_SIZE ,L"Cluster Size" },
|
||
|
{ IDS_PROP_VOLUME_NAME ,L"Label" },
|
||
|
{ IDS_PROP_LOCAL_NAME ,L"Local Name" },
|
||
|
{ IDS_PROP_PROVIDER ,L"Provider" },
|
||
|
{ IDS_PROP_NT_SECURITY ,L"NT Security" },
|
||
|
{ IDS_PROP_ALT_STREAM ,L"Alternate Stream" },
|
||
|
{ IDS_PROP_AUX ,L"Aux" },
|
||
|
{ IDS_PROP_DELETED ,L"Deleted" },
|
||
|
{ IDS_PROP_IS_TREE ,L"Is Tree" },
|
||
|
{ IDS_PROP_SHA1 ,L"SHA-1" },
|
||
|
{ IDS_PROP_SHA256 ,L"SHA-256" },
|
||
|
{ IDS_PROP_ERROR_TYPE ,L"Error Type" },
|
||
|
{ IDS_PROP_NUM_ERRORS ,L"Errors" },
|
||
|
{ IDS_PROP_ERROR_FLAGS ,L"Errors" },
|
||
|
{ IDS_PROP_WARNING_FLAGS ,L"Warnings" },
|
||
|
{ IDS_PROP_WARNING ,L"Warning" },
|
||
|
{ IDS_PROP_NUM_STREAMS ,L"Streams" },
|
||
|
{ IDS_PROP_NUM_ALT_STREAMS ,L"Alternate Streams" },
|
||
|
{ IDS_PROP_ALT_STREAMS_SIZE ,L"Alternate Streams Size" },
|
||
|
{ IDS_PROP_VIRTUAL_SIZE ,L"Virtual Size" },
|
||
|
{ IDS_PROP_UNPACK_SIZE ,L"Unpack Size" },
|
||
|
{ IDS_PROP_TOTAL_PHY_SIZE ,L"Total Physical Size" },
|
||
|
{ IDS_PROP_VOLUME_INDEX ,L"Volume Index" },
|
||
|
{ IDS_PROP_SUBTYPE ,L"SubType" },
|
||
|
{ IDS_PROP_SHORT_COMMENT ,L"Short Comment" },
|
||
|
{ IDS_PROP_CODE_PAGE ,L"Code Page" },
|
||
|
{ IDS_PROP_IS_NOT_ARC_TYPE ,L"Is not archive type" },
|
||
|
{ IDS_PROP_PHY_SIZE_CANT_BE_DETECTED ,L"Physical Size can't be detected" },
|
||
|
{ IDS_PROP_ZEROS_TAIL_IS_ALLOWED ,L"Zeros Tail Is Allowed" },
|
||
|
{ IDS_PROP_TAIL_SIZE ,L"Tail Size" },
|
||
|
{ IDS_PROP_EMB_STUB_SIZE ,L"Embedded Stub Size" },
|
||
|
{ IDS_PROP_NT_REPARSE ,L"Link" },
|
||
|
{ IDS_PROP_HARD_LINK ,L"Hard Link" },
|
||
|
{ IDS_PROP_INODE ,L"iNode" },
|
||
|
{ IDS_PROP_STREAM_ID ,L"Stream ID" },
|
||
|
|
||
|
{ 0 , 0 }
|
||
|
};
|
||
|
|
||
|
REGISTER_STRINGTABLE(g_stringTable)
|
||
|
|
||
|
/////////////////////////////////////////////////////
|
||
|
|
||
|
#include "res/ParentFolder.h"
|
||
|
|
||
|
SevenZipPanel::SevenZipPanel(MyFrame *frame, wxWindow *parent,int id,int panelIndex) :
|
||
|
wxPanel(parent,id) , m_frame(frame), _wList(0)
|
||
|
{
|
||
|
_panelIndex = panelIndex;
|
||
|
|
||
|
int _baseID = id; // FIXME
|
||
|
int _listID = _baseID + 1;
|
||
|
int _comboBoxID = _baseID + 3;
|
||
|
int _statusBarID = _comboBoxID + 1;
|
||
|
int kParentFolderID = 100; // FIXME Panel.h
|
||
|
|
||
|
|
||
|
///Sizer for adding the controls created by users
|
||
|
wxBoxSizer* pMainSizer = new wxBoxSizer(wxVERTICAL);
|
||
|
int sizes[] = {150, 250, 350, -1};
|
||
|
wxArrayString pathArray;
|
||
|
wxBoxSizer *pPathSizer = new wxBoxSizer(wxHORIZONTAL);
|
||
|
m_pBmpButtonParentFolder = new wxBitmapButton(this, kParentFolderID, wxGetBitmapFromMemory(PARENT_FOLDER), wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW);
|
||
|
m_pComboBoxPath = new wxComboBox(this, _comboBoxID, wxEmptyString, wxDefaultPosition, wxSize(300,-1), pathArray, wxCB_DROPDOWN | wxCB_SORT );
|
||
|
pPathSizer->Add(m_pBmpButtonParentFolder, 0, wxALL|wxEXPAND, 0);
|
||
|
pPathSizer->Add(m_pComboBoxPath, 1, wxALL|wxEXPAND, 5);
|
||
|
|
||
|
m_pListCtrlExplorer = new CExplorerListCtrl(this,_listID,wxDefaultPosition, wxSize(300,300),
|
||
|
wxLC_REPORT | // wxLC_EDIT_LABELS | FIXME
|
||
|
wxSUNKEN_BORDER);
|
||
|
|
||
|
printf("DEBUG : new CExplorerListCtrl(id=%d) => %p\n",_listID,m_pListCtrlExplorer);
|
||
|
|
||
|
m_pStatusBar = new wxStatusBar(this, _statusBarID);
|
||
|
m_pStatusBar->SetFieldsCount(4, sizes);
|
||
|
pMainSizer->Add(pPathSizer, 0, wxALL|wxEXPAND, 0);
|
||
|
pMainSizer->Add(m_pListCtrlExplorer, 1, wxALL|wxEXPAND, 0);
|
||
|
pMainSizer->Add(m_pStatusBar, 0, wxALL|wxEXPAND, 0);
|
||
|
SetSizer(pMainSizer);
|
||
|
SetAutoLayout (true);
|
||
|
SetMinSize(wxSize(800,400));
|
||
|
Layout();
|
||
|
|
||
|
|
||
|
// m_pListCtrlExplorer->SetDropTarget(new DnDFile(this));
|
||
|
|
||
|
}
|
||
|
|
||
|
void SevenZipPanel::OnAnyButton( wxCommandEvent &event )
|
||
|
{
|
||
|
count++;
|
||
|
|
||
|
int id = event.GetId();
|
||
|
|
||
|
wxString msg = wxString::Format(_T("P %d : button %d \n"), count,id);
|
||
|
|
||
|
WriteText(msg);
|
||
|
|
||
|
_wList->OnMessage(WM_COMMAND , id , 0);
|
||
|
}
|
||
|
|
||
|
void SevenZipPanel::OnSelected(wxListEvent& event)
|
||
|
{
|
||
|
const wxListItem & item = event.GetItem();
|
||
|
count++;
|
||
|
|
||
|
wxString msg = wxString::Format(_T("P %d : OnSelected %d \n"), count,event.GetId());
|
||
|
|
||
|
WriteText(msg);
|
||
|
|
||
|
NMLISTVIEW info;
|
||
|
info.hdr.hwndFrom = m_pListCtrlExplorer;
|
||
|
info.hdr.code = LVN_ITEMCHANGED;
|
||
|
info.uOldState = 0;
|
||
|
info.uNewState = LVIS_SELECTED;
|
||
|
info.lParam = item.GetData(); // event.GetIndex(); // FIXME ? event.GetData();
|
||
|
_wList->OnMessage(WM_NOTIFY , event.GetId() , (LPARAM)&info);
|
||
|
/*
|
||
|
if ( GetWindowStyle() & wxLC_REPORT )
|
||
|
{
|
||
|
wxListItem info;
|
||
|
info.m_itemId = event.m_itemIndex;
|
||
|
info.m_col = 1;
|
||
|
info.m_mask = wxLIST_MASK_TEXT;
|
||
|
if ( GetItem(info) )
|
||
|
{
|
||
|
wxLogMessage(wxT("Value of the 2nd field of the selected item: %s"),
|
||
|
info.m_text.c_str());
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
wxFAIL_MSG(wxT("wxListCtrl::GetItem() failed"));
|
||
|
}
|
||
|
}
|
||
|
*/
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
void SevenZipPanel::OnDeselected(wxListEvent& event)
|
||
|
{
|
||
|
const wxListItem & item = event.GetItem();
|
||
|
count++;
|
||
|
wxString msg = wxString::Format(_T("P %d : OnDeselected %d \n"), count,event.GetId());
|
||
|
WriteText(msg);
|
||
|
|
||
|
NMLISTVIEW info;
|
||
|
info.hdr.hwndFrom = m_pListCtrlExplorer;
|
||
|
info.hdr.code = LVN_ITEMCHANGED;
|
||
|
info.uOldState = LVIS_SELECTED;
|
||
|
info.uNewState = 0;
|
||
|
info.lParam = item.GetData(); // event.GetIndex(); // FIXME ? event.GetData();
|
||
|
_wList->OnMessage(WM_NOTIFY , event.GetId() , (LPARAM)&info);
|
||
|
}
|
||
|
|
||
|
void SevenZipPanel::OnColumnClick(wxListEvent& event)
|
||
|
{
|
||
|
count++;
|
||
|
wxString msg = wxString::Format(_T("P %d : OnColumnClick %d col=%d\n"), count,event.GetId(),event.GetColumn());
|
||
|
WriteText(msg);
|
||
|
|
||
|
NMLISTVIEW info;
|
||
|
info.hdr.hwndFrom = m_pListCtrlExplorer;
|
||
|
info.hdr.code = LVN_COLUMNCLICK;
|
||
|
info.iSubItem = event.GetColumn();
|
||
|
_wList->OnMessage(WM_NOTIFY , event.GetId() , (LPARAM)&info);
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
void SevenZipPanel::OnActivated(wxListEvent& event)
|
||
|
{
|
||
|
count++;
|
||
|
|
||
|
int ind = event.GetIndex();
|
||
|
|
||
|
NMHDR info;
|
||
|
info.hwndFrom = m_pListCtrlExplorer;
|
||
|
info.code = NM_DBLCLK;
|
||
|
_wList->OnMessage(WM_NOTIFY , event.GetId() , (LPARAM)&info);
|
||
|
|
||
|
/*
|
||
|
if ((ind >= 0) && ( ind < m_nbDirs))
|
||
|
{
|
||
|
wxString msg = wxString::Format(_T("P %d : OnActivated %d : DIR = %d\n"), count,event.GetId(),ind);
|
||
|
WriteText(msg);
|
||
|
|
||
|
wxString name = m_pListCtrlExplorer->GetItemText(ind);
|
||
|
|
||
|
wxFileName filename (m_currentDirectory,name);
|
||
|
BinPath(filename.GetFullPath());
|
||
|
|
||
|
}
|
||
|
else
|
||
|
*/
|
||
|
{
|
||
|
wxString msg = wxString::Format(_T("P %d : OnActivated %d : FILE = %d\n"), count,event.GetId(),ind);
|
||
|
WriteText(msg);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void SevenZipPanel::OnFocused(wxListEvent& event)
|
||
|
{
|
||
|
count++;
|
||
|
|
||
|
wxString msg = wxString::Format(_T("P %d : OnFocused %d \n"), count,event.GetId());
|
||
|
|
||
|
WriteText(msg);
|
||
|
|
||
|
event.Skip();
|
||
|
}
|
||
|
|
||
|
void SevenZipPanel::OnLeftDownBeginDrag(wxListEvent& event)
|
||
|
{
|
||
|
count++;
|
||
|
|
||
|
wxString msg = wxString::Format(_T("P %d : OnLeftDownBeginDrag %d \n"), count,event.GetId());
|
||
|
WriteText(msg);
|
||
|
|
||
|
#if 0
|
||
|
if ( m_pListCtrlExplorer->GetSelectedItemCount() < 1) return ;
|
||
|
|
||
|
// start drag operation
|
||
|
wxFileDataObject filesData;
|
||
|
|
||
|
|
||
|
long item = -1;
|
||
|
for ( ;; )
|
||
|
{
|
||
|
item = m_pListCtrlExplorer->GetNextItem(item,
|
||
|
wxLIST_NEXT_ALL,
|
||
|
wxLIST_STATE_SELECTED);
|
||
|
if ( item == -1 )
|
||
|
break;
|
||
|
|
||
|
// this item is selected - do whatever is needed with it
|
||
|
// wxLogMessage("Item %ld is selected.", item);
|
||
|
wxString file = m_currentDirectory + _T("/") + m_pListCtrlExplorer->GetItemText(item);
|
||
|
|
||
|
filesData.AddFile(file);
|
||
|
|
||
|
}
|
||
|
|
||
|
msg = wxString::Format(_T("P %d : wxDropSource %d \n"), count,event.GetId());
|
||
|
WriteText(msg);
|
||
|
|
||
|
wxDropSource source(filesData, this,
|
||
|
wxDROP_ICON(dnd_copy),
|
||
|
wxDROP_ICON(dnd_move),
|
||
|
wxDROP_ICON(dnd_none));
|
||
|
|
||
|
int flags = 0;
|
||
|
/*
|
||
|
if ( m_moveByDefault )
|
||
|
flags |= wxDrag_DefaultMove;
|
||
|
else if ( m_moveAllow )
|
||
|
flags |= wxDrag_AllowMove;
|
||
|
*/
|
||
|
flags |= wxDrag_AllowMove;
|
||
|
|
||
|
msg = wxString::Format(_T("P %d : DoDragDrop %d \n"), count,event.GetId());
|
||
|
WriteText(msg);
|
||
|
|
||
|
|
||
|
wxDragResult result = source.DoDragDrop(flags);
|
||
|
|
||
|
|
||
|
const wxChar *pc;
|
||
|
switch ( result )
|
||
|
{
|
||
|
case wxDragError: pc = _T("Error!"); break;
|
||
|
case wxDragNone: pc = _T("Nothing"); break;
|
||
|
case wxDragCopy: pc = _T("Copied"); break;
|
||
|
case wxDragMove: pc = _T("Moved"); break;
|
||
|
case wxDragCancel: pc = _T("Cancelled"); break;
|
||
|
default: pc = _T("Huh?"); break;
|
||
|
}
|
||
|
|
||
|
WriteText(wxString(_T(" Drag result: ")) + pc);
|
||
|
#endif
|
||
|
}
|
||
|
|
||
|
void SevenZipPanel::OnLeftDown(wxMouseEvent &WXUNUSED(event) )
|
||
|
{
|
||
|
WriteText(_T("OnLeftDown"));
|
||
|
#if 0
|
||
|
if ( !m_strText.empty() )
|
||
|
{
|
||
|
// start drag operation
|
||
|
wxTextDataObject textData(m_strText);
|
||
|
wxDropSource source(textData, this,
|
||
|
wxDROP_ICON(dnd_copy),
|
||
|
wxDROP_ICON(dnd_move),
|
||
|
wxDROP_ICON(dnd_none));
|
||
|
|
||
|
int flags = 0;
|
||
|
if ( m_moveByDefault )
|
||
|
flags |= wxDrag_DefaultMove;
|
||
|
else if ( m_moveAllow )
|
||
|
flags |= wxDrag_AllowMove;
|
||
|
|
||
|
wxDragResult result = source.DoDragDrop(flags);
|
||
|
|
||
|
#if wxUSE_STATUSBAR
|
||
|
const wxChar *pc;
|
||
|
switch ( result )
|
||
|
{
|
||
|
case wxDragError: pc = _T("Error!"); break;
|
||
|
case wxDragNone: pc = _T("Nothing"); break;
|
||
|
case wxDragCopy: pc = _T("Copied"); break;
|
||
|
case wxDragMove: pc = _T("Moved"); break;
|
||
|
case wxDragCancel: pc = _T("Cancelled"); break;
|
||
|
default: pc = _T("Huh?"); break;
|
||
|
}
|
||
|
|
||
|
SetStatusText(wxString(_T("Drag result: ")) + pc);
|
||
|
#else
|
||
|
wxUnusedVar(result);
|
||
|
#endif // wxUSE_STATUSBAR
|
||
|
}
|
||
|
#endif // wxUSE_DRAG_AND_DROP
|
||
|
}
|
||
|
|
||
|
void SevenZipPanel::OnRightClick(wxListEvent& event)
|
||
|
{
|
||
|
wxPoint point = event.GetPoint();
|
||
|
|
||
|
WriteText(_T("OnRightClick"));
|
||
|
wxMenu menu; // (_T("Dnd sample menu"));
|
||
|
|
||
|
menu.Append(wxID_ANY, _T("&Test drag..."));
|
||
|
menu.AppendSeparator();
|
||
|
menu.Append(wxID_ANY, _T("item1"));
|
||
|
menu.Append(wxID_ANY, _T("item2"));
|
||
|
menu.Append(wxID_ANY, _T("item3"));
|
||
|
menu.Append(wxID_ANY, _T("&About"));
|
||
|
|
||
|
PopupMenu( &menu, point.x, point.y );
|
||
|
}
|
||
|
|
||
|
void SevenZipPanel::OnTextEnter(wxCommandEvent& event)
|
||
|
{
|
||
|
count++;
|
||
|
|
||
|
NMCBEENDEDITW info;
|
||
|
info.hdr.hwndFrom = m_pComboBoxPath;
|
||
|
info.hdr.code = CBEN_ENDEDITW;
|
||
|
info.iWhy = CBENF_RETURN;
|
||
|
|
||
|
_wList->OnMessage(WM_NOTIFY , event.GetId() , (LPARAM)&info);
|
||
|
|
||
|
{
|
||
|
wxString msg = wxString::Format(_T("P %d : OnTextEnter %d\n"), count,event.GetId());
|
||
|
WriteText(msg);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
int SevenZipPanel::count = 0;
|
||
|
|
||
|
BEGIN_EVENT_TABLE(SevenZipPanel, wxPanel)
|
||
|
// EVT_MENU(wxID_ANY, SevenZipPanel::OnAnyMenu)
|
||
|
// EVT_LISTBOX (wxID_ANY, MyPanel::OnListBox)
|
||
|
// EVT_LISTBOX_DCLICK(wxID_ANY, MyPanel::OnAnyListBoxDoubleClick)
|
||
|
EVT_BUTTON (wxID_ANY, SevenZipPanel::OnAnyButton)
|
||
|
|
||
|
// EVT_CLOSE(SevenZipPanel::OnCloseWindow)
|
||
|
|
||
|
/////////////////
|
||
|
EVT_LIST_ITEM_SELECTED(wxID_ANY, SevenZipPanel::OnSelected)
|
||
|
EVT_LIST_ITEM_DESELECTED(wxID_ANY, SevenZipPanel::OnDeselected)
|
||
|
EVT_LIST_ITEM_ACTIVATED(wxID_ANY, SevenZipPanel::OnActivated)
|
||
|
EVT_LIST_ITEM_FOCUSED(wxID_ANY, SevenZipPanel::OnFocused)
|
||
|
|
||
|
EVT_LIST_BEGIN_DRAG(wxID_ANY, SevenZipPanel::OnLeftDownBeginDrag)
|
||
|
// FIXME - add for menu on item - EVT_LIST_ITEM_RIGHT_CLICK(wxID_ANY, SevenZipPanel::OnRightClick)
|
||
|
|
||
|
EVT_LIST_COL_CLICK(wxID_ANY, SevenZipPanel::OnColumnClick)
|
||
|
|
||
|
|
||
|
EVT_TEXT_ENTER(wxID_ANY, SevenZipPanel::OnTextEnter) // FIXME - not called
|
||
|
|
||
|
|
||
|
END_EVENT_TABLE()
|
||
|
|
||
|
|
||
|
|
||
|
void appClose(void)
|
||
|
{
|
||
|
g_window->Close(true);
|
||
|
}
|