Changeset 8858 for code/trunk/src/libraries/core
- Timestamp:
- Aug 23, 2011, 12:45:53 AM (13 years ago)
- Location:
- code/trunk
- Files:
-
- 67 edited
Legend:
- Unmodified
- Added
- Removed
-
code/trunk
- Property svn:ignore
-
old new 1 1 build 2 2 codeblocks 3 vs 3 4 dependencies
-
- Property svn:mergeinfo changed
/code/branches/output (added) merged: 8739-8740,8765,8771-8772,8774-8780,8787-8789,8794-8799,8801,8803-8812,8814,8816-8817,8820,8822,8825-8837,8840,8844,8846,8848-8850,8853-8854
- Property svn:ignore
-
code/trunk/src/libraries/core/BaseObject.cc
r8706 r8858 109 109 void BaseObject::registerEventListener(BaseObject* object) 110 110 { 111 COUT(4) << "New EventListener: " << object->getIdentifier()->getName() << " &(" << object << ")." << std::endl;111 orxout(verbose, context::events) << "New EventListener: " << object->getIdentifier()->getName() << " &(" << object << ")." << endl; 112 112 this->eventListeners_.insert(object); 113 113 } … … 186 186 this->addTemplate(temp); 187 187 else 188 COUT(1) << "Error: \"" << name << "\" is not a valid Template name (in class: " << this->getIdentifier()->getName() << ", name: " << this->getName() << ")." << std::endl;188 orxout(internal_error) << "\"" << name << "\" is not a valid Template name (in class: " << this->getIdentifier()->getName() << ", name: " << this->getName() << ")." << endl; 189 189 } 190 190 … … 312 312 if (it != this->eventStates_.end()) 313 313 { 314 COUT(2) << "Warning: Overwriting EventState in class " << this->getIdentifier()->getName() << '.' << std::endl;314 orxout(internal_warning, context::events) << "Overwriting EventState in class " << this->getIdentifier()->getName() << '.' << endl; 315 315 delete (it->second); 316 316 } … … 379 379 this->registerEventStates(); 380 380 381 COUT(4) << this->getIdentifier()->getName() << " (&" << this << ") processing event. originator: " << event.originator_->getIdentifier()->getName() << " (&" << event.originator_ << "), activate: " << event.activate_ << ", name: " << event.name_ << ", statename: " << event.statename_ << "." << std::endl;381 orxout(verbose, context::events) << this->getIdentifier()->getName() << " (&" << this << ") processing event. originator: " << event.originator_->getIdentifier()->getName() << " (&" << event.originator_ << "), activate: " << event.activate_ << ", name: " << event.name_ << ", statename: " << event.statename_ << "." << endl; 382 382 383 383 std::map<std::string, EventState*>::const_iterator it = this->eventStates_.find(event.statename_); … … 385 385 it->second->process(event, this); 386 386 else if (!event.statename_.empty()) 387 COUT(2) << "Warning: \"" << event.statename_ << "\" is not a valid state in object \"" << this->getName() << "\" of class " << this->getIdentifier()->getName() << "." << std::endl;388 else 389 COUT(2) << "Warning: Event with invalid source sent to object \"" << this->getName() << "\" of class " << this->getIdentifier()->getName() << "." << std::endl;387 orxout(internal_warning, context::events) << "\"" << event.statename_ << "\" is not a valid state in object \"" << this->getName() << "\" of class " << this->getIdentifier()->getName() << "." << endl; 388 else 389 orxout(internal_warning, context::events) << "Event with invalid source sent to object \"" << this->getName() << "\" of class " << this->getIdentifier()->getName() << "." << endl; 390 390 } 391 391 … … 412 412 } 413 413 else 414 COUT(2) << "Warning: No MainState defined in object \"" << this->getName() << "\" (" << this->getIdentifier()->getName() << ")" << std::endl;414 orxout(internal_warning, context::events) << "No MainState defined in object \"" << this->getName() << "\" (" << this->getIdentifier()->getName() << ")" << endl; 415 415 } 416 416 … … 432 432 this->mainStateFunctor_ = it->second->getFunctor(); 433 433 else 434 COUT(2) << "Warning: Can't use \"" << this->mainStateName_ << "\" as MainState because it needs a second argument." << std::endl;434 orxout(internal_warning, context::events) << "Can't use \"" << this->mainStateName_ << "\" as MainState because it needs a second argument." << endl; 435 435 } 436 436 else 437 COUT(2) << "Warning: \"" << this->mainStateName_ << "\" is not a valid MainState." << std::endl;437 orxout(internal_warning, context::events) << "\"" << this->mainStateName_ << "\" is not a valid MainState." << endl; 438 438 } 439 439 } -
code/trunk/src/libraries/core/CMakeLists.txt
r8729 r8858 86 86 input/KeyBinder.h 87 87 input/KeyBinderManager.h 88 ../util/output/OutputDefinitions.h 88 89 PCH_FILE 89 90 CorePrecompiledHeaders.h -
code/trunk/src/libraries/core/ClassFactory.h
r7401 r8858 42 42 #include <string> 43 43 44 #include "util/ Debug.h"44 #include "util/Output.h" 45 45 #include "Identifier.h" 46 46 … … 73 73 ClassFactory(const std::string& name, bool bLoadable = true) 74 74 { 75 COUT(4) << "*** ClassFactory: Create entry for " << name << " in Factory." << std::endl;75 orxout(verbose, context::misc::factory) << "Create entry for " << name << " in Factory." << endl; 76 76 ClassIdentifier<T>::getIdentifier(name)->addFactory(this); 77 77 ClassIdentifier<T>::getIdentifier()->setLoadable(bLoadable); -
code/trunk/src/libraries/core/CommandLineParser.cc
r8729 r8858 33 33 34 34 #include "util/Convert.h" 35 #include "util/ Debug.h"35 #include "util/Output.h" 36 36 #include "util/Exception.h" 37 37 #include "util/StringUtils.h" … … 229 229 catch (const ArgumentException& ex) 230 230 { 231 COUT(0) << "Could not parse command line: " << ex.what() << std::endl;232 COUT(0) << CommandLineParser::getUsageInformation() << std::endl;231 orxout(user_error) << "Could not parse command line: " << ex.what() << endl; 232 orxout(user_error) << CommandLineParser::getUsageInformation() << endl; 233 233 throw GeneralException(""); 234 234 } … … 286 286 } 287 287 288 infoStr << std::endl;289 infoStr << "Usage: orxonox [options]" << std::endl;290 infoStr << "Available options:" << std::endl;288 infoStr << endl; 289 infoStr << "Usage: orxonox [options]" << endl; 290 infoStr << "Available options:" << endl; 291 291 292 292 for (std::map<std::string, CommandLineArgument*>::const_iterator it = inst.cmdLineArgs_.begin(); … … 305 305 infoStr << std::string(maxNameSize - it->second->getName().size(), ' '); 306 306 infoStr << ": " << it->second->getInformation(); 307 infoStr << std::endl;307 infoStr << endl; 308 308 } 309 309 return infoStr.str(); -
code/trunk/src/libraries/core/CommandLineParser.h
r8729 r8858 218 218 "Cannot add a command line argument with name '" + name + "' twice."); 219 219 OrxAssert(MultiType(defaultValue).getType() != MT_Type::Bool || MultiType(defaultValue).getBool() != true, 220 "Boolean command line arguments with positive default values are not supported." << std::endl220 "Boolean command line arguments with positive default values are not supported." << endl 221 221 << "Please use SetCommandLineSwitch and adjust your argument: " << name); 222 222 -
code/trunk/src/libraries/core/ConfigFileManager.cc
r7401 r8858 123 123 for (std::list<ConfigFileEntry*>::const_iterator it = this->entries_.begin(); it != this->entries_.end(); ++it) 124 124 if ((*it)->getName() == name) 125 if ((*it)->getIndex() > size) 126 size = (*it)->getIndex(); 127 if (size == 0) 128 return 0; 129 else 130 return (size + 1); 125 if ((*it)->getIndex() >= size) 126 size = (*it)->getIndex() + 1; 127 return size; 131 128 } 132 129 … … 274 271 { 275 272 boost::filesystem::copy_file(defaultFilepath, filepath); 276 COUT(3) << "Copied " << this->filename_ << " from the default config folder." << std::endl;273 orxout(internal_info, context::config) << "Copied " << this->filename_ << " from the default config folder." << endl; 277 274 } 278 275 catch (const boost::filesystem::filesystem_error& ex) 279 { COUT(1) << "Error in ConfigFile: " << ex.what() << std::endl; }276 { orxout(user_error, context::config) << "Error in ConfigFile: " << ex.what() << endl; } 280 277 } 281 278 } … … 375 372 file.close(); 376 373 377 COUT(3) << "Loaded config file \"" << this->filename_ << "\"." << std::endl;374 orxout(internal_info, context::config) << "Loaded config file \"" << this->filename_ << "\"." << endl; 378 375 379 376 // DO NOT save the file --> we can open supposedly read only config files … … 404 401 if (!file.is_open()) 405 402 { 406 COUT(1) << "Error: Couldn't open config-file \"" << filename << "\"." << std::endl;403 orxout(user_error, context::config) << "Couldn't open config-file \"" << filename << "\"." << endl; 407 404 return; 408 405 } … … 410 407 for (std::list<ConfigFileSection*>::const_iterator it = this->sections_.begin(); it != this->sections_.end(); ++it) 411 408 { 412 file << (*it)->getFileEntry() << std::endl;409 file << (*it)->getFileEntry() << endl; 413 410 414 411 for (std::list<ConfigFileEntry*>::const_iterator it_entries = (*it)->getEntriesBegin(); it_entries != (*it)->getEntriesEnd(); ++it_entries) 415 file << (*it_entries)->getFileEntry() << std::endl;416 417 file << std::endl;412 file << (*it_entries)->getFileEntry() << endl; 413 414 file << endl; 418 415 } 419 416 420 417 file.close(); 421 418 422 COUT(4) << "Saved config file \"" << filename << "\"." << std::endl;419 orxout(verbose, context::config) << "Saved config file \"" << filename << "\"." << endl; 423 420 } 424 421 … … 669 666 { 670 667 if (!this->configImpl(section, entry, value, &ConfigValueContainer::set)) 671 COUT(1) << "Error: Config value \"" << entry << "\" in section \"" << section << "\" doesn't exist." << std::endl;668 orxout(user_error, context::config) << "Config value \"" << entry << "\" in section \"" << section << "\" doesn't exist." << endl; 672 669 } 673 670 … … 682 679 { 683 680 if (!this->configImpl(section, entry, value, &ConfigValueContainer::tset)) 684 COUT(1) << "Error: Config value \"" << entry << "\" in section \"" << section << "\" doesn't exist." << std::endl;681 orxout(user_error, context::config) << "Config value \"" << entry << "\" in section \"" << section << "\" doesn't exist." << endl; 685 682 } 686 683 -
code/trunk/src/libraries/core/ConfigValueContainer.cc
r8351 r8858 143 143 else 144 144 { 145 COUT(1) << "Error: Config-value '" << this->varname_ << "' in " << this->sectionname_ << " is not a vector." << std::endl;145 orxout(user_error, context::config) << "Config-value '" << this->varname_ << "' in " << this->sectionname_ << " is not a vector." << endl; 146 146 } 147 147 return false; … … 182 182 if (index > MAX_VECTOR_INDEX) 183 183 { 184 COUT(1) << "Error: Index " << index << " is too large." << std::endl;184 orxout(user_error, context::config) << "Index " << index << " is too large." << endl; 185 185 return false; 186 186 } … … 203 203 else 204 204 { 205 COUT(1) << "Error: Config-value '" << this->varname_ << "' in " << this->sectionname_ << " is not a vector." << std::endl;205 orxout(user_error, context::config) << "Config-value '" << this->varname_ << "' in " << this->sectionname_ << " is not a vector." << endl; 206 206 return false; 207 207 } … … 218 218 return this->set(this->valueVector_.size(), input); 219 219 220 COUT(1) << "Error: Config-value '" << this->varname_ << "' in " << this->sectionname_ << " is not a vector." << std::endl;220 orxout(user_error, context::config) << "Config-value '" << this->varname_ << "' in " << this->sectionname_ << " is not a vector." << endl; 221 221 return false; 222 222 } … … 241 241 return true; 242 242 } 243 COUT(1) << "Error: Invalid vector-index." << std::endl;244 } 245 246 COUT(1) << "Error: Config-value '" << this->varname_ << "' in " << this->sectionname_ << " is not a vector." << std::endl;243 orxout(user_error, context::config) << "Invalid vector-index." << endl; 244 } 245 246 orxout(user_error, context::config) << "Config-value '" << this->varname_ << "' in " << this->sectionname_ << " is not a vector." << endl; 247 247 return false; 248 248 } … … 312 312 if (!success) 313 313 { 314 COUT(1) << "Error: Config-value '" << this->varname_ << "' in " << this->sectionname_ << " is a vector." << std::endl;314 orxout(user_error, context::config) << "Config-value '" << this->varname_ << "' in " << this->sectionname_ << " is a vector." << endl; 315 315 } 316 316 else 317 317 { 318 COUT(1) << "Error: Invalid vector-index." << std::endl;318 orxout(user_error, context::config) << "Invalid vector-index." << endl; 319 319 } 320 320 return false; -
code/trunk/src/libraries/core/ConfigValueIncludes.h
r8729 r8858 87 87 @code 88 88 MyObject orxonoxobject; 89 std::cout << "Name: " << orxonoxobject.getName() << std::endl;90 std::cout << "Version: " << orxonoxobject.getVersion() << std::endl;89 orxout() << "Name: " << orxonoxobject.getName() << endl; 90 orxout() << "Version: " << orxonoxobject.getVersion() << endl; 91 91 @endcode 92 92 … … 200 200 else 201 201 { 202 COUT(2) << "Warning:Couldn't reset config-value '" << entryName << "' in class '"203 << ClassIdentifier<T>::getIdentifier()->getName() << "', corresponding container doesn't exist." << std::endl;202 orxout(user_warning, context::config) << "Couldn't reset config-value '" << entryName << "' in class '" 203 << ClassIdentifier<T>::getIdentifier()->getName() << "', corresponding container doesn't exist." << endl; 204 204 } 205 205 } … … 238 238 else \ 239 239 { \ 240 COUT(2) << "Warning: Couln't modify config-value '" << entryName << "' in class '" \241 << ClassByObjectType(object)->getName() << "', corresponding container doesn't exist." << std::endl; \240 orxout(user_warning, context::config) << "Couldn't modify config-value '" << entryName << "' in class '" \ 241 << ClassByObjectType(object)->getName() << "', corresponding container doesn't exist." << endl; \ 242 242 } 243 243 -
code/trunk/src/libraries/core/Core.cc
r8729 r8858 52 52 53 53 #include "util/Clock.h" 54 #include "util/ Debug.h"54 #include "util/Output.h" 55 55 #include "util/Exception.h" 56 #include "util/output/LogWriter.h" 56 57 #include "util/Scope.h" 57 58 #include "util/ScopedSingletonManager.h" … … 111 112 , destructionHelper_(this) 112 113 { 114 orxout(internal_status) << "initializing Core object..." << endl; 115 113 116 // Set the hard coded fixed paths 114 117 this->pathConfig_ = new PathConfig(); … … 118 121 119 122 // Load modules 123 orxout(internal_info) << "Loading modules:" << endl; 120 124 const std::vector<std::string>& modulePaths = this->pathConfig_->getModulePaths(); 121 125 for (std::vector<std::string>::const_iterator it = modulePaths.begin(); it != modulePaths.end(); ++it) … … 127 131 catch (...) 128 132 { 129 COUT(1) << "Couldn't load module \"" << *it << "\": " << Exception::handleMessage() << std::endl;133 orxout(user_error) << "Couldn't load module \"" << *it << "\": " << Exception::handleMessage() << endl; 130 134 } 131 135 } … … 136 140 // Set configurable paths like log, config and media 137 141 this->pathConfig_->setConfigurablePaths(); 142 143 orxout(internal_info) << "Root path: " << PathConfig::getRootPathString() << endl; 144 orxout(internal_info) << "Executable path: " << PathConfig::getExecutablePathString() << endl; 145 orxout(internal_info) << "Data path: " << PathConfig::getDataPathString() << endl; 146 orxout(internal_info) << "Ext. data path: " << PathConfig::getExternalDataPathString() << endl; 147 orxout(internal_info) << "Config path: " << PathConfig::getConfigPathString() << endl; 148 orxout(internal_info) << "Log path: " << PathConfig::getLogPathString() << endl; 149 orxout(internal_info) << "Modules path: " << PathConfig::getModulePathString() << endl; 138 150 139 151 // create a signal handler (only active for Linux) … … 141 153 this->signalHandler_ = new SignalHandler(); 142 154 this->signalHandler_->doCatch(PathConfig::getExecutablePathString(), PathConfig::getLogPathString() + "orxonox_crash.log"); 143 144 // Set the correct log path. Before this call, /tmp (Unix) or %TEMP% (Windows) was used145 OutputHandler::getInstance().setLogPath(PathConfig::getLogPathString());146 155 147 156 #ifdef ORXONOX_PLATFORM_WINDOWS … … 155 164 156 165 // Manage ini files and set the default settings file (usually orxonox.ini) 166 orxout(internal_info) << "Loading config:" << endl; 157 167 this->configFileManager_ = new ConfigFileManager(); 158 168 this->configFileManager_->setFilename(ConfigFileType::Settings, … … 160 170 161 171 // Required as well for the config values 172 orxout(internal_info) << "Loading language:" << endl; 162 173 this->languageInstance_ = new Language(); 163 174 … … 165 176 // possibility to configure everything below here 166 177 RegisterRootObject(Core); 178 orxout(internal_info) << "configuring Core" << endl; 167 179 this->setConfigValues(); 168 // Rewrite the log file with the correct log levels 169 OutputHandler::getInstance().rewriteLogFile(); 180 181 // Set the correct log path and rewrite the log file with the correct log levels 182 LogWriter::getInstance().setLogPath(PathConfig::getLogPathString()); 170 183 171 184 #if !defined(ORXONOX_PLATFORM_APPLE) && !defined(ORXONOX_USE_WINMAIN) … … 176 189 } 177 190 if (this->bStartIOConsole_) 191 { 192 orxout(internal_info) << "creating IO console" << endl; 178 193 this->ioConsole_ = new IOConsole(); 194 } 179 195 #endif 180 196 181 197 // creates the class hierarchy for all classes with factories 198 orxout(internal_info) << "creating class hierarchy" << endl; 182 199 Identifier::createClassHierarchy(); 183 200 184 201 // Load OGRE excluding the renderer and the render window 202 orxout(internal_info) << "creating GraphicsManager:" << endl; 185 203 this->graphicsManager_ = new GraphicsManager(false); 186 204 … … 190 208 191 209 // Create singletons that always exist (in other libraries) 210 orxout(internal_info) << "creating root scope:" << endl; 192 211 this->rootScope_ = new Scope<ScopeID::Root>(); 193 212 … … 204 223 } 205 224 else 206 COUT(0) << "Error: Could not open file for documentation writing" << endl; 207 } 225 orxout(internal_error) << "Could not open file for documentation writing" << endl; 226 } 227 228 orxout(internal_status) << "finished initializing Core object" << endl; 208 229 } 209 230 210 231 void Core::destroy() 211 232 { 233 orxout(internal_status) << "destroying Core object..." << endl; 234 212 235 // Remove us from the object lists again to avoid problems when destroying them 213 236 this->unregisterObject(); … … 228 251 safeObjectDelete(&dynLibManager_); 229 252 safeObjectDelete(&pathConfig_); 230 } 231 232 namespace DefaultLevelLogFile 233 { 234 const OutputLevel::Value Dev = OutputLevel::Debug; 235 const OutputLevel::Value User = OutputLevel::Info; 253 254 orxout(internal_status) << "finished destroying Core object" << endl; 236 255 } 237 256 … … 239 258 void Core::setConfigValues() 240 259 { 241 // Choose the default level according to the path Orxonox was started (build directory or not) 242 OutputLevel::Value defaultLogLevel = (PathConfig::buildDirectoryRun() ? DefaultLevelLogFile::Dev : DefaultLevelLogFile::User); 243 244 SetConfigValueExternal(debugLevelLogFile_, "OutputHandler", "debugLevelLogFile", defaultLogLevel) 245 .description("The maximum level of debug output written to the log file"); 246 OutputHandler::getInstance().setSoftDebugLevel("LogFile", debugLevelLogFile_); 260 SetConfigValueExternal(LogWriter::getInstance().configurableMaxLevel_, 261 LogWriter::getInstance().getConfigurableSectionName(), 262 LogWriter::getInstance().getConfigurableMaxLevelName(), 263 LogWriter::getInstance().configurableMaxLevel_) 264 .description("The maximum level of output shown in the log file") 265 .callback(static_cast<BaseWriter*>(&LogWriter::getInstance()), &BaseWriter::changedConfigurableLevel); 266 SetConfigValueExternal(LogWriter::getInstance().configurableAdditionalContextsMaxLevel_, 267 LogWriter::getInstance().getConfigurableSectionName(), 268 LogWriter::getInstance().getConfigurableAdditionalContextsMaxLevelName(), 269 LogWriter::getInstance().configurableAdditionalContextsMaxLevel_) 270 .description("The maximum level of output shown in the log file for additional contexts") 271 .callback(static_cast<BaseWriter*>(&LogWriter::getInstance()), &BaseWriter::changedConfigurableAdditionalContextsLevel); 272 SetConfigValueExternal(LogWriter::getInstance().configurableAdditionalContexts_, 273 LogWriter::getInstance().getConfigurableSectionName(), 274 LogWriter::getInstance().getConfigurableAdditionalContextsName(), 275 LogWriter::getInstance().configurableAdditionalContexts_) 276 .description("Additional output contexts shown in the log file") 277 .callback(static_cast<BaseWriter*>(&LogWriter::getInstance()), &BaseWriter::changedConfigurableAdditionalContexts); 247 278 248 279 SetConfigValue(bDevMode_, PathConfig::buildDirectoryRun()) … … 279 310 void Core::devModeChanged() 280 311 { 281 bool isNormal = (bDevMode_ == PathConfig::buildDirectoryRun());282 if (isNormal)283 {284 ModifyConfigValueExternal(debugLevelLogFile_, "debugLevelLogFile", update);285 }286 else287 {288 OutputLevel::Value level = (bDevMode_ ? DefaultLevelLogFile::Dev : DefaultLevelLogFile::User);289 ModifyConfigValueExternal(debugLevelLogFile_, "debugLevelLogFile", tset, level);290 }291 292 312 // Inform listeners 293 313 ObjectList<DevModeListener>::iterator it = ObjectList<DevModeListener>::begin(); … … 316 336 void Core::loadGraphics() 317 337 { 338 orxout(internal_info) << "loading graphics in Core" << endl; 339 318 340 // Any exception should trigger this, even in upgradeToGraphics (see its remarks) 319 341 Loki::ScopeGuard unloader = Loki::MakeObjGuard(*this, &Core::unloadGraphics); … … 327 349 { 328 350 // Exit the application if the Ogre config dialog was canceled 329 COUT(1) << Exception::handleMessage() << std::endl;351 orxout(user_error) << Exception::handleMessage() << endl; 330 352 exit(EXIT_FAILURE); 331 353 } … … 338 360 // and reloaded between throw and catch (access violation in MSVC). 339 361 // That's why we abort completely and only display the exception. 340 COUT(1) << "An exception occurred during upgrade to graphics. "341 << "That is unrecoverable. The message was:" << endl342 << Exception::handleMessage() << endl;362 orxout(user_error) << "An exception occurred during upgrade to graphics. " 363 << "That is unrecoverable. The message was:" << endl 364 << Exception::handleMessage() << endl; 343 365 abort(); 344 366 } … … 357 379 358 380 // Create singletons associated with graphics (in other libraries) 381 orxout(internal_info) << "creating graphics scope:" << endl; 359 382 graphicsScope_ = new Scope<ScopeID::Graphics>(); 360 383 361 384 unloader.Dismiss(); 385 386 orxout(internal_info) << "finished loading graphics in Core" << endl; 362 387 } 363 388 364 389 void Core::unloadGraphics() 365 390 { 391 orxout(internal_info) << "unloading graphics in Core" << endl; 392 366 393 safeObjectDelete(&graphicsScope_); 367 394 safeObjectDelete(&guiManager_); … … 374 401 catch (...) 375 402 { 376 COUT(0) << "An exception occurred during 'unloadGraphics':" << Exception::handleMessage() << std::endl377 << "Another exception might be being handled which may lead to undefined behaviour!" << std::endl378 << "Terminating the program." << std::endl;403 orxout(user_error) << "An exception occurred during 'unloadGraphics':" << Exception::handleMessage() << endl 404 << "Another exception might be being handled which may lead to undefined behaviour!" << endl 405 << "Terminating the program." << endl; 379 406 abort(); 380 407 } -
code/trunk/src/libraries/core/Core.h
r8729 r8858 136 136 137 137 bool bGraphicsLoaded_; 138 int debugLevelLogFile_; //!< The debug level for the log file (belongs to OutputHandler)139 138 std::string language_; //!< The language 140 139 bool bInitRandomNumberGenerator_; //!< If true, srand(time(0)) is called -
code/trunk/src/libraries/core/CoreIncludes.h
r8729 r8858 34 34 /** 35 35 @file 36 @ingroup Object Factory 36 @ingroup Object Factory Class Identifier 37 37 @brief Defines several very important macros used to register objects, create factories, and to work with identifiers. 38 38 … … 78 78 #include "CorePrereqs.h" 79 79 80 #include "util/ Debug.h"80 #include "util/Output.h" 81 81 #include "Identifier.h" 82 82 #include "ClassFactory.h" -
code/trunk/src/libraries/core/CorePrecompiledHeaders.h
r7266 r8858 51 51 #include <set> // 50 52 52 53 #include "util/ Debug.h" // 4853 #include "util/Output.h" // 48 54 54 55 55 #include <deque> // 43 -
code/trunk/src/libraries/core/DynLib.cc
r8351 r8858 68 68 { 69 69 // Log library load 70 COUT(2) << "Loading module " << mName << std::endl;70 orxout(internal_info) << "Loading module " << mName << endl; 71 71 72 72 std::string name = mName; … … 99 99 { 100 100 // Log library unload 101 COUT(4) << "Unloading module " << mName << std::endl;101 orxout(internal_info) << "Unloading module " << mName << endl; 102 102 103 103 if (DYNLIB_UNLOAD( m_hInst )) -
code/trunk/src/libraries/core/Event.cc
r7401 r8858 49 49 if (this->bProcessingEvent_) 50 50 { 51 COUT(2) << "Warning: Detected Event loop in section \"" << event.statename_ << "\" of object \"" << object->getName() << "\" and fired by \"" << event.originator_->getName() << '"' << std::endl;51 orxout(internal_warning, context::events) << "Detected Event loop in section \"" << event.statename_ << "\" of object \"" << object->getName() << "\" and fired by \"" << event.originator_->getName() << '"' << endl; 52 52 return; 53 53 } … … 55 55 this->bProcessingEvent_ = true; 56 56 57 COUT(4) << "Processing event (EventState) : originator: " << event.originator_->getIdentifier()->getName() << " (&" << event.originator_ << "), activate: " << event.activate_ << ", name: " << event.name_ << ", statename: " << event.statename_ << ", object: " << object->getIdentifier()->getName() << " (&" << object << ")" << "." << std::endl;57 orxout(verbose, context::events) << "Processing event (EventState) : originator: " << event.originator_->getIdentifier()->getName() << " (&" << event.originator_ << "), activate: " << event.activate_ << ", name: " << event.name_ << ", statename: " << event.statename_ << ", object: " << object->getIdentifier()->getName() << " (&" << object << ")" << "." << endl; 58 58 59 59 // check if the originator is an instance of the requested class -
code/trunk/src/libraries/core/GUIManager.cc
r8729 r8858 73 73 #include "util/Clock.h" 74 74 #include "util/Convert.h" 75 #include "util/ Debug.h"75 #include "util/Output.h" 76 76 #include "util/Exception.h" 77 77 #include "util/Math.h" 78 78 #include "util/OrxAssert.h" 79 #include "util/output/BaseWriter.h" 79 80 #include "ConfigValueIncludes.h" 80 81 #include "Core.h" … … 101 102 void logEvent(const CEGUI::String& message, CEGUI::LoggingLevel level = CEGUI::Standard) 102 103 { 103 int orxonoxLevel = CEGUI::Standard;104 OutputLevel orxonoxLevel = level::debug_output; 104 105 switch (level) 105 106 { 106 case CEGUI::Errors: orxonoxLevel = 1; break;107 case CEGUI::Warnings: orxonoxLevel = 2; break;108 case CEGUI::Standard: orxonoxLevel = 4; break;109 case CEGUI::Informative: orxonoxLevel = 5; break;110 case CEGUI::Insane: orxonoxLevel = 6; break;107 case CEGUI::Errors: orxonoxLevel = level::internal_error; break; 108 case CEGUI::Warnings: orxonoxLevel = level::internal_warning; break; 109 case CEGUI::Standard: orxonoxLevel = level::verbose; break; 110 case CEGUI::Informative: orxonoxLevel = level::verbose_more; break; 111 case CEGUI::Insane: orxonoxLevel = level::verbose_ultra; break; 111 112 default: OrxAssert(false, "CEGUI log level out of range, inspect immediately!"); 112 113 } 113 OutputHandler::getOutStream(orxonoxLevel) 114 << "CEGUI: " << message << std::endl;114 115 orxout(orxonoxLevel, context::cegui) << message << endl; 115 116 116 117 CEGUI::DefaultLogger::logEvent(message, level); … … 256 257 { 257 258 RegisterRootObject(GUIManager); 259 260 orxout(internal_status) << "initializing GUIManager..." << endl; 261 258 262 this->setConfigValues(); 259 263 260 264 using namespace CEGUI; 261 265 262 COUT(3) << "Initialising CEGUI." << std::endl;266 orxout(internal_info) << "Initialising CEGUI." << endl; 263 267 264 268 this->oldCEGUI_ = false; 265 269 266 270 // Note: No SceneManager specified yet 267 271 #ifdef ORXONOX_OLD_CEGUI … … 300 304 std::auto_ptr<CEGUILogger> ceguiLogger(new CEGUILogger()); 301 305 ceguiLogger->setLogFilename(PathConfig::getLogPathString() + "cegui.log"); 302 // Set the log level according to ours (translate by subtracting 1) 303 ceguiLogger->setLoggingLevel( 304 static_cast<LoggingLevel>(OutputHandler::getInstance().getSoftDebugLevel("logFile") - 1)); 306 ceguiLogger->setLoggingLevel(static_cast<CEGUI::LoggingLevel>(this->outputLevelCeguiLog_)); 305 307 this->ceguiLogger_ = ceguiLogger.release(); 306 308 … … 336 338 // Set up the sheet manager in the Lua framework 337 339 this->luaState_->doFile("SheetManager.lua"); 340 341 orxout(internal_status) << "finished initializing GUIManager" << endl; 338 342 } 339 343 340 344 void GUIManager::destroy() 341 345 { 346 orxout(internal_status) << "destroying GUIManager..." << endl; 347 342 348 using namespace CEGUI; 343 349 … … 356 362 #endif 357 363 safeObjectDelete(&luaState_); 364 365 orxout(internal_status) << "finished destroying GUIManager" << endl; 358 366 } 359 367 360 368 void GUIManager::setConfigValues(void) 361 369 { 362 SetConfigValue(guiScheme_, GUIManager::defaultScheme_) .description("Changes the current GUI scheme.").callback(this, &GUIManager::changedGUIScheme);370 SetConfigValue(guiScheme_, GUIManager::defaultScheme_).description("Changes the current GUI scheme.").callback(this, &GUIManager::changedGUIScheme); 363 371 SetConfigValue(numScrollLines_, 1).description("How many lines to scroll in a list if the scroll wheel is used"); 372 SetConfigValueExternal(outputLevelCeguiLog_, BaseWriter::getConfigurableSectionName(), "outputLevelCeguiLog", CEGUI::Standard).description("The log level of the CEGUI log file").callback(this, &GUIManager::changedCeguiOutputLevel); 364 373 } 365 374 366 375 void GUIManager::changedGUIScheme(void) 367 376 { 377 } 378 379 void GUIManager::changedCeguiOutputLevel() 380 { 381 if (this->ceguiLogger_) 382 this->ceguiLogger_->setLoggingLevel(static_cast<CEGUI::LoggingLevel>(this->outputLevelCeguiLog_)); 368 383 } 369 384 … … 670 685 { 671 686 // Display the error and proceed. See @remarks why this can be dangerous. 672 COUT(1) << ex.getMessage() << std::endl;687 orxout(internal_error) << ex.getMessage() << endl; 673 688 return true; 674 689 } -
code/trunk/src/libraries/core/GUIManager.h
r8729 r8858 152 152 bool protectedCall(FunctionType function); 153 153 154 void changedCeguiOutputLevel(); 155 154 156 // keyHandler functions 155 157 void buttonPressed (const KeyEvent& evt); … … 168 170 169 171 #ifdef ORXONOX_OLD_CEGUI 170 CEGUI::OgreCEGUIRenderer* guiRenderer_; //!< CEGUI's interface to the Ogre Engine171 CEGUI::ResourceProvider* resourceProvider_; //!< CEGUI's resource provider172 CEGUI::OgreCEGUIRenderer* guiRenderer_; //!< CEGUI's interface to the Ogre Engine 173 CEGUI::ResourceProvider* resourceProvider_; //!< CEGUI's resource provider 172 174 #else 173 CEGUI::OgreRenderer* guiRenderer_; //!< CEGUI's interface to the Ogre Engine174 CEGUI::OgreResourceProvider* resourceProvider_; //!< CEGUI's resource provider175 Ogre::RenderQueueListener* rqListener_; //!< RQ listener so we can draw UNDER Ogre overlays175 CEGUI::OgreRenderer* guiRenderer_; //!< CEGUI's interface to the Ogre Engine 176 CEGUI::OgreResourceProvider* resourceProvider_; //!< CEGUI's resource provider 177 Ogre::RenderQueueListener* rqListener_; //!< RQ listener so we can draw UNDER Ogre overlays 176 178 CEGUI::OgreImageCodec* imageCodec_; 177 179 #endif 178 LuaState* luaState_; //!< LuaState, access point to the Lua engine 179 CEGUI::LuaScriptModule* scriptModule_; //!< CEGUI's script module to use Lua 180 CEGUI::System* guiSystem_; //!< CEGUI's main system 181 shared_ptr<ResourceInfo> rootFileInfo_; //!< Resource information about the root script 182 CEGUI::Logger* ceguiLogger_; //!< CEGUI's logger to be able to log CEGUI errors in our log 183 CEGUI::Window* rootWindow_; //!< Root node for all windows 184 CEGUI::Window* hudRootWindow_; //!< Root node for the HUD sheets 185 CEGUI::Window* menuRootWindow_; //!< Root node for the menu sheets (used by Lua) 186 std::map<std::string, PlayerInfo*> players_; //!< Stores the player (owner) for each GUI 187 Ogre::Camera* camera_; //!< Camera used to render the scene with the GUI 180 LuaState* luaState_; //!< LuaState, access point to the Lua engine 181 CEGUI::LuaScriptModule* scriptModule_; //!< CEGUI's script module to use Lua 182 CEGUI::System* guiSystem_; //!< CEGUI's main system 183 shared_ptr<ResourceInfo> rootFileInfo_; //!< Resource information about the root script 184 CEGUI::Logger* ceguiLogger_; //!< CEGUI's logger to be able to log CEGUI errors in our log 185 int outputLevelCeguiLog_; //!< CEGUI's log level 186 CEGUI::Window* rootWindow_; //!< Root node for all windows 187 CEGUI::Window* hudRootWindow_; //!< Root node for the HUD sheets 188 CEGUI::Window* menuRootWindow_; //!< Root node for the menu sheets (used by Lua) 189 std::map<std::string, PlayerInfo*> players_; //!< Stores the player (owner) for each GUI 190 Ogre::Camera* camera_; //!< Camera used to render the scene with the GUI 188 191 189 192 /// Helper object that executes the surrogate destructor destroy() 190 193 DestructionHelper<GUIManager> destructionHelper_; 191 194 192 static GUIManager* singletonPtr_s; //!< Singleton reference to GUIManager195 static GUIManager* singletonPtr_s; //!< Singleton reference to GUIManager 193 196 194 197 // The used CEGUI scheme. … … 196 199 std::string guiScheme_; 197 200 bool oldCEGUI_; 198 201 199 202 int numScrollLines_; ///< How many lines to scroll in a list if the scroll wheel is used 200 203 -
code/trunk/src/libraries/core/Game.cc
r8729 r8858 40 40 41 41 #include "util/Clock.h" 42 #include "util/ Debug.h"42 #include "util/Output.h" 43 43 #include "util/Exception.h" 44 44 #include "util/Sleep.h" … … 60 60 SetConsoleCommand("exit", &stop_game); 61 61 static void printFPS() 62 { COUT(0) << Game::getInstance().getAvgFPS() << std::endl; }62 { orxout(message) << Game::getInstance().getAvgFPS() << endl; } 63 63 SetConsoleCommand("Stats", "printFPS", &printFPS); 64 64 static void printTickTime() 65 { COUT(0) << Game::getInstance().getAvgTickTime() << std::endl; }65 { orxout(message) << Game::getInstance().getAvgTickTime() << endl; } 66 66 SetConsoleCommand("Stats", "printTickTime", &printTickTime); 67 67 … … 84 84 , destructionHelper_(this) 85 85 { 86 orxout(internal_status) << "initializing Game object..." << endl; 87 86 88 #ifdef ORXONOX_PLATFORM_WINDOWS 87 89 minimumSleepTime_ = 1000/*us*/; … … 106 108 107 109 // Create the Core 110 orxout(internal_info) << "creating Core object:" << endl; 108 111 this->core_ = new Core(cmdLine); 109 112 … … 125 128 this->loadedTopStateNode_ = this->rootStateNode_; 126 129 this->loadedStates_.push_back(this->getState(rootStateNode_->name_)); 130 131 orxout(internal_status) << "finished initializing Game object" << endl; 127 132 } 128 133 129 134 void Game::destroy() 130 135 { 136 orxout(internal_status) << "destroying Game object..." << endl; 137 131 138 // Remove us from the object lists again to avoid problems when destroying them 132 139 this->unregisterObject(); … … 139 146 safeObjectDelete(&core_); 140 147 safeObjectDelete(&gameClock_); 148 149 orxout(internal_status) << "finished destroying Game object..." << endl; 141 150 } 142 151 … … 163 172 { 164 173 if (this->requestedStateNodes_.empty()) 165 COUT(0) << "Warning: Starting game without requesting GameState. This automatically terminates the program." << std::endl; 174 orxout(user_error) << "Starting game without requesting GameState. This automatically terminates the program." << endl; 175 176 // Update the GameState stack if required. We do this already here to have a properly initialized game before entering the main loop 177 this->updateGameStateStack(); 178 179 orxout(user_status) << "Game loaded" << endl; 180 orxout(internal_status) << "--------------------------------------------------" << endl; 181 orxout(internal_status) << "starting main loop..." << endl; 166 182 167 183 // START GAME … … 189 205 catch (...) 190 206 { 191 COUT(0) << "An exception occurred in the Core preUpdate: " << Exception::handleMessage() << std::endl;192 COUT(0) << "This should really never happen! Closing the program." << std::endl;207 orxout(user_error) << "An exception occurred in the Core preUpdate: " << Exception::handleMessage() << endl; 208 orxout(user_error) << "This should really never happen! Closing the program." << endl; 193 209 this->stop(); 194 210 break; … … 203 219 catch (...) 204 220 { 205 COUT(0) << "An exception occurred in the Core postUpdate: " << Exception::handleMessage() << std::endl;206 COUT(0) << "This should really never happen! Closing the program." << std::endl;221 orxout(user_error) << "An exception occurred in the Core postUpdate: " << Exception::handleMessage() << endl; 222 orxout(user_error) << "This should really never happen! Closing the program." << endl; 207 223 this->stop(); 208 224 break; … … 217 233 this->updateFPSLimiter(); 218 234 } 235 236 orxout(internal_status) << "finished main loop" << endl; 237 orxout(internal_status) << "--------------------------------------------------" << endl; 219 238 220 239 // UNLOAD all remaining states … … 241 260 catch (...) 242 261 { 243 COUT(1) << "Error: Loading GameState '" << requestedStateNode->name_ << "' failed: " << Exception::handleMessage() << std::endl;262 orxout(user_error) << "Loading GameState '" << requestedStateNode->name_ << "' failed: " << Exception::handleMessage() << endl; 244 263 // All scheduled operations have now been rendered inert --> flush them and issue a warning 245 264 if (this->requestedStateNodes_.size() > 1) 246 COUT(4) << "All " << this->requestedStateNodes_.size() - 1 << " scheduled transitions have been ignored." << std::endl;265 orxout(internal_info) << "All " << this->requestedStateNodes_.size() - 1 << " scheduled transitions have been ignored." << endl; 247 266 this->requestedStateNodes_.clear(); 248 267 break; … … 272 291 catch (...) 273 292 { 274 COUT(1) << "An exception occurred while updating '" << (*it)->getName() << "': " << Exception::handleMessage() << std::endl;275 COUT(1) << "This should really never happen!" << std::endl;276 COUT(1) << "Unloading all GameStates depending on the one that crashed." << std::endl;293 orxout(user_error) << "An exception occurred while updating '" << (*it)->getName() << "': " << Exception::handleMessage() << endl; 294 orxout(user_error) << "This should really never happen!" << endl; 295 orxout(user_error) << "Unloading all GameStates depending on the one that crashed." << endl; 277 296 shared_ptr<GameStateTreeNode> current = this->loadedTopStateNode_; 278 297 while (current->name_ != (*it)->getName() && current) … … 338 357 void Game::stop() 339 358 { 359 orxout(user_status) << "Exit" << endl; 340 360 this->bAbort_ = true; 341 361 } … … 355 375 if (!this->checkState(name)) 356 376 { 357 COUT(2) << "Warning: GameState named '" << name << "' doesn't exist!" << std::endl;377 orxout(user_warning) << "GameState named '" << name << "' doesn't exist!" << endl; 358 378 return; 359 379 } … … 361 381 if (this->bChangingState_) 362 382 { 363 COUT(2) << "Warning: Requesting GameStates while loading/unloading a GameState is illegal! Ignoring." << std::endl;383 orxout(user_warning) << "Requesting GameStates while loading/unloading a GameState is illegal! Ignoring." << endl; 364 384 return; 365 385 } … … 372 392 if (name == lastRequestedNode->name_) 373 393 { 374 COUT(2) << "Warning: Requesting the currently active state! Ignoring." << std::endl;394 orxout(user_warning) << "Requesting the currently active state! Ignoring." << endl; 375 395 return; 376 396 } … … 403 423 404 424 if (requestedNodes.empty()) 405 COUT(1) << "Error: Requested GameState transition is not allowed. Ignoring." << std::endl;425 orxout(user_error) << "Requested GameState transition is not allowed. Ignoring." << endl; 406 426 else 407 427 this->requestedStateNodes_.insert(requestedStateNodes_.end(), requestedNodes.begin(), requestedNodes.end()); … … 425 445 this->requestState(lastRequestedNode->parent_.lock()->name_); 426 446 else 427 COUT(2) << "Warning: Can't pop the internal dummy root GameState" << std::endl;447 orxout(internal_warning) << "Can't pop the internal dummy root GameState" << endl; 428 448 } 429 449 … … 437 457 std::map<std::string, GameStateInfo>::const_iterator it = gameStateDeclarations_s.find(name); 438 458 if (it != gameStateDeclarations_s.end()) 439 COUT(1) << "Error: GameState '" << name << "' has not yet been loaded." << std::endl;459 orxout(internal_error) << "GameState '" << name << "' has not yet been loaded." << endl; 440 460 else 441 COUT(1) << "Error: Could not find GameState '" << name << "'." << std::endl;461 orxout(internal_error) << "Could not find GameState '" << name << "'." << endl; 442 462 return shared_ptr<GameState>(); 443 463 } … … 507 527 if (!GameMode::showsGraphics()) 508 528 { 529 orxout(user_status) << "Loading graphics" << endl; 530 orxout(internal_info) << "loading graphics in Game" << endl; 531 509 532 core_->loadGraphics(); 510 533 Loki::ScopeGuard graphicsUnloader = Loki::MakeObjGuard(*this, &Game::unloadGraphics); … … 524 547 } 525 548 graphicsUnloader.Dismiss(); 549 550 orxout(internal_info) << "finished loading graphics in Game" << endl; 526 551 } 527 552 } … … 531 556 if (GameMode::showsGraphics()) 532 557 { 558 orxout(user_status) << "Unloading graphics" << endl; 559 orxout(internal_info) << "unloading graphics in Game" << endl; 560 533 561 // Destroy all the GameStates that require graphics 534 562 for (GameStateMap::iterator it = constructedStates_.begin(); it != constructedStates_.end();) … … 555 583 void Game::loadState(const std::string& name) 556 584 { 585 orxout(internal_status) << "loading state '" << name << "'" << endl; 586 557 587 this->bChangingState_ = true; 558 588 LOKI_ON_BLOCK_EXIT_OBJ(*this, &Game::resetChangingState); (void)LOKI_ANONYMOUS_VARIABLE(scopeGuard); … … 577 607 void Game::unloadState(const std::string& name) 578 608 { 609 orxout(internal_status) << "unloading state '" << name << "'" << endl; 610 579 611 this->bChangingState_ = true; 580 612 try … … 589 621 catch (...) 590 622 { 591 COUT(2) << "Warning: Unloading GameState '" << name << "' threw an exception: " << Exception::handleMessage() << std::endl;592 COUT(2) << " There might be potential resource leaks involved! To avoid this, improve exception-safety." << std::endl;623 orxout(internal_warning) << "Unloading GameState '" << name << "' threw an exception: " << Exception::handleMessage() << endl; 624 orxout(internal_warning) << "There might be potential resource leaks involved! To avoid this, improve exception-safety." << endl; 593 625 } 594 626 // Check if graphics is still required -
code/trunk/src/libraries/core/Game.h
r8423 r8858 47 47 #include <boost/preprocessor/cat.hpp> 48 48 49 #include "util/ Debug.h"49 #include "util/Output.h" 50 50 #include "util/DestructionHelper.h" 51 51 #include "util/Singleton.h" … … 215 215 else 216 216 { 217 COUT(0) << "Error: Cannot declare two GameStates with the same name." << std::endl;218 COUT(0) << " Ignoring second one ('" << stateName << "')." << std::endl;217 orxout(internal_warning) << "Cannot declare two GameStates with the same name." << endl; 218 orxout(internal_warning) << "Ignoring second one ('" << stateName << "')." << endl; 219 219 } 220 220 -
code/trunk/src/libraries/core/GameState.cc
r6417 r8858 35 35 #include "GameState.h" 36 36 37 #include "util/Debug.h"38 37 #include "util/Exception.h" 39 38 #include "util/OrxAssert.h" -
code/trunk/src/libraries/core/GraphicsManager.cc
r8423 r8858 104 104 RegisterObject(GraphicsManager); 105 105 106 orxout(internal_status) << "initializing GraphicsManager..." << endl; 106 107 this->setConfigValues(); 107 108 … … 114 115 resources_.reset(new XMLFile("DefaultResources.oxr")); 115 116 resources_->setLuaSupport(false); 116 Loader::open(resources_.get() );117 Loader::open(resources_.get(), ClassTreeMask(), false); 117 118 118 119 // Only for runs in the build directory (not installed) … … 122 123 extResources_.reset(new XMLFile("resources.oxr")); 123 124 extResources_->setLuaSupport(false); 124 Loader::open(extResources_.get() );125 Loader::open(extResources_.get(), ClassTreeMask(), false); 125 126 126 127 if (bLoadRenderer) … … 129 130 this->upgradeToGraphics(); 130 131 } 132 133 orxout(internal_status) << "finished initializing GraphicsManager" << endl; 131 134 } 132 135 133 136 void GraphicsManager::destroy() 134 137 { 138 orxout(internal_status) << "destroying GraphicsManager..." << endl; 139 135 140 Loader::unload(debugOverlay_.get()); 136 141 … … 148 153 safeObjectDelete(&ogreLogger_); 149 154 safeObjectDelete(&ogreWindowEventListener_); 155 156 orxout(internal_status) << "finished destroying GraphicsManager" << endl; 150 157 } 151 158 … … 158 165 SetConfigValue(ogreLogFile_, "ogre.log") 159 166 .description("Logfile for messages from Ogre. Use \"\" to suppress log file creation."); 160 SetConfigValue(ogreLogLevelTrivial_ , 5)161 .description("Corresponding orxonox debug level for ogre Trivial");162 SetConfigValue(ogreLogLevelNormal_ , 4)163 .description("Corresponding orxonox debug level for ogre Normal");164 SetConfigValue(ogreLogLevelCritical_, 2)165 .description("Corresponding orxonox debug level for ogre Critical");166 167 } 167 168 … … 179 180 return; 180 181 182 orxout(internal_info) << "GraphicsManager upgrade to graphics" << endl; 183 181 184 // load all the required plugins for Ogre 182 185 this->loadOgrePlugins(); … … 189 192 // choose another resource group. 190 193 Ogre::ResourceGroupManager::getSingleton().initialiseAllResourceGroups(); 194 195 orxout(internal_info) << "GraphicsManager finished upgrade to graphics" << endl; 191 196 } 192 197 … … 197 202 void GraphicsManager::loadOgreRoot() 198 203 { 199 COUT(3) << "Setting up Ogre..." << std::endl;204 orxout(internal_info) << "Setting up Ogre..." << endl; 200 205 201 206 if (ogreConfigFile_.empty()) 202 207 { 203 COUT(2) << "Warning: Ogre config file set to \"\". Defaulting to config.cfg" << std::endl;208 orxout(internal_warning) << "Ogre config file set to \"\". Defaulting to config.cfg" << endl; 204 209 ModifyConfigValue(ogreConfigFile_, tset, "config.cfg"); 205 210 } 206 211 if (ogreLogFile_.empty()) 207 212 { 208 COUT(2) << "Warning: Ogre log file set to \"\". Defaulting to ogre.log" << std::endl;213 orxout(internal_warning) << "Ogre log file set to \"\". Defaulting to ogre.log" << endl; 209 214 ModifyConfigValue(ogreLogFile_, tset, "ogre.log"); 210 215 } … … 216 221 // Ogre::Root will detect that we've already created a Log 217 222 ogreLogger_ = new Ogre::LogManager(); 218 COUT(4) << "Ogre LogManager created" << std::endl;223 orxout(internal_info) << "Ogre LogManager created" << endl; 219 224 220 225 // create our own log that we can listen to 221 226 Ogre::Log *myLog; 222 227 myLog = ogreLogger_->createLog(ogreLogFilepath.string(), true, false, false); 223 COUT(4) << "Ogre Log created" << std::endl;228 orxout(internal_info) << "Ogre Log created" << endl; 224 229 225 230 myLog->setLogDetail(Ogre::LL_BOREME); 226 231 myLog->addListener(this); 227 232 228 COUT(4) << "Creating Ogre Root..." << std::endl;233 orxout(internal_info) << "Creating Ogre Root..." << endl; 229 234 230 235 // check for config file existence because Ogre displays (caught) exceptions if not … … 240 245 ogreRoot_ = new Ogre::Root("", ogreConfigFilepath.string(), ogreLogFilepath.string()); 241 246 242 COUT(3) << "Ogre set up done." << std::endl;247 orxout(internal_info) << "Ogre set up done." << endl; 243 248 } 244 249 245 250 void GraphicsManager::loadOgrePlugins() 246 251 { 252 orxout(internal_info) << "loading ogre plugins" << endl; 253 247 254 // Plugin path can have many different locations... 248 255 std::string pluginPath = specialConfig::ogrePluginsDirectory; … … 277 284 void GraphicsManager::loadRenderer() 278 285 { 279 CCOUT(4) << "Configuring Renderer" << std::endl;286 orxout(internal_info) << "GraphicsManager: Configuring Renderer" << endl; 280 287 281 288 bool updatedConfig = Core::getInstance().getOgreConfigTimestamp() > Core::getInstance().getLastLevelTimestamp(); 282 289 if (updatedConfig) 283 COUT(2) << "Ogre config file has changed, but no level was started since then. Displaying config dialogue again to verify the changes." << std::endl;290 orxout(user_info)<< "Ogre config file has changed, but no level was started since then. Displaying config dialogue again to verify the changes." << endl; 284 291 285 292 if (!ogreRoot_->restoreConfig() || updatedConfig) … … 291 298 } 292 299 293 CCOUT(4) << "Creating render window" << std::endl;300 orxout(internal_info) << "Creating render window" << endl; 294 301 295 302 this->renderWindow_ = ogreRoot_->initialise(true, "Orxonox"); … … 317 324 { 318 325 // Load debug overlay to show info about fps and tick time 319 COUT(4) << "Loading Debug Overlay..." << std::endl;326 orxout(internal_info) << "Loading Debug Overlay..." << endl; 320 327 debugOverlay_.reset(new XMLFile("debug.oxo")); 321 Loader::open(debugOverlay_.get() );328 Loader::open(debugOverlay_.get(), ClassTreeMask(), false); 322 329 } 323 330 … … 396 403 Ogre::LogMessageLevel lml, bool maskDebug, const std::string& logName) 397 404 { 398 intorxonoxLevel;405 OutputLevel orxonoxLevel; 399 406 std::string introduction; 400 407 // Do not show caught OGRE exceptions in front 401 408 if (message.find("EXCEPTION") != std::string::npos) 402 409 { 403 orxonoxLevel = OutputLevel::Debug;410 orxonoxLevel = level::internal_error; 404 411 introduction = "Ogre, caught exception: "; 405 412 } … … 409 416 { 410 417 case Ogre::LML_TRIVIAL: 411 orxonoxLevel = this->ogreLogLevelTrivial_;418 orxonoxLevel = level::verbose_more; 412 419 break; 413 420 case Ogre::LML_NORMAL: 414 orxonoxLevel = this->ogreLogLevelNormal_;421 orxonoxLevel = level::verbose; 415 422 break; 416 423 case Ogre::LML_CRITICAL: 417 orxonoxLevel = this->ogreLogLevelCritical_;424 orxonoxLevel = level::internal_warning; 418 425 break; 419 426 default: 420 orxonoxLevel = 0;427 orxonoxLevel = level::debug_output; 421 428 } 422 429 introduction = "Ogre: "; 423 430 } 424 OutputHandler::getOutStream(orxonoxLevel) 425 << introduction << message << std::endl;431 432 orxout(orxonoxLevel, context::ogre) << introduction << message << endl; 426 433 } 427 434 -
code/trunk/src/libraries/core/GraphicsManager.h
r8706 r8858 134 134 std::string ogrePlugins_; //!< Comma separated list of all plugins to load 135 135 std::string ogreLogFile_; //!< log filename for Ogre log messages 136 int ogreLogLevelTrivial_; //!< Corresponding Orxonox debug level for LL_TRIVIAL137 int ogreLogLevelNormal_; //!< Corresponding Orxonox debug level for LL_NORMAL138 int ogreLogLevelCritical_; //!< Corresponding Orxonox debug level for LL_CRITICAL139 136 140 137 /// Helper object that executes the surrogate destructor destroy() -
code/trunk/src/libraries/core/Identifier.cc
r8267 r8858 130 130 { 131 131 // If no: We have to store the information and initialize the Identifier 132 COUT(4) << "*** ClassIdentifier: Register Class in " << this->getName() << "-Singleton -> Initialize Singleton." << std::endl;132 orxout(verbose, context::identifier) << "Register Class in ClassIdentifier<" << this->getName() << ">-Singleton -> Initialize Singleton." << endl; 133 133 if (bRootClass) 134 134 this->initialize(0); // If a class is derived from two interfaces, the second interface might think it's derived from the first because of the order of constructor-calls. Thats why we set parents to zero in that case. … … 144 144 void Identifier::initialize(std::set<const Identifier*>* parents) 145 145 { 146 COUT(4) << "*** Identifier: Initialize " << this->name_ << "-Singleton." << std::endl;146 orxout(verbose, context::identifier) << "Initialize ClassIdentifier<" << this->name_ << ">-Singleton." << endl; 147 147 this->bCreatedOneObject_ = true; 148 148 … … 191 191 void Identifier::createClassHierarchy() 192 192 { 193 COUT(3) << "*** Identifier: Create class-hierarchy" << std::endl;193 orxout(internal_status) << "Create class-hierarchy" << endl; 194 194 Identifier::startCreatingHierarchy(); 195 195 for (std::map<std::string, Identifier*>::const_iterator it = Identifier::getStringIdentifierMap().begin(); it != Identifier::getStringIdentifierMap().end(); ++it) … … 203 203 } 204 204 Identifier::stopCreatingHierarchy(); 205 COUT(3) << "*** Identifier: Finished class-hierarchy creation" << std::endl;205 orxout(internal_status) << "Finished class-hierarchy creation" << endl; 206 206 } 207 207 … … 242 242 else 243 243 { 244 COUT(1) << "An error occurred in Identifier.cc:" << std::endl;245 COUT(1) << "Error: Cannot fabricate an object of type '" << this->name_ << "'. Class has no factory." << std::endl;246 COUT(1) << "Aborting..." << std::endl;244 orxout(user_error) << "An error occurred in Identifier.cc:" << endl; 245 orxout(user_error) << "Cannot fabricate an object of type '" << this->name_ << "'. Class has no factory." << endl; 246 orxout(user_error) << "Aborting..." << endl; 247 247 abort(); 248 248 return 0; … … 404 404 if (it != this->configValues_.end()) 405 405 { 406 COUT(2) << "Warning: Overwriting config-value with name " << varname << " in class " << this->getName() << '.' << std::endl;406 orxout(internal_warning) << "Overwriting config-value with name " << varname << " in class " << this->getName() << '.' << endl; 407 407 delete (it->second); 408 408 } … … 450 450 if (it != this->xmlportParamContainers_.end()) 451 451 { 452 COUT(2) << "Warning: Overwriting XMLPortParamContainer in class " << this->getName() << '.' << std::endl;452 orxout(internal_warning) << "Overwriting XMLPortParamContainer in class " << this->getName() << '.' << endl; 453 453 delete (it->second); 454 454 } … … 481 481 if (it != this->xmlportObjectContainers_.end()) 482 482 { 483 COUT(2) << "Warning: Overwriting XMLPortObjectContainer in class " << this->getName() << '.' << std::endl;483 orxout(internal_warning) << "Overwriting XMLPortObjectContainer in class " << this->getName() << '.' << endl; 484 484 delete (it->second); 485 485 } -
code/trunk/src/libraries/core/Identifier.h
r8706 r8858 64 64 for (Iterator<BaseObject> it = objects.begin(); it != objects.end(); ++it) // iterate through the objects 65 65 ++count; 66 COUT(0) << count << std::endl;// prints "2" because we created 2 instances of MyClass so far66 orxout() << count << endl; // prints "2" because we created 2 instances of MyClass so far 67 67 68 68 … … 89 89 #include <loki/TypeTraits.h> 90 90 91 #include "util/ Debug.h"91 #include "util/Output.h" 92 92 #include "MetaObjectList.h" 93 93 #include "ObjectList.h" … … 405 405 if (ClassIdentifier<T>::classIdentifier_s == proposal) 406 406 { 407 COUT(4) << "*** Identifier: Requested Identifier for " << name << " was not yet existing and got created." << std::endl;407 orxout(verbose, context::identifier) << "Requested Identifier for " << name << " was not yet existing and got created." << endl; 408 408 } 409 409 else 410 410 { 411 COUT(4) << "*** Identifier: Requested Identifier for " << name << " was already existing and got assigned." << std::endl;411 orxout(verbose, context::identifier) << "Requested Identifier for " << name << " was already existing and got assigned." << endl; 412 412 } 413 413 } … … 423 423 { 424 424 if (bRootClass) 425 COUT(5) << "*** Register Root-Object: " << className << std::endl;425 orxout(verbose, context::object_list) << "Register Root-Object: " << className << endl; 426 426 else 427 COUT(5) << "*** Register Object: " << className << std::endl;427 orxout(verbose, context::object_list) << "Register Object: " << className << endl; 428 428 429 429 object->identifier_ = this; … … 444 444 else 445 445 { 446 COUT(5) << "*** ClassIdentifier: Added object to " << this->getName() << "-list." << std::endl;446 orxout(verbose, context::object_list) << "Added object to " << this->getName() << "-list." << endl; 447 447 object->metaList_->add(this->objects_, this->objects_->add(new ObjectListElement<T>(object))); 448 448 -
code/trunk/src/libraries/core/Language.cc
r7401 r8858 35 35 36 36 #include <fstream> 37 #include "util/ Debug.h"37 #include "util/Output.h" 38 38 #include "util/StringUtils.h" 39 39 #include "Core.h" … … 131 131 } 132 132 133 COUT(2) << "Warning: Language entry " << label << " is duplicate in " << getFilename(this->defaultLanguage_) << '!' << std::endl;133 orxout(internal_warning, context::language) << "Language entry " << label << " is duplicate in " << getFilename(this->defaultLanguage_) << '!' << endl; 134 134 return it->second; 135 135 } … … 142 142 void Language::addEntry(const LanguageEntryLabel& label, const std::string& entry) 143 143 { 144 COUT(5) << "Language: Called addEntry with\n label: " << label << "\n entry: " << entry << std::endl;144 orxout(verbose, context::language) << "Called addEntry with" << '\n' << "label: " << label << '\n' << "entry: " << entry << endl; 145 145 std::map<std::string, LanguageEntry*>::const_iterator it = this->languageEntries_.find(label); 146 146 if (it == this->languageEntries_.end()) … … 179 179 { 180 180 // Uh, oh, an undefined entry was requested: return the default string 181 COUT(2) << "Warning: Language entry \"" << label << "\" not found!" << std::endl;181 orxout(internal_warning, context::language) << "Language entry \"" << label << "\" not found!" << endl; 182 182 return this->defaultLocalisation_; 183 183 } … … 201 201 void Language::readDefaultLanguageFile() 202 202 { 203 COUT(4) << "Read default language file." << std::endl;203 orxout(internal_info, context::language) << "Read default language file." << endl; 204 204 205 205 const std::string& filepath = PathConfig::getConfigPathString() + getFilename(this->defaultLanguage_); … … 216 216 if (!file.is_open()) 217 217 { 218 COUT(1) << "An error occurred in Language.cc:" << std::endl;219 COUT(1) << "Error: Couldn't open file " << getFilename(this->defaultLanguage_) << " to read the default language entries!" << std::endl;218 orxout(internal_error, context::language) << "An error occurred in Language.cc:" << endl; 219 orxout(internal_error, context::language) << "Couldn't open file " << getFilename(this->defaultLanguage_) << " to read the default language entries!" << endl; 220 220 return; 221 221 } … … 237 237 else 238 238 { 239 COUT(2) << "Warning: Invalid language entry \"" << lineString << "\" in " << getFilename(this->defaultLanguage_) << std::endl;239 orxout(internal_warning, context::language) << "Invalid language entry \"" << lineString << "\" in " << getFilename(this->defaultLanguage_) << endl; 240 240 } 241 241 } … … 250 250 void Language::readTranslatedLanguageFile() 251 251 { 252 COUT(4) << "Read translated language file (" << Core::getInstance().getLanguage() << ")." << std::endl;252 orxout(internal_info, context::language) << "Read translated language file (" << Core::getInstance().getLanguage() << ")." << endl; 253 253 254 254 const std::string& filepath = PathConfig::getConfigPathString() + getFilename(Core::getInstance().getLanguage()); … … 260 260 if (!file.is_open()) 261 261 { 262 COUT(1) << "An error occurred in Language.cc:" << std::endl;263 COUT(1) << "Error: Couldn't open file " << getFilename(Core::getInstance().getLanguage()) << " to read the translated language entries!" << std::endl;262 orxout(internal_error, context::language) << "An error occurred in Language.cc:" << endl; 263 orxout(internal_error, context::language) << "Couldn't open file " << getFilename(Core::getInstance().getLanguage()) << " to read the translated language entries!" << endl; 264 264 Core::getInstance().resetLanguage(); 265 COUT(3) << "Info: Reset language to " << this->defaultLanguage_ << '.' << std::endl;265 orxout(internal_info, context::language) << "Reset language to " << this->defaultLanguage_ << '.' << endl; 266 266 return; 267 267 } … … 291 291 else 292 292 { 293 COUT(2) << "Warning: Invalid language entry \"" << lineString << "\" in " << getFilename(Core::getInstance().getLanguage()) << std::endl;293 orxout(internal_warning, context::language) << "Invalid language entry \"" << lineString << "\" in " << getFilename(Core::getInstance().getLanguage()) << endl; 294 294 } 295 295 } … … 304 304 void Language::writeDefaultLanguageFile() const 305 305 { 306 COUT(4) << "Language: Write default language file." << std::endl;306 orxout(verbose, context::language) << "Write default language file." << endl; 307 307 308 308 const std::string& filepath = PathConfig::getConfigPathString() + getFilename(this->defaultLanguage_); … … 314 314 if (!file.is_open()) 315 315 { 316 COUT(1) << "An error occurred in Language.cc:" << std::endl;317 COUT(1) << "Error: Couldn't open file " << getFilename(this->defaultLanguage_) << " to write the default language entries!" << std::endl;316 orxout(internal_error, context::language) << "An error occurred in Language.cc:" << endl; 317 orxout(internal_error, context::language) << "Couldn't open file " << getFilename(this->defaultLanguage_) << " to write the default language entries!" << endl; 318 318 return; 319 319 } … … 322 322 for (std::map<std::string, LanguageEntry*>::const_iterator it = this->languageEntries_.begin(); it != this->languageEntries_.end(); ++it) 323 323 { 324 file << it->second->getLabel() << '=' << it->second->getDefault() << std::endl;324 file << it->second->getLabel() << '=' << it->second->getDefault() << endl; 325 325 } 326 326 -
code/trunk/src/libraries/core/Language.h
r7401 r8858 51 51 - Get the localisation of the entry in the configured language: 52 52 @code 53 std::cout << Language::getInstance()->getLocalisation("name of the entry") << std::endl;53 orxout() << Language::getInstance()->getLocalisation("name of the entry") << endl; 54 54 @endcode 55 55 … … 58 58 int age = 20; 59 59 AddLanguageEntry("user_age", "Age"); 60 std::cout << GetLocalisation("user_age") << ": " << age << std::endl;60 orxout() << GetLocalisation("user_age") << ": " << age << endl; 61 61 @endcode 62 62 -
code/trunk/src/libraries/core/Loader.cc
r8108 r8858 33 33 #include <boost/scoped_ptr.hpp> 34 34 35 #include "util/ Debug.h"35 #include "util/Output.h" 36 36 #include "util/Exception.h" 37 37 #include "util/StringUtils.h" … … 49 49 ClassTreeMask Loader::currentMask_s; 50 50 51 bool Loader::open(const XMLFile* file, const ClassTreeMask& mask )51 bool Loader::open(const XMLFile* file, const ClassTreeMask& mask, bool bVerbose) 52 52 { 53 53 Loader::add(file, mask); 54 return Loader::load(file, mask );54 return Loader::load(file, mask, bVerbose); 55 55 } 56 56 … … 93 93 @param mask 94 94 A ClassTreeMask, which defines which types of classes are loaded and which aren't. 95 @param verbose95 @param bVerbose 96 96 Whether the loader is verbose (prints its progress in a low output level) or not. 97 97 @return 98 98 Returns true if successful. 99 99 */ 100 bool Loader::load(const ClassTreeMask& mask, bool verbose)100 bool Loader::load(const ClassTreeMask& mask, bool bVerbose) 101 101 { 102 102 bool success = true; 103 103 for (std::vector<std::pair<const XMLFile*, ClassTreeMask> >::iterator it = Loader::files_s.begin(); it != Loader::files_s.end(); ++it) 104 if (!Loader::load(it->first, it->second * mask, verbose))104 if (!Loader::load(it->first, it->second * mask, bVerbose)) 105 105 success = false; 106 106 … … 124 124 @param mask 125 125 A ClassTreeMask, which defines which types of classes are reloaded and which aren't. 126 @param verbose126 @param bVerbose 127 127 Whether the loader is verbose (prints its progress in a low output level) or not. 128 128 @return 129 129 Returns true if successful. 130 130 */ 131 bool Loader::reload(const ClassTreeMask& mask, bool verbose)131 bool Loader::reload(const ClassTreeMask& mask, bool bVerbose) 132 132 { 133 133 Loader::unload(mask); 134 return Loader::load(mask, verbose);134 return Loader::load(mask, bVerbose); 135 135 } 136 136 … … 142 142 @param mask 143 143 A ClassTreeMask, which defines which types of classes are loaded and which aren't. 144 @param verbose144 @param bVerbose 145 145 Whether the loader is verbose (prints its progress in a low output level) or not. 146 146 @param bRemoveLuaTags … … 149 149 Returns true if successful. 150 150 */ 151 bool Loader::load(const XMLFile* file, const ClassTreeMask& mask, bool verbose, bool bRemoveLuaTags)151 bool Loader::load(const XMLFile* file, const ClassTreeMask& mask, bool bVerbose, bool bRemoveLuaTags) 152 152 { 153 153 if (!file) … … 170 170 if (info == NULL) 171 171 { 172 COUT(1) << "Error: Could not find XML file '" << file->getFilename() << "'." << std::endl;172 orxout(user_error, context::loader) << "Could not find XML file '" << file->getFilename() << "'." << endl; 173 173 return false; 174 174 } … … 187 187 try 188 188 { 189 if( verbose)190 { 191 COUT(0) << "Start loading " << file->getFilename() << "..." << std::endl;192 COUT(3) << "Mask: " << Loader::currentMask_s << std::endl;193 } 194 else 195 { 196 COUT(4) << "Start loading " << file->getFilename() << "..." << std::endl;197 COUT(4) << "Mask: " << Loader::currentMask_s << std::endl;189 if(bVerbose) 190 { 191 orxout(user_info) << "Start loading " << file->getFilename() << "..." << endl; 192 orxout(internal_info, context::loader) << "Mask: " << Loader::currentMask_s << endl; 193 } 194 else 195 { 196 orxout(verbose, context::loader) << "Start loading " << file->getFilename() << "..." << endl; 197 orxout(verbose_more, context::loader) << "Mask: " << Loader::currentMask_s << endl; 198 198 } 199 199 … … 208 208 rootElement.InsertEndChild(*child); 209 209 210 COUT(4) << " creating root-namespace..." << std::endl;210 orxout(verbose, context::loader) << " creating root-namespace..." << endl; 211 211 Namespace* rootNamespace = new Namespace(0); 212 212 rootNamespace->setLoaderIndentation(" "); … … 216 216 rootNamespace->XMLPort(rootElement, XMLPort::LoadObject); 217 217 218 if( verbose)219 COUT(0) << "Finished loading " << file->getFilename() << '.' << std::endl;220 else 221 COUT(4) << "Finished loading " << file->getFilename() << '.' << std::endl;222 223 COUT(4) << "Namespace-tree:" << std::endl << rootNamespace->toString(" ") << std::endl;218 if(bVerbose) 219 orxout(user_info) << "Finished loading " << file->getFilename() << '.' << endl; 220 else 221 orxout(verbose, context::loader) << "Finished loading " << file->getFilename() << '.' << endl; 222 223 orxout(verbose, context::loader) << "Namespace-tree:" << '\n' << rootNamespace->toString(" ") << endl; 224 224 225 225 return true; … … 227 227 catch (ticpp::Exception& ex) 228 228 { 229 COUT(1) << std::endl;230 COUT(1) << "An XML-error occurred in Loader.cc while loading " << file->getFilename() << ':' << std::endl;231 COUT(1) << ex.what() << std::endl;232 COUT(1) << "Loading aborted." << std::endl;229 orxout(user_error, context::loader) << endl; 230 orxout(user_error, context::loader) << "An XML-error occurred in Loader.cc while loading " << file->getFilename() << ':' << endl; 231 orxout(user_error, context::loader) << ex.what() << endl; 232 orxout(user_error, context::loader) << "Loading aborted." << endl; 233 233 return false; 234 234 } 235 235 catch (Exception& ex) 236 236 { 237 COUT(1) << std::endl;238 COUT(1) << "A loading-error occurred in Loader.cc while loading " << file->getFilename() << ':' << std::endl;239 COUT(1) << ex.what() << std::endl;240 COUT(1) << "Loading aborted." << std::endl;237 orxout(user_error, context::loader) << endl; 238 orxout(user_error, context::loader) << "A loading-error occurred in Loader.cc while loading " << file->getFilename() << ':' << endl; 239 orxout(user_error, context::loader) << ex.what() << endl; 240 orxout(user_error, context::loader) << "Loading aborted." << endl; 241 241 return false; 242 242 } 243 243 catch (...) 244 244 { 245 COUT(1) << std::endl;246 COUT(1) << "An error occurred in Loader.cc while loading " << file->getFilename() << ':' << std::endl;247 COUT(1) << Exception::handleMessage() << std::endl;248 COUT(1) << "Loading aborted." << std::endl;245 orxout(user_error, context::loader) << endl; 246 orxout(user_error, context::loader) << "An error occurred in Loader.cc while loading " << file->getFilename() << ':' << endl; 247 orxout(user_error, context::loader) << Exception::handleMessage() << endl; 248 orxout(user_error, context::loader) << "Loading aborted." << endl; 249 249 return false; 250 250 } … … 271 271 @param mask 272 272 A ClassTreeMask, which defines which types of classes are reloaded and which aren't. 273 @param verbose273 @param bVerbose 274 274 Whether the loader is verbose (prints its progress in a low output level) or not. 275 275 @return 276 276 Returns true if successful. 277 277 */ 278 bool Loader::reload(const XMLFile* file, const ClassTreeMask& mask, bool verbose)278 bool Loader::reload(const XMLFile* file, const ClassTreeMask& mask, bool bVerbose) 279 279 { 280 280 Loader::unload(file, mask); 281 return Loader::load(file, mask, verbose);281 return Loader::load(file, mask, bVerbose); 282 282 } 283 283 … … 337 337 if (!expectedValue) 338 338 { 339 COUT(2) << "Warning: Error in level file" << std::endl;339 orxout(internal_error, context::loader) << "Error in level file" << endl; 340 340 // TODO: error handling 341 return false; 341 return false; 342 342 } 343 343 } -
code/trunk/src/libraries/core/Loader.h
r8079 r8858 51 51 { 52 52 public: 53 static bool open(const XMLFile* file, const ClassTreeMask& mask = ClassTreeMask() );53 static bool open(const XMLFile* file, const ClassTreeMask& mask = ClassTreeMask(), bool bVerbose = true); 54 54 static void close(); 55 55 static void close(const XMLFile* file); … … 58 58 static void remove(const XMLFile* file); 59 59 60 static bool load(const ClassTreeMask& mask = ClassTreeMask(), bool verbose = true);60 static bool load(const ClassTreeMask& mask = ClassTreeMask(), bool bVerbose = true); 61 61 static void unload(const ClassTreeMask& mask = ClassTreeMask()); 62 static bool reload(const ClassTreeMask& mask = ClassTreeMask(), bool verbose = true);62 static bool reload(const ClassTreeMask& mask = ClassTreeMask(), bool bVerbose = true); 63 63 64 64 static bool load(const XMLFile* file, const ClassTreeMask& mask = ClassTreeMask(), 65 bool verbose = true, bool bRemoveLuaTags = false);65 bool bVerbose = true, bool bRemoveLuaTags = false); 66 66 static void unload(const XMLFile* file, const ClassTreeMask& mask = ClassTreeMask()); 67 static bool reload(const XMLFile* file, const ClassTreeMask& mask = ClassTreeMask(), bool verbose = true);67 static bool reload(const XMLFile* file, const ClassTreeMask& mask = ClassTreeMask(), bool bVerbose = true); 68 68 69 69 static std::string replaceLuaTags(const std::string& text); -
code/trunk/src/libraries/core/LuaState.cc
r8729 r8858 37 37 #include <loki/ScopeGuard.h> 38 38 39 #include "util/ Debug.h"39 #include "util/Output.h" 40 40 #include "util/Exception.h" 41 41 #include "Resource.h" … … 96 96 else 97 97 { 98 COUT(2) << "LuaState: Cannot include file '" << filename << "' (not found)." << std::endl;98 orxout(internal_warning, context::lua) << "LuaState: Cannot include file '" << filename << "' (not found)." << endl; 99 99 return false; 100 100 } … … 136 136 else 137 137 { 138 COUT(2) << "LuaState: Cannot do file '" << filename << "' (not found)." << std::endl;138 orxout(internal_warning, context::lua) << "LuaState: Cannot do file '" << filename << "' (not found)." << endl; 139 139 return false; 140 140 } … … 176 176 { 177 177 case LUA_ERRSYNTAX: // Syntax error 178 COUT(1) << "Lua syntax error: " << lua_tostring(luaState_, -1) << std::endl;178 orxout(internal_error, context::lua) << "Lua syntax error: " << lua_tostring(luaState_, -1) << endl; 179 179 break; 180 180 case LUA_ERRMEM: // Memory allocation error 181 COUT(1) << "Lua memory allocation error: Consult your dentist immediately!" << std::endl;181 orxout(internal_error, context::lua) << "Lua memory allocation error: Consult your dentist immediately!" << endl; 182 182 break; 183 183 } … … 200 200 std::string errorString = lua_tostring(this->luaState_, -1); 201 201 if (errorString.find("Error propagation") == std::string::npos) 202 COUT(1) << "Lua runtime error: " << errorString << std::endl;202 orxout(internal_error, context::lua) << "Lua runtime error: " << errorString << endl; 203 203 } 204 204 break; 205 205 case LUA_ERRERR: // Error in the error handler 206 COUT(1) << "Lua error in error handler. No message available." << std::endl;206 orxout(internal_error, context::lua) << "Lua error in error handler. No message available." << endl; 207 207 break; 208 208 case LUA_ERRMEM: // Memory allocation error 209 COUT(1) << "Lua memory allocation error: Consult your dentist immediately!" << std::endl;209 orxout(internal_error, context::lua) << "Lua memory allocation error: Consult your dentist immediately!" << endl; 210 210 break; 211 211 } … … 236 236 } 237 237 238 void LuaState::luaLog(unsigned int level, const std::string& message) 239 { 240 OutputHandler::getOutStream(level) << message << std::endl; 238 void LuaState::luaOutput(OutputLevel level, const std::string& context, const std::string& message) 239 { 240 orxout(level, registerContext(context)) << message << endl; 241 } 242 243 void LuaState::luaOutput(OutputLevel level, const std::string& message) 244 { 245 orxout(level, context::lua) << message << endl; 246 } 247 248 void LuaState::luaOutput(const std::string& message) 249 { 250 orxout(debug_output, context::lua) << message << endl; 241 251 } 242 252 … … 288 298 if (it->first == name || it->second == function) 289 299 { 290 COUT(2) << "Warning: Trying to add a Tolua interface with the same name or function." << std::endl;300 orxout(internal_warning, context::lua) << "Trying to add a Tolua interface with the same name or function." << endl; 291 301 return true; 292 302 } … … 307 317 if (it == getToluaInterfaces().end()) 308 318 { 309 COUT(2) << "Warning: Cannot remove Tolua interface '" << name << "': Not found" << std::endl;319 orxout(internal_warning, context::lua) << "Cannot remove Tolua interface '" << name << "': Not found" << endl; 310 320 return true; 311 321 } -
code/trunk/src/libraries/core/LuaState.h
r8729 r8858 49 49 #include <boost/shared_ptr.hpp> 50 50 51 #include "util/Output.h" 52 51 53 namespace orxonox // tolua_export 52 54 { // tolua_export … … 83 85 84 86 void luaPrint(const std::string& str); // tolua_export 85 void luaLog(unsigned int level, const std::string& message); // tolua_export 87 void luaOutput(orxonox::level::OutputLevel level, const std::string& context, const std::string& message); // tolua_export 88 void luaOutput(orxonox::level::OutputLevel level, const std::string& message); // tolua_export 89 void luaOutput(const std::string& message); // tolua_export 86 90 bool fileExists(const std::string& filename); // tolua_export 87 91 std::string getSourceCode(const std::string& filename); // tolua_export -
code/trunk/src/libraries/core/MetaObjectList.cc
r5738 r8858 34 34 #include "MetaObjectList.h" 35 35 36 #include "util/ Debug.h"36 #include "util/Output.h" 37 37 #include "Identifier.h" 38 38 #include "ObjectListBase.h" … … 48 48 MetaObjectListElement::~MetaObjectListElement() 49 49 { 50 COUT(5) << "*** MetaObjectList: Removing Object from " << this->list_->getIdentifier()->getName() << "-list." << std::endl;50 orxout(verbose, context::object_list) << "Removing Object from " << this->list_->getIdentifier()->getName() << "-list." << endl; 51 51 this->list_->notifyIterators(this->element_->objectBase_); 52 52 -
code/trunk/src/libraries/core/NamespaceNode.cc
r6417 r8858 28 28 29 29 #include "NamespaceNode.h" 30 #include "util/ Debug.h"30 #include "util/Output.h" 31 31 32 32 namespace orxonox … … 70 70 if (this->bRoot_) 71 71 { 72 COUT(2) << "Warning: Can't go to enclosing namespace with '..' operator in namespace " << this->name_ << ", namespace is root." << std::endl;72 orxout(internal_warning) << "Can't go to enclosing namespace with '..' operator in namespace " << this->name_ << ", namespace is root." << endl; 73 73 nodes = this->getNodeRelative(secondPart); 74 74 } 75 75 else if (!this->parent_) 76 76 { 77 COUT(2) << "Warning: Can't go to enclosing namespace with '..' operator in namespace " << this->name_ << ", no parent namespace set." << std::endl;77 orxout(internal_warning) << "Can't go to enclosing namespace with '..' operator in namespace " << this->name_ << ", no parent namespace set." << endl; 78 78 nodes = this->getNodeRelative(secondPart); 79 79 } … … 91 91 if (it->second->isHidden()) 92 92 { 93 COUT(2) << "Warning: Subnamespace '" << firstPart << "' in namespace '" << this->name_ << "' is hidden and can't be accessed." << std::endl;93 orxout(internal_warning) << "Subnamespace '" << firstPart << "' in namespace '" << this->name_ << "' is hidden and can't be accessed." << endl; 94 94 nodes.insert(this); 95 95 } … … 115 115 if (!bFoundMatchingNamespace) 116 116 { 117 COUT(2) << "Warning: No file included with name '" << firstPart.substr(1, std::string::npos) << "' at this part of the level file, using parent namespace instead." << std::endl;117 orxout(internal_warning) << "No file included with name '" << firstPart.substr(1, std::string::npos) << "' at this part of the level file, using parent namespace instead." << endl; 118 118 nodes = this->getNodeRelative(secondPart); 119 119 } -
code/trunk/src/libraries/core/OrxonoxClass.cc
r7849 r8858 60 60 { 61 61 // if (!this->requestedDestruction_) 62 // COUT(2) << "Warning: Destroyed object without destroy() (" << this->getIdentifier()->getName() << ')' << std::endl;62 // orxout(internal_warning) << "Destroyed object without destroy() (" << this->getIdentifier()->getName() << ')' << endl; 63 63 64 64 assert(this->referenceCount_ <= 0); -
code/trunk/src/libraries/core/OrxonoxClass.h
r8729 r8858 49 49 #include <vector> 50 50 #include "Super.h" 51 52 /**53 @def CCOUT54 Acts almost exactly like COUT(x), but prepends "ClassName: "55 */56 #define CCOUT(level) \57 COUT(level) << this->getIdentifier()->getName() << ": "58 51 59 52 namespace orxonox -
code/trunk/src/libraries/core/PathConfig.cc
r8729 r8858 51 51 52 52 #include "SpecialConfig.h" 53 #include "util/ Debug.h"53 #include "util/Output.h" 54 54 #include "util/Exception.h" 55 55 #include "CommandLineParser.h" … … 137 137 if (bf::exists(executablePath_ / "orxonox_dev_build.keep_me")) 138 138 { 139 COUT(1) << "Running from the build tree." << std::endl;139 orxout(internal_info) << "Running from the build tree." << endl; 140 140 PathConfig::bBuildDirectoryRun_ = true; 141 141 modulePath_ = specialConfig::moduleDevDirectory; … … 247 247 if (bf::create_directories(it->first)) // function may not return true at all (bug?) 248 248 { 249 COUT(4) << "Created " << it->second << " directory" << std::endl;249 orxout(internal_info) << "Created " << it->second << " directory" << endl; 250 250 } 251 251 } -
code/trunk/src/libraries/core/SubclassIdentifier.h
r7401 r8858 69 69 70 70 #include <cstdlib> 71 #include "util/ Debug.h"71 #include "util/Output.h" 72 72 #include "Identifier.h" 73 73 … … 119 119 if (!identifier || !identifier->isA(ClassIdentifier<T>::getIdentifier())) 120 120 { 121 COUT(1) << "An error occurred in SubclassIdentifier (Identifier.h):" << std::endl;121 orxout(internal_error) << "An error occurred in SubclassIdentifier (Identifier.h):" << endl; 122 122 if (identifier) 123 123 { 124 COUT(1) << "Error: Class " << identifier->getName() << " is not a " << ClassIdentifier<T>::getIdentifier()->getName() << '!' << std::endl;125 COUT(1) << "Error: SubclassIdentifier<" << ClassIdentifier<T>::getIdentifier()->getName() << "> = Class(" << identifier->getName() << ") is forbidden." << std::endl;124 orxout(internal_error) << "Class " << identifier->getName() << " is not a " << ClassIdentifier<T>::getIdentifier()->getName() << '!' << endl; 125 orxout(internal_error) << "SubclassIdentifier<" << ClassIdentifier<T>::getIdentifier()->getName() << "> = Class(" << identifier->getName() << ") is forbidden." << endl; 126 126 } 127 127 else 128 128 { 129 COUT(1) << "Error: Can't assign NULL identifier" << std::endl;129 orxout(internal_error) << "Can't assign NULL identifier" << endl; 130 130 } 131 131 } … … 177 177 if (this->identifier_) 178 178 { 179 COUT(1) << "An error occurred in SubclassIdentifier (Identifier.h):" << std::endl;180 COUT(1) << "Error: Class " << this->identifier_->getName() << " is not a " << ClassIdentifier<T>::getIdentifier()->getName() << '!' << std::endl;181 COUT(1) << "Error: Couldn't fabricate a new Object." << std::endl;179 orxout(user_error) << "An error occurred in SubclassIdentifier (Identifier.h):" << endl; 180 orxout(user_error) << "Class " << this->identifier_->getName() << " is not a " << ClassIdentifier<T>::getIdentifier()->getName() << '!' << endl; 181 orxout(user_error) << "Couldn't fabricate a new Object." << endl; 182 182 } 183 183 else 184 184 { 185 COUT(1) << "An error occurred in SubclassIdentifier (Identifier.h):" << std::endl;186 COUT(1) << "Error: Couldn't fabricate a new Object - Identifier is undefined." << std::endl;187 } 188 189 COUT(1) << "Aborting..." << std::endl;185 orxout(user_error) << "An error occurred in SubclassIdentifier (Identifier.h):" << endl; 186 orxout(user_error) << "Couldn't fabricate a new Object - Identifier is undefined." << endl; 187 } 188 189 orxout(user_error) << "Aborting..." << endl; 190 190 abort(); 191 191 return 0; -
code/trunk/src/libraries/core/Super.h
r8729 r8858 73 73 74 74 #include "CorePrereqs.h" 75 #include "util/ Debug.h"75 #include "util/Output.h" 76 76 77 77 /////////////////////// … … 114 114 if (!((ClassIdentifier<T>*)(*it))->superFunctionCaller_##functionname##_) \ 115 115 { \ 116 COUT(5) << "Added SuperFunctionCaller for " << #functionname << ": " << ClassIdentifier<T>::getIdentifier()->getName() << " <- " << ((ClassIdentifier<T>*)(*it))->getName() << std::endl; \116 orxout(verbose, context::super) << "Added SuperFunctionCaller for " << #functionname << ": " << ClassIdentifier<T>::getIdentifier()->getName() << " <- " << ((ClassIdentifier<T>*)(*it))->getName() << endl; \ 117 117 ((ClassIdentifier<T>*)(*it))->superFunctionCaller_##functionname##_ = new SuperFunctionClassCaller_##functionname <T>; \ 118 118 } \ … … 184 184 { 185 185 // Add the SuperFunctionCaller 186 COUT(5) << "adding functionpointer to " << ((ClassIdentifier<T>*)(*it))->getName() << std::endl;186 orxout(verbose, context::super) << "adding functionpointer to " << ((ClassIdentifier<T>*)(*it))->getName() << endl; 187 187 ((ClassIdentifier<T>*)(*it))->superFunctionCaller_##functionname##_ = new SuperFunctionClassCaller_##functionname <T>; 188 188 } -
code/trunk/src/libraries/core/Template.cc
r7163 r8858 32 32 #include <tinyxml/ticpp.h> 33 33 34 #include "util/ Debug.h"34 #include "util/Output.h" 35 35 #include "CoreIncludes.h" 36 36 #include "XMLPort.h" … … 88 88 it = Template::getTemplateMap().find(this->getName()); 89 89 if (it != Template::getTemplateMap().end()) 90 COUT(2) << "Warning: Template with name \"" << this->getName() << "\" already exists." << std::endl;90 orxout(internal_warning, context::templates) << "Template with name \"" << this->getName() << "\" already exists." << endl; 91 91 else 92 92 Template::getTemplateMap()[this->getName()] = this; … … 117 117 else 118 118 { 119 COUT(2) << "Warning: Linking from " << this->getName() << " to " << this->link_ << " leads to an infinite loop. Returning own element." << std::endl;119 orxout(internal_warning, context::templates) << "Linking from \"" << this->getName() << "\" to \"" << this->link_ << "\" leads to an infinite loop. Returning own element." << endl; 120 120 } 121 121 } 122 122 else 123 123 { 124 COUT(2) << "Warning: " << this->link_ << " is not an existing Template name. Returning own element." << std::endl;124 orxout(internal_warning, context::templates) << '"' << this->link_ << "\" is not an existing Template name. Returning own element." << endl; 125 125 } 126 126 } … … 142 142 if (!object->isA(this->baseclassIdentifier_)) 143 143 { 144 COUT(1) << "Error: Can't apply template (name: " << this->getName() << "), object (name: " << object->getName() << ", class: " << object->getIdentifier()->getName() << ") is not a " << this->baseclassIdentifier_->getName() << std::endl;144 orxout(internal_error, context::templates) << "Can't apply template (name: " << this->getName() << "), object (name: " << object->getName() << ", class: " << object->getIdentifier()->getName() << ") is not a " << this->baseclassIdentifier_->getName() << endl; 145 145 return; 146 146 } 147 147 } 148 148 149 COUT(4) << object->getLoaderIndentation() << " aplying Template \"" << this->getName() << "\"..." << std::endl;149 orxout(verbose, context::templates) << object->getLoaderIndentation() << " aplying Template \"" << this->getName() << "\"..." << endl; 150 150 151 151 Element temp = &const_cast<TiXmlElement&>(this->getXMLElement()); … … 170 170 else 171 171 { 172 COUT(2) << "Warning: Template with name " << name << " doesn't exist." << std::endl;172 orxout(internal_warning, context::templates) << "Template with name " << name << " doesn't exist." << endl; 173 173 return 0; 174 174 } -
code/trunk/src/libraries/core/WeakPtr.h
r8079 r8858 65 65 void myCallback() // definition of the callback function 66 66 { 67 COUT(0) << "Object destroyed" << std::endl;67 orxout() << "Object destroyed" << endl; 68 68 } 69 69 -
code/trunk/src/libraries/core/XMLPort.cc
r7163 r8858 64 64 if (!this->sectionname_.empty()) 65 65 { 66 COUT(2) << object->getLoaderIndentation() << "Warning: '" << child->Value() << "' is not a valid classname." << std::endl;66 orxout(internal_warning, context::xml) << object->getLoaderIndentation() << "'" << child->Value() << "' is not a valid classname." << endl; 67 67 } 68 68 else … … 74 74 if (!identifier->isA(objectIdentifier_)) 75 75 { 76 COUT(2) << object->getLoaderIndentation() << "Warning: '" << child->Value() << "' is not a '" << objectIdentifier_->getName() << "'." << std::endl;76 orxout(internal_warning, context::xml) << object->getLoaderIndentation() << "'" << child->Value() << "' is not a '" << objectIdentifier_->getName() << "'." << endl; 77 77 continue; 78 78 } 79 79 if (!identifier->isLoadable()) 80 80 { 81 COUT(2) << object->getLoaderIndentation() << "Warning: '" << child->Value() << "' is not loadable." << std::endl;81 orxout(internal_warning, context::xml) << object->getLoaderIndentation() << "'" << child->Value() << "' is not loadable." << endl; 82 82 continue; 83 83 } … … 87 87 try 88 88 { 89 COUT(4) << object->getLoaderIndentation() << "fabricating " << child->Value() << "..." << std::endl;89 orxout(verbose, context::xml) << object->getLoaderIndentation() << "fabricating " << child->Value() << "..." << endl; 90 90 91 91 BaseObject* newObject = identifier->fabricate(object); … … 95 95 { 96 96 newObject->XMLPort(*child, XMLPort::LoadObject); 97 COUT(4) << object->getLoaderIndentation() << "assigning " << child->Value() << " (objectname " << newObject->getName() << ") to " << this->identifier_->getName() << " (objectname " << static_cast<BaseObject*>(object)->getName() << ')' << std::endl;97 orxout(verbose, context::xml) << object->getLoaderIndentation() << "assigning " << child->Value() << " (objectname " << newObject->getName() << ") to " << this->identifier_->getName() << " (objectname " << static_cast<BaseObject*>(object)->getName() << ')' << endl; 98 98 } 99 99 else 100 100 { 101 COUT(4) << object->getLoaderIndentation() << "assigning " << child->Value() << " (object not yet loaded) to " << this->identifier_->getName() << " (objectname " << static_cast<BaseObject*>(object)->getName() << ')' << std::endl;101 orxout(verbose, context::xml) << object->getLoaderIndentation() << "assigning " << child->Value() << " (object not yet loaded) to " << this->identifier_->getName() << " (objectname " << static_cast<BaseObject*>(object)->getName() << ')' << endl; 102 102 } 103 104 COUT(5) << object->getLoaderIndentation();105 103 106 104 this->callLoadExecutor(object, newObject); … … 109 107 newObject->XMLPort(*child, XMLPort::LoadObject); 110 108 111 COUT(5) << object->getLoaderIndentation() << "...fabricated " << child->Value() << " (objectname " << newObject->getName() << ")." << std::endl;109 orxout(verbose, context::xml) << object->getLoaderIndentation() << "fabricated " << child->Value() << " (objectname " << newObject->getName() << ")." << endl; 112 110 } 113 111 catch (AbortLoadingException& ex) 114 112 { 115 COUT(1) << "An error occurred while loading object, abort loading..." << std::endl;113 orxout(internal_error, context::xml) << "An error occurred while loading object, abort loading..." << endl; 116 114 throw ex; 117 115 } 118 116 catch (...) 119 117 { 120 COUT(1) << "An error occurred while loading object:" << std::endl;121 COUT(1) << Exception::handleMessage() << std::endl;118 orxout(internal_error, context::xml) << "An error occurred while loading object:" << endl; 119 orxout(internal_error, context::xml) << Exception::handleMessage() << endl; 122 120 } 123 121 } … … 125 123 catch (ticpp::Exception& ex) 126 124 { 127 COUT(1) << std::endl;128 COUT(1) << "An error occurred in XMLPort.h while loading a '" << objectIdentifier_->getName() << "' in '" << this->sectionname_ << "' of '" << this->identifier_->getName() << "' (objectname: " << object->getName() << ") in " << object->getFilename() << ':' << std::endl;129 COUT(1) << ex.what() << std::endl;125 orxout(internal_error, context::xml) << endl; 126 orxout(internal_error, context::xml) << "An error occurred in XMLPort.h while loading a '" << objectIdentifier_->getName() << "' in '" << this->sectionname_ << "' of '" << this->identifier_->getName() << "' (objectname: " << object->getName() << ") in " << object->getFilename() << ':' << endl; 127 orxout(internal_error, context::xml) << ex.what() << endl; 130 128 } 131 129 } -
code/trunk/src/libraries/core/XMLPort.h
r7851 r8858 53 53 #include <tinyxml/ticpp.h> 54 54 55 #include "util/ Debug.h"55 #include "util/Output.h" 56 56 #include "util/Exception.h" 57 57 #include "util/MultiType.h" … … 415 415 if ((!attributeValue.empty()) || ((mode != XMLPort::ExpandObject) && this->loadexecutor_->allDefaultValuesSet())) 416 416 { 417 COUT(5) << this->owner_->getLoaderIndentation() << "Loading parameter " << this->paramname_ << " in " << this->identifier_->getName() << " (objectname " << this->owner_->getName() << ")." << std::endl << this->owner_->getLoaderIndentation();417 orxout(verbose_more, context::xml) << this->owner_->getLoaderIndentation() << "Loading parameter " << this->paramname_ << " in " << this->identifier_->getName() << " (objectname " << this->owner_->getName() << ")." << endl; 418 418 int error; 419 419 this->loadexecutor_->parse(object, attributeValue, &error, ","); … … 430 430 catch (ticpp::Exception& ex) 431 431 { 432 COUT(1) << std::endl;433 COUT(1) << "An error occurred in XMLPort.h while loading attribute '" << this->paramname_ << "' of '" << this->identifier_->getName() << "' (objectname: " << this->owner_->getName() << ") in " << this->owner_->getFilename() << ':' << std::endl;434 COUT(1) << ex.what() << std::endl;432 orxout(internal_error, context::xml) << endl; 433 orxout(internal_error, context::xml) << "An error occurred in XMLPort.h while loading attribute '" << this->paramname_ << "' of '" << this->identifier_->getName() << "' (objectname: " << this->owner_->getName() << ") in " << this->owner_->getFilename() << ':' << endl; 434 orxout(internal_error, context::xml) << ex.what() << endl; 435 435 } 436 436 } -
code/trunk/src/libraries/core/command/ArgumentCompletionFunctions.cc
r8351 r8858 90 90 ArgumentCompletionList _groupsandcommands(const std::string& fragment, bool bOnlyShowHidden) 91 91 { 92 // note: this function returns only arguments that begin with "fragment", which would 't be necessary for the92 // note: this function returns only arguments that begin with "fragment", which wouldn't be necessary for the 93 93 // auto-completion, but it's necessary to place the line-break "\n" between groups and commands 94 94 // only if both groups AND commands are in the list. … … 100 100 const std::map<std::string, std::map<std::string, ConsoleCommand*> >& commands = ConsoleCommand::getCommands(); 101 101 for (std::map<std::string, std::map<std::string, ConsoleCommand*> >::const_iterator it_group = commands.begin(); it_group != commands.end(); ++it_group) 102 if (groupIsVisible(it_group->second, bOnlyShowHidden) && it_group->first != "" && (fragmentLC == "" || getLowercase(it_group->first).find _first_of(fragmentLC) == 0))102 if (groupIsVisible(it_group->second, bOnlyShowHidden) && it_group->first != "" && (fragmentLC == "" || getLowercase(it_group->first).find(fragmentLC) == 0)) 103 103 groupList.push_back(ArgumentCompletionListElement(it_group->first, getLowercase(it_group->first))); 104 104 … … 113 113 // add the shortcuts 114 114 for (std::map<std::string, ConsoleCommand*>::const_iterator it_command = it_group->second.begin(); it_command != it_group->second.end(); ++it_command) 115 if (it_command->second->isActive() && it_command->second->hasAccess() && (!it_command->second->isHidden())^bOnlyShowHidden && (fragmentLC == "" || getLowercase(it_command->first).find _first_of(fragmentLC) == 0))115 if (it_command->second->isActive() && it_command->second->hasAccess() && (!it_command->second->isHidden())^bOnlyShowHidden && (fragmentLC == "" || getLowercase(it_command->first).find(fragmentLC) == 0)) 116 116 groupList.push_back(ArgumentCompletionListElement(it_command->first, getLowercase(it_command->first))); 117 117 } -
code/trunk/src/libraries/core/command/CommandEvaluation.cc
r7401 r8858 131 131 132 132 if (!this->execCommand_) 133 *error = CommandExecutor:: Error;133 *error = CommandExecutor::Inexistent; 134 134 else if (!this->execCommand_->isActive()) 135 135 *error = CommandExecutor::Deactivated; … … 151 151 if (this->bEvaluatedArguments_) 152 152 { 153 COUT(6) << "CE_execute (evaluation): " << this->execCommand_->getName() << " with " << this->numberOfEvaluatedArguments_ << " arguments: " << this->arguments_[0] << ' ' << this->arguments_[1] << ' ' << this->arguments_[2] << ' ' << this->arguments_[3] << ' ' << this->arguments_[4] << std::endl;153 orxout(verbose, context::commands) << "CE_execute (evaluation): " << this->execCommand_->getName() << " with " << this->numberOfEvaluatedArguments_ << " arguments: " << this->arguments_[0] << ' ' << this->arguments_[1] << ' ' << this->arguments_[2] << ' ' << this->arguments_[3] << ' ' << this->arguments_[4] << endl; 154 154 155 155 // pass as many arguments to the executor as were evaluated (thus the executor can still use additional default values) … … 186 186 { 187 187 if (bPrintError) 188 COUT(1) << "Error: Can't evaluate arguments, no console command assigned." << std::endl;189 return CommandExecutor:: Error;188 orxout(internal_error, context::commands) << "Can't evaluate arguments, no console command assigned." << endl; 189 return CommandExecutor::Inexistent; 190 190 } 191 191 … … 200 200 this->bEvaluatedArguments_ = true; 201 201 else if (bPrintError) 202 COUT(1) << "Error: Can't evaluate arguments, not enough arguments given." << std::endl;202 orxout(internal_error, context::commands) << "Can't evaluate arguments, not enough arguments given." << endl; 203 203 204 204 return error; -
code/trunk/src/libraries/core/command/CommandExecutor.cc
r7401 r8858 69 69 @return Returns the error-code (see @ref CommandExecutorErrorCodes "error codes") 70 70 */ 71 /* static */ int CommandExecutor::execute(const std::string& command, bool useTcl )71 /* static */ int CommandExecutor::execute(const std::string& command, bool useTcl, bool printErrors) 72 72 { 73 73 int error; 74 74 CommandExecutor::queryMT(command, &error, useTcl); 75 if (error && printErrors) 76 orxout(user_error) << "Can't execute \"" << command << "\", " << CommandExecutor::getErrorDescription(error) << ". (execute)" << endl; 75 77 return error; 76 78 } … … 85 87 /* static */ MultiType CommandExecutor::queryMT(const std::string& command, int* error, bool useTcl) 86 88 { 89 MultiType result; 90 int error_internal; 91 87 92 if (useTcl) 88 93 { 89 94 // pass the command to tcl 90 re turn TclBind::eval(command, error);95 result = TclBind::eval(command, &error_internal); 91 96 } 92 97 else … … 108 113 109 114 // query the command and return its return-value 110 return evaluation.query(error); 111 } 115 result = evaluation.query(&error_internal); 116 } 117 118 if (error) 119 *error = error_internal; 120 else if (error_internal) 121 orxout(user_error) << "Can't execute \"" << command << "\", " << CommandExecutor::getErrorDescription(error_internal) << ". (query)" << endl; 122 123 return result; 112 124 } 113 125 … … 172 184 173 185 /** 186 @brief Returns a description of the error code. 187 @param error The error code 188 */ 189 /* static */ std::string CommandExecutor::getErrorDescription(int error) 190 { 191 switch (error) 192 { 193 case CommandExecutor::Inexistent: return "command doesn't exist"; 194 case CommandExecutor::Incomplete: return "not enough arguments given"; 195 case CommandExecutor::Deactivated: return "command is not active"; 196 case CommandExecutor::Denied: return "access denied"; 197 case CommandExecutor::Error: return "an error occurred"; 198 default: return ""; 199 } 200 } 201 202 /** 174 203 @brief Gets an evaluated command from the cache. 175 204 @param command The command that should be looked up in the cache … … 261 290 if ((tokens.size() == 1 && ConsoleCommand::getCommand(tokens[0])) || (tokens.size() == 2 && ConsoleCommand::getCommand(tokens[0], tokens[1]))) 262 291 { 263 COUT(1) << "Error: A command with name \"" << alias << "\" already exists." << std::endl;292 orxout(user_error) << "A command with name \"" << alias << "\" already exists." << endl; 264 293 return; 265 294 } … … 271 300 createConsoleCommand(tokens[0], tokens[1], executor); 272 301 else 273 COUT(1) << "Error: \"" << alias << "\" is not a valid alias name (must have one or two words)." << std::endl;302 orxout(user_error) << "\"" << alias << "\" is not a valid alias name (must have one or two words)." << endl; 274 303 } 275 304 else 276 COUT(1) << "Error: \"" << command << "\" is not a valid command (did you mean \"" << evaluation.getCommandSuggestion() << "\"?)." << std::endl;305 orxout(user_error) << "\"" << command << "\" is not a valid command (did you mean \"" << evaluation.getCommandSuggestion() << "\"?)." << endl; 277 306 } 278 307 } -
code/trunk/src/libraries/core/command/CommandExecutor.h
r7401 r8858 111 111 // tolua_end 112 112 public: 113 static int execute(const std::string& command, bool useTcl = true ); // tolua_export113 static int execute(const std::string& command, bool useTcl = true, bool printErrors = true); // tolua_export 114 114 115 115 static MultiType queryMT(const std::string& command, int* error = 0, bool useTcl = true); … … 119 119 120 120 static const int Success = 0; ///< Error code for "success" (or no error) 121 static const int Error = 1;///< Error code if the command doesn't exist121 static const int Inexistent = 1; ///< Error code if the command doesn't exist 122 122 static const int Incomplete = 2; ///< Error code if the command needs more arguments 123 123 static const int Deactivated = 3; ///< Error code if the command is not active 124 124 static const int Denied = 4; ///< Error code if the command needs a different access level 125 static const int Error = 5; ///< Error code if the command returned an error 126 127 static std::string getErrorDescription(int error); 125 128 126 129 static MultiType unhide(const std::string& command); -
code/trunk/src/libraries/core/command/ConsoleCommand.cc
r8316 r8858 172 172 if (!this->executor_->defaultValueSet(i)) 173 173 { 174 COUT(2) << "Default value " << i << " is missing" << std::endl;174 orxout(internal_warning, context::commands) << "Default value " << i << " is missing" << endl; 175 175 return false; 176 176 } … … 202 202 if (!executor->defaultValueSet(i)) 203 203 { 204 COUT(2) << "Default value " << i << " is missing" << std::endl;204 orxout(internal_warning, context::commands) << "Default value " << i << " is missing" << endl; 205 205 return false; 206 206 } … … 229 229 else 230 230 { 231 COUT(1) << "Error: Couldn't assign new executor to console command \"" << this->baseName_ << "\", headers don't match." << std::endl;231 orxout(internal_error, context::commands) << "Couldn't assign new executor to console command \"" << this->baseName_ << "\", headers don't match." << endl; 232 232 return false; 233 233 } … … 256 256 else 257 257 { 258 COUT(1) << "Error: Couldn't assign new functor to console command \"" << this->baseName_ << "\", headers don't match." << std::endl;258 orxout(internal_error, context::commands) << "Couldn't assign new functor to console command \"" << this->baseName_ << "\", headers don't match." << endl; 259 259 return false; 260 260 } … … 307 307 this->pushFunction(new Executor(*this->executor_.get())); 308 308 else 309 COUT(1) << "Error: Couldn't push copy of executor in console command \"" << this->baseName_ << "\", no executor set." << std::endl;309 orxout(internal_error, context::commands) << "Couldn't push copy of executor in console command \"" << this->baseName_ << "\", no executor set." << endl; 310 310 } 311 311 … … 367 367 } 368 368 else if (object) 369 COUT(1) << "Error: Can't assign object to console command \"" << this->baseName_ << "\", no functor set." << std::endl;369 orxout(internal_error, context::commands) << "Can't assign object to console command \"" << this->baseName_ << "\", no functor set." << endl; 370 370 } 371 371 else if (object) 372 COUT(1) << "Error: Can't assign object to console command \"" << this->baseName_ << "\", no executor set." << std::endl;372 orxout(internal_error, context::commands) << "Can't assign object to console command \"" << this->baseName_ << "\", no executor set." << endl; 373 373 374 374 return false; … … 418 418 this->executor_->setDefaultValues(arg1); 419 419 else 420 COUT(1) << "Error: Can't set default values in console command \"" << this->baseName_ << "\", no executor set." << std::endl;420 orxout(internal_error, context::commands) << "Can't set default values in console command \"" << this->baseName_ << "\", no executor set." << endl; 421 421 422 422 return *this; … … 431 431 this->executor_->setDefaultValues(arg1, arg2); 432 432 else 433 COUT(1) << "Error: Can't set default values in console command \"" << this->baseName_ << "\", no executor set." << std::endl;433 orxout(internal_error, context::commands) << "Can't set default values in console command \"" << this->baseName_ << "\", no executor set." << endl; 434 434 435 435 return *this; … … 444 444 this->executor_->setDefaultValues(arg1, arg2, arg3); 445 445 else 446 COUT(1) << "Error: Can't set default values in console command \"" << this->baseName_ << "\", no executor set." << std::endl;446 orxout(internal_error, context::commands) << "Can't set default values in console command \"" << this->baseName_ << "\", no executor set." << endl; 447 447 448 448 return *this; … … 457 457 this->executor_->setDefaultValues(arg1, arg2, arg3, arg4); 458 458 else 459 COUT(1) << "Error: Can't set default values in console command \"" << this->baseName_ << "\", no executor set." << std::endl;459 orxout(internal_error, context::commands) << "Can't set default values in console command \"" << this->baseName_ << "\", no executor set." << endl; 460 460 461 461 return *this; … … 470 470 this->executor_->setDefaultValues(arg1, arg2, arg3, arg4, arg5); 471 471 else 472 COUT(1) << "Error: Can't set default values in console command \"" << this->baseName_ << "\", no executor set." << std::endl;472 orxout(internal_error, context::commands) << "Can't set default values in console command \"" << this->baseName_ << "\", no executor set." << endl; 473 473 474 474 return *this; … … 485 485 this->executor_->setDefaultValue(index, arg); 486 486 else 487 COUT(1) << "Error: Can't set default values in console command \"" << this->baseName_ << "\", no executor set." << std::endl;487 orxout(internal_error, context::commands) << "Can't set default values in console command \"" << this->baseName_ << "\", no executor set." << endl; 488 488 489 489 return *this; … … 500 500 this->argumentCompleter_[index] = completer; 501 501 else 502 COUT(2) << "Warning: Couldn't add autocompletion-function for index " << index << " in console command \"" << this->baseName_ << "\": index out of bound." << std::endl;502 orxout(internal_warning, context::commands) << "Couldn't add autocompletion-function for index " << index << " in console command \"" << this->baseName_ << "\": index out of bound." << endl; 503 503 504 504 return *this; … … 611 611 { 612 612 if (group == "") 613 COUT(1) << "Error: Couldn't find console command with shortcut \"" << name << "\"" << std::endl;613 orxout(internal_error, context::commands) << "Couldn't find console command with shortcut \"" << name << "\"" << endl; 614 614 else 615 COUT(1) << "Error: Couldn't find console command with group \"" << group << "\" and name \"" << name << "\"" << std::endl;615 orxout(internal_error, context::commands) << "Couldn't find console command with group \"" << group << "\" and name \"" << name << "\"" << endl; 616 616 } 617 617 return 0; … … 644 644 { 645 645 if (group == "") 646 COUT(1) << "Error: Couldn't find console command with shortcut \"" << name << "\"" << std::endl;646 orxout(internal_error, context::commands) << "Couldn't find console command with shortcut \"" << name << "\"" << endl; 647 647 else 648 COUT(1) << "Error: Couldn't find console command with group \"" << group << "\" and name \"" << name << "\"" << std::endl;648 orxout(internal_error, context::commands) << "Couldn't find console command with group \"" << group << "\" and name \"" << name << "\"" << endl; 649 649 } 650 650 return 0; … … 681 681 { 682 682 if (group == "") 683 COUT(2) << "Warning: A console command with shortcut \"" << name << "\" already exists." << std::endl;683 orxout(internal_warning, context::commands) << "A console command with shortcut \"" << name << "\" already exists." << endl; 684 684 else 685 COUT(2) << "Warning: A console command with name \"" << name << "\" already exists in group \"" << group << "\"." << std::endl;685 orxout(internal_warning, context::commands) << "A console command with name \"" << name << "\" already exists in group \"" << group << "\"." << endl; 686 686 } 687 687 else -
code/trunk/src/libraries/core/command/ConsoleCommand.h
r8418 r8858 53 53 void myCoutFunction(const std::string& text) // Define a static function 54 54 { 55 COUT(0) << "Text: " << text << std::endl;// Print the text to the console55 orxout() << "Text: " << text << endl; // Print the text to the console 56 56 } 57 57 … … 125 125 void myOtherCoutFunction(const std::string& text) // Define a new static function 126 126 { 127 COUT(0) << "Uppercase: " << getUppercase(text) << std::endl;// Print the text in uppercase to the console127 orxout() << "Uppercase: " << getUppercase(text) << endl; // Print the text in uppercase to the console 128 128 } 129 129 -
code/trunk/src/libraries/core/command/ConsoleCommandCompilation.cc
r8079 r8858 38 38 #include <string> 39 39 40 #include "util/ Debug.h"40 #include "util/Output.h" 41 41 #include "util/ExprParser.h" 42 42 #include "util/StringUtils.h" … … 46 46 namespace orxonox 47 47 { 48 SetConsoleCommand("echo", echo); 49 50 SetConsoleCommand("orxout", orxout_level); 51 SetConsoleCommand("orxout_context", orxout_level_context); 52 53 SetConsoleCommand("log" , log ); 54 SetConsoleCommand("error" , error ).hide(); 55 SetConsoleCommand("warning", warning).hide(); 56 SetConsoleCommand("status" , status ).hide(); 57 SetConsoleCommand("info" , info ).hide(); 58 SetConsoleCommand("debug" , debug ).hide(); 59 48 60 // SetConsoleCommand("source", source).argumentCompleter(0, autocompletion::files()); // disabled because we use the implementation in Tcl 49 SetConsoleCommand("echo", echo);50 // SetConsoleCommand("puts", puts); // disabled because we use the implementation in Tcl51 52 61 // SetConsoleCommand("read", read).argumentCompleter(0, autocompletion::files()); // disabled because we use the implementation in Tcl 53 62 // SetConsoleCommand("append", append).argumentCompleter(0, autocompletion::files()); // disabled because we use the implementation in Tcl … … 57 66 58 67 /** 68 @brief Simply returns the arguments. 69 */ 70 std::string echo(const std::string& text) 71 { 72 return text; 73 } 74 75 /** 76 @brief Builds a map that maps the levels of all output levels to their ID. 77 */ 78 std::map<std::string, OutputLevel> getOutputLevelsMap() 79 { 80 std::map<std::string, OutputLevel> levels; 81 82 levels["message"] = level::message; 83 levels["debug_output"] = level::debug_output; 84 levels["user_error"] = level::user_error; 85 levels["user_warning"] = level::user_warning; 86 levels["user_status"] = level::user_status; 87 levels["user_info"] = level::user_info; 88 levels["internal_error"] = level::internal_error; 89 levels["internal_warning"] = level::internal_warning; 90 levels["internal_status"] = level::internal_status; 91 levels["internal_info"] = level::internal_info; 92 levels["verbose"] = level::verbose; 93 levels["verbose_more"] = level::verbose_more; 94 levels["verbose_ultra"] = level::verbose_ultra; 95 96 return levels; 97 } 98 99 /** 100 @brief Prints text to the console. 101 @param level_name The name of the output level 102 */ 103 void orxout_level(const std::string& level_name, const std::string& text) 104 { 105 static std::map<std::string, OutputLevel> levels = getOutputLevelsMap(); 106 107 OutputLevel level = level::debug_output; 108 std::map<std::string, OutputLevel>::iterator it = levels.find(level_name); 109 if (it != levels.end()) 110 level = it->second; 111 else 112 orxout(internal_warning) << "'" << level_name << "' is not a valid output level" << endl; 113 114 orxout(level) << text << endl; 115 } 116 117 /** 118 @brief Prints text to the console. 119 @param level_name The name of the output level 120 @param context_name The name of the output context 121 */ 122 void orxout_level_context(const std::string& level_name, const std::string& context_name, const std::string& text) 123 { 124 static std::map<std::string, OutputLevel> levels = getOutputLevelsMap(); 125 126 OutputLevel level = level::debug_output; 127 std::map<std::string, OutputLevel>::iterator it = levels.find(level_name); 128 if (it != levels.end()) 129 level = it->second; 130 else 131 orxout(internal_warning) << "'" << level_name << "' is not a valid output level" << endl; 132 133 OutputContextContainer context = registerContext(context_name); 134 135 orxout(level, context) << text << endl; 136 } 137 138 /// @brief Prints text to the console and the logfile. 139 void log(const std::string& text) 140 { orxout() << text << endl; } 141 142 /// @brief Prints output with error level. 143 void error(const std::string& text) 144 { orxout(user_error) << text << endl; } 145 146 /// @brief Prints output with warning level. 147 void warning(const std::string& text) 148 { orxout(user_warning) << text << endl; } 149 150 /// @brief Prints output with status level. 151 void status(const std::string& text) 152 { orxout(user_status) << text << endl; } 153 154 /// @brief Prints output with info level. 155 void info(const std::string& text) 156 { orxout(user_info) << text << endl; } 157 158 /// @brief Prints debug output with verbose level. 159 void debug(const std::string& text) 160 { orxout(verbose, context::tcl) << text << endl; } 161 162 /** 59 163 @brief Reads the content of a file and executes the commands in it line by line. 60 164 */ … … 66 170 if (it != executingFiles.end()) 67 171 { 68 COUT(1) << "Error: Recurring source command in \"" << filename << "\". Stopped execution." << std::endl;172 orxout(user_error) << "Recurring source command in \"" << filename << "\". Stopped execution." << endl; 69 173 return; 70 174 } … … 76 180 if (!file.is_open()) 77 181 { 78 COUT(1) << "Error: Couldn't open file \"" << filename << "\"." << std::endl;182 orxout(user_error) << "Couldn't open file \"" << filename << "\"." << endl; 79 183 return; 80 184 } … … 95 199 96 200 /** 97 @brief Simply returns the arguments.98 */99 std::string echo(const std::string& text)100 {101 return text;102 }103 104 /**105 @brief Writes text to the console, depending on the first argument with or without a line-break after it.106 */107 void puts(bool newline, const std::string& text)108 {109 if (newline)110 {111 COUT(0) << stripEnclosingBraces(text) << std::endl;112 }113 else114 {115 COUT(0) << stripEnclosingBraces(text);116 }117 }118 119 /**120 201 @brief Writes text to a file. 121 202 */ … … 127 208 if (!file.is_open()) 128 209 { 129 COUT(1) << "Error: Couldn't write to file \"" << filename << "\"." << std::endl;130 return; 131 } 132 133 file << text << std::endl;210 orxout(user_error) << "Couldn't write to file \"" << filename << "\"." << endl; 211 return; 212 } 213 214 file << text << endl; 134 215 file.close(); 135 216 } … … 145 226 if (!file.is_open()) 146 227 { 147 COUT(1) << "Error: Couldn't append to file \"" << filename << "\"." << std::endl;148 return; 149 } 150 151 file << text << std::endl;228 orxout(user_error) << "Couldn't append to file \"" << filename << "\"." << endl; 229 return; 230 } 231 232 file << text << endl; 152 233 file.close(); 153 234 } … … 163 244 if (!file.is_open()) 164 245 { 165 COUT(1) << "Error: Couldn't read from file \"" << filename << "\"." << std::endl;246 orxout(user_error) << "Couldn't read from file \"" << filename << "\"." << endl; 166 247 return ""; 167 248 } … … 192 273 if (expr.getResult() == 42.0) 193 274 { 194 COUT(3) << "Greetings from the restaurant at the end of the universe." << std::endl;275 orxout(user_info) << "Greetings from the restaurant at the end of the universe." << endl; 195 276 } 196 277 if (!expr.getRemains().empty()) 197 278 { 198 COUT(2) << "Warning: Expression could not be parsed to the end! Remains: '" << expr.getRemains() << '\'' << std::endl;279 orxout(user_warning) << "Expression could not be parsed to the end! Remains: '" << expr.getRemains() << '\'' << endl; 199 280 } 200 281 return static_cast<float>(expr.getResult()); … … 202 283 else 203 284 { 204 COUT(1) << "Error: Cannot calculate expression: Parse error." << std::endl;285 orxout(user_error) << "Cannot calculate expression: Parse error." << endl; 205 286 return 0; 206 287 } -
code/trunk/src/libraries/core/command/ConsoleCommandCompilation.h
r7401 r8858 42 42 _CoreExport void source(const std::string& filename); 43 43 _CoreExport std::string echo(const std::string& text); 44 _CoreExport void puts(bool newline, const std::string& test); 44 45 _CoreExport void orxout_level(const std::string& level_name, const std::string& text); 46 _CoreExport void orxout_level_context(const std::string& level_name, const std::string& context_name, const std::string& text); 47 48 _CoreExport void log(const std::string& text); 49 _CoreExport void error(const std::string& text); 50 _CoreExport void warning(const std::string& text); 51 _CoreExport void status(const std::string& text); 52 _CoreExport void info(const std::string& text); 53 _CoreExport void debug(const std::string& text); 45 54 46 55 _CoreExport void write(const std::string& filename, const std::string& text); -
code/trunk/src/libraries/core/command/Executor.cc
r7401 r8858 38 38 39 39 #include "util/Convert.h" 40 #include "util/ Debug.h"40 #include "util/Output.h" 41 41 #include "util/StringUtils.h" 42 42 #include "util/SubString.h" … … 104 104 { 105 105 if (bPrintError) 106 COUT(2) << "Warning: Can't call executor " << this->name_ << " through parser: Not enough arguments or default values given (input: " << arguments.join() << ")." << std::endl;106 orxout(internal_warning) << "Can't call executor " << this->name_ << " through parser: Not enough arguments or default values given (input: " << arguments.join() << ")." << endl; 107 107 return MT_Type::Null; 108 108 } 109 109 110 COUT(5) << "Executor::parse: \"" << arguments.join(delimiter) << "\" -> " << argCount << " arguments: " << arg[0] << " / " << arg[1] << " / " << arg[2] << " / " << arg[3] << " / " << arg[4] << std::endl;110 orxout(verbose, context::misc::executor) << "Executor::parse: \"" << arguments.join(delimiter) << "\" -> " << argCount << " arguments: " << arg[0] << " / " << arg[1] << " / " << arg[2] << " / " << arg[3] << " / " << arg[4] << endl; 111 111 112 112 // execute the function with the evaluated arguments (the default values of the executor are also included in these arguments) -
code/trunk/src/libraries/core/command/Executor.h
r7401 r8858 57 57 void myFunction(int a, int b) // declare a static function 58 58 { 59 COUT(0) << "The sum is " << (a + b) << std::endl;// print the sum of a and b to the console59 orxout() << "The sum is " << (a + b) << endl; // print the sum of a and b to the console 60 60 } 61 61 -
code/trunk/src/libraries/core/command/Functor.h
r8729 r8858 118 118 #include <typeinfo> 119 119 120 #include "util/ Debug.h"120 #include "util/Output.h" 121 121 #include "util/MultiType.h" 122 122 #include "core/OrxonoxClass.h" … … 256 256 else 257 257 { 258 COUT(1) << "Error: Can't execute FunctorMember, no object set." << std::endl;258 orxout(internal_error) << "Can't execute FunctorMember, no object set." << endl; 259 259 return MT_Type::Null; 260 260 } … … 339 339 // see Functor::setRawObjectPointer() 340 340 inline void setRawObjectPointer(void*) 341 { COUT(2) << "Warning: Can't assign an object pointer to a static functor" << std::endl; }341 { orxout(internal_warning) << "Can't assign an object pointer to a static functor" << endl; } 342 342 // see Functor::getRawObjectPointer() 343 343 inline void* getRawObjectPointer() const -
code/trunk/src/libraries/core/command/IOConsolePOSIX.cc
r8729 r8858 37 37 #include "util/Clock.h" 38 38 #include "util/Math.h" 39 #include "util/output/ConsoleWriter.h" 39 40 #include "core/Game.h" 40 41 #include "core/input/InputBuffer.h" … … 55 56 56 57 IOConsole::IOConsole() 57 : shell_(new Shell(" IOConsole", false))58 : shell_(new Shell("Console", false)) 58 59 , buffer_(shell_->getInputBuffer()) 59 60 , cout_(std::cout.rdbuf()) … … 74 75 75 76 // Disable standard std::cout logging 76 OutputHandler::getInstance().disableCout();77 ConsoleWriter::getInstance().disable(); 77 78 // Redirect std::cout to an ostringstream 78 79 // (Other part is in the initialiser list) … … 88 89 std::cout.flush(); 89 90 if (!this->origCout_.str().empty()) 90 this->shell_->addOutput(this->origCout_.str(), Shell:: None);91 this->shell_->addOutput(this->origCout_.str(), Shell::Cout); 91 92 // Erase input and status lines 92 93 this->cout_ << "\033[1G\033[J"; … … 102 103 std::cout.rdbuf(this->cout_.rdbuf()); 103 104 // Enable standard std::cout logging again 104 OutputHandler::getInstance().enableCout();105 ConsoleWriter::getInstance().enable(); 105 106 } 106 107 … … 229 230 if (!this->origCout_.str().empty()) 230 231 { 231 this->shell_->addOutput(this->origCout_.str(), Shell:: None);232 this->shell_->addOutput(this->origCout_.str(), Shell::Cout); 232 233 this->origCout_.str(""); 233 234 } … … 239 240 switch (type) 240 241 { 241 case Shell::Error: this->cout_ << "\033[91m"; break; 242 case Shell::Warning: this->cout_ << "\033[93m"; break; 243 case Shell::Info: this->cout_ << "\033[90m"; break; 244 case Shell::Debug: this->cout_ << "\033[90m"; break; 245 case Shell::Verbose: this->cout_ << "\033[90m"; break; 246 case Shell::Ultra: this->cout_ << "\033[90m"; break; 247 case Shell::Command: this->cout_ << "\033[36m"; break; 248 case Shell::Hint: this->cout_ << "\033[33m"; break; 249 case Shell::TDebug: this->cout_ << "\033[95m"; break; 250 default: break; 242 case Shell::Message: 243 case Shell::DebugOutput: this->cout_ << "\033[0m"; break; 244 245 case Shell::UserError: this->cout_ << "\033[91m"; break; 246 case Shell::UserWarning: this->cout_ << "\033[93m"; break; 247 case Shell::UserStatus: this->cout_ << "\033[92m"; break; 248 case Shell::UserInfo: this->cout_ << "\033[96m"; break; 249 250 case Shell::InternalError: this->cout_ << "\033[31m"; break; 251 case Shell::InternalWarning: this->cout_ << "\033[33m"; break; 252 case Shell::InternalStatus: this->cout_ << "\033[32m"; break; 253 case Shell::InternalInfo: this->cout_ << "\033[36m"; break; 254 255 case Shell::Verbose: this->cout_ << "\033[94m"; break; 256 case Shell::VerboseMore: this->cout_ << "\033[34m"; break; 257 case Shell::VerboseUltra: this->cout_ << "\033[34m"; break; 258 259 case Shell::Command: this->cout_ << "\033[95m"; break; 260 case Shell::Hint: this->cout_ << "\033[35m"; break; 261 262 default: this->cout_ << "\033[37m"; break; 251 263 } 252 264 … … 371 383 void IOConsole::executed() 372 384 { 373 this->shell_->addOutput(this->promptString_ + this->shell_->getInput() + '\n', Shell::Command);385 this->shell_->addOutput(this->promptString_ + this->shell_->getInput(), Shell::Command); 374 386 } 375 387 … … 378 390 { 379 391 // Exit is not an option, just do nothing (Shell doesn't really exit too) 380 }381 382 //! Called if only the last output-line has changed383 void IOConsole::onlyLastLineChanged()384 {385 // Save cursor position and move it to the beginning of the first output line386 this->cout_ << "\033[s\033[1A\033[1G";387 // Erase the line388 this->cout_ << "\033[K";389 // Reprint the last output line390 this->printOutputLine(this->shell_->getNewestLineIterator()->first, this->shell_->getNewestLineIterator()->second);391 // Restore cursor392 this->cout_ << "\033[u";393 this->cout_.flush();394 392 } 395 393 -
code/trunk/src/libraries/core/command/IOConsolePOSIX.h
r7401 r8858 66 66 // Methods from ShellListener 67 67 void linesChanged(); 68 void onlyLastLineChanged();69 68 void lineAdded(); 70 69 void inputChanged(); -
code/trunk/src/libraries/core/command/IOConsoleWindows.cc
r8729 r8858 34 34 #include "util/Clock.h" 35 35 #include "util/Math.h" 36 #include "util/output/ConsoleWriter.h" 36 37 #include "core/Game.h" 37 38 #include "core/input/InputBuffer.h" … … 43 44 //! Redirects std::cout, creates the corresponding Shell and changes the terminal mode 44 45 IOConsole::IOConsole() 45 : shell_(new Shell(" IOConsole", false))46 : shell_(new Shell("Console", false)) 46 47 , buffer_(shell_->getInputBuffer()) 47 48 , cout_(std::cout.rdbuf()) … … 52 53 { 53 54 // Disable standard this->cout_ logging 54 OutputHandler::getInstance().disableCout();55 ConsoleWriter::getInstance().disable(); 55 56 // Redirect std::cout to an ostringstream 56 57 // (Other part is in the initialiser list) … … 95 96 std::cout.flush(); 96 97 if (!this->origCout_.str().empty()) 97 this->shell_->addOutput(this->origCout_.str(), Shell:: None);98 this->shell_->addOutput(this->origCout_.str(), Shell::Cout); 98 99 99 100 this->shell_->unregisterListener(this); … … 108 109 std::cout.rdbuf(this->cout_.rdbuf()); 109 110 // Enable standard this->cout_ logging again 110 OutputHandler::getInstance().enableCout();111 ConsoleWriter::getInstance().enable(); 111 112 112 113 resetTerminalMode(); … … 188 189 if (!this->origCout_.str().empty()) 189 190 { 190 this->shell_->addOutput(this->origCout_.str(), Shell:: None);191 this->shell_->addOutput(this->origCout_.str(), Shell::Cout); 191 192 this->origCout_.str(""); 192 193 } … … 200 201 switch (type) 201 202 { 202 case Shell::Error: colour = FOREGROUND_INTENSITY | FOREGROUND_RED; break; 203 case Shell::Warning: colour = FOREGROUND_INTENSITY | FOREGROUND_GREEN | FOREGROUND_RED; break; 204 case Shell::Info: 205 case Shell::Debug: 206 case Shell::Verbose: 207 case Shell::Ultra: colour = FOREGROUND_INTENSITY ; break; 208 case Shell::Command: colour = FOREGROUND_GREEN | FOREGROUND_BLUE; break; 209 case Shell::Hint: colour = FOREGROUND_GREEN | FOREGROUND_RED ; break; 210 case Shell::TDebug: colour = FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_BLUE; break; 211 default: colour = FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_BLUE; break; 203 case Shell::Message: 204 case Shell::DebugOutput: colour = FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE; break; 205 206 case Shell::UserError: colour = FOREGROUND_INTENSITY | FOREGROUND_RED | 0 | 0 ; break; 207 case Shell::UserWarning: colour = FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | 0 ; break; 208 case Shell::UserStatus: colour = FOREGROUND_INTENSITY | 0 | FOREGROUND_GREEN | 0 ; break; 209 case Shell::UserInfo: colour = FOREGROUND_INTENSITY | 0 | FOREGROUND_GREEN | FOREGROUND_BLUE; break; 210 211 case Shell::InternalError: colour = 0 | FOREGROUND_RED | 0 | 0 ; break; 212 case Shell::InternalWarning: colour = 0 | FOREGROUND_RED | FOREGROUND_GREEN | 0 ; break; 213 case Shell::InternalStatus: colour = 0 | 0 | FOREGROUND_GREEN | 0 ; break; 214 case Shell::InternalInfo: colour = 0 | 0 | FOREGROUND_GREEN | FOREGROUND_BLUE; break; 215 216 case Shell::Verbose: colour = FOREGROUND_INTENSITY | 0 | 0 | FOREGROUND_BLUE; break; 217 case Shell::VerboseMore: colour = FOREGROUND_INTENSITY | 0 | 0 | FOREGROUND_BLUE; break; 218 case Shell::VerboseUltra: colour = FOREGROUND_INTENSITY | 0 | 0 | FOREGROUND_BLUE; break; 219 220 case Shell::Command: colour = FOREGROUND_INTENSITY | FOREGROUND_RED | 0 | FOREGROUND_BLUE; break; 221 case Shell::Hint: colour = 0 | FOREGROUND_RED | 0 | FOREGROUND_BLUE; break; 222 223 default: colour = 0 | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE; break; 212 224 } 213 225 … … 238 250 || !SetConsoleMode(this->stdInHandle_, 0)) 239 251 { 240 COUT(1) << "Error: Could not set Windows console settings" << std::endl;252 orxout(user_error) << "Could not set Windows console settings" << endl; 241 253 return; 242 254 } … … 318 330 void IOConsole::executed() 319 331 { 320 this->shell_->addOutput(this->promptString_ + this->shell_->getInput() + '\n', Shell::Command);332 this->shell_->addOutput(this->promptString_ + this->shell_->getInput(), Shell::Command); 321 333 } 322 334 … … 377 389 } 378 390 379 //! Called if only the last output-line has changed380 void IOConsole::onlyLastLineChanged()381 {382 int newLineHeight = 1 + this->shell_->getNewestLineIterator()->first.size() / this->terminalWidth_;383 // Compute the number of new lines needed384 int newLines = newLineHeight - this->lastOutputLineHeight_;385 this->lastOutputLineHeight_ = newLineHeight;386 // Scroll console if necessary387 if (newLines > 0) // newLines < 0 is assumed impossible388 this->createNewOutputLines(newLines);389 Shell::LineList::const_iterator it = this->shell_->getNewestLineIterator();390 this->printOutputLine(it->first, it->second, makeCOORD(0, this->inputLineRow_ - newLineHeight));391 }392 393 391 //! Called if a new output line was added 394 392 void IOConsole::lineAdded() -
code/trunk/src/libraries/core/command/IOConsoleWindows.h
r8729 r8858 68 68 // Methods from ShellListener 69 69 void linesChanged(); 70 void onlyLastLineChanged();71 70 void lineAdded(); 72 71 void inputChanged(); -
code/trunk/src/libraries/core/command/IRC.cc
r7401 r8858 85 85 } 86 86 catch (Tcl::tcl_error const &e) 87 { COUT(1) << "Tcl (IRC) error: " << e.what(); }87 { orxout(user_error, context::tcl) << "Tcl (IRC) error: " << e.what() << endl; } 88 88 89 89 this->nickname_ = "orx" + multi_cast<std::string>(static_cast<unsigned int>(rand())); … … 100 100 { 101 101 IRC::getInstance().initialize(); 102 COUT(1) << "Error: IRC client wasn't yet initialized, please try again." << std::endl;102 orxout(user_error) << "IRC client wasn't yet initialized, please try again." << endl; 103 103 return false; 104 104 } … … 110 110 } 111 111 catch (Tcl::tcl_error const &e) 112 { COUT(1) << "Tcl (IRC) error: " << e.what(); }112 { orxout(user_error, context::tcl) << "Tcl (IRC) error: " << e.what() << endl; } 113 113 114 114 return false; … … 139 139 void IRC::tcl_say(Tcl::object const &channel, Tcl::object const &nick, Tcl::object const &args) 140 140 { 141 COUT(0) << "IRC> " << nick.get() << ": " << stripEnclosingBraces(args.get()) << std::endl;141 orxout(message) << "IRC> " << nick.get() << ": " << stripEnclosingBraces(args.get()) << endl; 142 142 } 143 143 … … 145 145 void IRC::tcl_privmsg(Tcl::object const &query, Tcl::object const &nick, Tcl::object const &args) 146 146 { 147 COUT(0) << "IRC (" << query.get() << ")> " << nick.get() << ": " << stripEnclosingBraces(args.get()) << std::endl;147 orxout(message) << "IRC (" << query.get() << ")> " << nick.get() << ": " << stripEnclosingBraces(args.get()) << endl; 148 148 } 149 149 … … 151 151 void IRC::tcl_action(Tcl::object const &channel, Tcl::object const &nick, Tcl::object const &args) 152 152 { 153 COUT(0) << "IRC> * " << nick.get() << ' ' << stripEnclosingBraces(args.get()) << std::endl;153 orxout(message) << "IRC> * " << nick.get() << ' ' << stripEnclosingBraces(args.get()) << endl; 154 154 } 155 155 … … 157 157 void IRC::tcl_info(Tcl::object const &channel, Tcl::object const &args) 158 158 { 159 COUT(0) << "IRC> --> " << stripEnclosingBraces(args.get()) << std::endl;159 orxout(message) << "IRC> --> " << stripEnclosingBraces(args.get()) << endl; 160 160 } 161 161 } -
code/trunk/src/libraries/core/command/Shell.cc
r8729 r8858 35 35 36 36 #include "util/Math.h" 37 #include "util/OutputHandler.h"38 37 #include "util/StringUtils.h" 39 38 #include "util/SubString.h" 39 #include "util/output/OutputManager.h" 40 #include "util/output/MemoryWriter.h" 40 41 #include "core/CoreIncludes.h" 41 42 #include "core/ConfigFileManager.h" … … 44 45 #include "core/input/InputBuffer.h" 45 46 #include "CommandExecutor.h" 46 #include "ConsoleCommand.h"47 47 48 48 namespace orxonox 49 49 { 50 SetConsoleCommand("log", OutputHandler::log );51 SetConsoleCommand("error", OutputHandler::error ).hide();52 SetConsoleCommand("warning", OutputHandler::warning).hide();53 SetConsoleCommand("info", OutputHandler::info ).hide();54 SetConsoleCommand("debug", OutputHandler::debug ).hide();55 56 50 unsigned int Shell::cacheSize_s; 57 51 58 /** 59 @brief Constructor: Initializes the values and registers itself at OutputHandler. 52 namespace DefaultLogLevel 53 { 54 const OutputLevel Dev = level::internal_warning; 55 const OutputLevel User = level::user_info; 56 } 57 58 /** 59 @brief Constructor: Initializes the values. 60 60 @param consoleName The name of the shell - used to define the name of the soft-debug-level config-value 61 61 @param bScrollable If true, the user is allowed to scroll through the output-lines 62 62 */ 63 63 Shell::Shell(const std::string& consoleName, bool bScrollable) 64 : OutputListener(consoleName)64 : BaseWriter(consoleName, false) 65 65 , inputBuffer_(new InputBuffer()) 66 , consoleName_(consoleName)67 66 , bScrollable_(bScrollable) 68 67 { 69 68 RegisterRootObject(Shell); 69 70 OutputManager::getInstance().registerListener(this); 70 71 71 72 this->scrollPosition_ = 0; … … 73 74 this->historyPosition_ = 0; 74 75 this->historyOffset_ = 0; 75 this->bFinishedLastLine_ = true;76 76 77 77 this->clearOutput(); … … 81 81 ConfigFileManager::getInstance().setFilename(ConfigFileType::CommandHistory, "commandHistory.ini"); 82 82 83 // Use a stringstream object to buffer the output 84 this->outputStream_ = &this->outputBuffer_; 83 // Choose the default level according to the path Orxonox was started (build directory or not) 84 OutputLevel defaultDebugLevel = (PathConfig::buildDirectoryRun() ? DefaultLogLevel::Dev : DefaultLogLevel::User); 85 this->setLevelMax(defaultDebugLevel); 85 86 86 87 this->setConfigValues(); 87 88 88 89 // Get the previous output and add it to the Shell 89 OutputHandler::OutputVector::const_iterator it = OutputHandler::getInstance().getOutput().begin(); 90 for (;it != OutputHandler::getInstance().getOutput().end(); ++it) 91 { 92 if (it->first <= debugLevel_) 93 { 94 this->outputBuffer_ << it->second; 95 this->outputChanged(it->first); 96 } 97 } 98 99 // Register the shell as output listener 100 OutputHandler::getInstance().registerOutputListener(this); 101 OutputHandler::getInstance().setSoftDebugLevel(consoleName_, debugLevel_); 102 } 103 104 /** 105 @brief Destructor: Unregisters the shell from OutputHandler. 90 MemoryWriter::getInstance().resendOutput(this); 91 } 92 93 /** 94 @brief Destructor 106 95 */ 107 96 Shell::~Shell() 108 97 { 109 OutputHandler::getInstance().unregisterOutputListener(this);110 98 this->inputBuffer_->destroy(); 111 } 112 113 namespace DefaultLogLevel 114 { 115 const OutputLevel::Value Dev = OutputLevel::Info; 116 const OutputLevel::Value User = OutputLevel::Error; 99 100 OutputManager::getInstance().unregisterListener(this); 117 101 } 118 102 … … 129 113 SetConfigValue(cacheSize_s, 32); 130 114 131 // Choose the default level according to the path Orxonox was started (build directory or not) 132 OutputLevel::Value defaultDebugLevel = (PathConfig::buildDirectoryRun() ? DefaultLogLevel::Dev : DefaultLogLevel::User); 133 SetConfigValueExternal(debugLevel_, "OutputHandler", "debugLevel" + consoleName_, defaultDebugLevel) 134 .description("The maximum level of debug output shown in the " + consoleName_); 135 OutputHandler::getInstance().setSoftDebugLevel(consoleName_, debugLevel_); 115 SetConfigValueExternal(this->configurableMaxLevel_, 116 this->getConfigurableSectionName(), 117 this->getConfigurableMaxLevelName(), 118 this->configurableMaxLevel_) 119 .description("The maximum level of output shown in the " + this->getName()) 120 .callback(static_cast<BaseWriter*>(this), &BaseWriter::changedConfigurableLevel); 121 SetConfigValueExternal(this->configurableAdditionalContextsMaxLevel_, 122 this->getConfigurableSectionName(), 123 this->getConfigurableAdditionalContextsMaxLevelName(), 124 this->configurableAdditionalContextsMaxLevel_) 125 .description("The maximum level of output shown in the " + this->getName() + " for additional contexts") 126 .callback(static_cast<BaseWriter*>(this), &BaseWriter::changedConfigurableAdditionalContextsLevel); 127 SetConfigValueExternal(this->configurableAdditionalContexts_, 128 this->getConfigurableSectionName(), 129 this->getConfigurableAdditionalContextsName(), 130 this->configurableAdditionalContexts_) 131 .description("Additional output contexts shown in the " + this->getName()) 132 .callback(static_cast<BaseWriter*>(this), &BaseWriter::changedConfigurableAdditionalContexts); 136 133 } 137 134 … … 168 165 if (isNormal) 169 166 { 170 ModifyConfigValueExternal( debugLevel_, "debugLevel" + consoleName_, update);167 ModifyConfigValueExternal(this->configurableMaxLevel_, this->getConfigurableMaxLevelName(), update); 171 168 } 172 169 else 173 170 { 174 OutputLevel ::Valuelevel = (value ? DefaultLogLevel::Dev : DefaultLogLevel::User);175 ModifyConfigValueExternal( debugLevel_, "debugLevel" + consoleName_, tset, level);171 OutputLevel level = (value ? DefaultLogLevel::Dev : DefaultLogLevel::User); 172 ModifyConfigValueExternal(this->configurableMaxLevel_, this->getConfigurableMaxLevelName(), tset, level); 176 173 } 177 174 } … … 252 249 253 250 /** 254 @brief Sends outputto the internal output buffer.251 @brief Adds multiple lines to the internal output buffer. 255 252 */ 256 253 void Shell::addOutput(const std::string& text, LineType type) 257 254 { 258 this->outputBuffer_ << text; 259 this->outputChanged(type); 255 std::vector<std::string> lines; 256 vectorize(text, '\n', &lines); 257 258 for (size_t i = 0; i < lines.size(); ++i) 259 this->addLine(lines[i], type); 260 } 261 262 /** 263 @brief Adds a line to the internal output buffer. 264 */ 265 void Shell::addLine(const std::string& line, LineType type) 266 { 267 // yes it was - push the new line to the list 268 this->outputLines_.push_front(std::make_pair(line, static_cast<LineType>(type))); 269 270 // adjust the scroll position if needed 271 if (this->scrollPosition_) 272 this->scrollPosition_++; 273 else 274 this->scrollIterator_ = this->outputLines_.begin(); 275 276 if (!this->scrollPosition_) 277 this->updateListeners<&ShellListener::lineAdded>(); 260 278 } 261 279 … … 269 287 270 288 this->scrollPosition_ = 0; 271 this->bFinishedLastLine_ = true;272 289 273 290 this->updateListeners<&ShellListener::linesChanged>(); 291 } 292 293 /** 294 @brief Inherited from BaseWriter (LogListener), called if a new line of output was sent. 295 */ 296 void Shell::printLine(const std::string& line, OutputLevel level) 297 { 298 this->addLine(line, static_cast<LineType>(level)); 274 299 } 275 300 … … 323 348 324 349 /** 325 @brief Called by OutputHandler or internally whenever output was sent to the output buffer. Reads from the buffer and writes the new output-lines to the list.326 */327 void Shell::outputChanged(int lineType)328 {329 bool newline = false;330 do331 {332 // get the first line from the buffer333 std::string output;334 std::getline(this->outputBuffer_, output);335 336 // check the state of the buffer337 bool eof = this->outputBuffer_.eof();338 bool fail = this->outputBuffer_.fail();339 if (eof)340 this->outputBuffer_.flush(); // check if more output was received in the meantime341 if (eof || fail)342 this->outputBuffer_.clear(); // clear the error flags343 344 // the line is terminated with a line-break if neither an error occurred nor the end of the file was reached345 newline = (!eof && !fail);346 347 // no output retrieved - break the loop348 if (!newline && output.empty())349 break;350 351 // check if the last line was terminated with a line-break352 if (this->bFinishedLastLine_)353 {354 // yes it was - push the new line to the list355 this->outputLines_.push_front(std::make_pair(output, static_cast<LineType>(lineType)));356 357 // adjust the scroll position if needed358 if (this->scrollPosition_)359 this->scrollPosition_++;360 else361 this->scrollIterator_ = this->outputLines_.begin();362 363 if (!this->scrollPosition_)364 this->updateListeners<&ShellListener::lineAdded>();365 }366 else367 {368 // no it wasn't - add the new output to the last line369 this->outputLines_.front().first += output;370 this->updateListeners<&ShellListener::onlyLastLineChanged>();371 }372 373 // remember if the last line was terminated with a line-break374 this->bFinishedLastLine_ = newline;375 376 } while (newline); // loop as long as more lines are in the buffer377 }378 379 /**380 350 @brief Clears the text in the input buffer. 381 351 */ … … 409 379 const std::string& result = CommandExecutor::query(this->inputBuffer_->get(), &error); 410 380 if (error) 411 { 412 switch (error) 413 { 414 case CommandExecutor::Error: this->outputBuffer_ << "Error: Can't execute \"" << this->inputBuffer_->get() << "\", command doesn't exist. (S)" << std::endl; break; 415 case CommandExecutor::Incomplete: this->outputBuffer_ << "Error: Can't execute \"" << this->inputBuffer_->get() << "\", not enough arguments given. (S)" << std::endl; break; 416 case CommandExecutor::Deactivated: this->outputBuffer_ << "Error: Can't execute \"" << this->inputBuffer_->get() << "\", command is not active. (S)" << std::endl; break; 417 case CommandExecutor::Denied: this->outputBuffer_ << "Error: Can't execute \"" << this->inputBuffer_->get() << "\", access denied. (S)" << std::endl; break; 418 } 419 this->outputChanged(Error); 420 } 381 this->addOutput("Error: Can't execute \"" + this->inputBuffer_->get() + "\", " + CommandExecutor::getErrorDescription(error) + ". (Shell)", UserError); 421 382 else if (result != "") 422 { 423 this->outputBuffer_ << result << std::endl; 424 this->outputChanged(Command); 425 } 383 this->addOutput(result, Result); 426 384 427 385 this->clearInput(); … … 432 390 { 433 391 this->inputBuffer_->set(CommandExecutor::evaluate(this->inputBuffer_->get()).complete()); 434 this->outputBuffer_ << CommandExecutor::evaluate(this->inputBuffer_->get()).hint() << std::endl; 435 this->outputChanged(Hint); 392 this->addOutput(CommandExecutor::evaluate(this->inputBuffer_->get()).hint(), Hint); 436 393 437 394 this->inputChanged(); -
code/trunk/src/libraries/core/command/Shell.h
r8729 r8858 48 48 #include <vector> 49 49 50 #include "util/ OutputHandler.h"50 #include "util/output/BaseWriter.h" 51 51 #include "core/Core.h" 52 52 #include "core/OrxonoxClass.h" … … 66 66 private: 67 67 virtual void linesChanged() {} ///< Called if all output-lines have changed 68 virtual void onlyLastLineChanged() {} ///< Called if only the last output-line has changed69 68 virtual void lineAdded() {} ///< Called if a new line was added to the output 70 69 virtual void inputChanged() {} ///< Called if the input has changed … … 78 77 @brief The Shell is the logical component of the console that displays output to the user and allows him to enter commands. 79 78 80 The Shell gathers output sent from Output Handler by inheriting from OutputListener.79 The Shell gathers output sent from OutputManager by inheriting from BaseWriter. 81 80 The output-lines are stored in the shell, so they can be displayed in a graphical 82 81 console. Additionally the Shell has an InputBuffer which is needed by the user to … … 85 84 Different graphical consoles build upon a Shell, for example InGameConsole and IOConsole. 86 85 */ 87 class _CoreExport Shell : public OutputListener, public DevModeListener86 class _CoreExport Shell : public BaseWriter, public DevModeListener 88 87 { 89 88 public: … … 91 90 enum LineType 92 91 { 93 TDebug = OutputLevel::TDebug, 94 None = OutputLevel::None, 95 Warning = OutputLevel::Warning, 96 Error = OutputLevel::Error, 97 Info = OutputLevel::Info, 98 Debug = OutputLevel::Debug, 99 Verbose = OutputLevel::Verbose, 100 Ultra = OutputLevel::Ultra, 92 DebugOutput = debug_output, 93 Message = message, 94 UserError = user_error, 95 UserWarning = user_warning, 96 UserStatus = user_status, 97 UserInfo = user_info, 98 InternalError = internal_error, 99 InternalWarning = internal_warning, 100 InternalStatus = internal_status, 101 InternalInfo = internal_info, 102 Verbose = verbose, 103 VerboseMore = verbose_more, 104 VerboseUltra = verbose_ultra, 105 Cout, 101 106 Input, 102 107 Command, 108 Result, 103 109 Hint 104 110 }; … … 127 133 LineList::const_iterator getEndIterator() const; 128 134 129 void addOutput(const std::string& text, LineType type = None); 135 void addOutput(const std::string& text, LineType type = DebugOutput); 136 void addLine(const std::string& line, LineType type = DebugOutput); 130 137 void clearOutput(); 131 138 … … 150 157 const std::string& getFromHistory() const; 151 158 void clearInput(); 152 // OutputListener153 v oid outputChanged(intlevel);159 // BaseWriter 160 virtual void printLine(const std::string& line, OutputLevel level); 154 161 155 162 void configureInputBuffer(); … … 183 190 std::list<ShellListener*> listeners_; ///< The registered shell listeners 184 191 InputBuffer* inputBuffer_; ///< The input buffer that is needed by the user to enter text 185 std::stringstream outputBuffer_; ///< The output buffer that is used to retrieve lines of output from OutputListener186 bool bFinishedLastLine_; ///< Stores if the most recent output-line was terminated with a line-break or if more output is expected for this line187 192 LineList outputLines_; ///< A list of all output-lines that were displayed in the shell so far 188 193 LineList::const_iterator scrollIterator_; ///< An iterator to an entry of the list of output-lines, changes if the user scrolls through the output in the shell 189 194 unsigned int scrollPosition_; ///< The number of the line that is currently being referenced by scrollIterator_ 190 195 unsigned int historyPosition_; ///< If the user scrolls through the history of entered commands (stored in commandHistory_), this contains the currently viewed history entry 191 192 const std::string consoleName_; ///< The name of this shell - used to define the name of the soft-debug-level config-value193 196 const bool bScrollable_; ///< If true, the user can scroll through the output-lines 194 197 … … 197 200 unsigned int historyOffset_; ///< The command history is a circular buffer, this variable defines the current write-offset 198 201 std::vector<std::string> commandHistory_; ///< The history of commands that were entered by the user 199 int debugLevel_; //!< The maximum level of output that is displayed in the shell (will be passed to OutputListener to filter output)200 202 static unsigned int cacheSize_s; ///< The maximum cache size of the CommandExecutor - this is stored here for better readability of the config file and because CommandExecutor is no OrxonoxClass 201 203 }; -
code/trunk/src/libraries/core/command/TclBind.cc
r8366 r8858 34 34 35 35 #include "SpecialConfig.h" 36 #include "util/ Debug.h"36 #include "util/Output.h" 37 37 #include "util/Exception.h" 38 38 #include "util/StringUtils.h" … … 106 106 } 107 107 catch (Tcl::tcl_error const &e) 108 { COUT(1) << "Tcl error while creating Tcl-interpreter: " << e.what() << std::endl; }108 { orxout(internal_error, context::tcl) << "Tcl error while creating Tcl-interpreter: " << e.what() << endl; } 109 109 } 110 110 } … … 129 129 } 130 130 catch (Tcl::tcl_error const &e) 131 { COUT(1) << "Tcl error while creating Tcl-interpreter: " << e.what() << std::endl; COUT(1) << "Error: Tcl isn't properly initialized. Orxonox might possibly not work like that." << std::endl; } 131 { 132 orxout(internal_error, context::tcl) << "Tcl error while creating Tcl-interpreter: " << e.what() << endl; 133 orxout(user_error, context::tcl) << "Tcl isn't properly initialized. Orxonox might possibly not work like that." << endl; 134 } 132 135 133 136 return interpreter; … … 154 157 std::string TclBind::tcl_query(Tcl::object const &args) 155 158 { 156 COUT(4) << "Tcl_query: " << args.get() << std::endl;159 orxout(verbose, context::commands) << "Tcl_query: " << args.get() << endl; 157 160 return TclBind::tcl_helper(args, true); 158 161 } … … 163 166 void TclBind::tcl_execute(Tcl::object const &args) 164 167 { 165 COUT(4) << "Tcl_execute: " << args.get() << std::endl;168 orxout(verbose, context::commands) << "Tcl_execute: " << args.get() << endl; 166 169 TclBind::tcl_helper(args, false); 167 170 } … … 184 187 error = evaluation.execute(); 185 188 186 switch (error) 187 { 188 case CommandExecutor::Error: COUT(1) << "Error: Can't execute command \"" << command << "\", command doesn't exist. (B)" << std::endl; break; 189 case CommandExecutor::Incomplete: COUT(1) << "Error: Can't execute command \"" << command << "\", not enough arguments given. (B)" << std::endl; break; 190 case CommandExecutor::Deactivated: COUT(1) << "Error: Can't execute command \"" << command << "\", command is not active. (B)" << std::endl; break; 191 case CommandExecutor::Denied: COUT(1) << "Error: Can't execute command \"" << command << "\", access denied. (B)" << std::endl; break; 192 } 193 194 if (error == CommandExecutor::Error) 195 COUT(3) << "Did you mean \"" << evaluation.getCommandSuggestion() << "\"?" << std::endl; 189 if (error) 190 { 191 orxout(user_error) << "Can't execute command \"" << command << "\", " + CommandExecutor::getErrorDescription(error) + ". (TclBind)" << endl; 192 if (error == CommandExecutor::Inexistent) 193 orxout(user_info) << "Did you mean \"" << evaluation.getCommandSuggestion() << "\"?" << endl; 194 } 196 195 197 196 return result; … … 211 210 } 212 211 catch (Tcl::tcl_error const &e) 213 { COUT(1) << "Tcl error: " << e.what() << std::endl; }212 { orxout(user_error, context::tcl) << "Tcl error: " << e.what() << endl; } 214 213 } 215 214 … … 223 222 void TclBind::bgerror(const std::string& error) 224 223 { 225 COUT(1) << "Tcl background error: " << stripEnclosingBraces(error) << std::endl;224 orxout(user_error, context::tcl) << "Tcl background error: " << stripEnclosingBraces(error) << endl; 226 225 } 227 226 … … 243 242 } 244 243 catch (Tcl::tcl_error const &e) 245 { COUT(1) << "Tcl error: " << e.what() << std::endl; }244 { orxout(user_error, context::tcl) << "Tcl error: " << e.what() << endl; } 246 245 247 246 if (error) -
code/trunk/src/libraries/core/command/TclThreadManager.cc
r8351 r8858 225 225 TclThreadManager::getInstance().numInterpreterBundles_++; 226 226 TclThreadManager::createWithId(TclThreadManager::getInstance().numInterpreterBundles_); 227 COUT(0) << "Created new Tcl-interpreter with ID " << TclThreadManager::getInstance().numInterpreterBundles_ << std::endl;227 orxout(user_info) << "Created new Tcl-interpreter with ID " << TclThreadManager::getInstance().numInterpreterBundles_ << endl; 228 228 return TclThreadManager::getInstance().numInterpreterBundles_; 229 229 } … … 288 288 } 289 289 catch (const Tcl::tcl_error& e) 290 { bundle->interpreter_ = 0; COUT(1) << "Tcl error while creating Tcl-interpreter (" << id_string << "): " << e.what() << std::endl; } 290 { 291 bundle->interpreter_ = 0; 292 orxout(user_error, context::tcl) << "Tcl error while creating Tcl-interpreter (" << id_string << "): " << e.what() << endl; 293 } 291 294 } 292 295 … … 407 410 { 408 411 // This query would lead to a deadlock - return with an error 409 TclThreadManager::error(" Error:Circular query (" + this->dumpList(source_bundle->queriers_.getList()) + ' ' + multi_cast<std::string>(source_bundle->id_) \412 TclThreadManager::error("Circular query (" + this->dumpList(source_bundle->queriers_.getList()) + ' ' + multi_cast<std::string>(source_bundle->id_) \ 410 413 + " -> " + multi_cast<std::string>(target_bundle->id_) \ 411 414 + "), couldn't query Tcl-interpreter with ID " + multi_cast<std::string>(target_bundle->id_) \ … … 446 449 int error; 447 450 output = CommandExecutor::query(command, &error, false); 448 switch (error) 449 { 450 case CommandExecutor::Error: TclThreadManager::error("Error: Can't execute command \"" + command + "\", command doesn't exist. (T)"); break; 451 case CommandExecutor::Incomplete: TclThreadManager::error("Error: Can't execute command \"" + command + "\", not enough arguments given. (T)"); break; 452 case CommandExecutor::Deactivated: TclThreadManager::error("Error: Can't execute command \"" + command + "\", command is not active. (T)"); break; 453 case CommandExecutor::Denied: TclThreadManager::error("Error: Can't execute command \"" + command + "\", access denied. (T)"); break; 454 } 451 if (error) 452 TclThreadManager::error("Can't execute command \"" + command + "\", " + CommandExecutor::getErrorDescription(error) + ". (TclThreadManager)"); 455 453 } 456 454 else … … 476 474 // This happens if the main thread tries to query a busy interpreter 477 475 // To avoid a lock of the main thread, we simply don't proceed with the query in this case 478 TclThreadManager::error(" Error:Couldn't query Tcl-interpreter with ID " + multi_cast<std::string>(target_bundle->id_) + ", interpreter is busy right now.");476 TclThreadManager::error("Couldn't query Tcl-interpreter with ID " + multi_cast<std::string>(target_bundle->id_) + ", interpreter is busy right now."); 479 477 } 480 478 } … … 522 520 else 523 521 { 524 TclThreadManager::error(" Error:No Tcl-interpreter with ID " + multi_cast<std::string>(id) + " existing.");522 TclThreadManager::error("No Tcl-interpreter with ID " + multi_cast<std::string>(id) + " existing."); 525 523 return 0; 526 524 } -
code/trunk/src/libraries/core/input/Button.cc
r7891 r8858 38 38 #include "util/SubString.h" 39 39 #include "util/StringUtils.h" 40 #include "util/ Debug.h"40 #include "util/Output.h" 41 41 #include "core/command/ConsoleCommand.h" 42 42 #include "core/command/CommandEvaluation.h" … … 255 255 if (serious) 256 256 { 257 COUT(2) << "Error while parsing binding for button/axis " << this->name_ << ". "258 << message << std::endl;257 orxout(internal_error, context::input) << "Error while parsing binding for button/axis " << this->name_ << ". " 258 << message << endl; 259 259 } 260 260 else 261 261 { 262 COUT(3) << "Warning while parsing binding for button/axis " << this->name_ << ". "263 << message << std::endl;262 orxout(internal_warning, context::input) << "Warning while parsing binding for button/axis " << this->name_ << ". " 263 << message << endl; 264 264 } 265 265 } -
code/trunk/src/libraries/core/input/InputDevice.h
r8351 r8858 43 43 44 44 #include "util/Clock.h" 45 #include "util/ Debug.h"45 #include "util/Output.h" 46 46 #include "util/Exception.h" 47 47 #include "InputState.h" … … 135 135 // invalid right until the subclass has been constructed! 136 136 oisDevice_->setEventCallback(static_cast<DeviceClass*>(this)); 137 COUT(4) << "Instantiated a " << this->getClassName() << std::endl;137 orxout(verbose, context::input) << "Instantiated a " << this->getClassName() << endl; 138 138 } 139 139 … … 147 147 catch (const OIS::Exception& ex) 148 148 { 149 COUT(1) << this->getClassName() << " destruction failed: " << ex.eText << std::endl150 << " Potential resource leak!" << std::endl;149 orxout(internal_error, context::input) << this->getClassName() << " destruction failed: " << ex.eText << '\n' 150 << "Potential resource leak!" << endl; 151 151 } 152 152 } -
code/trunk/src/libraries/core/input/InputManager.cc
r8729 r8858 100 100 RegisterRootObject(InputManager); 101 101 102 CCOUT(4) << "Constructing..." << std::endl;102 orxout(internal_status, context::input) << "InputManager: Constructing..." << endl; 103 103 104 104 // Allocate space for the function call buffer … … 128 128 ModifyConsoleCommand(__CC_InputManager_name, __CC_reload_name).setObject(this); 129 129 130 CCOUT(4) << "Construction complete." << std::endl;130 orxout(internal_status, context::input) << "InputManager: Construction complete." << endl; 131 131 internalState_ = Nothing; 132 132 } … … 143 143 void InputManager::loadDevices() 144 144 { 145 CCOUT(4) << "Loading input devices..." << std::endl;145 orxout(verbose, context::input) << "InputManager: Loading input devices..." << endl; 146 146 147 147 // When loading the devices they should not already be loaded … … 196 196 // Exception-safety 197 197 Loki::ScopeGuard guard = Loki::MakeGuard(OIS::InputManager::destroyInputSystem, oisInputManager_); 198 CCOUT(4) << "Created OIS input manager." << std::endl;198 orxout(verbose, context::input) << "Created OIS input manager." << endl; 199 199 200 200 if (oisInputManager_->getNumberOfDevices(OIS::OISKeyboard) > 0) … … 219 219 this->updateActiveStates(); 220 220 221 CCOUT(4) << "Input devices loaded." << std::endl;221 orxout(verbose, context::input) << "Input devices loaded." << endl; 222 222 } 223 223 … … 233 233 catch (const std::exception& ex) 234 234 { 235 CCOUT(2) << "Warning: Failed to create Mouse:" << ex.what() << std::endl236 << "Proceeding without mouse support." << std::endl;237 } 238 } 239 else 240 CCOUT(2) << "Warning: No mouse found! Proceeding without mouse support." << std::endl;235 orxout(user_warning, context::input) << "Failed to create Mouse:" << ex.what() << '\n' 236 << "Proceeding without mouse support." << endl; 237 } 238 } 239 else 240 orxout(user_warning, context::input) << "No mouse found! Proceeding without mouse support." << endl; 241 241 } 242 242 … … 252 252 catch (const std::exception& ex) 253 253 { 254 CCOUT(2) << "Warning: Failed to create joy stick: " << ex.what() << std::endl;254 orxout(user_warning, context::input) << "Failed to create joy stick: " << ex.what() << endl; 255 255 } 256 256 } … … 270 270 InputManager::~InputManager() 271 271 { 272 CCOUT(3) << "Destroying..." << std::endl;272 orxout(internal_status, context::input) << "InputManager: Destroying..." << endl; 273 273 274 274 // Leave all active InputStates (except "empty") … … 295 295 ModifyConsoleCommand(__CC_InputManager_name, __CC_reload_name).setObject(0); 296 296 297 CCOUT(3) << "Destruction complete." << std::endl;297 orxout(internal_status, context::input) << "InputManager: Destruction complete." << endl; 298 298 } 299 299 … … 306 306 void InputManager::destroyDevices() 307 307 { 308 CCOUT(4) << "Destroying devices..." << std::endl;308 orxout(verbose, context::input) << "InputManager: Destroying devices..." << endl; 309 309 310 310 BOOST_FOREACH(InputDevice*& device, devices_) … … 315 315 delete device; 316 316 device = 0; 317 CCOUT(4) << className << " destroyed." << std::endl;317 orxout(verbose, context::input) << className << " destroyed." << endl; 318 318 } 319 319 devices_.resize(InputDeviceEnumerator::FirstJoyStick); … … 326 326 catch (const OIS::Exception& ex) 327 327 { 328 COUT(1) << "OIS::InputManager destruction failed" << ex.eText << std::endl329 << " Potential resource leak!" << std::endl;328 orxout(internal_error, context::input) << "OIS::InputManager destruction failed" << ex.eText << '\n' 329 << "Potential resource leak!" << endl; 330 330 } 331 331 oisInputManager_ = NULL; 332 332 333 333 internalState_ |= Bad; 334 CCOUT(4) << "Destroyed devices." << std::endl;334 orxout(verbose, context::input) << "Destroyed devices." << endl; 335 335 } 336 336 … … 343 343 { 344 344 if (internalState_ & Calibrating) 345 CCOUT(2) << "Warning: Cannot reload input system. Joy sticks are currently being calibrated." << std::endl;345 orxout(internal_warning, context::input) << "Cannot reload input system. Joy sticks are currently being calibrated." << endl; 346 346 else 347 347 reloadInternal(); … … 351 351 void InputManager::reloadInternal() 352 352 { 353 CCOUT(4) << "Reloading ..." << std::endl;353 orxout(verbose, context::input) << "InputManager: Reloading ..." << endl; 354 354 355 355 this->destroyDevices(); … … 357 357 358 358 internalState_ &= ~Bad; 359 CCOUT(4) << "Reloading complete." << std::endl;359 orxout(verbose, context::input) << "InputManager: Reloading complete." << endl; 360 360 } 361 361 … … 471 471 void InputManager::calibrate() 472 472 { 473 COUT(0) << "Move all joy stick axes fully in all directions." << std::endl474 << "When done, put the axex in the middle position and press enter." << std::endl;473 orxout(message) << "Move all joy stick axes fully in all directions." << '\n' 474 << "When done, put the axex in the middle position and press enter." << endl; 475 475 476 476 BOOST_FOREACH(InputDevice* device, devices_) … … 495 495 this->clearBuffers(); 496 496 497 COUT(0) << "Calibration has been stored." << std::endl;497 orxout(message) << "Calibration has been stored." << endl; 498 498 } 499 499 … … 535 535 if (it->second->getPriority() == priority) 536 536 { 537 COUT(2) << "Warning:Could not add an InputState with the same priority '"538 << static_cast<int>(priority) << "' != 0." << std::endl;537 orxout(internal_warning, context::input) << "Could not add an InputState with the same priority '" 538 << static_cast<int>(priority) << "' != 0." << endl; 539 539 return 0; 540 540 } … … 548 548 else 549 549 { 550 COUT(2) << "Warning: Could not add an InputState with the same name '" << name << "'." << std::endl;550 orxout(internal_warning, context::input) << "Could not add an InputState with the same name '" << name << "'." << endl; 551 551 return 0; 552 552 } … … 598 598 if (name == "empty") 599 599 { 600 COUT(2) << "InputManager: Leaving the empty state is not allowed!" << std::endl;600 orxout(internal_warning, context::input) << "InputManager: Leaving the empty state is not allowed!" << endl; 601 601 return false; 602 602 } … … 623 623 if (name == "empty") 624 624 { 625 COUT(2) << "InputManager: Removing the empty state is not allowed!" << std::endl;625 orxout(internal_warning, context::input) << "InputManager: Removing the empty state is not allowed!" << endl; 626 626 return false; 627 627 } … … 649 649 if (name == "empty") 650 650 { 651 COUT(2) << "InputManager: Changing the empty state is not allowed!" << std::endl;651 orxout(internal_warning, context::input) << "InputManager: Changing the empty state is not allowed!" << endl; 652 652 return false; 653 653 } -
code/trunk/src/libraries/core/input/JoyStick.cc
r6536 r8858 80 80 } 81 81 82 COUT(4) << "Created OIS joy stick with ID " << deviceName_ << std::endl;82 orxout(verbose, context::input) << "Created OIS joy stick with ID " << deviceName_ << endl; 83 83 84 84 // Load calibration -
code/trunk/src/libraries/core/input/KeyBinder.cc
r8366 r8858 32 32 #include <sstream> 33 33 #include "util/Convert.h" 34 #include "util/ Debug.h"34 #include "util/Output.h" 35 35 #include "util/Exception.h" 36 36 #include "core/ConfigValueIncludes.h" … … 251 251 void KeyBinder::loadBindings() 252 252 { 253 COUT(3) << "KeyBinder: Loading key bindings..." << std::endl;253 orxout(internal_info, context::input) << "KeyBinder: Loading key bindings..." << endl; 254 254 255 255 this->configFile_ = new ConfigFile(this->filename_, !PathConfig::buildDirectoryRun()); … … 277 277 } 278 278 279 COUT(3) << "KeyBinder: Loading key bindings done." << std::endl;279 orxout(internal_info, context::input) << "KeyBinder: Loading key bindings done." << endl; 280 280 } 281 281 … … 294 294 else 295 295 { 296 COUT(2) << "Could not find key/button/axis with name '" << name << "'." << std::endl;296 orxout(internal_warning, context::input) << "Could not find key/button/axis with name '" << name << "'." << endl; 297 297 return false; 298 298 } -
code/trunk/src/libraries/core/input/KeyBinderManager.cc
r7284 r8858 29 29 #include "KeyBinderManager.h" 30 30 31 #include "util/ Debug.h"31 #include "util/Output.h" 32 32 #include "util/Exception.h" 33 33 #include "util/ScopedSingletonManager.h" … … 168 168 if (!this->bBinding_) 169 169 { 170 COUT(0) << "Press any button/key or move a mouse/joystick axis" << std::endl;170 orxout(message) << "Press any button/key or move a mouse/joystick axis" << endl; 171 171 KeyDetector::getInstance().setCallback(createFunctor(&KeyBinderManager::keybindKeyPressed, this)); 172 172 InputManager::getInstance().enterState("detector"); … … 185 185 if (keyName == "Keys.KeyEscape") 186 186 { 187 COUT(0) << "Keybinding aborted." << std::endl;187 orxout(message) << "Keybinding aborted." << endl; 188 188 } 189 189 else 190 190 { 191 COUT(0) << "Binding string \"" << command_ << "\" on key '" << keyName << "'" << std::endl;191 orxout(message) << "Binding string \"" << command_ << "\" on key '" << keyName << "'" << endl; 192 192 this->currentBinder_->setBinding(command_, keyName, bTemporary_); 193 193 }
Note: See TracChangeset
for help on using the changeset viewer.