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.2 - (show annotations) (download) (as text)
Wed Oct 5 04:55:48 2005 UTC (18 years, 5 months ago) by maloninc
Branch: MAIN
CVS Tags: dev_1_5-0001
Changes since 1.1: +29 -81 lines
File MIME type: text/x-c++src
implement TAB function, except AddDir, RemoveDir

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

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