Remove favorites panel, the last opened virtual machines can be found in the file...
[qemu-gui.git] / menubar.cpp
blob9a07e44ecd0484382dba2b565752c145d552ba02
1 #include <wx/intl.h>
2 #include <wx/menu.h>
3 #include "menubar.h"
4 #include "events.h"
5 #include "mainframe.h"
7 QemuUIMenuBar::QemuUIMenuBar() : wxMenuBar(){
8 this->Append(CreateFileMenu(), _("&File"));
9 this->Append(CreateViewMenu(), _("&View"));
10 this->Append(CreateVMMenu(), _("V&M"));
11 this->Append(CreatePowerMenu(), _("&Power"));
12 this->Append(CreateWindowMenu(),_("&Windows"));
13 this->Append(CreateHelpMenu(), _("&Help"));
16 wxMenu *QemuUIMenuBar::CreateFileMenu(){
17 this->filemenu = new wxMenu();
19 filemenu->Append(
20 QEMU_NEW,
21 _("&N&ew\tCtrl-N"),
22 _("Create a new VM")
25 filemenu->Append(
26 QEMU_OPEN,
27 _("&Open\tCtrl-O"),
28 _("Open an existing VM")
31 filemenu->Append(
32 QEMU_CLOSE,
33 _("&Close\tCtrl-Q"),
34 _("Close this VM")
37 filemenu->AppendSeparator();
39 filemenu->Append(
40 QEMU_QUIT,
41 _("E&xit\tCtrl-X"),
42 _("Quit this program")
45 return this->filemenu;
48 wxMenu *QemuUIMenuBar::CreateViewMenu(){
49 this->viewmenu = new wxMenu();
51 viewmenu->Append(
52 QEMU_HOMEPAGE,
53 _("&Homepage"),
54 _("Show start screen")
57 viewmenu->AppendCheckItem(
58 QEMU_FULLSCREEN,
59 _("&Fullscreen"),
60 _("Toggle fullscreen mode")
63 wxMenu *toolbarmenu = new wxMenu();
64 toolbarmenu->AppendCheckItem(
65 QEMU_TOGGLE_TOOLBAR,
66 _("&Toolbar"),
67 _("Toggle toolbar")
69 toolbarmenu->Check(QEMU_TOGGLE_TOOLBAR,true);
70 toolbarmenu->AppendSeparator();
71 toolbarmenu->AppendRadioItem(QEMU_TOOLBAR_ICONS,_("Icons"));
72 toolbarmenu->AppendRadioItem(QEMU_TOOLBAR_TEXT,_("Text"));
73 toolbarmenu->AppendRadioItem(QEMU_TOOLBAR_BOTH,_("Both"));
74 toolbarmenu->Check(QEMU_TOOLBAR_BOTH,true);
76 viewmenu->Append(
77 wxID_ANY,
78 _("Toolbar"),
79 toolbarmenu,
80 _("Toolbar related settings")
83 viewmenu->AppendCheckItem(
84 QEMU_TOGGLE_STATUSBAR,
85 _("&Status Bar"),
86 _("Toggle status bar")
88 viewmenu->Check(QEMU_TOGGLE_STATUSBAR,true);
90 return this->viewmenu;
93 wxMenu* QemuUIMenuBar::CreateVMMenu(){
94 this->vmmenu = new wxMenu();
95 vmmenu->Append(QEMU_VM_SETTINGS,_("Settings"));
96 return this->vmmenu;
100 wxMenu* QemuUIMenuBar::CreatePowerMenu(){
101 this->powermenu = new wxMenu();
102 powermenu->Append(QEMU_VM_START,_("Power on"));
103 powermenu->Append(QEMU_VM_SHUTDOWN,_("Power off"));
104 powermenu->Append(QEMU_VM_PAUSE,_("Pause"));
105 powermenu->Append(QEMU_VM_RESET,_("Reset"));
106 return this->powermenu;
109 wxMenu* QemuUIMenuBar::CreateWindowMenu(){
110 this->windowmenu = new wxMenu();
111 windowmenu->AppendSeparator();
112 windowmenu->Append(
113 QEMU_WINDOW_NEXT,
114 _("&Next Window\tCtrl+TAB")
116 windowmenu->Append(
117 QEMU_WINDOW_PREV,
118 _("&Previous Window\tCtrl+Shift+Tab")
120 return this->windowmenu;
123 wxMenu *QemuUIMenuBar::CreateHelpMenu(){
124 this->helpmenu = new wxMenu();
125 helpmenu->Append(
126 QEMU_DOC,
127 _("&Documentation\tF1"),
128 _("Show Qemu documentation")
130 helpmenu->Append(
131 QEMU_ABOUT,
132 _("&About"),
133 _("Show about dialog")
135 return this->helpmenu;
138 void QemuUIMenuBar::Disable(){
139 powermenu->Enable(QEMU_VM_START,false);
140 powermenu->Enable(QEMU_VM_PAUSE,false);
141 powermenu->Enable(QEMU_VM_SHUTDOWN,false);
142 powermenu->Enable(QEMU_VM_RESET,false);
143 vmmenu->Enable(QEMU_VM_SETTINGS,false);
146 void QemuUIMenuBar::Settings(bool state){
147 vmmenu->Enable(QEMU_VM_SETTINGS,state);
150 void QemuUIMenuBar::PowerOn(bool state){
151 powermenu->Enable(QEMU_VM_START,state);
154 void QemuUIMenuBar::Pause(bool state){
155 powermenu->Enable(QEMU_VM_PAUSE,state);
158 void QemuUIMenuBar::PowerOff(bool state){
159 powermenu->Enable(QEMU_VM_SHUTDOWN,state);
162 void QemuUIMenuBar::Reset(bool state){
163 powermenu->Enable(QEMU_VM_RESET,state);
166 void QemuUIMenuBar::EnableToolbar(bool value){
167 viewmenu->Enable(QEMU_TOOLBAR_TEXT,value);
168 viewmenu->Enable(QEMU_TOOLBAR_ICONS,value);
169 viewmenu->Enable(QEMU_TOOLBAR_BOTH,value);
172 void QemuUIMenuBar::CheckFavorites(bool value){
173 viewmenu->Check(QEMU_SPLIT,value);
176 void QemuUIMenuBar::UpdateWindowMenu(const size_t posOld,const size_t posNew){
177 wxMenuItem *item = windowmenu->FindItemByPosition(posOld);
178 if(item){
179 windowmenu->Remove(item);
180 windowmenu->Insert(posNew,item);
184 void QemuUIMenuBar::RemoveWindowMenuEntry(const size_t pos){
185 wxMenuItem *item = windowmenu->FindItemByPosition(pos);
186 if(item){
187 windowmenu->Remove(item);
188 delete item;
189 CheckWindowMenuEntry(pos > 0 ? pos - 1 : 0);
193 void QemuUIMenuBar::InsertWindowMenuEntry(const size_t pos,const wxString& title){
194 /* there seem to be a problem in wxwidgets which occurs
195 * when radio items are removed and then later back added
196 * so this is an ugly workaround. All items are removed
197 * and then back added.
199 * see also my post to wx-dev
200 * http://lists.wxwidgets.org/cgi-bin/ezmlm-cgi?5:mss:76732:200608:mfgbpjnmoondkdinmimb
202 const int count = windowmenu->GetMenuItemCount();
203 wxMenuItem *tmp[count];
204 for(int i = count - 1; i >= 0; i--){
205 tmp[i] = windowmenu->FindItemByPosition(i);
206 windowmenu->Remove(tmp[i]);
209 wxMenuItem *workaround = windowmenu->Append(-1,wxEmptyString);
210 windowmenu->Remove(workaround);
211 delete workaround;
213 const int id = wxNewId();
214 wxMenuItem *item = new wxMenuItem(windowmenu,id,title,wxEmptyString,
215 wxITEM_RADIO);
216 // this evalutes to false on windows, and thus the menuentries do not
217 // respond to user events.
218 if(GetParent()){
219 GetParent()->Connect(
221 wxEVT_COMMAND_MENU_SELECTED,
222 wxCommandEventHandler(QemuMainFrame::OnChangeWindow)
226 for(int i = 0; i < count; i++){
227 if(i == pos){
228 windowmenu->Append(item);
230 windowmenu->Append(tmp[i]);
234 void QemuUIMenuBar::AppendWindowMenuEntry(const wxString& title){
235 // subtract 3 because of the separator and
236 // the 2 standard menu items
237 const int pos = windowmenu->GetMenuItemCount() - 3;
238 InsertWindowMenuEntry(pos,title);
241 void QemuUIMenuBar::PrependWindowMenuEntry(const wxString& title){
242 InsertWindowMenuEntry(0,title);
245 void QemuUIMenuBar::CheckWindowMenuEntry(size_t pos){
246 // return if there are no entries available
247 // check for 3 because of the separator and the
248 // 2 standard menu items which are allways there
249 const size_t count = windowmenu->GetMenuItemCount();
251 if(count <= 3)
252 return;
254 wxMenuItem *item = windowmenu->FindItemByPosition(pos);
255 if(item)
256 item->Check(true);
259 int QemuUIMenuBar::GetCheckedWindowMenuEntry(){
260 for(int i = 0; i < windowmenu->GetMenuItemCount() - 3; i++){
261 wxMenuItem *item = windowmenu->FindItemByPosition(i);
262 if(item->IsChecked())
263 return i;
267 wxMenu* QemuUIMenuBar::GetFileMenu(){
268 return this->filemenu;
271 void QemuUIMenuBar::UpdateFileHistory(const size_t fileHistoryCount){
272 wxMenuItem *separator = NULL;
273 for(int i = filemenu->GetMenuItemCount() - 1; i >= 0; i--){
274 separator = filemenu->FindItemByPosition(i);
275 if(separator->GetKind() == wxITEM_SEPARATOR){
276 filemenu->Remove(separator);
279 if(fileHistoryCount > 0){
280 filemenu->InsertSeparator(filemenu->GetMenuItemCount() - fileHistoryCount - 1);
282 wxMenuItem *exit = filemenu->Remove(QEMU_QUIT);
283 filemenu->AppendSeparator();
284 filemenu->Append(exit);