⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 efgshow.cc

📁 Gambit 是一个游戏库理论软件
💻 CC
📖 第 1 页 / 共 4 页
字号:
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 + -