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();
28 _("Open an existing VM")
37 filemenu
->AppendSeparator();
42 _("Quit this program")
45 return this->filemenu
;
48 wxMenu
*QemuUIMenuBar::CreateViewMenu(){
49 this->viewmenu
= new wxMenu();
54 _("Show start screen")
57 viewmenu
->AppendCheckItem(
60 _("Toggle fullscreen mode")
63 wxMenu
*toolbarmenu
= new wxMenu();
64 toolbarmenu
->AppendCheckItem(
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);
80 _("Toolbar related settings")
83 viewmenu
->AppendCheckItem(
84 QEMU_TOGGLE_STATUSBAR
,
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"));
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();
114 _("&Next Window\tCtrl+TAB")
118 _("&Previous Window\tCtrl+Shift+Tab")
120 return this->windowmenu
;
123 wxMenu
*QemuUIMenuBar::CreateHelpMenu(){
124 this->helpmenu
= new wxMenu();
127 _("&Documentation\tF1"),
128 _("Show Qemu documentation")
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
);
179 windowmenu
->Remove(item
);
180 windowmenu
->Insert(posNew
,item
);
184 void QemuUIMenuBar::RemoveWindowMenuEntry(const size_t pos
){
185 wxMenuItem
*item
= windowmenu
->FindItemByPosition(pos
);
187 windowmenu
->Remove(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);
213 const int id
= wxNewId();
214 wxMenuItem
*item
= new wxMenuItem(windowmenu
,id
,title
,wxEmptyString
,
216 // this evalutes to false on windows, and thus the menuentries do not
217 // respond to user events.
219 GetParent()->Connect(
221 wxEVT_COMMAND_MENU_SELECTED
,
222 wxCommandEventHandler(QemuMainFrame::OnChangeWindow
)
226 for(int i
= 0; i
< count
; i
++){
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();
254 wxMenuItem
*item
= windowmenu
->FindItemByPosition(pos
);
259 int QemuUIMenuBar::GetCheckedWindowMenuEntry(){
260 for(int i
= 0; i
< windowmenu
->GetMenuItemCount() - 3; i
++){
261 wxMenuItem
*item
= windowmenu
->FindItemByPosition(i
);
262 if(item
->IsChecked())
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
);