Develop and Download Open Source Software

Browse CVS Repository

Diff of /malonnote/mnNotePanelController.cpp

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

revision 1.1 by maloninc, Tue Oct 4 12:45:02 2005 UTC revision 1.7 by maloninc, Fri Dec 30 00:54:06 2005 UTC
# Line 1  Line 1 
1  #include "mnID.h"  #include "mnID.h"
2  #include "mnDef.h"  #include "mnDef.h"
3    #include "mnNotePanel.h"
4  #include "mnNotePanelController.h"  #include "mnNotePanelController.h"
5    #include <wx/uri.h>
6  #include <wx/config.h>  #include <wx/config.h>
7  #include <wx/tokenzr.h>  #include <wx/regex.h>
8  #include <wx/utils.h>  #include <wx/utils.h>
9  #include <wx/xrc/xmlres.h>  #include <wx/xrc/xmlres.h>
10    #include <wx/tokenzr.h>
11    
12  BEGIN_EVENT_TABLE(mnNotePanelController, wxEvtHandler)  BEGIN_EVENT_TABLE(mnNotePanelController, wxEvtHandler)
13          EVT_TEXT_ENTER(XRCID("searchTextCtrl"), mnNotePanelController::handleSearch)          EVT_TEXT_ENTER(XRCID("searchTextCtrl"), mnNotePanelController::handleSearch)
 /*  
14          EVT_TREE_SEL_CHANGED(XRCID("searchTree"), mnNotePanelController::handleTreeItemSelect)          EVT_TREE_SEL_CHANGED(XRCID("searchTree"), mnNotePanelController::handleTreeItemSelect)
15          EVT_TREE_SEL_CHANGING(XRCID("searchTree"), mnNotePanelController::handleTreeItemSelecting)          EVT_TREE_SEL_CHANGING(XRCID("searchTree"), mnNotePanelController::handleTreeItemSelecting)
16          EVT_TREE_BEGIN_LABEL_EDIT(XRCID("searchTree"), mnNotePanelController::handleBeginLabelEdit)          EVT_TREE_BEGIN_LABEL_EDIT(XRCID("searchTree"), mnNotePanelController::handleBeginLabelEdit)
17          EVT_TREE_END_LABEL_EDIT(XRCID("searchTree"), mnNotePanelController::handleEndLabelEdit)          EVT_TREE_END_LABEL_EDIT(XRCID("searchTree"), mnNotePanelController::handleEndLabelEdit)
18          EVT_CLOSE(mnNotePanelController::handleClose)  #ifdef __WXMAC__
19        EVT_WEBKIT_STATE_CHANGED(mnNotePanelController::handleLinkClick)
20    #else
21          EVT_COMMAND(XRCID("wikiHtmlTextCtrl"), mnEVT_LINK_CLICK, mnNotePanelController::handleLinkClick)          EVT_COMMAND(XRCID("wikiHtmlTextCtrl"), mnEVT_LINK_CLICK, mnNotePanelController::handleLinkClick)
22  */  #endif
23  END_EVENT_TABLE()  END_EVENT_TABLE()
24    
25  mnNotePanelController::mnNotePanelController(mnNotePanel* inPanel, wxString* inWikiDir)  mnNotePanelController::mnNotePanelController(mnNotePanel* inPanel, wxString* inWikiDir)
26  {  {
27          wikiDir = new wxString(*inWikiDir);          wiki = new mnModel(inWikiDir->mb_str());
         wiki = new mnModel(wikiDir->mb_str());  
28          panel = inPanel;          panel = inPanel;
29  }  }
30    
31  #if 0  mnNotePanelController::~mnNotePanelController()
 void mnNotePanelController::handleConfig(wxCommandEvent& event)  
32  {  {
33          wxDirDialog* dlg;  }
         wxString gotDirName;  
         wxString* dirName = new wxString();  
   
         wxConfig* config = new wxConfig(wxT(CONF_APP_NAME));  
   
         if(config->Read(wxT(CONF_WIKI_DIR), dirName)) {  
                 if(wxMessageBox(*dirName, wxT("Change data directory?"), wxYES_NO|wxICON_QUESTION) == wxNO){  
                         delete config;  
                         return;  
                 }  
         }        
   
         dlg = new wxDirDialog(frame);  
         if(dlg->ShowModal() == wxID_OK) {  
                 gotDirName = dlg->GetPath();  
                 delete wiki;  
                 wiki = new mnModel(gotDirName.mb_str());  
                 config->Write(wxT(CONF_WIKI_DIR), gotDirName.c_str());  
         }  
         delete config;  
34    
35          frame->clearAllTree();  const wxString* mnNotePanelController::getWikiDataDir()
36    {
37            return  wiki->getWikiDataDir();
38  }  }
 #endif  
39    
40  void mnNotePanelController::handleSearch(wxCommandEvent& event)  void mnNotePanelController::handleSearch(wxCommandEvent& event)
41  {  {
# Line 77  void mnNotePanelController::handleSearch Line 60  void mnNotePanelController::handleSearch
60          }          }
61  }  }
62    
 #if 0  
63  void mnNotePanelController::handleGroup(wxCommandEvent& event)  void mnNotePanelController::handleGroup(wxCommandEvent& event)
64  {  {
65          WikiList*       wikiList;          WikiList*       wikiList;
# Line 86  void mnNotePanelController::handleGroup( Line 68  void mnNotePanelController::handleGroup(
68          wxCursor normal;          wxCursor normal;
69          wxCursor watch(wxCURSOR_WATCH);          wxCursor watch(wxCURSOR_WATCH);
70    
71          frame->SetCursor(watch);          panel->SetCursor(watch);
72          wiki->group();          wiki->group();
73          frame->clearAllTree();          panel->clearAllTree();
74          searchStrList = wiki->getSearchStrList();          searchStrList = wiki->getSearchStrList();
75          for(i = 0; i < searchStrList->Count(); i++) {          for(i = 0; i < searchStrList->Count(); i++) {
76                  wxString& searchStr = searchStrList->Item(i);                  wxString& searchStr = searchStrList->Item(i);
77                  frame->addSearchResult(wiki, &searchStr);                  panel->addSearchResult(wiki, &searchStr);
78          }          }
79          frame->SetCursor(normal);          panel->SetCursor(normal);
80  }  }
81    
82    void mnNotePanelController::handleNew(wxCommandEvent& event)
 void mnNotePanelController::handleNewButton(wxCommandEvent& event)  
83  {  {
84          int             ans;          int             ans;
85          WikiData* wikiData = wiki->newWikiData();          WikiData* wikiData = wiki->newWikiData();
86          wxString        plainTextStr;          wxString        plainTextStr;
87          wxString        newSubjectStr;          wxString        newSubjectStr;
88          mnWikiDataEntryDialog* dlg = new mnWikiDataEntryDialog(frame);          mnWikiDataEntryDialog* dlg = new mnWikiDataEntryDialog(panel);
89          const wxString* wikiText = wikiData->getText();          const wxString* wikiText = wikiData->getText();
90          const wxString* subject  = wikiData->getSubject();          const wxString* subject  = wikiData->getSubject();
91    
# Line 126  void mnNotePanelController::handleNewBut Line 107  void mnNotePanelController::handleNewBut
107          delete dlg;          delete dlg;
108  }  }
109    
110  void mnNotePanelController::handleRemoveButton(wxCommandEvent& event)  void mnNotePanelController::handleRemove(wxCommandEvent& event)
111  {  {
112          wxTreeItemData* item = frame->getSelectedItem();          wxTreeItemData* item = panel->getSelectedItem();
113    
114          if(frame->isEditableTreeLabel(frame->getSelection())) {          if(panel->isEditableTreeLabel(panel->getSelection())) {
115                  if(wxMessageBox(wxT("Do you realy remove this memo?\n") + frame->getSelectedLabel(), wxT("Realy?"), wxYES_NO|wxICON_QUESTION) == wxYES){                  if(wxMessageBox(wxT("Do you realy remove this memo?\n") + panel->getSelectedLabel(), wxT("Realy?"), wxYES_NO|wxICON_QUESTION) == wxYES){
116                          ((WikiData*)(item))->removeDataFile();                          ((WikiData*)(item))->removeDataFile();
117                          notifyUpdate((WikiData*)(item));                          notifyUpdate((WikiData*)(item));
118                  }                  }
# Line 140  void mnNotePanelController::handleRemove Line 121  void mnNotePanelController::handleRemove
121                  }                  }
122          }          }
123          else {          else {
124                  wiki->removeSearchStr(frame->getSelectedLabel());                  wiki->removeSearchStr(panel->getSelectedLabel());
125                  frame->removeSelectedItem();                  panel->removeSelectedItem();
126          }          }
127    
128  }  }
129    
130  void mnNotePanelController::handleHighlightButton(wxCommandEvent& event)  void mnNotePanelController::handleHighlight(wxCommandEvent& event)
131  {  {
132          frame->highlightSelectedItem();          panel->highlightSelectedItem();
133  }  }
134    
135    
136  void mnNotePanelController::handleTreeItemSelect(wxTreeEvent& event)  void mnNotePanelController::handleTreeItemSelect(wxTreeEvent& event)
137  {  {
138          frame->showSelectedItemText(event);          panel->showSelectedItemText(event);
139  }  }
140    
141    
# Line 164  void mnNotePanelController::handleTreeIt Line 145  void mnNotePanelController::handleTreeIt
145    
146  void mnNotePanelController::handleBeginLabelEdit(wxTreeEvent& event)  void mnNotePanelController::handleBeginLabelEdit(wxTreeEvent& event)
147  {  {
148          if(!frame->isEditableTreeLabel(event.GetItem())) event.Veto();          if(!panel->isEditableTreeLabel(event.GetItem())) event.Veto();
149  }  }
150    
151  void mnNotePanelController::handleEndLabelEdit(wxTreeEvent& event)  void mnNotePanelController::handleEndLabelEdit(wxTreeEvent& event)
152  {  {
153          wxString newSubject   = event.GetLabel();          wxString newSubject   = event.GetLabel();
154          wxTreeItemData* item  = frame->getSelectedItem();          wxTreeItemData* item  = panel->getSelectedItem();
155    
156          if(item == NULL) {          if(item == NULL) {
157                  return ;                  return ;
# Line 188  void mnNotePanelController::handleEndLab Line 169  void mnNotePanelController::handleEndLab
169          notifyUpdate((WikiData*)item);          notifyUpdate((WikiData*)item);
170  }  }
171    
 void mnNotePanelController::handleClose(wxCloseEvent& event)  
 {  
         frame->Destroy();  
 }  
   
 void mnNotePanelController::handleExit(wxCommandEvent& event)  
 {  
         frame->Close();  
 }  
   
172  void mnNotePanelController::handleTreeExpand(wxCommandEvent& event)  void mnNotePanelController::handleTreeExpand(wxCommandEvent& event)
173  {  {
174          frame->expandAllTree();          panel->expandAllTree();
175  }  }
176    
177  void mnNotePanelController::handleTreeCollapse(wxCommandEvent& event)  void mnNotePanelController::handleTreeCollapse(wxCommandEvent& event)
178  {  {
179          frame->collapseAllTree();          panel->collapseAllTree();
180  }  }
181    
182  void mnNotePanelController::handleTreeClear(wxCommandEvent& event)  void mnNotePanelController::handleTreeClear(wxCommandEvent& event)
183  {  {
184          wiki->clearSearchStrList();          wiki->clearSearchStrList();
185          wiki->clearSearchResultList();          wiki->clearSearchResultList();
186          frame->clearAllTree();          panel->clearAllTree();
 }  
   
 void mnNotePanelController::handleAbout(wxCommandEvent& event)  
 {  
         wxMessageBox(wxT(MN_APP_VERSION), wxT("Abount MalonNote"), wxOK|wxICON_INFORMATION);  
187  }  }
188    
189    void mnNotePanelController::handleEdit(wxCommandEvent& event)
 void mnNotePanelController::handleEditButton(wxCommandEvent& event)  
190  {  {
191          wxString        plainTextStr;          wxString        plainTextStr;
192          wxString        newSubjectStr;          wxString        newSubjectStr;
193          wxTreeItemData* itemData = frame->getSelectedItem();          wxTreeItemData* itemData = panel->getSelectedItem();
194          wxString        subject  = frame->getSelectedLabel();          wxString        subject  = panel->getSelectedLabel();
195          mnWikiDataEntryDialog* dlg = new mnWikiDataEntryDialog(frame);          mnWikiDataEntryDialog* dlg = new mnWikiDataEntryDialog(panel);
196          int             ans;          int             ans;
197    
198          if(!frame->isEditableTreeLabel(frame->getSelection())) return; /* selection is not memo data */          if(!panel->isEditableTreeLabel(panel->getSelection())) return; /* selection is not memo data */
199    
200          const wxString* wikiText = ((WikiData*)(itemData))->getText();          const wxString* wikiText = ((WikiData*)(itemData))->getText();
201    
# Line 253  void mnNotePanelController::handleEditBu Line 218  void mnNotePanelController::handleEditBu
218          delete dlg;          delete dlg;
219  }  }
220    
221    wxString mnNotePanelController::delPercent(const wxString& str)
222    {
223    #ifdef __WXMAC__
224            wxURI uri;
225            return uri.Unescape(str);
226    #else
227            return str;
228    #endif
229    }
230    
231    
232  void mnNotePanelController::notifyUpdate(WikiData* data)  void mnNotePanelController::notifyUpdate(WikiData* data)
233  {  {
234          const wxArrayString*  searchStrList= wiki->getSearchStrList();          const wxArrayString*  searchStrList= wiki->getSearchStrList();
# Line 264  void mnNotePanelController::notifyUpdate Line 240  void mnNotePanelController::notifyUpdate
240                  if( wiki->makeSearchToken(searchStr.mb_str(), tokenList) ) { /* create token */                  if( wiki->makeSearchToken(searchStr.mb_str(), tokenList) ) { /* create token */
241                          if(wiki->matchWithToken((wxString*)(data->getFileName()), tokenList)) { /* match */                          if(wiki->matchWithToken((wxString*)(data->getFileName()), tokenList)) { /* match */
242                                  wiki->addSearchResultList(&searchStr, data);                                  wiki->addSearchResultList(&searchStr, data);
243                                  frame->updateSearchResult(wiki, &searchStr);                                  panel->updateSearchResult(wiki, &searchStr);
244                          }                          }
245                          else {                                                                  /* not match */                          else {                                                                  /* not match */
246                                  if( wiki->delSearchResultList(&searchStr, data) ) {                                  if( wiki->delSearchResultList(&searchStr, data) ) {
247                                          frame->updateSearchResult(wiki, &searchStr); /* only when suceed to delete */                                          panel->updateSearchResult(wiki, &searchStr); /* only when suceed to delete */
248                                  }                                  }
249                          }                          }
250                          for(int j = 0; tokenList[j] != NULL; j++) free(tokenList[j]);                          for(int j = 0; tokenList[j] != NULL; j++) free(tokenList[j]);
# Line 278  void mnNotePanelController::notifyUpdate Line 254  void mnNotePanelController::notifyUpdate
254          data->setOldSubjectFromCurrent(); // restore old subject          data->setOldSubjectFromCurrent(); // restore old subject
255  }  }
256    
257    #ifdef __WXMAC__
258    void mnNotePanelController::handleLinkClick(wxWebKitStateChangedEvent &event)
259    #else
260  void mnNotePanelController::handleLinkClick(wxCommandEvent &event)  void mnNotePanelController::handleLinkClick(wxCommandEvent &event)
261    #endif
262  {  {
263            wxString href;
264          const wxString* wikiDataDir;          const wxString* wikiDataDir;
265          wxString href = event.GetString();  #ifdef __WXMAC__
266          wxString tag;          href = event.GetURL();
267          wxString val;          if (href.Find(wxT("file:///tmp/")) == -1 &&
268          wxString doc;          href.Length() != 0                   &&
269          wxStringTokenizer tkz(href, wxT(":"));          event.GetState() == wxWEBKIT_STATE_NEGOTIATING){
270                    ((wxWebKitCtrl*)(event.GetEventObject()))->Stop(); // Stop native webkit loading
271          tag = tkz.GetNextToken();                }
272          val = tkz.GetNextToken();          else {
273          if(tag.CmpNoCase(wxT("mnlink")) == 0) {                  event.Skip();
274                  event.SetString(val);          }
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                  handleSearch(event);                  handleSearch(event);
287          }          }
288          else if(tag.CmpNoCase(wxT("mndoc")) == 0) {          else if(href.Find(wxT(MNDOC)) != -1) {
289                    wxRegEx exp(wxT(MNDOC));
290                    exp.Replace(&href, wxT(""));
291                  wikiDataDir = wiki->getWikiDataDir();                  wikiDataDir = wiki->getWikiDataDir();
292                  doc = *wikiDataDir + wxT("/docs/") + val;                  wxString doc = *wikiDataDir + wxT(DOCS_DIR) + delPercent(href);
293                  openDoc(doc);                  openDoc(doc);
294          }          }
295          else {          else {
# Line 310  void mnNotePanelController::handleOpenDo Line 304  void mnNotePanelController::handleOpenDo
304          wxString docDir;          wxString docDir;
305    
306          wikiDataDir = wiki->getWikiDataDir();          wikiDataDir = wiki->getWikiDataDir();
307          docDir = *wikiDataDir + wxT("/docs/");          docDir = *wikiDataDir + wxT(DOCS_DIR);
308    
309          /* create docs directory, anyway */          /* create docs directory, anyway */
310          cmd.sprintf(wxT("mkdir "), docDir.c_str());          cmd.sprintf(wxT("mkdir %s"), docDir.c_str());
311          wxExecute(cmd);          wxExecute(cmd);
312    
313          /* open docs directory */          /* open docs directory */
# Line 367  void mnNotePanelController::openDoc(wxSt Line 361  void mnNotePanelController::openDoc(wxSt
361          wxExecute(cmd);          wxExecute(cmd);
362  }  }
363    
 #endif  

Legend:
Removed from v.1.1  
changed lines
  Added in v.1.7

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