00001 #if !defined( __SDL_MAIN_H__ )
00002 #define __SDL_MAIN_H__
00003
00004 #include <stdio.h>
00005 #include <stdlib.h>
00006 #include <time.h>
00007 #include <math.h>
00008
00009 #include <SDL.h>
00010 #include <SDL_thread.h>
00011
00012 #include <SDL_image.h>
00013 #include <SDL_mixer.h>
00014
00015 #include <string>
00016 #include <set>
00017 #include <map>
00018 #include <list>
00019 #include <vector>
00020 #include <deque>
00021 #include <algorithm>
00022 #include <iostream>
00023 #include <fstream>
00024 using namespace std;
00025
00026 #include "mpeg/smpeg.h"
00027
00028 #ifndef WIN32
00029 #include "itoa.h"
00030 #endif
00031
00032 #pragma warning( disable: 4786 )
00033
00034 extern ofstream tron;
00035
00037
00038 template <class T> class IgnoreCaseTraits : public char_traits<T> {
00039 public:
00040 static bool eq( const T &c1 , const T &c2 ) { return towupper( c1 ) == towupper( c2 ); }
00041 static bool lt( const T &c1 , const T &c2 ) { return towupper( c1 ) < towupper( c2 ); }
00042 static int compare( const T *s1 , const T *s2 , size_t n )
00043 {
00044 for( size_t i = 0 ; i < n ; i++ )
00045 if( !eq( s1[i] , s2[i] ) )
00046 return lt( s1[i] , s2[i] ) ? -1 : 1;
00047 return 0;
00048 }
00049
00050 static const T *find( const T *s , size_t n , const T &c )
00051 {
00052 for( size_t i = 0 ; i < n ; i++ )
00053 if( eq( s[i] , c ) )
00054 return &s[i];
00055 return 0;
00056 }
00057 };
00058
00059 typedef basic_string<char , IgnoreCaseTraits<char> , allocator<char> > icstring;
00060 static icstring EmptyString;
00061
00062 #include "arsdebug.h"
00063
00064 #ifdef WIN32
00065 # ifdef _DEBUG
00066 # define new DEBUG_CLIENTBLOCK
00067
00068 # endif
00069 #endif
00070
00071 #include "interpret.h"
00072
00073 #include "arsexception.h"
00074 #include "arssound.h"
00075 #include "xrect.h"
00076 #include "arsrgbcolor.h"
00077
00078 #include "CfgHandler.h"
00079 #include "exprint.h"
00080
00081 #include "arsfontengine.h"
00082 #include "arsmessages.h"
00083 #include "arstimer.h"
00084 #include "arsobject.h"
00085 #include "arspaint.h"
00086 #include "arswindow.h"
00087
00088 extern Ars::RGBColor ArsText_color , ArsBack_color;
00089
00090 typedef Ars::Window *(*cbObjCreateType)( const icstring &name );
00091
00092 namespace Ars
00093 {
00094 static XRect EmptyRect( 0 , 0 , -1 , -1 );
00095
00096 class ArsApplication : public MessageClient , public std::map< std::pair< std::string, unsigned char>, FontEngine *> {
00097 private:
00098
00099 static ArsApplication *instance;
00100 int exitCode;
00101 bool running;
00102
00103 MessageClient *keyFocusWindow;
00104
00105 protected:
00106
00107 const int argc;
00108 char **argv;
00109
00110 FontEngine *defaultFontEngine;
00111
00112 View *frame;
00113 public:
00114
00115 static XPoint mousexy;
00116
00117 static int scrW , scrH;
00118
00119 static map<icstring,void *> lbGetter;
00120 static map<icstring,unsigned long> Mnemo_f , Mnemo_s;
00121 static vector<cbObjCreateType> objCreate;
00122
00126 ArsApplication( const int argc , char **argv );
00127
00129 virtual ~ArsApplication( void );
00130
00138 virtual void GenDefaultCfg( void );
00139
00141 static ArsApplication* GetInstance( void ) { return instance; }
00142
00144 const int ExitCode(void) const { return exitCode; }
00145
00147 const bool IsRunning( void) const { return running; }
00148
00152 void SetKeyFocus( MessageClient *pWindow );
00153
00155 MessageClient *GetKeyFocus( void ) const
00156 {
00157 return keyFocusWindow;
00158 }
00159
00162 virtual void Init( void );
00163
00165 virtual void Exec(void);
00166
00172 FontEngine *GetFontEngine(std::string sFontFileName, unsigned char iFontSize = 12);
00173
00177 void SetDefaultFontEngine( FontEngine *pFontEngine ) { defaultFontEngine = pFontEngine; }
00178
00180 FontEngine *GetDefaultFontEngine( void ) const { return defaultFontEngine; }
00181
00182
00183 virtual const bool MainLoop( void );
00184
00187 void HandleSDLEvent( SDL_Event event );
00188
00189 static string GetCoordStr( void );
00190
00191 protected:
00192
00195 virtual const bool wmExit( const Message &msg );
00196 };
00197
00198 }
00199
00200 #include "arsgraf.h"
00201
00202 #include "arsform.h"
00203 #include "arsrsrc.h"
00204 #include "arsview.h"
00205
00206 #include "xbox.h"
00207 #include "xlabel.h"
00208 #include "xbutton.h"
00209 #include "xbuttonimage.h"
00210 #include "ximage.h"
00211 #include "xgroupbox.h"
00212 #include "xcheckbox.h"
00213 #include "xeditbox.h"
00214 #include "xscrollbar.h"
00215 #include "xprogress.h"
00216 #include "xlistbox.h"
00217 #include "xdropdown.h"
00218 #include "xmpeg.h"
00219 #include "xtextbox.h"
00220
00221 #include "arstooltip.h"
00222
00223 #define StartMain( a ) \
00224 const int TofMain( const int argc , char **argv ) \
00225 { \
00226 extern ArsApplication *_mainApp_; \
00227 _mainApp_ = (ArsApplication *)new a( argc , argv ); \
00228 _mainApp_->Init(); \
00229 _mainApp_->Exec(); \
00230 int ans = _mainApp_->ExitCode(); \
00231 delete _mainApp_; \
00232 MessageServer *ins = &MessageServer::Instance(); \
00233 if( ins ) \
00234 delete ins; \
00235 ins = 0; \
00236 return ans; \
00237 }
00238
00239 #endif