Changeset 12 for trunk/initer.cpp

Show
Ignore:
Timestamp:
12/16/07 03:55:03 (1 year ago)
Author:
sagrer
Message:
  • Добавлен пункт меню для закрытия текущего открытого моба.
  • Исправлена ошибка, проявлявшаяся в некоторых случаях если начать крутить ориентатор при не выделенном в дереве реальном объекте.
  • При любом закрытии активного моба, в т.ч. при выходе из программы если файл был изменен - появляется вопрос о том что делать с измененным файлом.
  • Добавлен svn-clean.cmd для удаления неверсифицированных файлов в рабочей копии.
Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/initer.cpp

    r11 r12  
    100100String ProgPath, MobFileName; 
    101101TMob *MobInMem1, *TargetMob; 
    102 bool MobLoaded, SearchDialCanceled, MakeSLBlockInterf
     102bool MobLoaded, SearchDialCanceled, MakeSLBlockInterf, MobModified
    103103TIniFile *MainIni; 
    104104 
     
    110110  //Èíèöèàëèçîâàòü ïåðåìåííûå... 
    111111  MobLoaded = false; 
     112  MobModified = false; 
    112113  MobFileName = ""; 
    113114  MakeSLBlockInterf = true; 
     
    536537}; 
    537538 
    538 void OpenMobComm(const AnsiString FileName) 
     539bool OpenMobComm(const AnsiString FileName) 
    539540//Ýòà ôóíêöèÿ âûçûâàåòñÿ ïðè îòêðûòèè ìîáà. 
    540541{ 
    541542  //Ïåðåìåííûå 
    542   bool LoadResult = false, MakeSave = false, NodeFound = false; 
     543  bool LoadResult = false, MakeLoad = false, NodeFound = false; 
    543544  String FName; 
    544545  int i, CurrNodeID; 
     
    548549  { 
    549550    //Åñëè â ïàðàìåòðå áûë ïåðåäàí ôàéë... 
    550     MakeSave = true; 
     551    MakeLoad = true; 
    551552    FName = FileName; 
    552553  } 
     
    558559    if (MainF->OpenDialog1->Execute()) 
    559560    { 
    560       //Åñëè äèàëîã âûïîëíèëñÿ - ïðîâåðèòü, ñóùåñòâóåò ëè âûáðàííûé ôàéë
     561      //Åñëè äèàëîã âûïîëíèëñÿ - ôàéë ìîæíî îòêðûâàòü
    561562      FName = MainF->OpenDialog1->FileName; 
    562       MakeSave = true; 
    563     }; 
    564   }; 
    565  
    566   if (MakeSave == true) 
    567   { 
    568     //Åñëè ìîæíî ñàâèòü - òî íàäî ñàâèòü :). 
     563      MakeLoad = true; 
     564    }; 
     565  }; 
     566 
     567  if (MakeLoad == true) 
     568  { 
     569    //Åñëè ìîæíî îòêðûâàòü - òî íàäî îòêðûâàòü :). 
    569570 
    570571    //Ïðîâåðèòü, åñòü ëè òàêîé ôàéë... 
     
    588589      SaveProgSetts(); 
    589590 
    590       MobLoaded = false;  //Âñå, òèïà ñòàðûé ìîá åñëè îí è áûë çàãðóæåí 
    591                            // - óæå óáèò :). 
    592  
    593       MobInMem1->UsingThread = UseTMobThreads;  //Îòêðûâàòü ëè â îòäåëüíîé íèòêå. 
    594       MobInMem1->LogEd = MainF->LogEd; 
    595  
    596       //È ãðóçèòü ñ áëîêèðîâêîé èíòåðôåéñà... 
    597       if ((UseTMobThreads == true) && (MakeSLBlockInterf == true)) MainF->BlockInterf(); 
    598       LoadResult = MobInMem1->LoadMob(FName); 
    599       if ((UseTMobThreads == true) && (MakeSLBlockInterf == true)) MainF->UnBlockInterf(); 
    600  
    601       if (MobInMem1->UsingThread == false) 
    602       { 
    603         //Åñëè ãðóçèëè íå ÷åðåç íèòêó òî âûâåñòè ëîã. 
    604         if (MainF->MainF_PK->ActivePage->Name == "LogSh") 
    605         { 
    606           MainF->LogEd->SetFocus(); 
    607         }; 
    608         MainF->LogEd->Lines->Add(MobInMem1->FullLogStr); 
    609       }; 
    610  
    611       //Òèïà çàïîìíèòü èìÿ ôàéëà, åñëè çàãðóçêà áûëà óñïåøíîé... 
    612       if (LoadResult == true) 
    613       { 
    614         MobFileName = FName; 
    615         MobLoaded = true;  //È åññíî ïîìåòèòü ÷òî ìîá çàãðóæåí. 
    616  
    617         //Çàãðóçèòü èíôó ìîáà â èíòåðôåéñ ïðîãè... 
    618  
    619         //Ñêðèïò. 
    620         MainF->ScriptEd->Lines->Clear(); 
    621         MainF->ScriptEd->Text = MobInMem1->ScriptText; 
    622  
    623         //Îáúåêòû â ðåäàêòîð îáúåêòîâ... 
    624         MainF->MobObjectsChanged(); 
    625       } 
    626       else 
    627       { 
    628         //Åñëè çàãðóçèòüñÿ íå óäàëîñü - ïîêàçàòü þçâåðþ òàá ñ ëîãîì. 
    629         MainF->MainF_PK->ActivePage = MainF->LogSh; 
    630       }; 
    631  
    632     } 
     591      //Çàêðûòü ñòàðûé ìîá. 
     592      if (CloseMobComm() == true) 
     593      { 
     594        MobInMem1->UsingThread = UseTMobThreads;  //Îòêðûâàòü ëè â îòäåëüíîé íèòêå. 
     595        MobInMem1->LogEd = MainF->LogEd; 
     596 
     597        //È ãðóçèòü ñ áëîêèðîâêîé èíòåðôåéñà... 
     598        if ((UseTMobThreads == true) && (MakeSLBlockInterf == true)) MainF->BlockInterf(); 
     599        LoadResult = MobInMem1->LoadMob(FName); 
     600        if ((UseTMobThreads == true) && (MakeSLBlockInterf == true)) MainF->UnBlockInterf(); 
     601 
     602        if (MobInMem1->UsingThread == false) 
     603        { 
     604          //Åñëè ãðóçèëè íå ÷åðåç íèòêó òî âûâåñòè ëîã. 
     605          if (MainF->MainF_PK->ActivePage->Name == "LogSh") 
     606          { 
     607            MainF->LogEd->SetFocus(); 
     608          }; 
     609          MainF->LogEd->Lines->Add(MobInMem1->FullLogStr); 
     610        }; 
     611 
     612        //Òèïà çàïîìíèòü èìÿ ôàéëà, åñëè çàãðóçêà áûëà óñïåøíîé... 
     613        if (LoadResult == true) 
     614        { 
     615          MobFileName = FName; 
     616          MobLoaded = true;  //È åññíî ïîìåòèòü ÷òî ìîá çàãðóæåí. 
     617          MobModified = false;   //Îòìåòèòü ÷òî ïîêà â ìîá èçìåíåíèé íå âíîñèëîñü. 
     618 
     619          //Çàãðóçèòü èíôó ìîáà â èíòåðôåéñ ïðîãè... 
     620 
     621          //Ñêðèïò. 
     622          MainF->ScriptEd->Lines->Clear(); 
     623          MainF->ScriptEd->Text = MobInMem1->ScriptText; 
     624 
     625          //Îáúåêòû â ðåäàêòîð îáúåêòîâ... 
     626          MainF->MobObjectsChanged(); 
     627        }//if (LoadResult == true) 
     628        else 
     629        { 
     630          //Åñëè çàãðóçèòüñÿ íå óäàëîñü - ïîêàçàòü þçâåðþ òàá ñ ëîãîì. 
     631          MainF->MainF_PK->ActivePage = MainF->LogSh; 
     632        }; 
     633      };//if (CloseMobComm() == true) 
     634    }//if ( FileExists(FName) == true ) 
    633635    else 
    634636    { 
     
    645647 
    646648  }; 
     649 
     650  //Âåðíóòü ðåçóëüòàò 
     651  return LoadResult; 
    647652}; 
    648653 
    649 void SaveMobComm() 
     654bool SaveMobComm() 
    650655//Ýòà ôóíêöèÿ âûçûâàåòñÿ ïðè ñåéâå ìîáà. 
    651656{ 
    652   SaveInterfInfo();   //Ñîõðàíèòü èíôó èç èíòåðôåéñà... 
     657  //Ïåðåìåííûå 
     658  bool Result = false; 
     659 
     660  //Äëÿ íà÷àëà ïðîâåðèì - åñòü ëè óæå ôàéë ìîáà ñ òàêèì èìåíåì... 
     661  if (FileExists(MobFileName) == true) 
     662  { 
     663    //Óæå åñòü ôàéë ñ òàêèì èìåíåì. 
     664    SaveInterfInfo();   //Ñîõðàíèòü èíôó èç èíòåðôåéñà... 
    653665   
    654   MobInMem1->UsingThread = UseTMobThreads;  //Ñåéâèòü ëè â îòäåëüíîé íèòêå. 
    655   MobInMem1->SaveAttempts = SaveAttempts;  //Êîëè÷åñòâî ïîïûòîê ñàâà ïîñëå ñáîÿ... 
    656   MobInMem1->LogEd = MainF->LogEd; 
    657   //È çàñàâèòü ñ áëîêèðîâêîé èíòåðôåéñà... 
    658   if ((UseTMobThreads == true) && (MakeSLBlockInterf == true)) MainF->BlockInterf(); 
    659   //Åñëè íàäî äåëàòü áåêàïû - çàáåêàïèòü... 
    660   if (MakeAutoBackups == true) MakeAutoBackup(MobFileName); 
    661   if (MobInMem1->SaveMob(MobFileName) == false) 
    662   { 
    663     //Åñëè çàñàâèòü íå óäàëîñü - ïîêàçàòü þçâåðþ òàá ñ ëîãîì. 
    664     MainF->MainF_PK->ActivePage = MainF->LogSh; 
    665   }; 
    666   if ((UseTMobThreads == true) && (MakeSLBlockInterf == true)) MainF->UnBlockInterf(); 
    667  
    668   if (MobInMem1->UsingThread == false) 
    669   { 
    670     //Åñëè ñàâèëè íå ÷åðåç íèòêó òî âûâåñòè ëîã. 
    671     if (MainF->MainF_PK->ActivePage->Name == "LogSh") 
    672     { 
    673       MainF->LogEd->SetFocus(); 
    674     }; 
    675     MainF->LogEd->Lines->Add(MobInMem1->FullLogStr); 
    676   }; 
    677  
     666    MobInMem1->UsingThread = UseTMobThreads;  //Ñåéâèòü ëè â îòäåëüíîé íèòêå. 
     667    MobInMem1->SaveAttempts = SaveAttempts;  //Êîëè÷åñòâî ïîïûòîê ñàâà ïîñëå ñáîÿ... 
     668    MobInMem1->LogEd = MainF->LogEd; 
     669    //È çàñàâèòü ñ áëîêèðîâêîé èíòåðôåéñà... 
     670    if ((UseTMobThreads == true) && (MakeSLBlockInterf == true)) MainF->BlockInterf(); 
     671    //Åñëè íàäî äåëàòü áåêàïû - çàáåêàïèòü... 
     672    if (MakeAutoBackups == true) MakeAutoBackup(MobFileName); 
     673    Result = MobInMem1->SaveMob(MobFileName); 
     674    if (Result == true) 
     675    { 
     676      //Óñïåøíûé ñåéâ - îòìåòèòü ÷òî ìîá íå ìîäèôèöèðîâàí. 
     677      MainF->SetMobNotModified(); 
     678    } 
     679    else 
     680    { 
     681      //Åñëè çàñàâèòü íå óäàëîñü - ïîêàçàòü þçâåðþ òàá ñ ëîãîì. 
     682      MainF->MainF_PK->ActivePage = MainF->LogSh; 
     683    }; 
     684    if ((UseTMobThreads == true) && (MakeSLBlockInterf == true)) MainF->UnBlockInterf(); 
     685 
     686    if (MobInMem1->UsingThread == false) 
     687    { 
     688      //Åñëè ñàâèëè íå ÷åðåç íèòêó òî âûâåñòè ëîã. 
     689      if (MainF->MainF_PK->ActivePage->Name == "LogSh") 
     690      { 
     691        MainF->LogEd->SetFocus(); 
     692      }; 
     693      MainF->LogEd->Lines->Add(MobInMem1->FullLogStr); 
     694    }; 
     695  } 
     696  else 
     697  { 
     698    //Ôèãíÿ êàêàÿ-òî. Íåòó òàêîãî ôàéëà. Áóäåì ñîõðàíÿòü ïî ïðèíöèïó SaveAs. 
     699    Result = SaveAsMobComm(); 
     700  }; 
     701 
     702  //Âåðíóòü ðåçóëüòàò. 
     703  return Result; 
    678704}; 
    679705 
    680 void SaveAsMobComm() 
     706bool SaveAsMobComm() 
    681707//Ýòà ôóíêöèÿ âûçûâàåòñÿ ïðè ïîïûòêå ñîõðàíèòü ìîá ïîä äðóãèì èìåíåì. 
    682708{ 
     
    734760        //Åñëè ñåéâ áûë óñïåøíûì - çàïîìíèòü íîâîå èìÿ ìîáà. 
    735761        MobFileName = FName; 
    736         //Îáíîâèòü îñíîâíîé èíòåðôåéñ :)
    737         MainF->UpdateMainInterf(); 
     762        //Îòìåòèòü ÷òî ìîá íå ìîäèôèöèðîâàí è îáíîâèòü èíòåðôåéñ
     763        MainF->SetMobNotModified(); 
    738764      } 
    739765      else 
     
    756782 
    757783  }; 
     784 
     785  //Âåðíóòü ðåçóëüòàò 
     786  return ManipResult; 
     787}; 
     788 
     789bool CloseMobComm() 
     790//Ýòà ôóíêöèÿ âûçûâàåòñÿ ïðè çàêðûòèè ìîáà. 
     791{ 
     792  //Ïåðåìåííûå 
     793  int QuestionAnswer; 
     794  bool AllOk = true, Result = false; 
     795 
     796  if (MobLoaded == true) 
     797  { 
     798    //Åñëè åñòü ÷åãî çàêðûâàòü åññíî ). 
     799    if (MobModified == true) 
     800    { 
     801      //Ìîá áûë èçìåíåí - ñïðîñèòü ÷åãî äåëàòü. 
     802      QuestionAnswer = MessageBox(Application->Handle,("Ôàéë "+ExtractFileName(MobFileName)+" íå áûë ñîõðàíåí. Ñîõðàíèòü åãî ïåðåä çàêðûòèåì?").c_str(),MobSurgeon_AppName.c_str(),MB_YESNOCANCEL|MB_ICONQUESTION); 
     803      //Òåïåðü â çàâèñèìîñòè îò îòâåòà... 
     804      if (QuestionAnswer == IDYES) 
     805      { 
     806        //Ñêàçàíî ñîõðàíèòü - ñîõðàíèì ìîá... 
     807        do 
     808        { 
     809          AllOk = SaveMobComm(); 
     810          if (AllOk == false) 
     811          { 
     812            //Ïî êàêîé-ëèáî ïðè÷èíå ñîõðàíèòü ôàéë íå óäàëîñü - ñïðîñèì ÷åãî äåëàòü. 
     813            QuestionAnswer = MessageBox(Application->Handle,("Ôàéë "+ExtractFileName(MobFileName)+" ñîõðàíèòü íå óäàëîñü. Ïîâòîðèòü ïîïûòêó?").c_str(),MobSurgeon_AppName.c_str(),MB_YESNOCANCEL|MB_ICONERROR); 
     814            //Ñìîòðèì ÷åãî îòâåòèëè. 
     815            //IDYES - íè÷åãî íå äåëàòü ò.ê. AllOk == false è çíà÷èò áóäåò åùå 1 ïîïûòêà ñåéâà. 
     816            if (QuestionAnswer == IDNO) 
     817            { 
     818              //Çàáèòü è ïðîäîëæèòü. 
     819              AllOk = true; 
     820            } 
     821            else if (QuestionAnswer == IDCANCEL) 
     822            { 
     823              //Çàáèòü è îòìåíèòü. 
     824              AllOk = true; 
     825              Result = true;  //Âðåìåííî ïîëüçóåìñÿ ïåðåìåííîé íå ïî íàçíà÷åíèþ - ðåçàëüò çäåñü äîëæíà áûòü åùå false è ýòî ïðèçíàê íåíîðìàëüíîñòè, íà êîòîðóþ íèæå ñðåàãèðóþò. 
     826            }; 
     827          }; 
     828        } while (AllOk == false); 
     829 
     830        if ((AllOk == true) && (Result == true)) 
     831        { 
     832          //×åãî-òî íå òàê - ýòî ïðèçíàê ÷òî AllOk íà ñàìîì äåëå false. 
     833          //Âåðíåì âñå êàê åñòü. 
     834          AllOk = false; 
     835          Result = false; 
     836        }; 
     837      } 
     838      else if (QuestionAnswer == IDCANCEL) 
     839      { 
     840        //Ñêàçàíî îòìåíèòü - âñå îòìåíÿåì íàôåã. 
     841        AllOk = false; 
     842      }; 
     843    };//if (MobModified == true) 
     844 
     845    //Ñìîòðèì - åñëè âñå â ïîðÿäêå - çàêðûâàåì ìîá. 
     846    if (AllOk == true) 
     847    { 
     848      //Ñîáñíî çàêðûâàåì. 
     849      MobInMem1->UnloadMob(); 
     850      MobLoaded = false; 
     851      MobModified = false; 
     852      MobFileName = ""; 
     853      //Îáíîâèòü èíòåðôåéñ ïðîãè... 
     854      MainF->ScriptEd->Lines->Clear(); 
     855      MainF->MobObjectsChanged(); 
     856      MainF->UpdateMainInterf(); 
     857      //Done. 
     858      Result = true; 
     859    }; 
     860  }//if (MobLoaded == true) 
     861  else 
     862  { 
     863    //Åñëè ìîá íå áûë çàãðóæåí - ñ÷èòàòü ÷òî ðåçóëüòàò true. 
     864    Result = true; 
     865  }; 
     866 
     867  //Âåðíóòü ðåçóëüòàò 
     868  return Result; 
    758869}; 
    759870