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.2 - (hide 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 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     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 maloninc 1.2 panel->SetCursor(watch);
56 maloninc 1.1 wiki->group();
57 maloninc 1.2 panel->clearAllTree();
58 maloninc 1.1 searchStrList = wiki->getSearchStrList();
59     for(i = 0; i < searchStrList->Count(); i++) {
60     wxString& searchStr = searchStrList->Item(i);
61 maloninc 1.2 panel->addSearchResult(wiki, &searchStr);
62 maloninc 1.1 }
63 maloninc 1.2 panel->SetCursor(normal);
64 maloninc 1.1 }
65    
66 maloninc 1.2 void mnNotePanelController::handleNew(wxCommandEvent& event)
67 maloninc 1.1 {
68     int ans;
69     WikiData* wikiData = wiki->newWikiData();
70     wxString plainTextStr;
71     wxString newSubjectStr;
72 maloninc 1.2 mnWikiDataEntryDialog* dlg = new mnWikiDataEntryDialog(panel);
73 maloninc 1.1 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 maloninc 1.2 void mnNotePanelController::handleRemove(wxCommandEvent& event)
95 maloninc 1.1 {
96 maloninc 1.2 wxTreeItemData* item = panel->getSelectedItem();
97 maloninc 1.1
98 maloninc 1.2 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 maloninc 1.1 ((WikiData*)(item))->removeDataFile();
101     notifyUpdate((WikiData*)(item));
102     }
103     else {
104     return;
105     }
106     }
107     else {
108 maloninc 1.2 wiki->removeSearchStr(panel->getSelectedLabel());
109     panel->removeSelectedItem();
110 maloninc 1.1 }
111    
112     }
113    
114 maloninc 1.2 void mnNotePanelController::handleHighlight(wxCommandEvent& event)
115 maloninc 1.1 {
116 maloninc 1.2 panel->highlightSelectedItem();
117 maloninc 1.1 }
118    
119    
120     void mnNotePanelController::handleTreeItemSelect(wxTreeEvent& event)
121     {
122 maloninc 1.2 panel->showSelectedItemText(event);
123 maloninc 1.1 }
124    
125    
126     void mnNotePanelController::handleTreeItemSelecting(wxTreeEvent& event)
127     {
128     }
129    
130     void mnNotePanelController::handleBeginLabelEdit(wxTreeEvent& event)
131     {
132 maloninc 1.2 if(!panel->isEditableTreeLabel(event.GetItem())) event.Veto();
133 maloninc 1.1 }
134    
135     void mnNotePanelController::handleEndLabelEdit(wxTreeEvent& event)
136     {
137     wxString newSubject = event.GetLabel();
138 maloninc 1.2 wxTreeItemData* item = panel->getSelectedItem();
139 maloninc 1.1
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 maloninc 1.2 panel->expandAllTree();
159 maloninc 1.1 }
160    
161     void mnNotePanelController::handleTreeCollapse(wxCommandEvent& event)
162     {
163 maloninc 1.2 panel->collapseAllTree();
164 maloninc 1.1 }
165    
166     void mnNotePanelController::handleTreeClear(wxCommandEvent& event)
167     {
168     wiki->clearSearchStrList();
169     wiki->clearSearchResultList();
170 maloninc 1.2 panel->clearAllTree();
171 maloninc 1.1 }
172    
173 maloninc 1.2 void mnNotePanelController::handleEdit(wxCommandEvent& event)
174 maloninc 1.1 {
175     wxString plainTextStr;
176     wxString newSubjectStr;
177 maloninc 1.2 wxTreeItemData* itemData = panel->getSelectedItem();
178     wxString subject = panel->getSelectedLabel();
179     mnWikiDataEntryDialog* dlg = new mnWikiDataEntryDialog(panel);
180 maloninc 1.1 int ans;
181    
182 maloninc 1.2 if(!panel->isEditableTreeLabel(panel->getSelection())) return; /* selection is not memo data */
183 maloninc 1.1
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 maloninc 1.2 panel->updateSearchResult(wiki, &searchStr);
217 maloninc 1.1 }
218     else { /* not match */
219     if( wiki->delSearchResultList(&searchStr, data) ) {
220 maloninc 1.2 panel->updateSearchResult(wiki, &searchStr); /* only when suceed to delete */
221 maloninc 1.1 }
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 maloninc 1.2 cmd.sprintf(wxT("mkdir %s"), docDir.c_str());
266 maloninc 1.1 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