Develop and Download Open Source Software

Browse CVS Repository

Annotation of /malonnote/mnNotePanelController.cpp

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


Revision 1.3 - (hide 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 maloninc 1.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 maloninc 1.2 wiki = new mnModel(inWikiDir->mb_str());
21 maloninc 1.1 panel = inPanel;
22     }
23    
24 maloninc 1.3 const wxString* mnNotePanelController::getWikiDataDir()
25     {
26     return wiki->getWikiDataDir();
27     }
28    
29 maloninc 1.1 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 maloninc 1.2 panel->SetCursor(watch);
61 maloninc 1.1 wiki->group();
62 maloninc 1.2 panel->clearAllTree();
63 maloninc 1.1 searchStrList = wiki->getSearchStrList();
64     for(i = 0; i < searchStrList->Count(); i++) {
65     wxString& searchStr = searchStrList->Item(i);
66 maloninc 1.2 panel->addSearchResult(wiki, &searchStr);
67 maloninc 1.1 }
68 maloninc 1.2 panel->SetCursor(normal);
69 maloninc 1.1 }
70    
71 maloninc 1.2 void mnNotePanelController::handleNew(wxCommandEvent& event)
72 maloninc 1.1 {
73     int ans;
74     WikiData* wikiData = wiki->newWikiData();
75     wxString plainTextStr;
76     wxString newSubjectStr;
77 maloninc 1.2 mnWikiDataEntryDialog* dlg = new mnWikiDataEntryDialog(panel);
78 maloninc 1.1 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 maloninc 1.2 void mnNotePanelController::handleRemove(wxCommandEvent& event)
100 maloninc 1.1 {
101 maloninc 1.2 wxTreeItemData* item = panel->getSelectedItem();
102 maloninc 1.1
103 maloninc 1.2 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 maloninc 1.1 ((WikiData*)(item))->removeDataFile();
106     notifyUpdate((WikiData*)(item));
107     }
108     else {
109     return;
110     }
111     }
112     else {
113 maloninc 1.2 wiki->removeSearchStr(panel->getSelectedLabel());
114     panel->removeSelectedItem();
115 maloninc 1.1 }
116    
117     }
118    
119 maloninc 1.2 void mnNotePanelController::handleHighlight(wxCommandEvent& event)
120 maloninc 1.1 {
121 maloninc 1.2 panel->highlightSelectedItem();
122 maloninc 1.1 }
123    
124    
125     void mnNotePanelController::handleTreeItemSelect(wxTreeEvent& event)
126     {
127 maloninc 1.2 panel->showSelectedItemText(event);
128 maloninc 1.1 }
129    
130    
131     void mnNotePanelController::handleTreeItemSelecting(wxTreeEvent& event)
132     {
133     }
134    
135     void mnNotePanelController::handleBeginLabelEdit(wxTreeEvent& event)
136     {
137 maloninc 1.2 if(!panel->isEditableTreeLabel(event.GetItem())) event.Veto();
138 maloninc 1.1 }
139    
140     void mnNotePanelController::handleEndLabelEdit(wxTreeEvent& event)
141     {
142     wxString newSubject = event.GetLabel();
143 maloninc 1.2 wxTreeItemData* item = panel->getSelectedItem();
144 maloninc 1.1
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 maloninc 1.2 panel->expandAllTree();
164 maloninc 1.1 }
165    
166     void mnNotePanelController::handleTreeCollapse(wxCommandEvent& event)
167     {
168 maloninc 1.2 panel->collapseAllTree();
169 maloninc 1.1 }
170    
171     void mnNotePanelController::handleTreeClear(wxCommandEvent& event)
172     {
173     wiki->clearSearchStrList();
174     wiki->clearSearchResultList();
175 maloninc 1.2 panel->clearAllTree();
176 maloninc 1.1 }
177    
178 maloninc 1.2 void mnNotePanelController::handleEdit(wxCommandEvent& event)
179 maloninc 1.1 {
180     wxString plainTextStr;
181     wxString newSubjectStr;
182 maloninc 1.2 wxTreeItemData* itemData = panel->getSelectedItem();
183     wxString subject = panel->getSelectedLabel();
184     mnWikiDataEntryDialog* dlg = new mnWikiDataEntryDialog(panel);
185 maloninc 1.1 int ans;
186    
187 maloninc 1.2 if(!panel->isEditableTreeLabel(panel->getSelection())) return; /* selection is not memo data */
188 maloninc 1.1
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 maloninc 1.2 panel->updateSearchResult(wiki, &searchStr);
222 maloninc 1.1 }
223     else { /* not match */
224     if( wiki->delSearchResultList(&searchStr, data) ) {
225 maloninc 1.2 panel->updateSearchResult(wiki, &searchStr); /* only when suceed to delete */
226 maloninc 1.1 }
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 maloninc 1.2 cmd.sprintf(wxT("mkdir %s"), docDir.c_str());
271 maloninc 1.1 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