diff --git a/src/common/FBSurfaceSDL2.hxx b/src/common/FBSurfaceSDL2.hxx index 220b3fe45..68aea08e2 100644 --- a/src/common/FBSurfaceSDL2.hxx +++ b/src/common/FBSurfaceSDL2.hxx @@ -34,7 +34,7 @@ class FBSurfaceSDL2 : public FBSurface public: FBSurfaceSDL2(FrameBufferSDL2& buffer, uInt32 width, uInt32 height, FrameBuffer::ScalingInterpolation interpolation, - const uInt32* data); + const uInt32* staticData); virtual ~FBSurfaceSDL2(); // Most of the surface drawing primitives are implemented in FBSurface; diff --git a/src/common/Logger.cxx b/src/common/Logger.cxx index 13119bf73..8d6970b29 100644 --- a/src/common/Logger.cxx +++ b/src/common/Logger.cxx @@ -49,23 +49,34 @@ void Logger::debug(const string& message) } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void Logger::logMessage(const string& message, Level level) const +void Logger::logMessage(const string& message, Level level) { - if (myLogCallback) - myLogCallback(message, level); - - else + if(level == Logger::Level::ERR) + { cout << message << endl << std::flush; + myLogMessages += message + "\n"; + } + else if(static_cast(level) <= myLogLevel) + { + if(myLogToConsole) + cout << message << endl << std::flush; + myLogMessages += message + "\n"; + } } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void Logger::setLogCallback(Logger::logCallback callback) +void Logger::setLogParameters(int logLevel, bool logToConsole) { - myLogCallback = callback; + if(logLevel >= static_cast(Level::MIN) && + logLevel <= static_cast(Level::MAX)) + { + myLogLevel = logLevel; + myLogToConsole = logToConsole; + } } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void Logger::clearLogCallback() +void Logger::setLogParameters(Level logLevel, bool logToConsole) { - myLogCallback = logCallback(); + setLogParameters(static_cast(logLevel), logToConsole); } diff --git a/src/common/Logger.hxx b/src/common/Logger.hxx index 1189da485..ddca52b65 100644 --- a/src/common/Logger.hxx +++ b/src/common/Logger.hxx @@ -34,8 +34,6 @@ class Logger { MAX = DEBUG }; - using logCallback = std::function; - public: static Logger& instance(); @@ -48,21 +46,23 @@ class Logger { static void debug(const string& message); - void setLogCallback(logCallback callback); + void setLogParameters(int logLevel, bool logToConsole); + void setLogParameters(Level logLevel, bool logToConsole); - void clearLogCallback(); + const string& logMessages() const { return myLogMessages; } protected: - - Logger() = default; + Logger() { setLogParameters(Level::MAX, true); } private: + int myLogLevel; + bool myLogToConsole; - logCallback myLogCallback; + // The list of log messages + string myLogMessages; private: - - void logMessage(const string& message, Level level) const; + void logMessage(const string& message, Level level); Logger(const Logger&) = delete; Logger(Logger&&) = delete; diff --git a/src/emucore/OSystem.cxx b/src/emucore/OSystem.cxx index d54b0a8e7..d949cca43 100644 --- a/src/emucore/OSystem.cxx +++ b/src/emucore/OSystem.cxx @@ -78,7 +78,6 @@ namespace { OSystem::OSystem() : myLauncherUsed(false), myQuitLoop(false), - mySettingsLoaded(false), myFpsMeter(FPS_METER_QUEUE_SIZE) { // Get built-in features @@ -103,7 +102,6 @@ OSystem::OSystem() // Get build info ostringstream info; - info << "Build " << STELLA_BUILD << ", using " << MediaFactory::backendName() << " [" << BSPF::ARCH << "]"; myBuildInfo = info.str(); @@ -112,15 +110,12 @@ OSystem::OSystem() myPropSet = make_unique(); - Logger::instance().setLogCallback( - std::bind(&OSystem::logMessage, this, std::placeholders::_1, std::placeholders::_2) - ); + Logger::instance().setLogParameters(Logger::Level::MAX, false); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - OSystem::~OSystem() { - Logger::instance().clearLogCallback(); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -232,9 +227,11 @@ void OSystem::loadConfig(const Settings::Options& options) mySettings->setRepository(createSettingsRepository()); - Logger::debug("Loading config options ..."); mySettings->load(options); - mySettingsLoaded = true; + + Logger::instance().setLogParameters(mySettings->getInt("loglevel"), + mySettings->getBool("logtoconsole")); + Logger::debug("Loading config options ..."); // Get updated paths for all configuration files setConfigPaths(); @@ -505,22 +502,6 @@ string OSystem::getROMInfo(const FilesystemNode& romfile) return getROMInfo(*console); } -// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void OSystem::logMessage(const string& message, Logger::Level level) -{ - if(level == Logger::Level::ERR) - { - cout << message << endl << std::flush; - myLogMessages += message + "\n"; - } - else if(int(level) <= uInt8(mySettings->getInt("loglevel")) || !mySettingsLoaded) - { - if(mySettings->getBool("logtoconsole")) - cout << message << endl << std::flush; - myLogMessages += message + "\n"; - } -} - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void OSystem::resetFps() { diff --git a/src/emucore/OSystem.hxx b/src/emucore/OSystem.hxx index da0dc471b..fbf8a979b 100644 --- a/src/emucore/OSystem.hxx +++ b/src/emucore/OSystem.hxx @@ -375,13 +375,6 @@ class OSystem */ void quit() { myQuitLoop = true; } - /** - Get the system messages logged up to this point. - - @return The list of log messages - */ - const string& logMessages() const { return myLogMessages; } - /** Reset FPS measurement. */ @@ -424,16 +417,6 @@ class OSystem virtual shared_ptr createSettingsRepository(); - /** - Append a message to the internal log - (a newline is automatically added). - - @param message The message to be appended - @param level If 0, always output the message, only append when - level is less than or equal to that in 'loglevel' - */ - void logMessage(const string& message, Logger::Level level); - ////////////////////////////////////////////////////////////////////// // The following methods are system-specific and *must* be // implemented in derived classes. @@ -518,9 +501,6 @@ class OSystem // Pointer to the TimerManager object unique_ptr myTimerManager; - // The list of log messages - string myLogMessages; - // Indicates whether ROM launcher was ever opened during this run bool myLauncherUsed; @@ -536,8 +516,6 @@ class OSystem string myDefaultSaveDir; string myDefaultLoadDir; - bool mySettingsLoaded; - string myCheatFile; string myConfigFile; string myPaletteFile; diff --git a/src/gui/LoggerDialog.cxx b/src/gui/LoggerDialog.cxx index ec58a1531..624174238 100644 --- a/src/gui/LoggerDialog.cxx +++ b/src/gui/LoggerDialog.cxx @@ -58,9 +58,9 @@ LoggerDialog::LoggerDialog(OSystem& osystem, DialogContainer& parent, // Level of logging (how much info to print) VariantList items; - VarList::push_back(items, "None", int(Logger::Level::ERR)); - VarList::push_back(items, "Basic", int(Logger::Level::INFO)); - VarList::push_back(items, "Verbose", int(Logger::Level::DEBUG)); + VarList::push_back(items, "None", static_cast(Logger::Level::ERR)); + VarList::push_back(items, "Basic", static_cast(Logger::Level::INFO)); + VarList::push_back(items, "Verbose", static_cast(Logger::Level::DEBUG)); myLogLevel = new PopUpWidget(this, font, xpos, ypos, font.getStringWidth("Verbose"), lineHeight, items, "Log level ", @@ -86,21 +86,26 @@ LoggerDialog::LoggerDialog(OSystem& osystem, DialogContainer& parent, // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void LoggerDialog::loadConfig() { - StringParser parser(instance().logMessages()); + StringParser parser(Logger::instance().logMessages()); myLogInfo->setList(parser.stringList()); myLogInfo->setSelected(0); myLogInfo->scrollToEnd(); - myLogLevel->setSelected(instance().settings().getString("loglevel"), int(Logger::Level::INFO)); + myLogLevel->setSelected(instance().settings().getString("loglevel"), + static_cast(Logger::Level::INFO)); myLogToConsole->setState(instance().settings().getBool("logtoconsole")); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void LoggerDialog::saveConfig() { - instance().settings().setValue("loglevel", - myLogLevel->getSelectedTag().toString()); - instance().settings().setValue("logtoconsole", myLogToConsole->getState()); + int loglevel = myLogLevel->getSelectedTag().toInt(); + bool logtoconsole = myLogToConsole->getState(); + + instance().settings().setValue("loglevel", loglevel); + instance().settings().setValue("logtoconsole", logtoconsole); + + Logger::instance().setLogParameters(loglevel, logtoconsole); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -113,7 +118,7 @@ void LoggerDialog::saveLogFile() ofstream out(node.getPath()); if(out.is_open()) { - out << instance().logMessages(); + out << Logger::instance().logMessages(); instance().frameBuffer().showMessage("Saving log file to " + path.str()); } }