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.8 - (hide annotations) (download) (as text)
Tue Jan 3 23:20:39 2006 UTC (18 years, 2 months ago) by maloninc
Branch: MAIN
Changes since 1.7: +1 -1 lines
File MIME type: text/x-c++src
modify "open directory" command for windows, and add SetFont method to
mnHtml

1 maloninc 1.1 #include "mnID.h"
2     #include "mnDef.h"
3 maloninc 1.5 #include "mnNotePanel.h"
4 maloninc 1.1 #include "mnNotePanelController.h"
5 maloninc 1.5 #include <wx/uri.h>
6 maloninc 1.1 #include <wx/config.h>
7 maloninc 1.5 #include <wx/regex.h>
8 maloninc 1.1 #include <wx/utils.h>
9     #include <wx/xrc/xmlres.h>
10 maloninc 1.5 #include <wx/tokenzr.h>
11 maloninc 1.1
12     BEGIN_EVENT_TABLE(mnNotePanelController, wxEvtHandler)
13     EVT_TEXT_ENTER(XRCID("searchTextCtrl"), mnNotePanelController::handleSearch)
14     EVT_TREE_SEL_CHANGED(XRCID("searchTree"), mnNotePanelController::handleTreeItemSelect)
15     EVT_TREE_SEL_CHANGING(XRCID("searchTree"), mnNotePanelController::handleTreeItemSelecting)
16     EVT_TREE_BEGIN_LABEL_EDIT(XRCID("searchTree"), mnNotePanelController::handleBeginLabelEdit)
17     EVT_TREE_END_LABEL_EDIT(XRCID("searchTree"), mnNotePanelController::handleEndLabelEdit)
18 maloninc 1.5 #ifdef __WXMAC__
19     EVT_WEBKIT_STATE_CHANGED(mnNotePanelController::handleLinkClick)
20     #else
21 maloninc 1.1 EVT_COMMAND(XRCID("wikiHtmlTextCtrl"), mnEVT_LINK_CLICK, mnNotePanelController::handleLinkClick)
22 maloninc 1.5 #endif
23 maloninc 1.1 END_EVENT_TABLE()
24    
25     mnNotePanelController::mnNotePanelController(mnNotePanel* inPanel, wxString* inWikiDir)
26     {
27 maloninc 1.2 wiki = new mnModel(inWikiDir->mb_str());
28 maloninc 1.1 panel = inPanel;
29     }
30    
31 maloninc 1.4 mnNotePanelController::~mnNotePanelController()
32     {
33     }
34    
35 maloninc 1.3 const wxString* mnNotePanelController::getWikiDataDir()
36     {
37     return wiki->getWikiDataDir();
38     }
39    
40 maloninc 1.1 void mnNotePanelController::handleSearch(wxCommandEvent& event)
41     {
42     wxString* str = new wxString(event.GetString());
43     WikiList* wikiList;
44     WikiList::Node* node;
45    
46     wikiList = wiki->search(str->mb_str());
47    
48     node = wikiList->GetFirst();
49     if(!node) {
50     wxLogMessage(wxT("Not Found! [%s]"), (const char*)str->c_str());
51     return;
52     }
53    
54     if(wiki->addSearchStr(str)) {
55     wiki->addSearchList(str, wikiList);
56     panel->addSearchResult(wiki, str);
57     }
58     else { /* str is already in search list */
59     delete wikiList;
60     }
61     }
62    
63     void mnNotePanelController::handleGroup(wxCommandEvent& event)
64     {
65     WikiList* wikiList;
66     const wxArrayString* searchStrList;
67     int i;
68     wxCursor normal;
69     wxCursor watch(wxCURSOR_WATCH);
70    
71 maloninc 1.2 panel->SetCursor(watch);
72 maloninc 1.1 wiki->group();
73 maloninc 1.2 panel->clearAllTree();
74 maloninc 1.1 searchStrList = wiki->getSearchStrList();
75     for(i = 0; i < searchStrList->Count(); i++) {
76     wxString& searchStr = searchStrList->Item(i);
77 maloninc 1.2 panel->addSearchResult(wiki, &searchStr);
78 maloninc 1.1 }
79 maloninc 1.2 panel->SetCursor(normal);
80 maloninc 1.1 }
81    
82 maloninc 1.2 void mnNotePanelController::handleNew(wxCommandEvent& event)
83 maloninc 1.1 {
84     int ans;
85     WikiData* wikiData = wiki->newWikiData();
86     wxString plainTextStr;
87     wxString newSubjectStr;
88 maloninc 1.2 mnWikiDataEntryDialog* dlg = new mnWikiDataEntryDialog(panel);
89 maloninc 1.1 const wxString* wikiText = wikiData->getText();
90     const wxString* subject = wikiData->getSubject();
91    
92     dlg->setSubject(*subject);
93     dlg->setPlainText(*wikiText);
94     ans = dlg->ShowModal();
95    
96     if(ans != wxID_OK) return ;
97    
98     plainTextStr = dlg->getPlainText();
99     newSubjectStr = dlg->getSubject();
100     wikiData->modText(&plainTextStr);
101     wikiData->save();
102    
103     wikiData->modSubject(&newSubjectStr);
104    
105     notifyUpdate(wikiData);
106    
107     delete dlg;
108     }
109    
110 maloninc 1.2 void mnNotePanelController::handleRemove(wxCommandEvent& event)
111 maloninc 1.1 {
112 maloninc 1.2 wxTreeItemData* item = panel->getSelectedItem();
113 maloninc 1.1
114 maloninc 1.2 if(panel->isEditableTreeLabel(panel->getSelection())) {
115     if(wxMessageBox(wxT("Do you realy remove this memo?\n") + panel->getSelectedLabel(), wxT("Realy?"), wxYES_NO|wxICON_QUESTION) == wxYES){
116 maloninc 1.1 ((WikiData*)(item))->removeDataFile();
117     notifyUpdate((WikiData*)(item));
118     }
119     else {
120     return;
121     }
122     }
123     else {
124 maloninc 1.2 wiki->removeSearchStr(panel->getSelectedLabel());
125     panel->removeSelectedItem();
126 maloninc 1.1 }
127    
128     }
129    
130 maloninc 1.2 void mnNotePanelController::handleHighlight(wxCommandEvent& event)
131 maloninc 1.1 {
132 maloninc 1.2 panel->highlightSelectedItem();
133 maloninc 1.1 }
134    
135    
136     void mnNotePanelController::handleTreeItemSelect(wxTreeEvent& event)
137     {
138 maloninc 1.2 panel->showSelectedItemText(event);
139 maloninc 1.1 }
140    
141    
142     void mnNotePanelController::handleTreeItemSelecting(wxTreeEvent& event)
143     {
144     }
145    
146     void mnNotePanelController::handleBeginLabelEdit(wxTreeEvent& event)
147     {
148 maloninc 1.2 if(!panel->isEditableTreeLabel(event.GetItem())) event.Veto();
149 maloninc 1.1 }
150    
151     void mnNotePanelController::handleEndLabelEdit(wxTreeEvent& event)
152     {
153     wxString newSubject = event.GetLabel();
154 maloninc 1.2 wxTreeItemData* item = panel->getSelectedItem();
155 maloninc 1.1
156     if(item == NULL) {
157     return ;
158     }
159    
160     if(newSubject.Len() == 0) {
161     event.Veto();
162     return;
163     }
164    
165     ((WikiData*)(item))->modSubject(&newSubject);
166    
167     event.Veto();
168    
169     notifyUpdate((WikiData*)item);
170     }
171    
172     void mnNotePanelController::handleTreeExpand(wxCommandEvent& event)
173     {
174 maloninc 1.2 panel->expandAllTree();
175 maloninc 1.1 }
176    
177     void mnNotePanelController::handleTreeCollapse(wxCommandEvent& event)
178     {
179 maloninc 1.2 panel->collapseAllTree();
180 maloninc 1.1 }
181    
182     void mnNotePanelController::handleTreeClear(wxCommandEvent& event)
183     {
184     wiki->clearSearchStrList();
185     wiki->clearSearchResultList();
186 maloninc 1.2 panel->clearAllTree();
187 maloninc 1.1 }
188    
189 maloninc 1.2 void mnNotePanelController::handleEdit(wxCommandEvent& event)
190 maloninc 1.1 {
191     wxString plainTextStr;
192     wxString newSubjectStr;
193 maloninc 1.2 wxTreeItemData* itemData = panel->getSelectedItem();
194     wxString subject = panel->getSelectedLabel();
195     mnWikiDataEntryDialog* dlg = new mnWikiDataEntryDialog(panel);
196 maloninc 1.1 int ans;
197    
198 maloninc 1.2 if(!panel->isEditableTreeLabel(panel->getSelection())) return; /* selection is not memo data */
199 maloninc 1.1
200     const wxString* wikiText = ((WikiData*)(itemData))->getText();
201    
202     dlg->setSubject(subject);
203     dlg->setPlainText(*wikiText);
204     ans = dlg->ShowModal();
205    
206     if(ans != wxID_OK) return ;
207     if(itemData == NULL) return ;
208    
209     plainTextStr = dlg->getPlainText();
210     newSubjectStr = dlg->getSubject();
211     ((WikiData*)(itemData))->modText(&plainTextStr);
212     ((WikiData*)(itemData))->save();
213    
214     ((WikiData*)(itemData))->modSubject(&newSubjectStr);
215    
216     notifyUpdate((WikiData*)itemData);
217    
218     delete dlg;
219     }
220    
221 maloninc 1.5 wxString mnNotePanelController::delPercent(const wxString& str)
222     {
223 maloninc 1.6 #ifdef __WXMAC__
224 maloninc 1.5 wxURI uri;
225     return uri.Unescape(str);
226 maloninc 1.6 #else
227     return str;
228     #endif
229 maloninc 1.5 }
230    
231    
232 maloninc 1.1 void mnNotePanelController::notifyUpdate(WikiData* data)
233     {
234     const wxArrayString* searchStrList= wiki->getSearchStrList();
235     char* tokenList[32];
236    
237     memset(tokenList, 0, sizeof(char*)*32);
238     for(int i = 0; i < searchStrList->Count(); i++) {
239     wxString& searchStr = searchStrList->Item(i);
240     if( wiki->makeSearchToken(searchStr.mb_str(), tokenList) ) { /* create token */
241     if(wiki->matchWithToken((wxString*)(data->getFileName()), tokenList)) { /* match */
242     wiki->addSearchResultList(&searchStr, data);
243 maloninc 1.2 panel->updateSearchResult(wiki, &searchStr);
244 maloninc 1.1 }
245     else { /* not match */
246     if( wiki->delSearchResultList(&searchStr, data) ) {
247 maloninc 1.2 panel->updateSearchResult(wiki, &searchStr); /* only when suceed to delete */
248 maloninc 1.1 }
249     }
250     for(int j = 0; tokenList[j] != NULL; j++) free(tokenList[j]);
251     memset(tokenList, 0, sizeof(char*)*32);
252     }
253     }
254     data->setOldSubjectFromCurrent(); // restore old subject
255     }
256    
257 maloninc 1.5 #ifdef __WXMAC__
258     void mnNotePanelController::handleLinkClick(wxWebKitStateChangedEvent &event)
259     #else
260 maloninc 1.1 void mnNotePanelController::handleLinkClick(wxCommandEvent &event)
261 maloninc 1.5 #endif
262 maloninc 1.1 {
263 maloninc 1.5 wxString href;
264 maloninc 1.1 const wxString* wikiDataDir;
265 maloninc 1.5 #ifdef __WXMAC__
266     href = event.GetURL();
267     if (href.Find(wxT("file:///tmp/")) == -1 &&
268     href.Length() != 0 &&
269     event.GetState() == wxWEBKIT_STATE_NEGOTIATING){
270     ((wxWebKitCtrl*)(event.GetEventObject()))->Stop(); // Stop native webkit loading
271     }
272     else {
273     event.Skip();
274     }
275     #else
276     href = event.GetString();
277     #endif
278    
279     if(href.Find(wxT("file:///tmp/")) != -1) {
280     // do nothing
281     }
282     else if(href.Find(wxT(MNLINK)) != -1) {
283     wxRegEx exp(wxT(MNLINK));
284     exp.Replace(&href, wxT(""));
285     event.SetString((delPercent(href)).c_str());
286 maloninc 1.1 handleSearch(event);
287     }
288 maloninc 1.5 else if(href.Find(wxT(MNDOC)) != -1) {
289     wxRegEx exp(wxT(MNDOC));
290     exp.Replace(&href, wxT(""));
291 maloninc 1.1 wikiDataDir = wiki->getWikiDataDir();
292 maloninc 1.7 wxString doc = *wikiDataDir + wxT(DOCS_DIR) + delPercent(href);
293 maloninc 1.1 openDoc(doc);
294     }
295     else {
296     openUrl(href);
297     }
298     }
299    
300     void mnNotePanelController::handleOpenDocsDir(wxCommandEvent &event)
301     {
302     const wxString* wikiDataDir;
303     wxString cmd;
304     wxString docDir;
305    
306     wikiDataDir = wiki->getWikiDataDir();
307 maloninc 1.7 docDir = *wikiDataDir + wxT(DOCS_DIR);
308 maloninc 1.1
309     /* create docs directory, anyway */
310 maloninc 1.8 cmd.sprintf(wxT(MKDIR), docDir.c_str());
311 maloninc 1.1 wxExecute(cmd);
312    
313     /* open docs directory */
314     openDoc(docDir);
315     }
316    
317     void mnNotePanelController::openUrl(wxString& url)
318     {
319     wxString cmd;
320    
321     #ifdef __WXMSW__
322     cmd.sprintf(wxT("cmd /c \"start %s\""), url.c_str());
323     #endif
324    
325     #ifdef __WXMAC__
326     cmd.sprintf(wxT("open %s"), url.c_str());
327     #endif
328    
329     #ifdef __WXCOCOA__
330     cmd.sprintf(wxT("open %s"), url.c_str());
331     #endif
332    
333     #ifdef __WXGTK__
334     cmd.sprintf(wxT("gnome-open %s"), url.c_str());
335     #endif
336    
337     //wxExecute(argv);
338     wxExecute(cmd);
339     }
340    
341     void mnNotePanelController::openDoc(wxString& doc)
342     {
343     wxString cmd;
344    
345     #ifdef __WXMSW__
346     cmd.sprintf(wxT("cmd /c \"start %s\""), doc.c_str());
347     #endif
348    
349     #ifdef __WXMAC__
350     cmd.sprintf(wxT("open %s"), doc.c_str());
351     #endif
352    
353     #ifdef __WXCOCOA__
354     cmd.sprintf(wxT("open %s"), doc.c_str());
355     #endif
356    
357     #ifdef __WXGTK__
358     cmd.sprintf(wxT("gnome-open %s"), doc.c_str());
359     #endif
360    
361     wxExecute(cmd);
362     }
363    

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