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.4 - (hide 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 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.4 mnNotePanelController::~mnNotePanelController()
25     {
26     }
27    
28 maloninc 1.3 const wxString* mnNotePanelController::getWikiDataDir()
29     {
30     return wiki->getWikiDataDir();
31     }
32    
33 maloninc 1.1 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 maloninc 1.2 panel->SetCursor(watch);
65 maloninc 1.1 wiki->group();
66 maloninc 1.2 panel->clearAllTree();
67 maloninc 1.1 searchStrList = wiki->getSearchStrList();
68     for(i = 0; i < searchStrList->Count(); i++) {
69     wxString& searchStr = searchStrList->Item(i);
70 maloninc 1.2 panel->addSearchResult(wiki, &searchStr);
71 maloninc 1.1 }
72 maloninc 1.2 panel->SetCursor(normal);
73 maloninc 1.1 }
74    
75 maloninc 1.2 void mnNotePanelController::handleNew(wxCommandEvent& event)
76 maloninc 1.1 {
77     int ans;
78     WikiData* wikiData = wiki->newWikiData();
79     wxString plainTextStr;
80     wxString newSubjectStr;
81 maloninc 1.2 mnWikiDataEntryDialog* dlg = new mnWikiDataEntryDialog(panel);
82 maloninc 1.1 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 maloninc 1.2 void mnNotePanelController::handleRemove(wxCommandEvent& event)
104 maloninc 1.1 {
105 maloninc 1.2 wxTreeItemData* item = panel->getSelectedItem();
106 maloninc 1.1
107 maloninc 1.2 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 maloninc 1.1 ((WikiData*)(item))->removeDataFile();
110     notifyUpdate((WikiData*)(item));
111     }
112     else {
113     return;
114     }
115     }
116     else {
117 maloninc 1.2 wiki->removeSearchStr(panel->getSelectedLabel());
118     panel->removeSelectedItem();
119 maloninc 1.1 }
120    
121     }
122    
123 maloninc 1.2 void mnNotePanelController::handleHighlight(wxCommandEvent& event)
124 maloninc 1.1 {
125 maloninc 1.2 panel->highlightSelectedItem();
126 maloninc 1.1 }
127    
128    
129     void mnNotePanelController::handleTreeItemSelect(wxTreeEvent& event)
130     {
131 maloninc 1.2 panel->showSelectedItemText(event);
132 maloninc 1.1 }
133    
134    
135     void mnNotePanelController::handleTreeItemSelecting(wxTreeEvent& event)
136     {
137     }
138    
139     void mnNotePanelController::handleBeginLabelEdit(wxTreeEvent& event)
140     {
141 maloninc 1.2 if(!panel->isEditableTreeLabel(event.GetItem())) event.Veto();
142 maloninc 1.1 }
143    
144     void mnNotePanelController::handleEndLabelEdit(wxTreeEvent& event)
145     {
146     wxString newSubject = event.GetLabel();
147 maloninc 1.2 wxTreeItemData* item = panel->getSelectedItem();
148 maloninc 1.1
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 maloninc 1.2 panel->expandAllTree();
168 maloninc 1.1 }
169    
170     void mnNotePanelController::handleTreeCollapse(wxCommandEvent& event)
171     {
172 maloninc 1.2 panel->collapseAllTree();
173 maloninc 1.1 }
174    
175     void mnNotePanelController::handleTreeClear(wxCommandEvent& event)
176     {
177     wiki->clearSearchStrList();
178     wiki->clearSearchResultList();
179 maloninc 1.2 panel->clearAllTree();
180 maloninc 1.1 }
181    
182 maloninc 1.2 void mnNotePanelController::handleEdit(wxCommandEvent& event)
183 maloninc 1.1 {
184     wxString plainTextStr;
185     wxString newSubjectStr;
186 maloninc 1.2 wxTreeItemData* itemData = panel->getSelectedItem();
187     wxString subject = panel->getSelectedLabel();
188     mnWikiDataEntryDialog* dlg = new mnWikiDataEntryDialog(panel);
189 maloninc 1.1 int ans;
190    
191 maloninc 1.2 if(!panel->isEditableTreeLabel(panel->getSelection())) return; /* selection is not memo data */
192 maloninc 1.1
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 maloninc 1.2 panel->updateSearchResult(wiki, &searchStr);
226 maloninc 1.1 }
227     else { /* not match */
228     if( wiki->delSearchResultList(&searchStr, data) ) {
229 maloninc 1.2 panel->updateSearchResult(wiki, &searchStr); /* only when suceed to delete */
230 maloninc 1.1 }
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 maloninc 1.2 cmd.sprintf(wxT("mkdir %s"), docDir.c_str());
275 maloninc 1.1 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