\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
*/
#include "main.h"
+#include "globaldefs.h"
#include "version.h"
#include "iundo.h"
-#include <gtk/gtkmain.h>
+#include "uilib/uilib.h"
#include "cmdlib.h"
#include "os/file.h"
#include "referencecache.h"
#include "stacktrace.h"
-#ifdef WIN32
+#if GDEF_OS_WINDOWS
#include <windows.h>
#endif
}
}
-#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
}
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 = gtk_MessageBox( 0, m_buffer.c_str(), "Radiant - Runtime Error", eMB_YESNO, eMB_ICONERROR ) == eIDNO;
- m_buffer.clear();
- return handled;
-#else
- m_buffer << "Please report this error to the developers\n";
- gtk_MessageBox( 0, m_buffer.c_str(), "Radiant - Runtime Error", eMB_OK, eMB_ICONERROR );
- 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 - 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 - Runtime Error", ui::alert_type::OK, ui::alert_icon::Error);
+ m_buffer.clear();
+ }
}
return true;
}
}
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() );
// 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 (GDEF_DEBUG) {
+ return true;
+ }
+ // 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();
- gtk_MessageBox( 0, msg.c_str(), "Radiant", eMB_OK, eMB_ICONDEFAULT );
- }
- return bVerIsGood;
-#else
- return true;
-#endif
+ 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(ui::root, msg.c_str(), "Radiant", ui::alert_type::OK, ui::alert_icon::Default);
+ }
+ return bVerIsGood;
}
void create_global_pid(){
if ( remove( g_pidFile.c_str() ) == -1 ) {
StringOutputStream msg( 256 );
msg << "WARNING: Could not delete " << g_pidFile.c_str();
- gtk_MessageBox( 0, msg.c_str(), "Radiant", eMB_OK, eMB_ICONERROR );
+ ui::alert( ui::root, msg.c_str(), "Radiant", 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 ( gtk_MessageBox( 0, msg.c_str(), "Radiant - Startup Failure", eMB_YESNO, eMB_ICONQUESTION ) == eIDYES ) {
- g_GamesDialog.Reset();
- }
+ if (!GDEF_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::alert(ui::root, msg.c_str(), "Radiant - 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 fails to start again.";
- gtk_MessageBox( 0, msg.c_str(), "Radiant - Console Log", eMB_OK );
-#endif
+ ui::alert(ui::root, msg.c_str(), "Radiant - 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
if ( remove( g_pidFile.c_str() ) == -1 ) {
StringOutputStream msg( 256 );
msg << "WARNING: Could not delete " << g_pidFile.c_str();
- gtk_MessageBox( 0, msg.c_str(), "Radiant", eMB_OK, eMB_ICONERROR );
+ ui::alert( ui::root, msg.c_str(), "Radiant", ui::alert_type::OK, ui::alert_icon::Error );
}
}
if ( remove( g_pidGameFile.c_str() ) == -1 ) {
StringOutputStream msg;
msg << "WARNING: Could not delete " << g_pidGameFile.c_str();
- gtk_MessageBox( 0, msg.c_str(), "Radiant", eMB_OK, eMB_ICONERROR );
+ ui::alert( ui::root, msg.c_str(), "Radiant", 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 ( gtk_MessageBox( 0, msg.c_str(), "Radiant - Startup Failure", eMB_YESNO, eMB_ICONQUESTION ) == eIDYES ) {
- Preferences_Reset();
- }
+ if (!GDEF_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?";
- 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 - Startup Failure", ui::alert_type::YESNO, ui::alert_icon::Question) == ui::alert_response::YES) {
+ Preferences_Reset();
+ }
- gtk_MessageBox( 0, msg.c_str(), "Radiant - Console Log", eMB_OK );
-#endif
+ msg.clear();
+ msg << "Logging console output to " << SettingsPath_get()
+ << "radiant.log\nRefer to the log if Radiant fails to start again.";
+
+ ui::alert(ui::root, msg.c_str(), "Radiant - Console Log", ui::alert_type::OK);
+ }
// force console logging on! (will go in prefs too)
g_GamesDialog.m_bForceLogConsole = true;
SaveCommandMap( path.c_str() );
}
+void add_local_rc_files(){
+#define GARUX_DISABLE_GTKTHEME
+#ifndef GARUX_DISABLE_GTKTHEME
+/* FIXME: HACK: not GTK3 compatible
+ https://developer.gnome.org/gtk2/stable/gtk2-Resource-Files.html#gtk-rc-add-default-file
+ https://developer.gnome.org/gtk3/stable/gtk3-Resource-Files.html#gtk-rc-add-default-file
+ > gtk_rc_add_default_file has been deprecated since version 3.0 and should not be used in newly-written code.
+ > Use GtkStyleContext with a custom GtkStyleProvider instead
+*/
+
+ {
+ StringOutputStream path( 512 );
+ path << AppPath_get() << ".gtkrc-2.0.radiant";
+ gtk_rc_add_default_file( path.c_str() );
+ }
+#ifdef WIN32
+ {
+ StringOutputStream path( 512 );
+ path << AppPath_get() << ".gtkrc-2.0.win";
+ gtk_rc_add_default_file( path.c_str() );
+ }
+#endif
+#endif // GARUX_DISABLE_GTKTHEME
+}
+
int main( int argc, char* argv[] ){
crt_init();
streams_init();
-#ifdef WIN32
+#if GDEF_OS_WINDOWS
HMODULE lib;
lib = LoadLibrary( "dwmapi.dll" );
if ( lib != 0 ) {
void ( WINAPI *qDwmEnableComposition )( bool bEnable ) = ( void (WINAPI *) ( bool bEnable ) )GetProcAddress( lib, "DwmEnableComposition" );
if ( qDwmEnableComposition ) {
- qDwmEnableComposition( FALSE );
+ bool Aero = false;
+ for ( int i = 1; i < argc; ++i ){
+ if ( !stricmp( argv[i], "-aero" ) ){
+ Aero = true;
+ qDwmEnableComposition( TRUE );
+ break;
+ }
+ }
+ // disable Aero
+ if ( !Aero ){
+ qDwmEnableComposition( FALSE );
+ }
}
FreeLibrary( lib );
}
+ _setmaxstdio(2048);
#endif
- static GOptionEntry entries[] = {
- { NULL }
- };
- GError *error = NULL;
const char* mapname = NULL;
-
- gtk_disable_setlocale();
- if ( !gtk_init_with_args( &argc, &argv, "<filename.map>", entries, NULL, &error) ) {
- g_print( "%s\n", error->message );
+ char const *error = NULL;
+ if ( !ui::init( &argc, &argv, "<filename.map>", &error) ) {
+ g_print( "%s\n", error );
return -1;
}
GlobalDebugMessageHandler::instance().setHandler( GlobalPopupDebugMessageHandler::instance() );
- environment_init( argc, argv );
+ environment_init(argc, (char const **) argv);
paths_init();
+ add_local_rc_files();
+
if ( !check_version() ) {
return EXIT_FAILURE;
}
Radiant_Initialise();
- global_accel_init();
-
user_shortcuts_init();
g_pParentWnd = 0;
hide_splash();
+#ifdef WIN32
+ if( openCmdMap && *openCmdMap ){
+ Map_LoadFile( openCmdMap );
+ }
+ else
+#endif // WIN32
if ( mapname != NULL ) {
Map_LoadFile( mapname );
}
remove_local_pid();
- gtk_main();
+ ui::main();
// avoid saving prefs when the app is minimized
if ( g_pParentWnd->IsSleeping() ) {
user_shortcuts_save();
- global_accel_destroy();
-
Radiant_Shutdown();
// close the log file if any