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.4 - (show annotations) (download) (as text)
Fri Oct 7 12:49:26 2005 UTC (18 years, 5 months ago) by maloninc
Branch: MAIN
CVS Tags: dev_1_6-0001
Changes since 1.3: +4 -0 lines
File MIME type: text/x-c++src
implement TAB function perfectly.

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

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