X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=radiant%2Fmain.cpp;h=386f7106c2dacbd8e5e5b7e88b1481052b3aa7c7;hb=1f8255e7f4c544f489ce8c64b1b2879bcdc3c913;hp=6620d662ab655410ab6033feb77e5ea1e983f70a;hpb=c52a4bd4da209e657018e8d799dcb488cd848e4c;p=xonotic%2Fnetradiant.git diff --git a/radiant/main.cpp b/radiant/main.cpp index 6620d662..386f7106 100644 --- a/radiant/main.cpp +++ b/radiant/main.cpp @@ -49,7 +49,7 @@ \link math/plane.h math/plane.h \endlink - Planes \n \link math/aabb.h math/aabb.h \endlink - AABBs \n - Callback MemberCaller FunctionCaller - callbacks similar to using boost::function with boost::bind \n + Callback MemberCaller0 FunctionCaller - callbacks similar to using boost::function with boost::bind \n SmartPointer SmartReference - smart-pointer and smart-reference similar to Loki's SmartPtr \n \link generic/bitfield.h generic/bitfield.h \endlink - Type-safe bitfield \n @@ -62,6 +62,7 @@ */ #include "main.h" +#include "globaldefs.h" #include "version.h" @@ -70,7 +71,6 @@ #include "iundo.h" #include "uilib/uilib.h" -#include #include "cmdlib.h" #include "os/file.h" @@ -90,7 +90,7 @@ #include "referencecache.h" #include "stacktrace.h" -#ifdef WIN32 +#if GDEF_OS_WINDOWS #include #endif @@ -214,12 +214,12 @@ void error_redirect( const gchar *domain, GLogLevelFlags log_level, const gchar } } -#if defined ( _DEBUG ) && defined ( WIN32 ) && defined ( _MSC_VER ) +#if GDEF_COMPILER_MSVC && GDEF_DEBUG #include "crtdbg.h" #endif void crt_init(){ -#if defined ( _DEBUG ) && defined ( WIN32 ) && defined ( _MSC_VER ) +#if GDEF_COMPILER_MSVC && GDEF_DEBUG _CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF ); #endif } @@ -302,16 +302,16 @@ bool handleMessage(){ globalErrorStream() << m_buffer.c_str(); if ( !m_lock.locked() ) { ScopedLock lock( m_lock ); -#if defined _DEBUG - m_buffer << "Break into the debugger?\n"; - bool handled = ui::root.alert( m_buffer.c_str(), "Radiant - Runtime Error", ui::alert_type::YESNO, ui::alert_icon::Error ) == ui::alert_response::NO; - m_buffer.clear(); - return handled; -#else - m_buffer << "Please report this error to the developers\n"; - ui::root.alert( m_buffer.c_str(), "Radiant - Runtime Error", ui::alert_type::OK, ui::alert_icon::Error ); - m_buffer.clear(); -#endif + if (GDEF_DEBUG) { + m_buffer << "Break into the debugger?\n"; + bool handled = ui::alert(ui::root, m_buffer.c_str(), RADIANT_NAME " - Runtime Error", ui::alert_type::YESNO, ui::alert_icon::Error) == ui::alert_response::NO; + m_buffer.clear(); + return handled; + } else { + m_buffer << "Please report this error to the developers\n"; + ui::alert(ui::root, m_buffer.c_str(), RADIANT_NAME " - Runtime Error", ui::alert_type::OK, ui::alert_icon::Error); + m_buffer.clear(); + } } return true; } @@ -325,18 +325,13 @@ void streams_init(){ } void paths_init(){ - const char* home = environment_get_home_path(); - Q_mkdir( home ); - - { - StringOutputStream path( 256 ); - path << home << "/"; - g_strSettingsPath = path.c_str(); - } + g_strSettingsPath = environment_get_home_path(); Q_mkdir( g_strSettingsPath.c_str() ); g_strAppPath = environment_get_app_path(); + g_strLibPath = environment_get_lib_path(); + g_strDataPath = environment_get_data_path(); // radiant is installed in the parent dir of "tools/" // NOTE: this is not very easy for debugging @@ -344,12 +339,12 @@ void paths_init(){ // (for now I had to create symlinks) { StringOutputStream path( 256 ); - path << g_strAppPath.c_str() << "bitmaps/"; + path << g_strDataPath.c_str() << "bitmaps/"; BitmapsPath_set( path.c_str() ); } // we will set this right after the game selection is done - g_strGameToolsPath = g_strAppPath; + g_strGameToolsPath = g_strDataPath; } bool check_version_file( const char* filename, const char* version ){ @@ -369,42 +364,6 @@ bool check_version_file( const char* filename, const char* version ){ return false; } -bool check_version(){ - // a safe check to avoid people running broken installations - // (otherwise, they run it, crash it, and blame us for not forcing them hard enough to pay attention while installing) - // make something idiot proof and someone will make better idiots, this may be overkill - // let's leave it disabled in debug mode in any case - // http://zerowing.idsoftware.com/bugzilla/show_bug.cgi?id=431 -#ifndef _DEBUG -#define CHECK_VERSION -#endif -#ifdef CHECK_VERSION - // locate and open RADIANT_MAJOR and RADIANT_MINOR - bool bVerIsGood = true; - { - StringOutputStream ver_file_name( 256 ); - ver_file_name << AppPath_get() << "RADIANT_MAJOR"; - bVerIsGood = check_version_file( ver_file_name.c_str(), RADIANT_MAJOR_VERSION ); - } - { - StringOutputStream ver_file_name( 256 ); - ver_file_name << AppPath_get() << "RADIANT_MINOR"; - bVerIsGood = check_version_file( ver_file_name.c_str(), RADIANT_MINOR_VERSION ); - } - - if ( !bVerIsGood ) { - StringOutputStream msg( 256 ); - msg << "This editor binary (" RADIANT_VERSION ") doesn't match what the latest setup has configured in this directory\n" - "Make sure you run the right/latest editor binary you installed\n" - << AppPath_get(); - ui::alert( 0, msg.c_str(), "Radiant", eMB_OK, eMB_ICONDEFAULT ); - } - return bVerIsGood; -#else - return true; -#endif -} - void create_global_pid(){ /*! the global prefs loading / game selection dialog might fail for any reason we don't know about @@ -425,25 +384,26 @@ void create_global_pid(){ if ( remove( g_pidFile.c_str() ) == -1 ) { StringOutputStream msg( 256 ); msg << "WARNING: Could not delete " << g_pidFile.c_str(); - ui::root.alert( msg.c_str(), "Radiant", ui::alert_type::OK, ui::alert_icon::Error ); + ui::alert( ui::root, msg.c_str(), RADIANT_NAME, ui::alert_type::OK, ui::alert_icon::Error ); } // in debug, never prompt to clean registry, turn console logging auto after a failed start -#if !defined( _DEBUG ) - StringOutputStream msg( 256 ); - msg << "Radiant failed to start properly the last time it was run.\n" - "The failure may be related to current global preferences.\n" - "Do you want to reset global preferences to defaults?"; - - if ( ui::root.alert( msg.c_str(), "Radiant - Startup Failure", ui::alert_type::YESNO, ui::alert_icon::QUESTION ) == ui::alert_response::YES ) { - g_GamesDialog.Reset(); - } + if (!GDEF_DEBUG) { + StringOutputStream msg(256); + msg << RADIANT_NAME " failed to start properly the last time it was run.\n" + "The failure may be related to current global preferences.\n" + "Do you want to reset global preferences to defaults?"; + + if (ui::alert(ui::root, msg.c_str(), RADIANT_NAME " - Startup Failure", ui::alert_type::YESNO, ui::alert_icon::Question) == ui::alert_response::YES) { + g_GamesDialog.Reset(); + } - msg.clear(); - msg << "Logging console output to " << SettingsPath_get() << "radiant.log\nRefer to the log if Radiant fails to start again."; + msg.clear(); + msg << "Logging console output to " << SettingsPath_get() + << "radiant.log\nRefer to the log if " RADIANT_NAME " fails to start again."; - ui::root.alert( msg.c_str(), "Radiant - Console Log", ui::alert_type::OK ); -#endif + ui::alert(ui::root, msg.c_str(), RADIANT_NAME " - Console Log", ui::alert_type::OK); + } // set without saving, the class is not in a coherent state yet // just do the value change and call to start logging, CGamesDialog will pickup when relevant @@ -466,7 +426,7 @@ void remove_global_pid(){ if ( remove( g_pidFile.c_str() ) == -1 ) { StringOutputStream msg( 256 ); msg << "WARNING: Could not delete " << g_pidFile.c_str(); - ui::root.alert( msg.c_str(), "Radiant", ui::alert_type::OK, ui::alert_icon::Error ); + ui::alert( ui::root, msg.c_str(), RADIANT_NAME, ui::alert_type::OK, ui::alert_icon::Error ); } } @@ -484,25 +444,26 @@ void create_local_pid(){ if ( remove( g_pidGameFile.c_str() ) == -1 ) { StringOutputStream msg; msg << "WARNING: Could not delete " << g_pidGameFile.c_str(); - ui::root.alert( msg.c_str(), "Radiant", ui::alert_type::OK, ui::alert_icon::Error ); + ui::alert( ui::root, msg.c_str(), RADIANT_NAME, ui::alert_type::OK, ui::alert_icon::Error ); } // in debug, never prompt to clean registry, turn console logging auto after a failed start -#if !defined( _DEBUG ) - StringOutputStream msg; - msg << "Radiant failed to start properly the last time it was run.\n" - "The failure may be caused by current preferences.\n" - "Do you want to reset all preferences to defaults?"; - - if ( ui::root.alert( msg.c_str(), "Radiant - Startup Failure", ui::alert_type::YESNO, ui::alert_icon::QUESTION ) == ui::alert_response::YES ) { - Preferences_Reset(); - } + if (!GDEF_DEBUG) { + StringOutputStream msg; + msg << RADIANT_NAME " failed to start properly the last time it was run.\n" + "The failure may be caused by current preferences.\n" + "Do you want to reset all preferences to defaults?"; - msg.clear(); - msg << "Logging console output to " << SettingsPath_get() << "radiant.log\nRefer to the log if Radiant fails to start again."; + if (ui::alert(ui::root, msg.c_str(), RADIANT_NAME " - Startup Failure", ui::alert_type::YESNO, ui::alert_icon::Question) == ui::alert_response::YES) { + Preferences_Reset(); + } - ui::root.alert( msg.c_str(), "Radiant - Console Log", ui::alert_type::OK ); -#endif + msg.clear(); + msg << "Logging console output to " << SettingsPath_get() + << "radiant.log\nRefer to the log if " RADIANT_NAME " fails to start again."; + + ui::alert(ui::root, msg.c_str(), RADIANT_NAME " - Console Log", ui::alert_type::OK); + } // force console logging on! (will go in prefs too) g_GamesDialog.m_bForceLogConsole = true; @@ -547,7 +508,7 @@ int main( int argc, char* argv[] ){ streams_init(); -#ifdef WIN32 +#if GDEF_OS_WINDOWS HMODULE lib; lib = LoadLibrary( "dwmapi.dll" ); if ( lib != 0 ) { @@ -559,15 +520,10 @@ int main( int argc, char* argv[] ){ } #endif - static GOptionEntry entries[] = { - { NULL } - }; - GError *error = NULL; const char* mapname = NULL; - - gtk_disable_setlocale(); - if ( !gtk_init_with_args( &argc, &argv, "", entries, NULL, &error) ) { - g_print( "%s\n", error->message ); + char const *error = NULL; + if ( !ui::init( &argc, &argv, "", &error) ) { + g_print( "%s\n", error ); return -1; } @@ -606,14 +562,10 @@ int main( int argc, char* argv[] ){ GlobalDebugMessageHandler::instance().setHandler( GlobalPopupDebugMessageHandler::instance() ); - environment_init( argc, argv ); + environment_init(argc, (char const **) argv); paths_init(); - if ( !check_version() ) { - return EXIT_FAILURE; - } - show_splash(); create_global_pid(); @@ -642,8 +594,6 @@ int main( int argc, char* argv[] ){ Radiant_Initialise(); - global_accel_init(); - user_shortcuts_init(); g_pParentWnd = 0; @@ -687,8 +637,6 @@ int main( int argc, char* argv[] ){ user_shortcuts_save(); - global_accel_destroy(); - Radiant_Shutdown(); // close the log file if any