00001 #ifndef ProjectH
00002 #define ProjectH
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00040
00041
00042 #include "CoreMainHeader.h"
00043 #include "ExtObject.h"
00044 #include "IndexCounter.h"
00045 #include "CoreHistoryList.h"
00046 #include "Setups.h"
00047 #include "EventSystem.h"
00048
00049
00050
00051 class CProject;
00052 class CContainerEnumerator;
00053 class TWorkProjectEventer;
00054
00055
00056
00058
00061 class NEMESIS_CORE_PACKAGE CProjectsList : public CTemplList<CProject>, public CExtObject {
00062 public:
00063 __fastcall CProjectsList(void);
00064
00065 inline CProject* __fastcall GetActiveProject(void);
00066 void __fastcall RepaintProjects(void);
00067 void __fastcall RemoveAllProjects(void);
00068
00069 private:
00070 CIndexCounter IndexCounter;
00071 CProject* ActiveProject;
00072
00073 friend class CProject;
00074 };
00075
00076
00077
00078 DECLARE_EVENT(ProjectsList_AddProject);
00079 DECLARE_EVENT(ProjectsList_RemoveProject);
00080 DECLARE_EVENT(ProjectsList_ActivateProject);
00081 DECLARE_EVENT(ProjectsList_DeactivateProject);
00082
00083 extern NEMESIS_CORE_PACKAGE CProjectsList Projects;
00084
00085
00086
00088
00091 class NEMESIS_CORE_PACKAGE CProject : public CExtObject{
00092 public:
00093
00094 __fastcall CProject(CPluginObjectInfo* objectinfo);
00095
00096 void __fastcall CloseProject(void);
00097
00098 __fastcall ~CProject(void);
00099 void __fastcall AddToProjectsList(void);
00100
00101
00102
00103 CSmallString __fastcall GetFullCaption(void);
00104 CSmallString __fastcall GetFullName(void);
00105 inline const CSmallString& __fastcall GetPath(void);
00106
00107
00108 const CSmallString& __fastcall GetAlias(void);
00109 void __fastcall SetAlias(const CSmallString& alias);
00110
00111
00112
00113
00114 inline bool __fastcall IsNameTemporary(void);
00115
00116 void __fastcall SetReadOnly(bool set);
00117 void __fastcall SetChanged(void);
00118
00119 inline bool __fastcall IsChanged(void);
00120 inline bool __fastcall IsReadOnly(void);
00121
00122
00123
00124
00125 static CProject* __fastcall NewProject(const CUUID& projectuuid);
00126 static CProject* __fastcall NewProject(const CUUID& projectuuid,const CSmallString& fullname);
00127 static CProject* __fastcall OpenProject(const CSmallString& fullname);
00128
00129 bool __fastcall SaveProject(void);
00130 bool __fastcall SaveProjectAs(const CSmallString& fullname);
00131 bool __fastcall RenameProject(const CSmallString& newname);
00132
00133 static bool __fastcall RenameProject(const CSmallString& oldfullname,const CSmallString& newname);
00134
00135 virtual bool __fastcall NewData(void);
00136 virtual bool __fastcall LoadData(void);
00137 virtual bool __fastcall SaveData(void);
00138
00139
00140 bool __fastcall IsActive(void);
00141 void __fastcall Activate(void);
00142 void __fastcall Deactivate(void);
00143
00144 void __fastcall BringToFront(void);
00145 void __fastcall SetVisible(bool set);
00146
00147 virtual void __fastcall RepaintProject(void);
00148
00149 virtual TWorkProjectEventer* __fastcall GetWorkProjectEventer(void);
00150 virtual TControl* __fastcall GetDockControl(void);
00151
00152 TForm* __fastcall GetScene(void);
00153 bool __fastcall DockTo(TWorkProjectEventer* p_project,TWinControl* p_site,TControl* p_control);
00154 bool __fastcall Float(void);
00155 bool __fastcall IsDocked(void);
00156
00157 virtual void __fastcall ActivateFormEvents(TForm* p_form);
00158
00159
00160 virtual CContainerEnumerator* __fastcall GetRootEnumerator(void);
00161
00162
00163 virtual CExtObject* __fastcall FindObject(int index);
00164
00165
00166 public:
00167 CIndexCounter IndexCounter;
00168 CHistoryList HistoryList;
00169 CSetupsList Setups;
00170
00171 virtual void __fastcall HistoryListChange(EChangeMessage message);
00172 virtual void __fastcall PrepareReadOnly(void);
00173
00174
00175 private:
00176 bool Changed;
00177 bool ReadOnly;
00178 CSmallString PathOfProject;
00179 CSmallString Alias;
00180 EHistoryLockLevel backup;
00181 void __fastcall FceHistoryListChange(EChangeMessage message);
00182 void __fastcall Lock(void);
00183 void __fastcall Unlock(void);
00184 int l,t,b,r;
00185 TWinControl* DockSite;
00186 TControl* ControlSite;
00187 TWorkProjectEventer* ProjectSite;
00188 TWorkProjectEventer* MySite;
00189 };
00190
00191
00192
00193 DECLARE_EVENT(Project_Changed);
00194 DECLARE_EVENT(Project_ReadOnly);
00195 DECLARE_EVENT(Project_Activate);
00196
00197
00198
00200
00203 class NEMESIS_CORE_PACKAGE CProjectInfo{
00204 public:
00205 CSmallString Name;
00206 CSmallString Path;
00207 CSmallString FullName;
00208 CUUID UUID;
00209 int ImageIndex;
00210
00211 CProject* __fastcall GetProject(void);
00212
00213 public:
00214 bool __fastcall GetInfo(const CSmallString& fullname);
00215
00216 private:
00217 CProject* FProject;
00218 int ProjectID;
00219 int InstanceID;
00220 };
00221
00222
00223
00224 typedef bool __fastcall (__closure* TProjectStubEvent)(CProject* p_project);
00225
00226
00227
00229
00232 class NEMESIS_CORE_PACKAGE CProjectStub{
00233 public:
00234 __fastcall CProjectStub(void);
00235 bool __fastcall QueryClose(CProject* p_project);
00236 bool __fastcall Save(CProject* p_project);
00237
00238 public:
00239 TProjectStubEvent QueryEvent;
00240 TProjectStubEvent SaveEvent;
00241 };
00242
00243
00244
00245 extern NEMESIS_CORE_PACKAGE CProjectStub ProjectStub;
00246
00247
00248
00249
00250
00251 inline const CSmallString& __fastcall CProject::GetPath(void)
00252 {
00253 return(PathOfProject);
00254 }
00255
00256
00257
00258 inline bool __fastcall CProject::IsNameTemporary(void)
00259 {
00260 return(GetStatus().Temporary);
00261 }
00262
00263
00264
00265 inline CProject* __fastcall CProjectsList::GetActiveProject(void)
00266 {
00267 return(ActiveProject);
00268 }
00269
00270
00271
00272 inline bool __fastcall CProject::IsChanged(void)
00273 {
00274 return(Changed);
00275 }
00276
00277
00278
00279 inline bool __fastcall CProject::IsReadOnly(void)
00280 {
00281 return(ReadOnly);
00282 }
00283
00284
00285
00286 #endif