Ticket #10656: bookmarks_dialog_diff.txt

File bookmarks_dialog_diff.txt, 11.2 KB (added by Stephen L'Allier, 4 years ago)
Line 
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&)