Develop and Download Open Source Software

Browse CVS Repository

Contents of /malonnote/mnNotePanelController.cpp

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.3 - (show annotations) (download) (as text)
Wed Oct 5 07:20:56 2005 UTC (18 years, 5 months ago) by maloninc
Branch: MAIN
CVS Tags: dev_1_5-0002, dev_1_5-0004
Changes since 1.2: +5 -0 lines
File MIME type: text/x-c++src
implement add/remove memo dir

1 #include "mnID.h"
2 #include "mnDef.h"
3 #include "mnNotePanelController.h"
4 #include <wx/config.h>
5 #include <wx/tokenzr.h>
6 #include <wx/utils.h>
7 #include <wx/xrc/xmlres.h>
8
9 BEGIN_EVENT_TABLE(mnNotePanelController, wxEvtHandler)
10 EVT_TEXT_ENTER(XRCID("searchTextCtrl"), mnNotePanelController::handleSearch)
11 EVT_TREE_SEL_CHANGED(XRCID("searchTree"), mnNotePanelController::handleTreeItemSelect)
12 EVT_TREE_SEL_CHANGING(XRCID("searchTree"), mnNotePanelController::handleTreeItemSelecting)
13 EVT_TREE_BEGIN_LABEL_EDIT(XRCID("searchTree"), mnNotePanelController::handleBeginLabelEdit)
14 EVT_TREE_END_LABEL_EDIT(XRCID("searchTree"), mnNotePanelController::handleEndLabelEdit)
15 EVT_COMMAND(XRCID("wikiHtmlTextCtrl"), mnEVT_LINK_CLICK, mnNotePanelController::handleLinkClick)
16 END_EVENT_TABLE()
17
18 mnNotePanelController::mnNotePanelController(mnNotePanel* inPanel, wxString* inWikiDir)
19 {
20 wiki = new mnModel(inWikiDir->mb_str());
21 panel = inPanel;
22 }
23
24 const wxString* mnNotePanelController::getWikiDataDir()
25 {
26 return wiki->getWikiDataDir();
27 }
28
29 void mnNotePanelController::handleSearch(wxCommandEvent& event)
30 {
31 wxString* str = new wxString(event.GetString());
32 WikiList* wikiList;
33 WikiList::Node* node;
34
35 wikiList = wiki->search(str->mb_str());
36
37 node = wikiList->GetFirst();
38 if(!node) {
39 wxLogMessage(wxT("Not Found! [%s]"), (const char*)str->c_str());
40 return;
41 }
42
43 if(wiki->addSearchStr(str)) {
44 wiki->addSearchList(str, wikiList);
45 panel->addSearchResult(wiki, str);
46 }
47 else { /* str is already in search list */
48 delete wikiList;
49 }
50 }
51
52 void mnNotePanelController::handleGroup(wxCommandEvent& event)
53 {
54 WikiList* wikiList;
55 const wxArrayString* searchStrList;
56 int i;
57 wxCursor normal;
58 wxCursor watch(wxCURSOR_WATCH);
59
60 panel->SetCursor(watch);
61 wiki->group();
62 panel->clearAllTree();
63 searchStrList = wiki->getSearchStrList();
64 for(i = 0; i < searchStrList->Count(); i++) {
65 wxString& searchStr = searchStrList->Item(i);
66 panel->addSearchResult(wiki, &searchStr);
67 }
68 panel->SetCursor(normal);
69 }
70
71 void mnNotePanelController::handleNew(wxCommandEvent& event)
72 {
73 int ans;
74 WikiData* wikiData = wiki->newWikiData();
75 wxString plainTextStr;
76 wxString newSubjectStr;
77 mnWikiDataEntryDialog* dlg = new mnWikiDataEntryDialog(panel);
78 const wxString* wikiText = wikiData->getText();
79 const wxString* subject = wikiData->getSubject();
80
81 dlg->setSubject(*subject);
82 dlg->setPlainText(*wikiText);
83 ans = dlg->ShowModal();
84
85 if(ans != wxID_OK) return ;
86
87 plainTextStr = dlg->getPlainText();
88 newSubjectStr = dlg->getSubject();
89 wikiData->modText(&plainTextStr);
90 wikiData->save();
91
92 wikiData->modSubject(&newSubjectStr);
93
94 notifyUpdate(wikiData);
95
96 delete dlg;
97 }
98
99 void mnNotePanelController::handleRemove(wxCommandEvent& event)
100 {
101 wxTreeItemData* item = panel->getSelectedItem();
102
103 if(panel->isEditableTreeLabel(panel->getSelection())) {
104 if(wxMessageBox(wxT("Do you realy remove this memo?\n") + panel->getSelectedLabel(), wxT("Realy?"), wxYES_NO|wxICON_QUESTION) == wxYES){
105 ((WikiData*)(item))->removeDataFile();
106 notifyUpdate((WikiData*)(item));
107 }
108 else {
109 return;
110 }
111 }
112 else {
113 wiki->removeSearchStr(panel->getSelectedLabel());
114 panel->removeSelectedItem();
115 }
116
117 }
118
119 void mnNotePanelController::handleHighlight(wxCommandEvent& event)
120 {
121 panel->highlightSelectedItem();
122 }
123
124
125 void mnNotePanelController::handleTreeItemSelect(wxTreeEvent& event)
126 {
127 panel->showSelectedItemText(event);
128 }
129
130
131 void mnNotePanelController::handleTreeItemSelecting(wxTreeEvent& event)
132 {
133 }
134
135 void mnNotePanelController::handleBeginLabelEdit(wxTreeEvent& event)
136 {
137 if(!panel->isEditableTreeLabel(event.GetItem())) event.Veto();
138 }
139
140 void mnNotePanelController::handleEndLabelEdit(wxTreeEvent& event)
141 {
142 wxString newSubject = event.GetLabel();
143 wxTreeItemData* item = panel->getSelectedItem();
144
145 if(item == NULL) {
146 return ;
147 }
148
149 if(newSubject.Len() == 0) {
150 event.Veto();
151 return;
152 }
153
154 ((WikiData*)(item))->modSubject(&newSubject);
155
156 event.Veto();
157
158 notifyUpdate((WikiData*)item);
159 }
160
161 void mnNotePanelController::handleTreeExpand(wxCommandEvent& event)
162 {
163 panel->expandAllTree();
164 }
165
166 void mnNotePanelController::handleTreeCollapse(wxCommandEvent& event)
167 {
168 panel->collapseAllTree();
169 }
170
171 void mnNotePanelController::handleTreeClear(wxCommandEvent& event)
172 {
173 wiki->clearSearchStrList();
174 wiki->clearSearchResultList();
175 panel->clearAllTree();
176 }
177
178 void mnNotePanelController::handleEdit(wxCommandEvent& event)
179 {
180 wxString plainTextStr;
181 wxString newSubjectStr;
182 wxTreeItemData* itemData = panel->getSelectedItem();
183 wxString subject = panel->getSelectedLabel();
184 mnWikiDataEntryDialog* dlg = new mnWikiDataEntryDialog(panel);
185 int ans;
186
187 if(!panel->isEditableTreeLabel(panel->getSelection())) return; /* selection is not memo data */
188
189 const wxString* wikiText = ((WikiData*)(itemData))->getText();
190
191 dlg->setSubject(subject);
192 dlg->setPlainText(*wikiText);
193 ans = dlg->ShowModal();
194
195 if(ans != wxID_OK) return ;
196 if(itemData == NULL) return ;
197
198 plainTextStr = dlg->getPlainText();
199 newSubjectStr = dlg->getSubject();
200 ((WikiData*)(itemData))->modText(&plainTextStr);
201 ((WikiData*)(itemData))->save();
202
203 ((WikiData*)(itemData))->modSubject(&newSubjectStr);
204
205 notifyUpdate((WikiData*)itemData);
206
207 delete dlg;
208 }
209
210 void mnNotePanelController::notifyUpdate(WikiData* data)
211 {
212 const wxArrayString* searchStrList= wiki->getSearchStrList();
213 char* tokenList[32];
214
215 memset(tokenList, 0, sizeof(char*)*32);
216 for(int i = 0; i < searchStrList->Count(); i++) {
217 wxString& searchStr = searchStrList->Item(i);
218 if( wiki->makeSearchToken(searchStr.mb_str(), tokenList) ) { /* create token */
219 if(wiki->matchWithToken((wxString*)(data->getFileName()), tokenList)) { /* match */
220 wiki->addSearchResultList(&searchStr, data);
221 panel->updateSearchResult(wiki, &searchStr);
222 }
223 else { /* not match */
224 if( wiki->delSearchResultList(&searchStr, data) ) {
225 panel->updateSearchResult(wiki, &searchStr); /* only when suceed to delete */
226 }
227 }
228 for(int j = 0; tokenList[j] != NULL; j++) free(tokenList[j]);
229 memset(tokenList, 0, sizeof(char*)*32);
230 }
231 }
232 data->setOldSubjectFromCurrent(); // restore old subject
233 }
234
235 void mnNotePanelController::handleLinkClick(wxCommandEvent &event)
236 {
237 const wxString* wikiDataDir;
238 wxString href = event.GetString();
239 wxString tag;
240 wxString val;
241 wxString doc;
242 wxStringTokenizer tkz(href, wxT(":"));
243
244 tag = tkz.GetNextToken();
245 val = tkz.GetNextToken();
246 if(tag.CmpNoCase(wxT("mnlink")) == 0) {
247 event.SetString(val);
248 handleSearch(event);
249 }
250 else if(tag.CmpNoCase(wxT("mndoc")) == 0) {
251 wikiDataDir = wiki->getWikiDataDir();
252 doc = *wikiDataDir + wxT("/docs/") + val;
253 openDoc(doc);
254 }
255 else {
256 openUrl(href);
257 }
258 }
259
260 void mnNotePanelController::handleOpenDocsDir(wxCommandEvent &event)
261 {
262 const wxString* wikiDataDir;
263 wxString cmd;
264 wxString docDir;
265
266 wikiDataDir = wiki->getWikiDataDir();
267 docDir = *wikiDataDir + wxT("/docs/");
268
269 /* create docs directory, anyway */
270 cmd.sprintf(wxT("mkdir %s"), docDir.c_str());
271 wxExecute(cmd);
272
273 /* open docs directory */
274 openDoc(docDir);
275 }
276
277 void mnNotePanelController::openUrl(wxString& url)
278 {
279 wxString cmd;
280
281 #ifdef __WXMSW__
282 cmd.sprintf(wxT("cmd /c \"start %s\""), url.c_str());
283 #endif
284
285 #ifdef __WXMAC__
286 cmd.sprintf(wxT("open %s"), url.c_str());
287 #endif
288
289 #ifdef __WXCOCOA__
290 cmd.sprintf(wxT("open %s"), url.c_str());
291 #endif
292
293 #ifdef __WXGTK__
294 cmd.sprintf(wxT("gnome-open %s"), url.c_str());
295 #endif
296
297 //wxExecute(argv);
298 wxExecute(cmd);
299 }
300
301 void mnNotePanelController::openDoc(wxString& doc)
302 {
303 wxString cmd;
304
305 #ifdef __WXMSW__
306 cmd.sprintf(wxT("cmd /c \"start %s\""), doc.c_str());
307 #endif
308
309 #ifdef __WXMAC__
310 cmd.sprintf(wxT("open %s"), doc.c_str());
311 #endif
312
313 #ifdef __WXCOCOA__
314 cmd.sprintf(wxT("open %s"), doc.c_str());
315 #endif
316
317 #ifdef __WXGTK__
318 cmd.sprintf(wxT("gnome-open %s"), doc.c_str());
319 #endif
320
321 wxExecute(cmd);
322 }
323

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26