win32: fix always on top inifile saving and add "lockdown" option to keep mouse from breaking the window during fast stylus action

This commit is contained in:
zeromus 2009-12-16 05:07:38 +00:00
parent 16a06984bf
commit 8b89eb1ebe
10 changed files with 872 additions and 342 deletions

View File

@ -20,6 +20,7 @@ Windows:
enh: add EPX and EPX1.5X resize filters
enh: add a japanese translation which will soon be stale like the others
enh: add fancy printscreen with emulator info on it
enh: add "lockdown" window mode to keep window safe from fast stylus action
Linux/OSX:
bug: fix building for nosse2 systems

View File

@ -24,20 +24,18 @@
#include "rasterize.h"
#include "gfx3d.h"
#ifdef _MSC_VER
#define HAVE_WX
#endif
#ifdef HAVE_WX
#include "wx/wxprec.h"
#include "wx/wx.h"
#include "wxdlg/wxdlg3dViewer.h"
const int kVewportWidth = 512;
const int kViewportWidth = 256;
const int kViewportHeight = 192;
static SoftRasterizerEngine engine;
static Fragment _screen[kVewportWidth*384];
static FragmentColor _screenColor[kVewportWidth*384];
static Fragment _screen[kViewportWidth*kViewportHeight];
static FragmentColor _screenColor[kViewportWidth*kViewportHeight];
extern void _HACK_Viewer_ExecUnit(SoftRasterizerEngine* engine);
@ -54,6 +52,24 @@ public:
Update();
}
void NewFrame()
{
listPolys->SetItemCount(viewer3d_state.polylist.count);
labelUserPolycount->SetLabel(wxString::Format("%s: %d",_("User Polys"),viewer3d_state.polylist.count));
labelFinalPolycount->SetLabel(wxString::Format("%s: %d",_("Final Polys"),viewer3d_state.polylist.count));
tree->DeleteAllItems();
wxTreeItemId root = tree->AddRoot("");
for(int i=0;i<viewer3d_state.polylist.count;i++)
{
tree->AppendItem(root,"hai kirin");
}
}
virtual wxString OnGetItemText(const wxListCtrl* list, long item, long column) const
{
return "hi";
}
void RedrawPanel(wxClientDC* dc)
{
//------------
@ -63,16 +79,16 @@ public:
engine.indexlist = &viewer3d_state.indexlist;
engine.screen = _screen;
engine.screenColor = _screenColor;
engine.width = kVewportWidth;
engine.height = 384;
engine.width = kViewportWidth;
engine.height = kViewportHeight;
engine.updateFogTable();
engine.initFramebuffer(kVewportWidth,384,gfx3d.state.enableClearImage);
engine.initFramebuffer(kViewportWidth,kViewportHeight,gfx3d.state.enableClearImage);
engine.updateToonTable();
engine.updateFloatColors();
engine.performClipping(checkMaterialInterpolate->IsChecked());
engine.performViewportTransforms<true>(kVewportWidth,384);
engine.performViewportTransforms<true>(kViewportWidth,kViewportHeight);
engine.performBackfaceTests();
engine.performCoordAdjustment(false);
engine.setupTextures(false);
@ -81,14 +97,14 @@ public:
//------------
//dc.SetBackground(*wxGREEN_BRUSH); dc.Clear();
u8 framebuffer[kVewportWidth*384*3];
for(int y=0,i=0;y<384;y++)
for(int x=0;x<kVewportWidth;x++,i++) {
u8 framebuffer[kViewportWidth*kViewportHeight*3];
for(int y=0,i=0;y<kViewportHeight;y++)
for(int x=0;x<kViewportWidth;x++,i++) {
framebuffer[i*3] = _screenColor[i].r<<2;
framebuffer[i*3+1] = _screenColor[i].g<<2;
framebuffer[i*3+2] = _screenColor[i].b<<2;
}
wxImage image(kVewportWidth,384,framebuffer,true);
wxImage image(kViewportWidth,kViewportHeight,framebuffer,true);
wxBitmap bitmap(image);
dc->DrawBitmap(bitmap,0,0);
}
@ -135,6 +151,7 @@ public:
return;
}
viewer->NewFrame();
viewer->RepaintPanel();
}

View File

@ -33,6 +33,7 @@
#endif
#ifdef _MSC_VER
#define HAVE_WX
#define ENABLE_SSE
#define ENABLE_SSE2
#ifdef DEVELOPER

View File

@ -1564,10 +1564,6 @@
RelativePath="..\wxdlg\wxdlg3dViewer.h"
>
</File>
<File
RelativePath="..\wxdlg\wxMain.cpp"
>
</File>
</Filter>
<File
RelativePath="..\addons.cpp"

View File

@ -613,6 +613,35 @@ void ToDSScreenRelativeCoords(s32& x, s32& y, int whichScreen)
// END Rotation definitions
//-----window style handling----
const u32 DWS_NORMAL = 0;
const u32 DWS_ALWAYSONTOP = 1;
const u32 DWS_LOCKDOWN = 2;
static u32 currWindowStyle = DWS_NORMAL;
static void SetStyle(u32 dws)
{
//WS_CAPTION | WS_SYSMENU | WS_SIZEBOX | WS_MINIMIZEBOX | WS_CLIPCHILDREN | WS_CLIPSIBLINGS,
//pokefan's suggestion, there are a number of ways we could do this.
//i sort of like this because it is very visually indicative of being locked down
DWORD ws = GetWindowLong(MainWindow->getHWnd(),GWL_STYLE);
ws &= ~(WS_CAPTION | WS_POPUP | WS_THICKFRAME | WS_DLGFRAME );
if(dws & DWS_LOCKDOWN)
ws |= WS_POPUP | WS_DLGFRAME ;
else ws |= WS_CAPTION | WS_THICKFRAME;
SetWindowLong(MainWindow->getHWnd(),GWL_STYLE, ws);
currWindowStyle = dws;
HWND insertAfter = HWND_NOTOPMOST;
if(dws & DWS_ALWAYSONTOP)
insertAfter = HWND_TOPMOST;
SetWindowPos(MainWindow->getHWnd(), insertAfter, 0,0,0,0, SWP_NOMOVE | SWP_NOSIZE | SWP_FRAMECHANGED);
}
static u32 GetStyle() { return currWindowStyle; }
//---------
void UpdateRecentRomsMenu()
{
//This function will be called to populate the Recent Menu
@ -2157,9 +2186,10 @@ static void RefreshMicSettings()
DWORD wmTimerRes;
int _main()
{
//7zup initialization
InitDecoder();
#ifdef WX_STUB
#ifdef HAVE_WX
wxInitialize();
#endif
@ -2214,6 +2244,10 @@ int _main()
exit(-1);
}
u32 style = DWS_NORMAL;
if(GetPrivateProfileBool("Video","Window Always On Top", false, IniName)) style |= DWS_ALWAYSONTOP;
if(GetPrivateProfileBool("Video","Window Lockdown", false, IniName)) style |= DWS_LOCKDOWN;
windowSize = GetPrivateProfileInt("Video","Window Size", 0, IniName);
video.rotation = GetPrivateProfileInt("Video","Window Rotate", 0, IniName);
video.rotation_userset = GetPrivateProfileInt("Video","Window Rotate Set", video.rotation, IniName);
@ -2288,7 +2322,7 @@ int _main()
MainWindow = new WINCLASS(CLASSNAME, hAppInst);
if (!MainWindow->create((char*)EMU_DESMUME_NAME_AND_VERSION(), WndX, WndY, video.width,video.height+video.screengap,
WS_CAPTION| WS_SYSMENU | WS_SIZEBOX | WS_MINIMIZEBOX | WS_CLIPCHILDREN | WS_CLIPSIBLINGS,
WS_CAPTION | WS_SYSMENU | WS_SIZEBOX | WS_MINIMIZEBOX | WS_CLIPCHILDREN | WS_CLIPSIBLINGS,
NULL))
{
MessageBox(NULL, "Error creating main window", "DeSmuME", MB_OK);
@ -2296,6 +2330,8 @@ int _main()
exit(-1);
}
SetStyle(style);
gpu_SetRotateScreen(video.rotation);
//default the firmware settings, they may get changed later
@ -2582,8 +2618,8 @@ int _main()
MainWindow->Show(SW_NORMAL);
//DEBUG TEST HACK
//driver->VIEW3D_Init();
//driver->view3d->Launch();
driver->VIEW3D_Init();
driver->view3d->Launch();
//---------
//------DO EVERYTHING
@ -3550,6 +3586,7 @@ void FilterUpdate (HWND hwnd, bool user)
WritePrivateProfileInt("Video", "Height", video.height, IniName);
}
void DesEnableMenuItem(HMENU hMenu, UINT uIDEnableItem, bool enable)
{
EnableMenuItem(hMenu, uIDEnableItem, MF_BYCOMMAND | (enable?MF_ENABLED:MF_GRAYED));
@ -3646,6 +3683,8 @@ LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM
MainWindow->checkMenu(IDC_WINDOW2_5X, ((windowSize==65534)));
MainWindow->checkMenu(IDC_WINDOW3X, ((windowSize==3)));
MainWindow->checkMenu(IDC_WINDOW4X, ((windowSize==4)));
MainWindow->checkMenu(IDM_ALWAYS_ON_TOP, (GetStyle()&DWS_ALWAYSONTOP)!=0);
MainWindow->checkMenu(IDM_LOCKDOWN, (GetStyle()&DWS_LOCKDOWN)!=0);
//Screen Separation
MainWindow->checkMenu(IDM_SCREENSEP_NONE, ((video.screengap==kGapNone)));
@ -5090,23 +5129,16 @@ LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM
ScaleScreen(1);
}
break;
case IDM_LOCKDOWN:
{
SetStyle(GetStyle()^DWS_LOCKDOWN);
WritePrivateProfileBool("Video", "Window Lockdown", (GetStyle()&DWS_LOCKDOWN)!=0, IniName);
}
return 0;
case IDM_ALWAYS_ON_TOP:
{
LONG exStyle = GetWindowLong(MainWindow->getHWnd(), GWL_EXSTYLE);
UINT menuCheck = MF_BYCOMMAND;
HWND insertAfter = HWND_TOPMOST;
if(exStyle & WS_EX_TOPMOST)
{
menuCheck |= MF_UNCHECKED;
insertAfter = HWND_NOTOPMOST;
}
else
menuCheck |= MF_CHECKED;
CheckMenuItem(mainMenu, IDM_ALWAYS_ON_TOP, menuCheck);
SetWindowPos(MainWindow->getHWnd(), insertAfter, 0,0,0,0, SWP_NOMOVE | SWP_NOSIZE);
SetStyle(GetStyle()^DWS_ALWAYSONTOP);
WritePrivateProfileBool("Video", "Window Always On Top", (GetStyle()&DWS_ALWAYSONTOP)!=0, IniName);
}
return 0;

View File

@ -699,6 +699,7 @@
#define IDM_CHEATS_SEARCH 40063
#define ID_RAMSEARCH_CAPTIONTEXT 40064
#define IDM_VIEW3D 40065
#define IDM_LOCKDOWN 40066
#define IDC_LABEL_UP 50000
#define IDC_LABEL_RIGHT 50001
#define IDC_LABEL_LEFT 50002
@ -794,7 +795,7 @@
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 106
#define _APS_NEXT_COMMAND_VALUE 40010
#define _APS_NEXT_COMMAND_VALUE 40012
#define _APS_NEXT_CONTROL_VALUE 1020
#define _APS_NEXT_SYMED_VALUE 101
#endif

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

@ -68,6 +68,8 @@ wxdlg3dViewer::wxdlg3dViewer( wxWindow* parent, wxWindowID id, const wxString& c
{
Init();
Create(parent, id, caption, pos, size, style);
listPolys->callbacks = this;
listPolys->InsertColumn(0,"polys");
}
@ -112,6 +114,10 @@ void wxdlg3dViewer::Init()
////@begin wxdlg3dViewer member initialisation
checkMaterialInterpolate = NULL;
panelViewport = NULL;
labelUserPolycount = NULL;
labelFinalPolycount = NULL;
listPolys = NULL;
tree = NULL;
////@end wxdlg3dViewer member initialisation
}
@ -123,8 +129,6 @@ void wxdlg3dViewer::Init()
void wxdlg3dViewer::CreateControls()
{
////@begin wxdlg3dViewer content construction
// Generated by DialogBlocks, 14/12/2009 20:51:53 (unregistered)
wxdlg3dViewer* itemDialog1 = this;
wxFlexGridSizer* itemFlexGridSizer2 = new wxFlexGridSizer(1, 0, 0, 0);
@ -135,51 +139,75 @@ void wxdlg3dViewer::CreateControls()
itemFlexGridSizer2->AddGrowableCol(4);
itemDialog1->SetSizer(itemFlexGridSizer2);
wxStaticBox* itemStaticBoxSizer3Static = new wxStaticBox(itemDialog1, wxID_ANY, _("Display optionsss"));
wxStaticBoxSizer* itemStaticBoxSizer3 = new wxStaticBoxSizer(itemStaticBoxSizer3Static, wxVERTICAL);
itemFlexGridSizer2->Add(itemStaticBoxSizer3, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 5);
wxBoxSizer* itemBoxSizer3 = new wxBoxSizer(wxVERTICAL);
itemFlexGridSizer2->Add(itemBoxSizer3, 0, wxGROW|wxALIGN_TOP|wxALL, 5);
wxStaticBox* itemStaticBoxSizer4Static = new wxStaticBox(itemDialog1, wxID_ANY, _("Display optionsss"));
wxStaticBoxSizer* itemStaticBoxSizer4 = new wxStaticBoxSizer(itemStaticBoxSizer4Static, wxVERTICAL);
itemBoxSizer3->Add(itemStaticBoxSizer4, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5);
checkMaterialInterpolate = new wxCheckBox( itemDialog1, ID_MATERIALINTERPOLATE, _("Material clip interpolation"), wxDefaultPosition, wxDefaultSize, 0 );
checkMaterialInterpolate->SetValue(false);
itemStaticBoxSizer3->Add(checkMaterialInterpolate, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5);
itemStaticBoxSizer4->Add(checkMaterialInterpolate, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5);
wxCheckBox* itemCheckBox5 = new wxCheckBox( itemDialog1, ID_CHECKBOX1, _("Something else"), wxDefaultPosition, wxDefaultSize, 0 );
itemCheckBox5->SetValue(false);
itemStaticBoxSizer3->Add(itemCheckBox5, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5);
wxCheckBox* itemCheckBox6 = new wxCheckBox( itemDialog1, ID_CHECKBOX1, _("Something else"), wxDefaultPosition, wxDefaultSize, 0 );
itemCheckBox6->SetValue(false);
itemStaticBoxSizer4->Add(itemCheckBox6, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5);
panelViewport = new wxPanel( itemDialog1, ID_PANEL, wxDefaultPosition, wxSize(512, 384), wxSUNKEN_BORDER|wxTAB_TRAVERSAL );
itemBoxSizer3->Add(5, 5, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5);
wxFlexGridSizer* itemFlexGridSizer8 = new wxFlexGridSizer(0, 2, 0, 0);
itemBoxSizer3->Add(itemFlexGridSizer8, 1, wxALIGN_CENTER_HORIZONTAL|wxALL, 5);
panelViewport = new wxWindow( itemDialog1, ID_VIEWPORT, wxDefaultPosition, wxSize(256, 192), wxSIMPLE_BORDER );
itemFlexGridSizer2->Add(panelViewport, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 5);
wxStaticBox* itemStaticBoxSizer7Static = new wxStaticBox(itemDialog1, wxID_ANY, _("Choose One"));
wxStaticBoxSizer* itemStaticBoxSizer7 = new wxStaticBoxSizer(itemStaticBoxSizer7Static, wxVERTICAL);
itemFlexGridSizer2->Add(itemStaticBoxSizer7, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_TOP|wxALL, 5);
wxFlexGridSizer* itemFlexGridSizer10 = new wxFlexGridSizer(3, 1, 0, 0);
itemFlexGridSizer10->AddGrowableRow(1);
itemFlexGridSizer2->Add(itemFlexGridSizer10, 1, wxALIGN_CENTER_HORIZONTAL|wxGROW|wxALL, 5);
wxRadioButton* itemRadioButton8 = new wxRadioButton( itemDialog1, ID_RADIOBUTTON, _("Final Polylist"), wxDefaultPosition, wxDefaultSize, 0 );
itemRadioButton8->SetValue(true);
itemStaticBoxSizer7->Add(itemRadioButton8, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5);
wxStaticBox* itemStaticBoxSizer11Static = new wxStaticBox(itemDialog1, wxID_ANY, _("Choose One"));
wxStaticBoxSizer* itemStaticBoxSizer11 = new wxStaticBoxSizer(itemStaticBoxSizer11Static, wxVERTICAL);
itemFlexGridSizer10->Add(itemStaticBoxSizer11, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_BOTTOM|wxALL, 5);
wxRadioButton* itemRadioButton9 = new wxRadioButton( itemDialog1, ID_RADIOBUTTON1, _("User Polylist"), wxDefaultPosition, wxDefaultSize, 0 );
itemRadioButton9->SetValue(false);
itemRadioButton9->Enable(false);
itemStaticBoxSizer7->Add(itemRadioButton9, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5);
wxRadioButton* itemRadioButton12 = new wxRadioButton( itemDialog1, ID_RADIOBUTTON, _("Final Polylist"), wxDefaultPosition, wxDefaultSize, 0 );
itemRadioButton12->SetValue(true);
itemStaticBoxSizer11->Add(itemRadioButton12, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5);
wxRadioButton* itemRadioButton10 = new wxRadioButton( itemDialog1, ID_RADIOBUTTON2, _("Display List"), wxDefaultPosition, wxDefaultSize, 0 );
itemRadioButton10->SetValue(false);
itemRadioButton10->Enable(false);
itemStaticBoxSizer7->Add(itemRadioButton10, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5);
wxRadioButton* itemRadioButton13 = new wxRadioButton( itemDialog1, ID_RADIOBUTTON1, _("User Polylist"), wxDefaultPosition, wxDefaultSize, 0 );
itemRadioButton13->SetValue(false);
itemRadioButton13->Enable(false);
itemStaticBoxSizer11->Add(itemRadioButton13, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5);
wxStaticLine* itemStaticLine11 = new wxStaticLine( itemDialog1, wxID_STATIC, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
itemFlexGridSizer2->Add(itemStaticLine11, 0, wxALIGN_CENTER_HORIZONTAL|wxGROW|wxALL, 5);
wxRadioButton* itemRadioButton14 = new wxRadioButton( itemDialog1, ID_RADIOBUTTON2, _("Display List"), wxDefaultPosition, wxDefaultSize, 0 );
itemRadioButton14->SetValue(false);
itemRadioButton14->Enable(false);
itemStaticBoxSizer11->Add(itemRadioButton14, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5);
wxListCtrl* itemListCtrl12 = new wxListCtrl( itemDialog1, ID_LISTCTRL, wxDefaultPosition, wxDefaultSize, wxLC_REPORT );
itemFlexGridSizer2->Add(itemListCtrl12, 0, wxALIGN_CENTER_HORIZONTAL|wxGROW|wxALL, 5);
itemFlexGridSizer10->Add(5, 5, 1, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 5);
wxTreeCtrl* itemTreeCtrl13 = new wxTreeCtrl( itemDialog1, ID_TREECTRL, wxDefaultPosition, wxSize(99, 99), wxTR_SINGLE );
itemFlexGridSizer2->Add(itemTreeCtrl13, 0, wxALIGN_CENTER_HORIZONTAL|wxGROW|wxALL, 5);
wxStaticBox* itemStaticBoxSizer16Static = new wxStaticBox(itemDialog1, wxID_ANY, _("Statistics"));
wxStaticBoxSizer* itemStaticBoxSizer16 = new wxStaticBoxSizer(itemStaticBoxSizer16Static, wxVERTICAL);
itemFlexGridSizer10->Add(itemStaticBoxSizer16, 0, wxGROW|wxALIGN_CENTER_VERTICAL|wxALL, 5);
labelUserPolycount = new wxStaticText( itemDialog1, wxID_STATIC, _("User Polys"), wxDefaultPosition, wxDefaultSize, 0 );
itemStaticBoxSizer16->Add(labelUserPolycount, 0, wxALIGN_LEFT|wxALL, 1);
labelFinalPolycount = new wxStaticText( itemDialog1, wxID_STATIC, _("Final Polys: "), wxDefaultPosition, wxDefaultSize, 0 );
itemStaticBoxSizer16->Add(labelFinalPolycount, 0, wxALIGN_LEFT|wxALL, 1);
wxStaticLine* itemStaticLine19 = new wxStaticLine( itemDialog1, wxID_STATIC, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
itemFlexGridSizer2->Add(itemStaticLine19, 0, wxALIGN_CENTER_HORIZONTAL|wxGROW|wxALL, 5);
listPolys = new wxDesmumeListCtrl( itemDialog1, ID_DESMUMELISTCTRL1, wxDefaultPosition, wxDefaultSize, wxLC_REPORT|wxLC_VIRTUAL );
itemFlexGridSizer2->Add(listPolys, 0, wxALIGN_CENTER_HORIZONTAL|wxGROW|wxALL, 5);
tree = new wxTreeCtrl( itemDialog1, ID_TREECTRL, wxDefaultPosition, wxSize(99, 99), wxTR_HAS_BUTTONS |wxTR_HIDE_ROOT|wxTR_ROW_LINES|wxTR_SINGLE );
itemFlexGridSizer2->Add(tree, 0, wxALIGN_CENTER_HORIZONTAL|wxGROW|wxALL, 5);
// Connect events and objects
panelViewport->Connect(ID_PANEL, wxEVT_PAINT, wxPaintEventHandler(wxdlg3dViewer::OnPanelPaint), NULL, this);
panelViewport->Connect(ID_PANEL, wxEVT_ERASE_BACKGROUND, wxEraseEventHandler(wxdlg3dViewer::OnPanelEraseBackground), NULL, this);
panelViewport->Connect(ID_VIEWPORT, wxEVT_PAINT, wxPaintEventHandler(wxdlg3dViewer::OnPanelPaint), NULL, this);
panelViewport->Connect(ID_VIEWPORT, wxEVT_ERASE_BACKGROUND, wxEraseEventHandler(wxdlg3dViewer::OnPanelEraseBackground), NULL, this);
////@end wxdlg3dViewer content construction
}
@ -262,3 +290,87 @@ void wxdlg3dViewer::OnPanelEraseBackground( wxEraseEvent& event )
//blank to block background clearing
}
/*
* wxDesmumeListCtrl type definition
*/
IMPLEMENT_DYNAMIC_CLASS( wxDesmumeListCtrl, wxListCtrl )
/*
* wxDesmumeListCtrl event table definition
*/
BEGIN_EVENT_TABLE( wxDesmumeListCtrl, wxListCtrl )
////@begin wxDesmumeListCtrl event table entries
////@end wxDesmumeListCtrl event table entries
END_EVENT_TABLE()
/*
* wxDesmumeListCtrl constructors
*/
wxDesmumeListCtrl::wxDesmumeListCtrl()
{
Init();
}
wxDesmumeListCtrl::wxDesmumeListCtrl(wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style, const wxValidator& validator)
{
Init();
Create(parent, id, pos, size, style, validator);
}
/*
* wxDesmumeListCtrl creator
*/
bool wxDesmumeListCtrl::Create(wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style, const wxValidator& validator)
{
////@begin wxDesmumeListCtrl creation
wxListCtrl::Create(parent, id, pos, size, style, validator);
CreateControls();
////@end wxDesmumeListCtrl creation
return true;
}
/*
* wxDesmumeListCtrl destructor
*/
wxDesmumeListCtrl::~wxDesmumeListCtrl()
{
////@begin wxDesmumeListCtrl destruction
////@end wxDesmumeListCtrl destruction
}
/*
* Member initialisation
*/
void wxDesmumeListCtrl::Init()
{
////@begin wxDesmumeListCtrl member initialisation
////@end wxDesmumeListCtrl member initialisation
}
/*
* Control creation for wxDesmumeListCtrl
*/
void wxDesmumeListCtrl::CreateControls()
{
////@begin wxDesmumeListCtrl content construction
////@end wxDesmumeListCtrl content construction
}

View File

@ -25,11 +25,21 @@
#include "wx/treectrl.h"
////@end includes
class IListCtrlCallbacks
{
public:
virtual wxString OnGetItemText(const wxListCtrl* list, long item, long column) const = 0;
};
/*!
* Forward declarations
*/
////@begin forward declarations
class wxWindow;
class wxDesmumeListCtrl;
class wxTreeCtrl;
////@end forward declarations
/*!
@ -40,17 +50,21 @@
#define ID_X 10000
#define ID_MATERIALINTERPOLATE 10004
#define ID_CHECKBOX1 10008
#define ID_PANEL 10001
#define ID_VIEWPORT 10002
#define ID_RADIOBUTTON 10005
#define ID_RADIOBUTTON1 10006
#define ID_RADIOBUTTON2 10007
#define ID_LISTCTRL 10002
#define ID_DESMUMELISTCTRL1 10009
#define ID_TREECTRL 10003
#define SYMBOL_WXDLG3DVIEWER_STYLE wxCAPTION|wxRESIZE_BORDER|wxSYSTEM_MENU|wxDIALOG_NO_PARENT|wxCLOSE_BOX|wxTAB_TRAVERSAL
#define SYMBOL_WXDLG3DVIEWER_TITLE _("3D Viewer")
#define SYMBOL_WXDLG3DVIEWER_IDNAME ID_X
#define SYMBOL_WXDLG3DVIEWER_SIZE wxSize(399, 299)
#define SYMBOL_WXDLG3DVIEWER_SIZE wxSize(399, 300)
#define SYMBOL_WXDLG3DVIEWER_POSITION wxDefaultPosition
#define SYMBOL_WXDESMUMELISTCTRL_STYLE wxLC_REPORT|wxLC_VIRTUAL
#define SYMBOL_WXDESMUMELISTCTRL_IDNAME ID_DESMUMELISTCTRL1
#define SYMBOL_WXDESMUMELISTCTRL_SIZE wxDefaultSize
#define SYMBOL_WXDESMUMELISTCTRL_POSITION wxDefaultPosition
////@end control identifiers
@ -58,7 +72,7 @@
* wxdlg3dViewer class declaration
*/
class wxdlg3dViewer: public wxDialog
class wxdlg3dViewer: public wxDialog, public IListCtrlCallbacks
{
DECLARE_DYNAMIC_CLASS( wxdlg3dViewer )
DECLARE_EVENT_TABLE()
@ -80,6 +94,9 @@ public:
/// Creates the controls and sizers
void CreateControls();
virtual wxString OnGetItemText(const wxListCtrl* list, long item, long column) const {
return "";
}
virtual void RepaintPanel() {}
virtual void _OnPaintPanel( wxPaintEvent& event ) {};
@ -91,10 +108,10 @@ public:
/// wxEVT_COMMAND_CHECKBOX_CLICKED event handler for ID_MATERIALINTERPOLATE
void OnMaterialInterpolateClick( wxCommandEvent& event );
/// wxEVT_PAINT event handler for ID_PANEL
/// wxEVT_PAINT event handler for ID_VIEWPORT
void OnPanelPaint( wxPaintEvent& event );
/// wxEVT_ERASE_BACKGROUND event handler for ID_PANEL
/// wxEVT_ERASE_BACKGROUND event handler for ID_VIEWPORT
void OnPanelEraseBackground( wxEraseEvent& event );
////@end wxdlg3dViewer event handler declarations
@ -113,9 +130,57 @@ public:
////@begin wxdlg3dViewer member variables
wxCheckBox* checkMaterialInterpolate;
wxPanel* panelViewport;
wxWindow* panelViewport;
wxStaticText* labelUserPolycount;
wxStaticText* labelFinalPolycount;
wxDesmumeListCtrl* listPolys;
wxTreeCtrl* tree;
////@end wxdlg3dViewer member variables
};
/*!
* wxDesmumeListCtrl class declaration
*/
class wxDesmumeListCtrl: public wxListCtrl
{
DECLARE_DYNAMIC_CLASS( wxDesmumeListCtrl )
DECLARE_EVENT_TABLE()
public:
IListCtrlCallbacks* callbacks;
virtual wxString OnGetItemText(long item, long column) const {
return callbacks->OnGetItemText(this,item,column);
}
/// Constructors
wxDesmumeListCtrl();
wxDesmumeListCtrl(wxWindow* parent, wxWindowID id, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxLC_ICON, const wxValidator& validator = wxDefaultValidator);
/// Creation
bool Create(wxWindow* parent, wxWindowID id, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxLC_ICON, const wxValidator& validator = wxDefaultValidator);
/// Destructor
~wxDesmumeListCtrl();
/// Initialises member variables
void Init();
/// Creates the controls and sizers
void CreateControls();
////@begin wxDesmumeListCtrl event handler declarations
////@end wxDesmumeListCtrl event handler declarations
////@begin wxDesmumeListCtrl member function declarations
////@end wxDesmumeListCtrl member function declarations
////@begin wxDesmumeListCtrl member variables
////@end wxDesmumeListCtrl member variables
};
#endif
// _X_H_