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