Develop and Download Open Source Software

Browse CVS Repository

Diff of /malonnote/mnModel.cpp

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

revision 1.23 by maloninc, Thu Sep 15 09:20:48 2005 UTC revision 1.28 by maloninc, Thu Dec 22 10:48:29 2005 UTC
# Line 65  bool mnModel::makeSearchToken(const char Line 65  bool mnModel::makeSearchToken(const char
65                  tokenList[i] = (char*)malloc(strlen(token)+1);                  tokenList[i] = (char*)malloc(strlen(token)+1);
66                  snprintf(tokenList[i], strlen(token)+1, "%s", token);                  snprintf(tokenList[i], strlen(token)+1, "%s", token);
67                  i++;                  i++;
68                    if(i >= MAX_TOKEN) break;
69          }          }
70          return true;          return true;
71  }  }
# Line 81  bool mnModel::matchWithToken(wxString* f Line 82  bool mnModel::matchWithToken(wxString* f
82      fullPathName = *wikiDataDir + wxT("/") + *fileName;      fullPathName = *wikiDataDir + wxT("/") + *fileName;
83          fp = fopen((const char*)fullPathName.mb_str(), "r");          fp = fopen((const char*)fullPathName.mb_str(), "r");
84          if(fp == NULL) {          if(fp == NULL) {
85                  MN_FATAL_ERROR(wxT("fopen faild"));                  return false;  /* because of removed */
86          }          }
87    
88          /* TYPE search */          /* TYPE search */
# Line 114  WikiList* mnModel::search(const char* se Line 115  WikiList* mnModel::search(const char* se
115          WikiData*   wikiData;          WikiData*   wikiData;
116      WikiList*   list = new WikiList();      WikiList*   list = new WikiList();
117      wxString*   fileName = new wxString();      wxString*   fileName = new wxString();
118          char*       tokenList[32];          char*       tokenList[MAX_TOKEN];
119    
120          memset(tokenList, 0, sizeof(char*)*32);          memset(tokenList, 0, sizeof(char*)*MAX_TOKEN);
121          if( makeSearchToken(searchStr, tokenList) == false) return list;          if( makeSearchToken(searchStr, tokenList) == false) return list;
122    
123          dir = new wxDir(*wikiDataDir);          dir = new wxDir(*wikiDataDir);
# Line 145  WikiList* mnModel::search(const char* se Line 146  WikiList* mnModel::search(const char* se
146          return list;          return list;
147  }  }
148    
149    /*
150     *  add malon-type:xxx to search list
151     */
152  void mnModel::group()  void mnModel::group()
153  {  {
154          wxCSConv    conv(wxT(CODE_SET_SYSTEM));          wxCSConv    conv(wxT(CODE_SET_SYSTEM));
# Line 198  void mnModel::group() Line 202  void mnModel::group()
202                                          iconv(codeSet, (ICONV_CONST char**)&inbufPtr, (size_t*)&inbufSize, &outbufPtr, (size_t*)&outbufSize);                                          iconv(codeSet, (ICONV_CONST char**)&inbufPtr, (size_t*)&inbufSize, &outbufPtr, (size_t*)&outbufSize);
203    
204                                          typeToken = new wxString(outbuf, conv);                                          typeToken = new wxString(outbuf, conv);
205                                          addSearchStr(typeToken);                                          if( addSearchStr(typeToken) ) {
206                                                    WikiList* wikiList = search(typeToken->mb_str());
207                                                    addSearchList(typeToken, wikiList);
208                                            }
209                                          delete typeToken;                                          delete typeToken;
210                                          ptr = NULL;                                          ptr = NULL;
211                                  }                                  }
# Line 270  bool mnModel::typeSearch(char* typeStr, Line 277  bool mnModel::typeSearch(char* typeStr,
277          return false;          return false;
278  }  }
279    
280  void mnModel::addSearchStr(wxString* searchStr)  bool mnModel::addSearchStr(wxString* searchStr)
281  {  {
282          wxString *string;          wxString *string;
283    
# Line 278  void mnModel::addSearchStr(wxString* sea Line 285  void mnModel::addSearchStr(wxString* sea
285                  string = new wxString(searchStr->c_str());                  string = new wxString(searchStr->c_str());
286                  searchStrList->Add(*string, 1);                  searchStrList->Add(*string, 1);
287                  //searchStrList->Insert(*string, 0);                  //searchStrList->Insert(*string, 0);
288                    return true;  /* Add */
289          }          }
290            return false; /* does'nt add because of duplicating */
291  }  }
292    
293  void mnModel::addSearchList(wxString* searchStr, WikiList* list)  void mnModel::addSearchList(wxString* searchStr, WikiList* list)
# Line 290  void mnModel::removeSearchStr(wxString s Line 299  void mnModel::removeSearchStr(wxString s
299  {  {
300          if(searchStrList->Index(searchStr.c_str()) != wxNOT_FOUND) {          if(searchStrList->Index(searchStr.c_str()) != wxNOT_FOUND) {
301                  searchStrList->Remove(searchStr.c_str());                  searchStrList->Remove(searchStr.c_str());
302                    wikiHash[*searchStr] = NULL;
303          }          }
304  }  }
305    
# Line 302  void mnModel::modSearchStr(wxString* old Line 312  void mnModel::modSearchStr(wxString* old
312                  itemStr.sprintf(wxT("%s"), newStr->c_str());                  itemStr.sprintf(wxT("%s"), newStr->c_str());
313          }          }
314  }  }
315    
316    void mnModel::clearSearchStrList()
317    {
318            searchStrList->Clear();
319    }
320    
321    void mnModel::clearSearchResultList()
322    {
323            wikiHash.clear();
324    }
325    
326  const wxString* mnModel::getWikiDataDir()  const wxString* mnModel::getWikiDataDir()
327  {  {
328          return wikiDataDir;          return wikiDataDir;
# Line 330  void mnModel::addSearchResultList(wxStri Line 351  void mnModel::addSearchResultList(wxStri
351          WikiList::Node* node;          WikiList::Node* node;
352          WikiData* data;          WikiData* data;
353    
354          node = wikiList->GetFirst();          if(wikiList == NULL) {
355          if(!node) {                  MN_FATAL_ERROR(wxT("wikiList is null"));
356                  MN_FATAL_ERROR(wxT("Search Result List is empty"));                  return;
357          }          }
358    
359            node = wikiList->GetFirst();
360          while(node) {          while(node) {
361                  data = node->GetData();                  data = node->GetData();
362                  if(data == addData) return;                  if(data == addData) return;
363                  if( *(data->getSubject()) == *(addData->getSubject()) ) {                  if( *(data->getSubject()) == *(addData->getOldSubject()) ) {
364                          if(wikiList->DeleteObject(data)) {                          if(wikiList->DeleteObject(data)) {
365                                  delete data;                                  //delete data; /* may be wrong.. */
366                                  break;                                  break;
367                          }                          }
368                          else {                          else {
# Line 354  void mnModel::addSearchResultList(wxStri Line 376  void mnModel::addSearchResultList(wxStri
376          wikiList->Sort(compWikiData);          wikiList->Sort(compWikiData);
377  }  }
378    
379    bool mnModel::delSearchResultList(wxString* searchStr, WikiData* delData)
380    {
381            WikiList* wikiList = wikiHash[*searchStr];
382            WikiList::Node* node;
383            WikiData* data;
384            bool      found = false;
385    
386            if(wikiList == NULL) {
387                    MN_FATAL_ERROR(wxT("wikiList is null"));
388                    return false;
389            }
390    
391            node = wikiList->GetFirst();
392            while(node) {
393                    data = node->GetData();
394                    if(data == delData) {
395                            if(!wikiList->DeleteObject(data)) {
396                                    MN_FATAL_ERROR(wxT("Can't find delete data"));
397                            }
398                            found = true;
399                            break;
400                    }
401                    else if( *(data->getSubject()) == *(delData->getOldSubject()) ) {
402                            if(wikiList->DeleteObject(data)) {
403                                    //delete data;  /* may be wrong.. */
404                                    found = true;
405                                    break;
406                            }
407                            else {
408                                    MN_FATAL_ERROR(wxT("Can't find delete data"));
409                            }
410                    }
411                    node = node->GetNext();
412            }
413            wikiList->Sort(compWikiData);
414            return found;
415    }
416    
417  /******* WikiData ************************/  /******* WikiData ************************/
418  WikiData::WikiData(wxString* dataDir, wxString* inFileName)  WikiData::WikiData(wxString* dataDir, wxString* inFileName)
419  {  {
# Line 375  WikiData::WikiData(wxString* dataDir, wx Line 435  WikiData::WikiData(wxString* dataDir, wx
435    
436          text = NULL;          text = NULL;
437          memset(outbuf, 0, MAX_BUF_SIZE);          memset(outbuf, 0, MAX_BUF_SIZE);
438          fileName = new wxString(*inFileName);          fileName = new wxString(inFileName->mb_str(), conv);
439          dataDirName = dataDir;          dataDirName = new wxString(dataDir->mb_str(), conv);
440          decodeStr = decode(fileName->mb_str());          decodeStr = decode(fileName->mb_str());
441          inbufSize = strlen(decodeStr);          inbufSize = strlen(decodeStr);
442          outbufSize = sizeof(outbuf);          outbufSize = sizeof(outbuf);
443          iconv(codeSet, (ICONV_CONST char**)&decodeStr, (size_t*)&inbufSize, &outbufPtr, (size_t*)&outbufSize);          iconv(codeSet, (ICONV_CONST char**)&decodeStr, (size_t*)&inbufSize, &outbufPtr, (size_t*)&outbufSize);
444          subject  = new wxString((const char*)outbuf, conv);          subject  = new wxString((const char*)outbuf, conv);
445            oldSubject  = new wxString((const char*)outbuf, conv);
446          iconv_close(codeSet);          iconv_close(codeSet);
447    
448          date     = NULL;          date     = NULL;
# Line 403  WikiData::WikiData(wxString* dataDir, wx Line 464  WikiData::WikiData(wxString* dataDir, wx
464  }  }
465    
466  WikiData::WikiData(wxString* dataDir) {  WikiData::WikiData(wxString* dataDir) {
467            FILE*      fp;
468          time_t     now;          time_t     now;
469          char       buf[MAX_BUF_SIZE];          char       buf[MAX_BUF_SIZE];
470          wxCSConv    conv(wxT(CODE_SET_SYSTEM));          char       fname[MAX_BUF_SIZE];
471            char       templateBuf[MAX_BUF_SIZE];
472            char*      inbufPtr;
473            int        inbufSize;
474            char       outbuf[MAX_BUF_SIZE];
475            char*      outbufPtr;
476            int        outbufSize;
477            wxCSConv   conv(wxT(CODE_SET_SYSTEM));
478    
479          dataDirName = dataDir;          dataDirName = new wxString(dataDir->mb_str(), conv);
480    
481      time(&now);      time(&now);
482          memset(buf, 0, sizeof(buf));          memset(buf, 0, sizeof(buf));
483          strftime(buf, sizeof(buf), "%Y/%m/%d-%H%M%S",localtime(&now));          strftime(buf, sizeof(buf), "%Y/%m/%d-%H%M%S",localtime(&now));
484          subject  = new wxString(buf, conv);          subject  = new wxString(buf, conv);
485            oldSubject  = new wxString(buf, conv);
486    
487          fileName = new wxString(encode(buf), conv);          fileName = new wxString(encode(buf), conv);
488          fileName->Append(wxT(EXT_TAG));          fileName->Append(wxT(EXT_TAG));
# Line 420  WikiData::WikiData(wxString* dataDir) { Line 490  WikiData::WikiData(wxString* dataDir) {
490          memset(buf, 0, sizeof(buf));          memset(buf, 0, sizeof(buf));
491          strftime(buf, sizeof(buf), DATE_TAG "%Y/%m/%d %H:%M:%S",localtime(&now));          strftime(buf, sizeof(buf), DATE_TAG "%Y/%m/%d %H:%M:%S",localtime(&now));
492          date    = new wxString(buf, conv);          date    = new wxString(buf, conv);
493    
494            /* try to open template file */
495            snprintf(fname, sizeof(fname), "%s/%s", (const char*)(dataDir->mb_str()), NEW_DATA_TEMPLATE);
496            fp = fopen(fname, "r");
497            if(fp == NULL){
498                    memset(buf, 0, sizeof(buf));
499                    strftime(buf, sizeof(buf), NEW_DATA,localtime(&now));
500            }
501            else {
502                    memset(buf, 0, sizeof(buf));
503                    memset(templateBuf, 0, sizeof(templateBuf));
504                    memset(outbuf, 0, sizeof(outbuf));
505                    fread(templateBuf, sizeof(templateBuf), 1, fp);
506                    
507          memset(buf, 0, sizeof(buf));                  iconv_t codeSet = iconv_open(CODE_SET_SYSTEM, CODE_SET_EUC_JP);
508          strftime(buf, sizeof(buf), NEW_DATA,localtime(&now));                  if(codeSet == (iconv_t)-1) {
509                            MN_FATAL_ERROR(wxT("failed iconv_open"));
510                    }
511                    inbufPtr = templateBuf;
512                outbufPtr = outbuf;
513                    inbufSize = strlen(templateBuf);
514                    outbufSize = sizeof(outbuf);
515                    iconv(codeSet, (ICONV_CONST char**)&inbufPtr, (size_t*)&inbufSize, &outbufPtr, (size_t*)&outbufSize);
516                    
517                    strftime(buf, sizeof(buf), outbuf,localtime(&now));
518    
519            }
520          text    = new wxString(buf, conv);          text    = new wxString(buf, conv);
521    
522            if(fp) fclose(fp);
523  }  }
524    
525  WikiData::~WikiData()  WikiData::~WikiData()
526  {  {
527          delete subject;          delete subject;
528            delete oldSubject;
529          delete fileName;          delete fileName;
530          delete date;          delete date;
531          delete text;          delete text;
532            delete dataDirName;
533  }  }
534    
535  const wxString* WikiData::getFileName()  const wxString* WikiData::getFileName()
# Line 445  const wxString* WikiData::getSubject() Line 542  const wxString* WikiData::getSubject()
542          return subject;          return subject;
543  }  }
544    
545    const wxString* WikiData::getOldSubject()
546    {
547            return oldSubject;
548    }
549    
550    void WikiData::setOldSubjectFromCurrent()
551    {
552            oldSubject = new wxString(*subject);
553    }
554    
555  void WikiData::modSubject(wxString* newSubject)  void WikiData::modSubject(wxString* newSubject)
556  {  {
557          wxCSConv    conv(wxT(CODE_SET_SYSTEM));          wxCSConv    conv(wxT(CODE_SET_SYSTEM));
558          wxString*   oldFileName = fileName;          wxString*   oldFileName = fileName;
         wxString*   oldSubject  = subject;  
559          char        oldFullPath[MAX_BUF_SIZE];          char        oldFullPath[MAX_BUF_SIZE];
560          char        newFullPath[MAX_BUF_SIZE];          char        newFullPath[MAX_BUF_SIZE];
561          iconv_t     codeSet;          iconv_t     codeSet;
# Line 461  void WikiData::modSubject(wxString* newS Line 567  void WikiData::modSubject(wxString* newS
567          int         outbufSize = sizeof(outbuf);          int         outbufSize = sizeof(outbuf);
568          FILE*       fp;          FILE*       fp;
569    
570            oldSubject = subject;
571    
572          memset(outbuf, 0, outbufSize);          memset(outbuf, 0, outbufSize);
573          memset(inbuf,  0, sizeof(inbuf));          memset(inbuf,  0, sizeof(inbuf));
574          strcpy(inbuf, (const char*)newSubject->mb_str());          strcpy(inbuf, (const char*)newSubject->mb_str());
# Line 489  void WikiData::modSubject(wxString* newS Line 597  void WikiData::modSubject(wxString* newS
597                  fclose(fp);                  fclose(fp);
598          }          }
599    
         delete oldSubject;  
600          delete oldFileName;          delete oldFileName;
601  }  }
602    
# Line 531  const wxString* WikiData::getText() Line 638  const wxString* WikiData::getText()
638          }          }
639    
640          while(fgets(buf, MAX_BUF_SIZE, fp)) {          while(fgets(buf, MAX_BUF_SIZE, fp)) {
 #ifdef __WXMAC__  
                 for(int i = 0; buf[i] != 0; i++) if(buf[i] == (char)MAC_BACKSLASH) buf[i] = '\\';  
 #endif  
641                  inbufPtr = buf;                  inbufPtr = buf;
642                  inbufSize = sizeof(buf);                  inbufSize = sizeof(buf);
643                  outbufPtr = outbuf;                  outbufPtr = outbuf;
# Line 555  void WikiData::modText(wxString* intext) Line 659  void WikiData::modText(wxString* intext)
659          wxCSConv conv(wxT(CODE_SET_SYSTEM));          wxCSConv conv(wxT(CODE_SET_SYSTEM));
660          delete text;          delete text;
661          //text = new wxString(intext->c_str());          //text = new wxString(intext->c_str());
662          text = new wxString(*intext);          //text = new wxString(*intext);
663          //text = new wxString(intext->mb_str(), conv);          text = new wxString(intext->mb_str(), conv);
664  }  }
665    
666  void WikiData::removeDataFile()  void WikiData::removeDataFile()
# Line 595  void WikiData::save() Line 699  void WikiData::save()
699          memset(inbuf, 0, sizeof(inbuf));          memset(inbuf, 0, sizeof(inbuf));
700          strcpy(inbuf,(const char*)text->mb_str());          strcpy(inbuf,(const char*)text->mb_str());
701    
702  #ifdef __WXMAC__  //#ifdef __WXMAC__
703          for(int i = 0; inbuf[i] != 0; i++) if(inbuf[i] == (char)MAC_BACKSLASH) inbuf[i] = '\\';  //      for(int i = 0; inbuf[i] != 0; i++) if(inbuf[i] == (char)MAC_BACKSLASH) inbuf[i] = '\\';
704  #endif  //#endif
705    
706          inbufPtr = inbuf;          inbufPtr = inbuf;
707          inbufSize = strlen(inbufPtr);          inbufSize = strlen(inbufPtr);
# Line 605  void WikiData::save() Line 709  void WikiData::save()
709          outbufSize = sizeof(outbuf);          outbufSize = sizeof(outbuf);
710          memset(outbuf, 0, outbufSize);          memset(outbuf, 0, outbufSize);
711          iconv(codeSet, (ICONV_CONST char**)&inbufPtr, (size_t*)&inbufSize, &outbufPtr, (size_t*)&outbufSize);          iconv(codeSet, (ICONV_CONST char**)&inbufPtr, (size_t*)&inbufSize, &outbufPtr, (size_t*)&outbufSize);
712            if(inbufSize != 0) { // iconv error
713                    wxMessageBox(wxT("Fail to save, because this memo include KISHU-IZON-MOJI.\nPlease remove KISHU-IZON-MOJI, and try again"), wxT("Fail to save"), wxOK|wxICON_WARNING);
714            }
715          fwrite(outbuf, sizeof(outbuf)-outbufSize, 1, fp);          fwrite(outbuf, sizeof(outbuf)-outbufSize, 1, fp);
716          fclose(fp);          fclose(fp);
717          iconv_close(codeSet);          iconv_close(codeSet);

Legend:
Removed from v.1.23  
changed lines
  Added in v.1.28

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