Use new vnc syntax (with a colon).
[qemu-gui.git] / favorites.cpp
blob74426aba034538f301d0a6c2f989f2a7879c2607
1 #include <wx/wx.h>
2 #include <wx/sizer.h>
3 #include <wx/listctrl.h>
4 #include <wx/menu.h>
5 #include "mainframe.h"
6 #include "qemu-ui.h"
7 #include "favorites.h"
8 #include "vmdialog.h"
9 #include "vm.h"
11 BEGIN_EVENT_TABLE(QemuUIFavoritesWindow,wxPanel)
12 EVT_LIST_ITEM_RIGHT_CLICK(wxID_ANY,QemuUIFavoritesWindow::OnContextMenu)
13 EVT_LIST_ITEM_ACTIVATED(wxID_ANY,QemuUIFavoritesWindow::OnListItemActivated)
14 EVT_MENU(ID_FAVORITES_CONTEXT_OPEN,QemuUIFavoritesWindow::OnContextMenuOpen)
15 EVT_MENU(ID_FAVORITES_CONTEXT_EDIT,QemuUIFavoritesWindow::OnContextMenuEdit)
16 EVT_MENU(ID_FAVORITES_CONTEXT_REMOVE,QemuUIFavoritesWindow::OnContextMenuRemove)
17 END_EVENT_TABLE()
19 QemuUIFavoritesWindow::QemuUIFavoritesWindow(wxWindow* parent)
20 :wxPanel(parent,wxID_ANY)
23 wxBoxSizer *titlesizer = new wxBoxSizer(wxHORIZONTAL);
24 label = new wxStaticText(this,-1,_("Favorites"));
25 button = new wxButton(this,ID_FAVORITES_CLOSE,_(" "),wxDefaultPosition,wxSize(20,20));
26 list = new wxListCtrl(this);
27 list->SetSingleStyle(wxLC_SMALL_ICON);
28 list->SetSingleStyle(wxLC_NO_HEADER);
29 list->SetSingleStyle(wxLC_REPORT);
30 list->SetSingleStyle(wxLC_LIST);
31 list->SetSingleStyle(wxLC_SINGLE_SEL);
33 titlesizer->Add(
34 label,
36 wxALL|wxEXPAND|wxALIGN_CENTER_VERTICAL,
40 titlesizer->Add(
41 button,
43 wxALL|wxALIGN_CENTER_VERTICAL,
47 sizer = new wxBoxSizer(wxVERTICAL);
48 sizer->Add(titlesizer,0,wxEXPAND);
49 sizer->Add(list,1,wxEXPAND);
51 LoadFavorites();
52 SetSizer(sizer);
53 Layout();
56 QemuUIFavoritesWindow::~QemuUIFavoritesWindow(){
57 wxConfigBase *favorites = wxConfigBase::Get();
58 favorites->DeleteGroup(wxT("/favorites"));
59 favorites->SetPath(wxT("/favorites"));
60 wxString *config;
61 for(int i = 0; i < list->GetItemCount(); i++){
62 config = (wxString *)list->GetItemData(i);
63 wxString key;
64 key << i;
65 favorites->Write(key,*config);
66 delete config;
71 void QemuUIFavoritesWindow::LoadFavorites(){
72 wxConfigBase *favorites = wxConfigBase::Get();
73 if(favorites->HasGroup(wxT("/favorites"))){
74 favorites->SetPath(wxT("/favorites"));
75 wxString key = wxT("0");
76 int index = 0;
77 wxString config;
78 while(favorites->HasEntry(key)){
79 config = favorites->Read(key);
80 QemuVM *vm = new QemuVM(config);
81 AddVM(vm);
82 delete vm;
83 key.Printf(wxT("%d"),++index);
89 void QemuUIFavoritesWindow::AddVM(QemuVM *vm){
90 wxString config = vm->GetConfigFile();
91 for(int i = 0; i < list->GetItemCount(); i++){
92 wxString *c = (wxString *)list->GetItemData(i);
93 if(config.Cmp(*c) == 0)
94 return;
97 wxListItem item;
98 item.SetText(vm->GetTitle());
99 item.SetData(new wxString(config));
100 list->InsertItem(item);
103 void QemuUIFavoritesWindow::OnContextMenu(wxListEvent& event){
104 if(event.GetIndex() == -1)
105 return;
106 wxMenu menu;
107 menu.Append(ID_FAVORITES_CONTEXT_OPEN,_("&Open"));
108 menu.Append(ID_FAVORITES_CONTEXT_EDIT,_("&Edit"));
109 menu.AppendSeparator();
110 menu.Append(ID_FAVORITES_CONTEXT_REMOVE,_("&Remove"));
111 PopupMenu(&menu);
114 void QemuUIFavoritesWindow::OnContextMenuOpen(wxCommandEvent& WXUNUSED(event)){
115 OpenVM();
118 void QemuUIFavoritesWindow::OnListItemActivated(wxListEvent& WXUNUSED(event)){
119 OpenVM();
122 void QemuUIFavoritesWindow::OpenVM(){
123 long index=list->GetNextItem(-1,wxLIST_NEXT_ALL,wxLIST_STATE_SELECTED);
124 if(index == -1)
125 return;
127 wxString *config = (wxString*)list->GetItemData(index);
128 QemuGUI::GetMainFrame()->OpenVM(*config);
131 void QemuUIFavoritesWindow::OnContextMenuEdit(wxCommandEvent& WXUNUSED(event)){
132 long index=list->GetNextItem(-1,wxLIST_NEXT_ALL,wxLIST_STATE_SELECTED);
133 if(index == -1)
134 return;
136 wxString *config = (wxString*)list->GetItemData(index);
137 QemuVM *vm = new QemuVM(*config);
138 QemuVMConfigDialog *dialog = new QemuVMConfigDialog(this,vm);
139 if(dialog->ShowModal() == wxID_OK){
140 dialog->Save();
141 list->SetItemText(index,vm->GetTitle());
143 dialog->Destroy();
144 delete vm;
147 void QemuUIFavoritesWindow::OnContextMenuRemove(wxCommandEvent& WXUNUSED(event)){
148 long index=list->GetNextItem(-1,wxLIST_NEXT_ALL,wxLIST_STATE_SELECTED);
149 if(index == -1)
150 return;
152 delete (wxString*)list->GetItemData(index);
153 list->DeleteItem(index);