Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef __CS_CSAPPLICATIONFRAMEWORK_H__
00020 #define __CS_CSAPPLICATIONFRAMEWORK_H__
00021
00030 #include "csextern.h"
00031
00032 #include "cstool/initapp.h"
00033 #include "ivaria/reporter.h"
00034
00104 class CS_CRYSTALSPACE_EXPORT csApplicationFramework : public csInitializer
00105 {
00106 private:
00118 static csApplicationFramework* m_Ptr;
00119
00126 static const char* m_FoundationStringName;
00127
00134 static const char* m_ApplicationStringName;
00135
00140 bool restartFlag;
00141 protected:
00151 csApplicationFramework ();
00152
00166 static bool Initialize (int argc, char* argv[]);
00167
00177 static bool Start ();
00178
00187 static void End ();
00188 public:
00192 virtual ~csApplicationFramework ();
00193
00201 static void Quit ();
00202
00203 protected:
00207 static iObjectRegistry* object_reg;
00208
00223 virtual bool OnInitialize (int argc, char* argv[]) = 0;
00224
00236 virtual bool Application () = 0;
00237
00246 virtual void OnExit ();
00247
00255 virtual void OnCommandLineHelp ();
00256
00263 static bool SetupConfigManager (iObjectRegistry* object_reg,
00264 const char* configName)
00265 {
00266 return csInitializer::SetupConfigManager (object_reg, configName,
00267 GetApplicationName());
00268 }
00269 public:
00270
00274 static iObjectRegistry* GetObjectRegistry () { return object_reg; };
00275
00284 operator iObjectRegistry* () { return object_reg; }
00285
00289 bool Open () { return OpenApplication (object_reg); }
00290
00306 static void SetApplicationName (const char *name)
00307 {
00308 m_ApplicationStringName = name;
00309 }
00310
00317 static const char* GetApplicationName ()
00318 {
00319 return m_ApplicationStringName ? m_ApplicationStringName :
00320 GetDefaultAppID();
00321 }
00322
00328 static void Run ()
00329 {
00330 csDefaultRunLoop (object_reg);
00331 }
00332
00338 void Restart();
00339 private:
00347 static bool ReportLibError (const char* description, ...)
00348 {
00349 va_list args;
00350 va_start (args, description);
00351 csReportV (object_reg, CS_REPORTER_SEVERITY_ERROR,
00352 m_FoundationStringName,
00353 description, args);
00354 va_end (args);
00355 return false;
00356 }
00357
00358 public:
00366 static bool ReportError (const char* description, ...)
00367 {
00368 va_list args;
00369 va_start (args, description);
00370 csReportV (object_reg, CS_REPORTER_SEVERITY_ERROR,
00371 GetApplicationName(),
00372 description, args);
00373 va_end (args);
00374 return false;
00375 }
00376
00384 static void ReportWarning (const char* description, ...)
00385 {
00386 va_list args;
00387 va_start (args, description);
00388 csReportV (object_reg, CS_REPORTER_SEVERITY_WARNING,
00389 GetApplicationName(),
00390 description, args);
00391 va_end (args);
00392 }
00393
00401 static void ReportInfo (const char* description, ...)
00402 {
00403 va_list args;
00404 va_start (args, description);
00405 csReportV (object_reg, CS_REPORTER_SEVERITY_NOTIFY,
00406 GetApplicationName(),
00407 description, args);
00408 va_end (args);
00409 }
00410
00420 int Main (int argc, char* argv[]);
00421
00423 bool DoRestart();
00424 };
00425
00429 template <class T>
00430 class csApplicationRunner
00431 {
00432 public:
00434 static int Run (int argc, char* argv[])
00435 {
00436 int result;
00437 bool again;
00438 do
00439 {
00440 T app;
00441 result = app.Main (argc, argv);
00442 again = app.DoRestart();
00443 }
00444 while (again);
00445 return result;
00446 }
00447 };
00448
00451 #endif //__CS_CSAPPLICATIONFRAMEWORK_H__