00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #include "messaginghub.h"
00013
00014
00015 StatusMessageWindowHolder :: StatusMessageWindowHolder( const StatusMessageWindowHolder& smw )
00016 : userData( NULL )
00017 {
00018 copy(smw);
00019 }
00020
00021 StatusMessageWindowHolder::StatusMessageWindowHolder()
00022 {
00023 userData = new UserData;
00024 }
00025
00026
00027 void StatusMessageWindowHolder::unlink()
00028 {
00029 if ( userData ) {
00030 userData->counter -= 1;
00031 if ( userData->counter <= 0 ) {
00032 delete userData;
00033 userData = NULL;
00034 }
00035 }
00036 }
00037
00038 void StatusMessageWindowHolder::copy( const StatusMessageWindowHolder& smw )
00039 {
00040 if ( smw.userData ) {
00041 unlink();
00042 userData = smw.userData;
00043 userData->counter += 1;
00044 } else {
00045 userData = new UserData;
00046 }
00047 }
00048
00049 void StatusMessageWindowHolder::close()
00050 {
00051 unlink();
00052 }
00053
00054
00055 StatusMessageWindowHolder& StatusMessageWindowHolder::operator=( const StatusMessageWindowHolder& smw )
00056 {
00057 copy(smw);
00058 return *this;
00059 }
00060
00061
00062 StatusMessageWindowHolder::~StatusMessageWindowHolder()
00063 {
00064 unlink();
00065 }
00066
00067 StatusMessageWindowHolder MessagingHubBase::infoMessageWindow( const ASCString& msg ) {
00068 return StatusMessageWindowHolder( messageWindowFactory( msg ));
00069 }
00070
00071
00072 void MessagingHubBase::message( MessageType type, const ASCString& message )
00073 {
00074 switch ( type ) {
00075 case FatalError: fatalError( message );
00076 exitHandler();
00077 break;
00078 case Error: error ( message ); break;
00079 case Warning: warning( message ); break;
00080 case InfoMessage: infoMessage( message ); break;
00081 case StatusInfo: statusInformation( message ); break;
00082 case LogMessage: logMessage( message, 0 ); break;
00083 };
00084
00085 }
00086
00087
00088
00089 void MessagingHubBase::message( MessageType type, const char* msg, ... )
00090 {
00091 va_list arglist;
00092 va_start ( arglist, msg );
00093
00094 ASCString my_message;
00095 my_message.vaformat( msg, arglist );
00096
00097 message( type, my_message );
00098
00099 va_end ( arglist );
00100 }
00101
00102
00103 void displayLogMessage ( int msgVerbosity, const char* message, ... )
00104 {
00105 va_list arglist;
00106 va_start ( arglist, message );
00107 if ( msgVerbosity <= MessagingHub::Instance().getVerbosity() ) {
00108 char buf[10000];
00109 vsprintf ( buf, message, arglist );
00110
00111 displayLogMessage( msgVerbosity, ASCString(buf) );
00112 }
00113 va_end ( arglist );
00114 }
00115
00116 void displayLogMessage ( int msgVerbosity, const ASCString& message )
00117 {
00118 if ( msgVerbosity <= MessagingHub::Instance().getVerbosity() )
00119 MessagingHub::Instance().logMessage( message, msgVerbosity );
00120
00121 }
00122
00123 void fatalError ( const ASCString& string )
00124 {
00125 MessagingHub::Instance().message( MessagingHubBase::FatalError, string );
00126 }
00127
00128 void fatalError ( const char* msg, ... )
00129 {
00130 va_list arglist;
00131 va_start ( arglist, msg );
00132
00133 ASCString message;
00134 message.vaformat( msg, arglist );
00135
00136 fatalError( message );
00137
00138 va_end ( arglist );
00139 }
00140
00141
00142 void warning ( const ASCString& str )
00143 {
00144 MessagingHub::Instance().message( MessagingHubBase::Warning, str );
00145 }
00146
00147 void errorMessage ( const ASCString& string )
00148 {
00149 MessagingHub::Instance().message( MessagingHubBase::Error, string );
00150 }
00151
00152 void infoMessage ( const ASCString& string )
00153 {
00154 MessagingHub::Instance().message( MessagingHubBase::InfoMessage, string );
00155 }
00156
00157 void statusMessage ( const ASCString& string )
00158 {
00159 MessagingHub::Instance().message( MessagingHubBase::StatusInfo, string );
00160 }
00161