frmMain::frmMain() : wxFrame(NULL, wxID_ANY, L"CorsixTH Map Editor", wxDefaultPosition, wxSize(640, 480)) { m_sFrameCaption = wxFrame::GetTitle(); _setFilename(wxEmptyString); m_pRibbon = new wxRibbonBar(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxRIBBON_BAR_FLOW_VERTICAL | wxRIBBON_BAR_SHOW_PAGE_LABELS); m_pRibbon->SetArtProvider(new wxRibbonMSWArtProvider); m_pRibbon->SetTabCtrlMargins(0, 0); m_pHomePage = new wxRibbonPage(m_pRibbon, wxID_ANY, L"Home"); wxRibbonPage* pFloorPage = new wxRibbonPage(m_pRibbon, wxID_ANY, L"Floors"); wxRibbonPanel* pFloorSimplePanel = new wxRibbonPanel(pFloorPage, wxID_ANY, L"Simple Tiles"); m_pFloorGallery1 = new RibbonBlockGallery(pFloorSimplePanel, ID_GALLERY_FLOOR1); wxRibbonPanel* pFloorDecoratedPanel = new wxRibbonPanel(pFloorPage, wxID_ANY, L"Decorated Tiles"); m_pFloorGallery2 = new RibbonBlockGallery(pFloorDecoratedPanel, ID_GALLERY_FLOOR2); wxRibbonPage* pWallPage = new wxRibbonPage(m_pRibbon, wxID_ANY, L"Walls"); wxRibbonPanel* pWallWestPanel = new wxRibbonPanel(pWallPage, wxID_ANY, L"West"); m_pWallGallery1 = new RibbonBlockGallery(pWallWestPanel, ID_GALLERY_WALL1); wxRibbonPanel* pWallNorthPanel = new wxRibbonPanel(pWallPage, wxID_ANY, L"North"); m_pWallGallery2 = new RibbonBlockGallery(pWallNorthPanel, ID_GALLERY_WALL2); m_pRibbon->Realize(); m_pGamePanel = new ScrollableGamePanel(this); m_pGamePanel->setExtraLuaInitFunction(_l_init, this); m_pGamePanel->setLogWindow(m_pLogWindow = new frmLog); wxPoint ptLogWindow = GetPosition(); ptLogWindow.x += GetSize().GetWidth(); m_pLogWindow->SetPosition(ptLogWindow); wxSizer *pTopSizer = new wxBoxSizer(wxHORIZONTAL); pTopSizer->Add(m_pRibbon, 0, wxEXPAND); pTopSizer->Add(m_pGamePanel, 1, wxEXPAND); SetSizer(pTopSizer); }
void frmMain::_onOpen(wxRibbonButtonBarEvent& evt) { wxString sDirectory = _getMapsDirectory(); wxString sFilter = _getMapsFilter(); wxFileDialog oOpenDialog(this, wxFileSelectorPromptStr, sDirectory, wxEmptyString, sFilter, wxFD_OPEN | wxFD_FILE_MUST_EXIST); oOpenDialog.SetFilterIndex(2); if(oOpenDialog.ShowModal() != wxID_OK) return; wxFile fFile; if(!fFile.Open(oOpenDialog.GetPath())) return; size_t iLength = static_cast<size_t>(fFile.Length()); char* sData = new (std::nothrow) char[iLength]; if(!sData) return; if(fFile.Read(sData, iLength) != iLength) { delete[] sData; return; } do_load_level_t oParams = {sData, iLength, this}; lua_State* L = m_pGamePanel->getLua(); if(lua_cpcall(L, _l_do_load, reinterpret_cast<void*>(&oParams)) != 0) lua_pop(L, 1); delete[] sData; _setFilename(oOpenDialog.GetPath()); m_pGamePanel->Refresh(); }
/* Caution! singelton. */ static iOTrace _inst ( tracelevel level, const char* file, Boolean toStdErr) { if( traceInst == NULL ) { iOTrace trace = allocIDMem( sizeof( struct OTrace ), RocsTraceID ); iOTraceData data = allocIDMem( sizeof( struct OTraceData ), RocsTraceID ); MemOp.basecpy( trace, &TraceOp, 0, sizeof( struct OTrace ), data ); data->mux = MutexOp.inst( NULL, True ); data->ebcdic = EbcdicOp.inst( CODEPAGE_1252, NULL ); data->level = level; data->toStdErr = toStdErr; data->dumpsize = TRC_DUMPSIZE; data->appID = StrOp.dupID( "..", RocsTraceID ); data->filesize = TRC_FILESIZE; data->nrfiles = TRC_NRFILES; traceInst = trace; instCnt++; if( file != NULL ) _setFilename( trace, file ); mainThreadId = ThreadOp.id(); return trace; } else return traceInst; }
void frmMain::_onNew(wxRibbonButtonBarEvent& evt) { do_load_level_t oParams = {NULL, 0, this}; lua_State* L = m_pGamePanel->getLua(); if(lua_cpcall(L, _l_do_load, reinterpret_cast<void*>(&oParams)) != 0) lua_pop(L, 1); _setFilename(wxEmptyString); m_pGamePanel->Refresh(); }
void frmMain::_onSaveMenuSaveAs(wxCommandEvent& evt) { wxString sDirectory = _getMapsDirectory(); wxString sFilter = _getMapsFilter(); wxFileDialog oSaveDialog(this, wxFileSelectorPromptStr, sDirectory, m_sFilename, sFilter, wxFD_SAVE | wxFD_OVERWRITE_PROMPT); oSaveDialog.SetFilterIndex(2); if(oSaveDialog.ShowModal() != wxID_OK) return; _setFilename(oSaveDialog.GetPath()); _onSaveMenuSave(evt); }