📄 efgshow.cc
字号:
void EfgShow::OnFileExit(wxCommandEvent &){ while (wxGetApp().GetTopWindow()) { delete wxGetApp().GetTopWindow(); }}void EfgShow::OnFileMRUFile(wxCommandEvent &p_event){ wxGetApp().OnFileMRUFile(p_event);}//----------------------------------------------------------------------// EfgShow: Menu handlers - Edit menu//----------------------------------------------------------------------void EfgShow::OnEditCut(wxCommandEvent &){ if (m_cutNode) { m_treeWindow->SetCutNode(m_cutNode, false); } m_cutNode = Cursor(); m_treeWindow->SetCutNode(m_cutNode, true); m_copyNode = 0; m_treeWindow->Refresh();}void EfgShow::OnEditCopy(wxCommandEvent &){ m_copyNode = Cursor(); if (m_cutNode) { m_treeWindow->SetCutNode(m_cutNode, false); m_cutNode = 0; } m_treeWindow->Refresh();}void EfgShow::OnEditPaste(wxCommandEvent &){ try { if (m_copyNode) { m_efg.CopyTree(m_copyNode, Cursor()); } else { m_efg.MoveTree(m_cutNode, Cursor()); } OnTreeChanged(true, true); } catch (gException &ex) { guiExceptionDialog(ex.Description(), this); }}void EfgShow::OnEditInsert(wxCommandEvent &){ dialogInsertMove dialog(this, m_efg); if (dialog.ShowModal() == wxID_OK) { try { if (!dialog.GetInfoset()) { m_efg.InsertNode(Cursor(), dialog.GetPlayer(), dialog.GetActions()); OnTreeChanged(true, true); } else { m_efg.InsertNode(Cursor(), dialog.GetInfoset()); OnTreeChanged(true, false); } } catch (gException &ex) { guiExceptionDialog(ex.Description(), this); } }}void EfgShow::OnEditDelete(wxCommandEvent &){ try { dialogEfgDelete dialog(this, Cursor()); if (dialog.ShowModal() == wxID_OK) { if (dialog.DeleteTree()) { m_efg.DeleteTree(Cursor()); } else { Node *keep = dialog.KeepNode(); m_treeWindow->SetCursorPosition(m_efg.DeleteNode(Cursor(), keep)); } m_efg.DeleteEmptyInfosets(); OnTreeChanged(true, true); } } catch (gException &ex) { guiExceptionDialog(ex.Description(), this); }}void EfgShow::OnEditReveal(wxCommandEvent &){ dialogInfosetReveal dialog(this, m_efg); if (dialog.ShowModal() == wxID_OK) { try { m_efg.Reveal(Cursor()->GetInfoset(), dialog.GetPlayers()); OnTreeChanged(true, true); } catch (gException &ex) { guiExceptionDialog(ex.Description(), this); } }}void EfgShow::OnEditToggleSubgame(wxCommandEvent &){ if (Cursor()->GetSubgameRoot() == Cursor()) { m_efg.UnmarkSubgame(Cursor()); } else { m_efg.MarkSubgame(Cursor()); } m_treeWindow->RefreshLayout(); m_treeWindow->Refresh();}void EfgShow::OnEditMarkSubgameTree(wxCommandEvent &){ gList<Node *> subgames; LegalSubgameRoots(m_efg, Cursor(), subgames); for (int i = 1; i <= subgames.Length(); i++) { m_efg.MarkSubgame(subgames[i]); } m_treeWindow->RefreshLayout(); m_treeWindow->Refresh();}void EfgShow::OnEditUnmarkSubgameTree(wxCommandEvent &){ gList<Node *> subgames; LegalSubgameRoots(m_efg, Cursor(), subgames); for (int i = 1; i <= subgames.Length(); i++) { m_efg.UnmarkSubgame(subgames[i]); } m_treeWindow->RefreshLayout(); m_treeWindow->Refresh();}void EfgShow::OnEditNode(wxCommandEvent &){ dialogEditNode dialog(this, Cursor()); if (dialog.ShowModal() == wxID_OK) { Cursor()->SetName(dialog.GetNodeName().c_str()); if (dialog.GetOutcome() > 0) { m_efg.SetOutcome(Cursor(), m_efg.GetOutcome(dialog.GetOutcome())); } else { m_efg.SetOutcome(Cursor(), 0); } if (m_efg.IsLegalSubgame(Cursor()) && Cursor()->GetParent()) { if (dialog.MarkedSubgame()) { m_efg.MarkSubgame(Cursor()); } else { m_efg.UnmarkSubgame(Cursor()); } } if (Cursor()->NumChildren() > 0 && dialog.GetInfoset() != Cursor()->GetInfoset()) { if (dialog.GetInfoset() == 0) { m_efg.LeaveInfoset(Cursor()); } else { m_efg.JoinInfoset(dialog.GetInfoset(), Cursor()); } OnTreeChanged(true, true); } m_treeWindow->RefreshTree(); m_treeWindow->Refresh(); UpdateMenus(); }}void EfgShow::OnEditMove(wxCommandEvent &){ Infoset *infoset = Cursor()->GetInfoset(); dialogEditMove dialog(this, infoset); if (dialog.ShowModal() == wxID_OK) { infoset->SetName(dialog.GetInfosetName().c_str()); if (!infoset->IsChanceInfoset() && dialog.GetPlayer() != infoset->GetPlayer()->GetNumber()) { m_efg.SwitchPlayer(infoset, m_efg.Players()[dialog.GetPlayer()]); } for (int act = 1; act <= infoset->NumActions(); act++) { if (!dialog.GetActions().Find(infoset->Actions()[act])) { m_efg.DeleteAction(infoset, infoset->Actions()[act]); act--; } } int insertAt = 1; for (int act = 1; act <= dialog.NumActions(); act++) { Action *action = dialog.GetActions()[act]; if (action) { action->SetName(dialog.GetActionName(act)); if (infoset->IsChanceInfoset()) { m_efg.SetChanceProb(infoset, action->GetNumber(), dialog.GetActionProb(act)); } insertAt = dialog.GetActions()[act]->GetNumber() + 1; } else if (insertAt > infoset->NumActions()) { Action *newAction = m_efg.InsertAction(infoset); insertAt++; newAction->SetName(dialog.GetActionName(act)); if (infoset->IsChanceInfoset()) { m_efg.SetChanceProb(infoset, newAction->GetNumber(), dialog.GetActionProb(act)); } } else { Action *newAction = m_efg.InsertAction(infoset, infoset->GetAction(insertAt++)); newAction->SetName(dialog.GetActionName(act)); if (infoset->IsChanceInfoset()) { m_efg.SetChanceProb(infoset, newAction->GetNumber(), dialog.GetActionProb(act)); } } } OnTreeChanged(true, true); m_treeWindow->Refresh(); UpdateMenus(); }}void EfgShow::OnEditGame(wxCommandEvent &){ dialogEditEfg dialog(this, m_efg, m_filename); if (dialog.ShowModal() == wxID_OK) { m_efg.SetTitle(dialog.GetGameTitle().c_str()); SetFilename(Filename()); m_efg.SetComment(dialog.GetComment().c_str()); for (int pl = 1; pl <= dialog.NumPlayers(); pl++) { if (pl > m_efg.NumPlayers()) { m_efg.NewPlayer()->SetName(dialog.GetPlayerName(pl).c_str()); } else { m_efg.Players()[pl]->SetName(dialog.GetPlayerName(pl).c_str()); } } m_outcomeWindow->UpdateValues(); m_supportWindow->UpdateValues(); }}//----------------------------------------------------------------------// EfgShow: Menu handlers - View menu//----------------------------------------------------------------------void EfgShow::OnViewProfiles(wxCommandEvent &){ if (m_solutionSashWindow->IsShown()) { m_profileTable->Show(false); m_solutionSashWindow->Show(false); GetMenuBar()->Check(efgmenuVIEW_PROFILES, false); } else { m_profileTable->Show(true); m_solutionSashWindow->Show(true); GetMenuBar()->Check(efgmenuVIEW_PROFILES, true); } AdjustSizes();}void EfgShow::OnViewCursor(wxCommandEvent &){ if (m_nodeSashWindow->IsShown() && m_infoNotebook->GetSelection() != 0) { m_infoNotebook->SetSelection(0); m_navigateWindow->Show(true); GetMenuBar()->Check(efgmenuVIEW_NAVIGATION, true); GetMenuBar()->Check(efgmenuVIEW_OUTCOMES, false); GetMenuBar()->Check(efgmenuVIEW_SUPPORTS, false); } else if (m_nodeSashWindow->IsShown()) { m_nodeSashWindow->Show(false); GetMenuBar()->Check(efgmenuVIEW_NAVIGATION, false); } else { m_nodeSashWindow->Show(true); m_infoNotebook->SetSelection(0); GetMenuBar()->Check(efgmenuVIEW_NAVIGATION, true); } AdjustSizes();}void EfgShow::OnViewOutcomes(wxCommandEvent &){ if (m_nodeSashWindow->IsShown() && m_infoNotebook->GetSelection() != 1) { m_infoNotebook->SetSelection(1); m_navigateWindow->Show(true); GetMenuBar()->Check(efgmenuVIEW_OUTCOMES, true); GetMenuBar()->Check(efgmenuVIEW_NAVIGATION, false); GetMenuBar()->Check(efgmenuVIEW_SUPPORTS, false); } else if (m_nodeSashWindow->IsShown()) { m_nodeSashWindow->Show(false); GetMenuBar()->Check(efgmenuVIEW_OUTCOMES, false); } else { m_nodeSashWindow->Show(true); m_infoNotebook->SetSelection(1); GetMenuBar()->Check(efgmenuVIEW_OUTCOMES, true); } AdjustSizes();}void EfgShow::OnViewSupports(wxCommandEvent &){ if (m_nodeSashWindow->IsShown() && m_infoNotebook->GetSelection() != 2) { m_infoNotebook->SetSelection(2); GetMenuBar()->Check(efgmenuVIEW_NAVIGATION, false); GetMenuBar()->Check(efgmenuVIEW_OUTCOMES, false); GetMenuBar()->Check(efgmenuVIEW_SUPPORTS, true); } else if (m_nodeSashWindow->IsShown()) { m_nodeSashWindow->Show(false); GetMenuBar()->Check(efgmenuVIEW_SUPPORTS, false); } else { m_nodeSashWindow->Show(true); m_infoNotebook->SetSelection(2); GetMenuBar()->Check(efgmenuVIEW_SUPPORTS, true); } AdjustSizes();}const double ZOOM_DELTA = .1;const double ZOOM_MAX = 1;const double ZOOM_MIN = .2;void EfgShow::OnViewZoomIn(wxCommandEvent &){ double zoom = m_treeWindow->GetZoom(); zoom = gmin(zoom + ZOOM_DELTA, ZOOM_MAX); m_treeWindow->SetZoom(zoom);}void EfgShow::OnViewZoomOut(wxCommandEvent &){ double zoom = m_treeWindow->GetZoom(); zoom = gmax(zoom - ZOOM_DELTA, ZOOM_MIN); m_treeWindow->SetZoom(zoom);}void EfgShow::OnViewSupportReachable(wxCommandEvent &){ m_treeWindow->DrawSettings().SetRootReachable(!m_treeWindow->DrawSettings().RootReachable()); m_treeWindow->RefreshLayout(); m_treeWindow->Refresh();}//----------------------------------------------------------------------// EfgShow: Menu handlers - Format menu//----------------------------------------------------------------------void EfgShow::OnFormatFontsAboveNode(wxCommandEvent &){ wxFontData data; data.SetInitialFont(m_treeWindow->DrawSettings().NodeAboveFont()); wxFontDialog dialog(this, &data); if (dialog.ShowModal() == wxID_OK) { m_treeWindow->DrawSettings().SetNodeAboveFont(dialog.GetFontData().GetChosenFont()); m_treeWindow->DrawSettings().SaveOptions(); m_treeWindow->RefreshLabels(); }}void EfgShow::OnFormatFontsBelowNode(wxCommandEvent &){ wxFontData data; wxFontDialog dialog(this, &data); if (dialog.ShowModal() == wxID_OK) { m_treeWindow->DrawSettings().SetNodeBelowFont(dialog.GetFontData().GetChosenFont()); m_treeWindow->DrawSettings().SaveOptions(); m_treeWindow->RefreshLabels(); }}void EfgShow::OnFormatFontsAfterNode(wxCommandEvent &){ wxFontData data; wxFontDialog dialog(this, &data); if (dialog.ShowModal() == wxID_OK) { m_treeWindow->DrawSettings().SetNodeRightFont(dialog.GetFontData().GetChosenFont()); m_treeWindow->DrawSettings().SaveOptions(); m_treeWindow->RefreshLabels(); }}void EfgShow::OnFormatFontsAboveBranch(wxCommandEvent &){ wxFontData data; wxFontDialog dialog(this, &data); if (dialog.ShowModal() == wxID_OK) { m_treeWindow->DrawSettings().SetBranchAboveFont(dialog.GetFontData().GetChosenFont()); m_treeWindow->DrawSettings().SaveOptions(); m_treeWindow->RefreshLabels(); }}void EfgShow::OnFormatFontsBelowBranch(wxCommandEvent &){ wxFontData data; wxFontDialog dialog(this, &data); if (dialog.ShowModal() == wxID_OK) { m_treeWindow->DrawSettings().SetBranchBelowFont(dialog.GetFontData().GetChosenFont()); m_treeWindow->DrawSettings().SaveOptions(); m_treeWindow->RefreshLabels(); }}void EfgShow::OnFormatDisplayLayout(wxCommandEvent &){ TreeDrawSettings &settings = m_treeWindow->DrawSettings(); dialogLayout dialog(this, settings); if (dialog.ShowModal() == wxID_OK) { dialog.GetSettings(settings); m_treeWindow->DrawSettings().SaveOptions();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -