1 // 2 // gui.h 3 // 4 5 #ifndef __GUI_H__ 6 #define __GUI_H__ 7 8 #include "wx/frame.h" 9 #include "wx/string.h" 10 11 #include <vector> 12 #include "matrix.h" 13 #include "undo.h" 14 15 16 class Canvas; // see canvas.h 17 class Graph; 18 class Edge; 19 class Vertex; 20 21 class wxGauge; 22 class wxMenuItem; 23 class wxStatusBar; 24 25 class GTFrame : public wxFrame 26 { 27 private: 28 Canvas *canvas; 29 Graph *graph; 30 31 UndoStack undoStack; 32 wxMenuItem *edit_Undo, *view_Labels, *view_Weights, *view_Flows; 33 34 wxGauge *progressBar; 35 wxStatusBar *statusBar; 36 37 DECLARE_EVENT_TABLE() 38 39 void OnMenu (wxCommandEvent &event); 40 void OnSize (wxSizeEvent &event); 41 42 // All callbacks are implemented in gui_cb.cc 43 #define CB(func) void func (wxCommandEvent &event); 44 CB(cb_File_Load) 45 CB(cb_File_Save) 46 CB(cb_File_Exit) 47 48 CB(cb_Edit_Undo) 49 CB(cb_Edit_SelectAll) 50 CB(cb_Edit_SelectNone) 51 CB(cb_Edit_InvertSelectionVertices) 52 CB(cb_Edit_InvertSelectionEdges) 53 CB(cb_Edit_InvertSelectionAll) 54 55 CB(cb_View) 56 57 CB(cb_Graph_Clear) 58 CB(cb_Graph_Complement) 59 CB(cb_Graph_LineGraph) 60 CB(cb_Graph_Subgraph) 61 CB(cb_Graph_Find_ShortestPath) 62 CB(cb_Graph_Find_BFS) 63 CB(cb_Graph_Find_DFS) 64 CB(cb_Graph_Find_MST) 65 CB(cb_Graph_Find_MaxFlow) 66 CB(cb_Graph_Properties_Connectivity) 67 CB(cb_Graph_Properties_Eulericity) 68 69 CB(cb_Graph_Statistics_AdjacencyMatrix) 70 CB(cb_Graph_Statistics_DegreeSequence) 71 CB(cb_Graph_Statistics_Diameter) 72 CB(cb_Graph_Statistics_Radius) 73 CB(cb_Graph_Statistics_ChromaticNumber) 74 CB(cb_Graph_Statistics_ChromaticIndex) 75 CB(cb_Graph_Statistics_ChromaticPolynomial) 76 77 CB(cb_Prefab_Complete) 78 CB(cb_Prefab_CompleteBipartite) 79 CB(cb_Prefab_Cycle) 80 CB(cb_Prefab_Gear) 81 CB(cb_Prefab_Hanoi) 82 CB(cb_Prefab_Ladder) 83 CB(cb_Prefab_Lattice) 84 CB(cb_Prefab_Null) 85 CB(cb_Prefab_Star) 86 CB(cb_Prefab_Wheel) 87 CB(cb_Prefab_Petersen) 88 CB(cb_Prefab_Platonic_Tetrahedral) 89 CB(cb_Prefab_Platonic_Cubical) 90 CB(cb_Prefab_Platonic_Octahedral) 91 CB(cb_Prefab_Platonic_Dodecahedral) 92 CB(cb_Prefab_Platonic_Icosahedral) 93 94 CB(cb_Help_About) 95 96 // Split mode 97 bool in_vertex_mode; 98 CB(cb_Change_Mode) 99 100 101 wxMenuBar *genMenuBar (); 102 void setUndoText (wxString description); 103 104 public: 105 GTFrame (); 106 ~GTFrame (); 107 108 void undoableAction (wxString description); 109 void loadGraph (const wxString fname); 110 void msg (const wxString &title, const wxString &s); 111 void msg (const wxString &title, const char *s); 112 113 void toggleMode (); 114 115 void pushStatus (const wxString &str); 116 void popStatus (); 117 void setProgress (double frac); // argument in [0, 1] 118 }; 119 120 // Event IDs for main frame 121 enum { 122 ID_FILE_LOAD = 1001, 123 ID_FILE_SAVE, 124 ID_FILE_PRINT, 125 ID_FILE_EXIT, 126 127 ID_EDIT_UNDO, 128 ID_EDIT_SELECTALL, 129 ID_EDIT_SELECTNONE, 130 ID_EDIT_INVERTSELV, 131 ID_EDIT_INVERTSELE, 132 ID_EDIT_INVERTSELA, 133 134 ID_VIEW_LABELS, 135 ID_VIEW_WEIGHTS, 136 ID_VIEW_FLOWS, 137 138 ID_GRAPH_CLEAR, 139 ID_GRAPH_COMPLEMENT, 140 ID_GRAPH_LINEGRAPH, 141 ID_GRAPH_SUBGRAPH, 142 143 ID_GRAPH_FIND, // submenu 144 ID_GRAPH_FIND_SHORTESTPATH, 145 ID_GRAPH_FIND_BFS, 146 ID_GRAPH_FIND_DFS, 147 ID_GRAPH_FIND_MST, 148 ID_GRAPH_FIND_MAXFLOW, 149 150 ID_GRAPH_PROPERTIES, // submenu 151 ID_GRAPH_PROPERTIES_CONNECTIVITY, 152 ID_GRAPH_PROPERTIES_EULERICITY, 153 ID_GRAPH_PROPERTIES_HAMILTONICITY, 154 ID_GRAPH_PROPERTIES_PLANARITY, 155 156 ID_GRAPH_STATISTICS, // submenu 157 ID_GRAPH_STATISTICS_ADJMATRIX, 158 ID_GRAPH_STATISTICS_DEGSEQ, 159 ID_GRAPH_STATISTICS_DIAMETER, 160 ID_GRAPH_STATISTICS_GIRTH, 161 ID_GRAPH_STATISTICS_RADIUS, 162 ID_GRAPH_STATISTICS_CHROMNUM, 163 ID_GRAPH_STATISTICS_CHROMINDEX, 164 ID_GRAPH_STATISTICS_CHROMPOLY, 165 166 ID_PREFAB_COMPLETE, 167 ID_PREFAB_COMPLETEBIPARTITE, 168 ID_PREFAB_CYCLE, 169 ID_PREFAB_GEAR, 170 ID_PREFAB_HANOI, 171 ID_PREFAB_LADDER, 172 ID_PREFAB_LATTICE, 173 ID_PREFAB_NULL, 174 ID_PREFAB_STAR, 175 ID_PREFAB_TREE, 176 ID_PREFAB_WHEEL, 177 ID_PREFAB_PETERSEN, 178 179 ID_PREFAB_PLATONIC, // submenu 180 ID_PREFAB_PLATONIC_TETRAHEDRAL, 181 ID_PREFAB_PLATONIC_CUBICAL, 182 ID_PREFAB_PLATONIC_OCTAHEDRAL, 183 ID_PREFAB_PLATONIC_DODECAHEDRAL, 184 ID_PREFAB_PLATONIC_ICOSAHEDRAL, 185 186 ID_HELP_ABOUT, 187 188 // Toolbar 189 ID_TOOL_VERTEXMODE, 190 ID_TOOL_EDGEMODE 191 }; 192 193 #endif // __GUI_H__ 194