1 | --- bookmarks_dialog.cpp 2015-12-08 12:25:54.592336187 -0500
|
---|
2 | +++ bookmarks_dialog_new.cpp 2015-12-08 12:24:50.788353133 -0500
|
---|
3 | @@ -47,6 +47,16 @@
|
---|
4 | return ShowModal();
|
---|
5 | }
|
---|
6 |
|
---|
7 | +int find(wxString a, vector<Category> b){
|
---|
8 | + for(int x = 0; x < b.size(); x++){
|
---|
9 | + if(b[x].name == a){
|
---|
10 | + return x;
|
---|
11 | + }
|
---|
12 | + }
|
---|
13 | + return -1;
|
---|
14 | +}
|
---|
15 | +
|
---|
16 | +
|
---|
17 | void CNewBookmarkDialog::OnOK(wxCommandEvent&)
|
---|
18 | {
|
---|
19 | bool const global = xrc_call(*this, "ID_TYPE_GLOBAL", &wxRadioButton::GetValue);
|
---|
20 | @@ -160,6 +170,7 @@
|
---|
21 |
|
---|
22 | CXmlFile file(wxGetApp().GetSettingsFile(_T("bookmarks")));
|
---|
23 | auto element = file.Load();
|
---|
24 | +
|
---|
25 | if (!element) {
|
---|
26 | wxMessageBoxEx(file.GetError(), _("Error loading xml file"), wxICON_ERROR);
|
---|
27 |
|
---|
28 | @@ -167,6 +178,7 @@
|
---|
29 | }
|
---|
30 |
|
---|
31 | for (auto bookmark = element.child("Bookmark"); bookmark; bookmark = bookmark.next_sibling("Bookmark")) {
|
---|
32 | + wxString Cate;
|
---|
33 | wxString name;
|
---|
34 | wxString local_dir;
|
---|
35 | wxString remote_dir_raw;
|
---|
36 | @@ -194,10 +206,30 @@
|
---|
37 | bool const comparison = GetTextElementBool(bookmark, "DirectoryComparison");
|
---|
38 |
|
---|
39 | CBookmarkItemData *data = new CBookmarkItemData(local_dir, remote_dir, sync, comparison);
|
---|
40 | - m_pTree->AppendItem(m_bookmarks_global, name, 1, 1, data);
|
---|
41 | +
|
---|
42 | + //=================================================================================
|
---|
43 | + Cate = GetTextElement(bookmark, "Category");
|
---|
44 | + if (Cate.empty()){
|
---|
45 | + m_pTree->AppendItem(m_bookmarks_global, name, 1, 1, data);
|
---|
46 | + }
|
---|
47 | + else{
|
---|
48 | + if(find(Cate, cate_list) == -1){
|
---|
49 | + Category temp;
|
---|
50 | + temp.name = Cate;
|
---|
51 | + temp.cate = m_pTree->AppendItem(m_bookmarks_global, _(Cate), 0, 0);
|
---|
52 | +
|
---|
53 | + cate_list.push_back(temp);
|
---|
54 | + m_pTree->SortChildren(cate_list[cate_list.size()-1].cate);
|
---|
55 | +
|
---|
56 | + }
|
---|
57 | + m_pTree->AppendItem(cate_list[find(Cate, cate_list)].cate, name, 1, 1, data);
|
---|
58 | + }
|
---|
59 | + //===================================================================================
|
---|
60 | +
|
---|
61 | }
|
---|
62 |
|
---|
63 | m_pTree->SortChildren(m_bookmarks_global);
|
---|
64 | + m_pTree->Connect(wxEVT_CONTEXT_MENU, wxCommandEventHandler(CBookmarksDialog::OnMenu), NULL, this);
|
---|
65 | }
|
---|
66 |
|
---|
67 | void CBookmarksDialog::LoadSiteSpecificBookmarks()
|
---|
68 | @@ -226,6 +258,7 @@
|
---|
69 | m_pTree->SortChildren(m_bookmarks_site);
|
---|
70 | }
|
---|
71 |
|
---|
72 | +
|
---|
73 | int CBookmarksDialog::Run()
|
---|
74 | {
|
---|
75 | if (!Load(m_parent, _T("ID_BOOKMARKS")))
|
---|
76 | @@ -248,6 +281,8 @@
|
---|
77 | m_bookmarks_global = m_pTree->AppendItem(root, _("Global bookmarks"), 0, 0);
|
---|
78 | LoadGlobalBookmarks();
|
---|
79 | m_pTree->Expand(m_bookmarks_global);
|
---|
80 | +
|
---|
81 | +
|
---|
82 | if (m_server) {
|
---|
83 | m_bookmarks_site = m_pTree->AppendItem(root, _("Site-specific bookmarks"), 0, 0);
|
---|
84 | LoadSiteSpecificBookmarks();
|
---|
85 | @@ -295,24 +330,44 @@
|
---|
86 | bookmark = element.child("Bookmark");
|
---|
87 | }
|
---|
88 | }
|
---|
89 | -
|
---|
90 | +//------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
---|
91 | wxTreeItemIdValue cookie;
|
---|
92 | for (wxTreeItemId child = m_pTree->GetFirstChild(m_bookmarks_global, cookie); child.IsOk(); child = m_pTree->GetNextChild(m_bookmarks_global, cookie)) {
|
---|
93 | - CBookmarkItemData *data = (CBookmarkItemData *)m_pTree->GetItemData(child);
|
---|
94 | - wxASSERT(data);
|
---|
95 | -
|
---|
96 | - auto bookmark = element.append_child("Bookmark");
|
---|
97 | - AddTextElement(bookmark, "Name", m_pTree->GetItemText(child));
|
---|
98 | - if (!data->m_local_dir.empty())
|
---|
99 | - AddTextElement(bookmark, "LocalDir", data->m_local_dir);
|
---|
100 | - if (!data->m_remote_dir.empty())
|
---|
101 | - AddTextElement(bookmark, "RemoteDir", data->m_remote_dir.GetSafePath());
|
---|
102 | - if (data->m_sync)
|
---|
103 | - AddTextElementRaw(bookmark, "SyncBrowsing", "1");
|
---|
104 | - if (data->m_comparison)
|
---|
105 | - AddTextElementRaw(bookmark, "DirectoryComparison", "1");
|
---|
106 | + if(m_pTree->ItemHasChildren(child)){
|
---|
107 | + wxTreeItemIdValue cookie2;
|
---|
108 | + for (wxTreeItemId grandchild = m_pTree->GetFirstChild(child, cookie2); grandchild.IsOk(); grandchild = m_pTree->GetNextChild(child, cookie2)){
|
---|
109 | + CBookmarkItemData *data = (CBookmarkItemData *)m_pTree->GetItemData(grandchild);
|
---|
110 | + wxASSERT(data);
|
---|
111 | +
|
---|
112 | + auto bookmark = element.append_child("Bookmark");
|
---|
113 | + AddTextElement(bookmark, "Name", m_pTree->GetItemText(grandchild));
|
---|
114 | + if (!data->m_local_dir.empty())
|
---|
115 | + AddTextElement(bookmark, "LocalDir", data->m_local_dir);
|
---|
116 | + if (!data->m_remote_dir.empty())
|
---|
117 | + AddTextElement(bookmark, "RemoteDir", data->m_remote_dir.GetSafePath());
|
---|
118 | + if (data->m_sync)
|
---|
119 | + AddTextElementRaw(bookmark, "SyncBrowsing", "1");
|
---|
120 | + if (data->m_comparison)
|
---|
121 | + AddTextElementRaw(bookmark, "DirectoryComparison", "1");
|
---|
122 | + AddTextElement(bookmark, "Category", m_pTree->GetItemText(child));
|
---|
123 | + }
|
---|
124 | + }else{
|
---|
125 | + CBookmarkItemData *data = (CBookmarkItemData *)m_pTree->GetItemData(child);
|
---|
126 | + wxASSERT(data);
|
---|
127 | +
|
---|
128 | + auto bookmark = element.append_child("Bookmark");
|
---|
129 | + AddTextElement(bookmark, "Name", m_pTree->GetItemText(child));
|
---|
130 | + if (!data->m_local_dir.empty())
|
---|
131 | + AddTextElement(bookmark, "LocalDir", data->m_local_dir);
|
---|
132 | + if (!data->m_remote_dir.empty())
|
---|
133 | + AddTextElement(bookmark, "RemoteDir", data->m_remote_dir.GetSafePath());
|
---|
134 | + if (data->m_sync)
|
---|
135 | + AddTextElementRaw(bookmark, "SyncBrowsing", "1");
|
---|
136 | + if (data->m_comparison)
|
---|
137 | + AddTextElementRaw(bookmark, "DirectoryComparison", "1");
|
---|
138 | + }
|
---|
139 | }
|
---|
140 | -
|
---|
141 | +//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
---|
142 | if (!file.Save(false)) {
|
---|
143 | wxString msg = wxString::Format(_("Could not write \"%s\", the global bookmarks could no be saved: %s"), file.GetFileName(), file.GetError());
|
---|
144 | wxMessageBoxEx(msg, _("Error writing xml file"), wxICON_ERROR);
|
---|
145 | @@ -336,13 +391,144 @@
|
---|
146 | return;
|
---|
147 | }
|
---|
148 | }
|
---|
149 | +//==========================================================
|
---|
150 | +void CBookmarksDialog::saveCategory(wxCommandEvent&) {
|
---|
151 |
|
---|
152 | + UpdateBookmark();
|
---|
153 | + CInterProcessMutex mutex(MUTEX_GLOBALBOOKMARKS);
|
---|
154 | +
|
---|
155 | + wxTreeItemId item = m_pTree->GetSelection();
|
---|
156 | + CBookmarkItemData *data = (CBookmarkItemData *)m_pTree->GetItemData(item);
|
---|
157 | + CBookmarkItemData *ldata = new CBookmarkItemData(data->m_local_dir, data->m_remote_dir, data->m_sync,data->m_comparison);
|
---|
158 | + wxString name = m_pTree->GetItemText(item);
|
---|
159 | +
|
---|
160 | +
|
---|
161 | + wxTextEntryDialog dlg(this,"Enter Category Name");
|
---|
162 | + wxString Cate;
|
---|
163 | + if(dlg.ShowModal() == wxID_OK){
|
---|
164 | +
|
---|
165 | + wxTreeItemId parent = m_pTree->GetItemParent(item);
|
---|
166 | +
|
---|
167 | + m_is_deleting = true;
|
---|
168 | + m_pTree->Delete(item);
|
---|
169 | + m_pTree->SelectItem(parent);
|
---|
170 | + m_is_deleting = false;
|
---|
171 | + if(!m_pTree->ItemHasChildren(parent) && (item != m_bookmarks_global || item != m_bookmarks_site)){
|
---|
172 | + m_pTree->Delete(parent);
|
---|
173 | + }
|
---|
174 | +
|
---|
175 | + Cate = dlg.GetValue();
|
---|
176 | +
|
---|
177 | + if(find(Cate, cate_list) == -1){
|
---|
178 | + Category temp;
|
---|
179 | + temp.name = Cate;
|
---|
180 | + temp.cate = m_pTree->AppendItem(m_bookmarks_global, _(Cate), 0, 0);
|
---|
181 | +
|
---|
182 | + cate_list.push_back(temp);
|
---|
183 | + m_pTree->SortChildren(cate_list[cate_list.size()-1].cate);
|
---|
184 | +
|
---|
185 | + }
|
---|
186 | + m_pTree->AppendItem(cate_list[find(Cate, cate_list)].cate, name, 1, 1, ldata);
|
---|
187 | + }
|
---|
188 | +}
|
---|
189 | +
|
---|
190 | +void CBookmarksDialog::MoveCategory(wxCommandEvent& event) {
|
---|
191 | +
|
---|
192 | + UpdateBookmark();
|
---|
193 | + CInterProcessMutex mutex(MUTEX_GLOBALBOOKMARKS);
|
---|
194 | +
|
---|
195 | + wxTreeItemId item = m_pTree->GetSelection();
|
---|
196 | + CBookmarkItemData *data = (CBookmarkItemData *)m_pTree->GetItemData(item);
|
---|
197 | + CBookmarkItemData *ldata = new CBookmarkItemData(data->m_local_dir, data->m_remote_dir, data->m_sync,data->m_comparison);
|
---|
198 | + wxString name = m_pTree->GetItemText(item);
|
---|
199 | +
|
---|
200 | +
|
---|
201 | + wxTreeItemId parent = m_pTree->GetItemParent(item);
|
---|
202 | + wxString pname = m_pTree->GetItemText(parent);
|
---|
203 | +
|
---|
204 | + m_is_deleting = true;
|
---|
205 | + m_pTree->Delete(item);
|
---|
206 | + m_pTree->SelectItem(parent);
|
---|
207 | + m_is_deleting = false;
|
---|
208 | + if(!m_pTree->ItemHasChildren(parent) && (item != m_bookmarks_global || item != m_bookmarks_site)){
|
---|
209 | + cate_list.erase(cate_list.begin() + (find(pname, cate_list)));
|
---|
210 | + m_pTree->Delete(parent);
|
---|
211 | + }
|
---|
212 | +
|
---|
213 | + m_pTree->AppendItem(cate_list[event.GetId()].cate, name, 1, 1, ldata);
|
---|
214 | +}
|
---|
215 | +
|
---|
216 | +void CBookmarksDialog::Uncategorize(wxCommandEvent&) {
|
---|
217 | +
|
---|
218 | + UpdateBookmark();
|
---|
219 | + CInterProcessMutex mutex(MUTEX_GLOBALBOOKMARKS);
|
---|
220 | +
|
---|
221 | + wxTreeItemId item = m_pTree->GetSelection();
|
---|
222 | + CBookmarkItemData *data = (CBookmarkItemData *)m_pTree->GetItemData(item);
|
---|
223 | + CBookmarkItemData *ldata = new CBookmarkItemData(data->m_local_dir, data->m_remote_dir, data->m_sync,data->m_comparison);
|
---|
224 | + wxString name = m_pTree->GetItemText(item);
|
---|
225 | +
|
---|
226 | +
|
---|
227 | + //----------------
|
---|
228 | + wxTreeItemId parent = m_pTree->GetItemParent(item);
|
---|
229 | + wxString pname = m_pTree->GetItemText(parent);
|
---|
230 | + m_is_deleting = true;
|
---|
231 | + m_pTree->Delete(item);
|
---|
232 | + m_pTree->SelectItem(parent);
|
---|
233 | + m_is_deleting = false;
|
---|
234 | + if(!m_pTree->ItemHasChildren(parent) && (item != m_bookmarks_global || item != m_bookmarks_site)){
|
---|
235 | + cate_list.erase(cate_list.begin() + (find(pname, cate_list)));
|
---|
236 | + m_pTree->Delete(parent);
|
---|
237 | + }
|
---|
238 | + //--------------------
|
---|
239 | + m_pTree->AppendItem(m_bookmarks_global, name, 1, 1, ldata);
|
---|
240 | +}
|
---|
241 | +
|
---|
242 | +void CBookmarksDialog::OnMenu(wxCommandEvent&) {
|
---|
243 | +
|
---|
244 | + wxTreeItemId item = m_pTree->GetSelection();
|
---|
245 | + wxString name = m_pTree->GetItemText(item);
|
---|
246 | +
|
---|
247 | + if(!(find(name, cate_list) != -1 || item == m_bookmarks_global || item == m_bookmarks_site)){
|
---|
248 | +
|
---|
249 | + ctmu = new wxMenu;
|
---|
250 | + ctmu->Append(1999, wxT("New Category"));
|
---|
251 | + ctmu->AppendSeparator();
|
---|
252 | + Move = new wxMenu;
|
---|
253 | +
|
---|
254 | + for(int x = 0; x < cate_list.size();x++){
|
---|
255 | + Move->Append(x , cate_list[x].name);
|
---|
256 | +
|
---|
257 | + Connect(x, wxEVT_COMMAND_MENU_SELECTED,
|
---|
258 | + wxCommandEventHandler(CBookmarksDialog::MoveCategory));
|
---|
259 | + }
|
---|
260 | +
|
---|
261 | + ctmu->AppendSubMenu(Move, wxT("Move to ..."));
|
---|
262 | + ctmu->AppendSeparator();
|
---|
263 | + ctmu->Append(2000,wxT("Uncategorize"));
|
---|
264 | +
|
---|
265 | + Connect(1999, wxEVT_COMMAND_MENU_SELECTED,
|
---|
266 | + wxCommandEventHandler(CBookmarksDialog::saveCategory));
|
---|
267 | +
|
---|
268 | + Connect(2000, wxEVT_COMMAND_MENU_SELECTED,
|
---|
269 | + wxCommandEventHandler(CBookmarksDialog::Uncategorize));
|
---|
270 | +
|
---|
271 | + if(m_pTree->GetItemParent(item) == m_bookmarks_global){
|
---|
272 | + ctmu->Enable(2000,false);
|
---|
273 | + }
|
---|
274 | + wxWindow::PopupMenu(ctmu);
|
---|
275 | + }
|
---|
276 | +}
|
---|
277 | +
|
---|
278 | +//==========================================================================
|
---|
279 | void CBookmarksDialog::OnOK(wxCommandEvent&)
|
---|
280 | {
|
---|
281 | if (!Verify())
|
---|
282 | return;
|
---|
283 | +
|
---|
284 | UpdateBookmark();
|
---|
285 |
|
---|
286 | +
|
---|
287 | SaveGlobalBookmarks();
|
---|
288 | SaveSiteSpecificBookmarks();
|
---|
289 |
|
---|
290 | @@ -577,11 +763,15 @@
|
---|
291 | return;
|
---|
292 |
|
---|
293 | wxTreeItemId parent = m_pTree->GetItemParent(item);
|
---|
294 | -
|
---|
295 | + wxString pname = m_pTree->GetItemText(parent);
|
---|
296 | m_is_deleting = true;
|
---|
297 | m_pTree->Delete(item);
|
---|
298 | m_pTree->SelectItem(parent);
|
---|
299 | m_is_deleting = false;
|
---|
300 | + if(!m_pTree->ItemHasChildren(parent) && (item != m_bookmarks_global || item != m_bookmarks_site)){
|
---|
301 | + cate_list.erase(cate_list.begin() + (find(pname, cate_list)));
|
---|
302 | + m_pTree->Delete(parent);
|
---|
303 | + }
|
---|
304 | }
|
---|
305 |
|
---|
306 | void CBookmarksDialog::OnCopy(wxCommandEvent&)
|
---|