X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=radiant%2Fpreferences.cpp;h=03486fd861b4abc81997dd36b48f88f59e3e7613;hb=a6e2bf8e2dd2b6feaa2c3f72735aa067d0085175;hp=021dc9372cf598d07b0886b9efae5d3b0bbaac6b;hpb=f5b144e467d55a20e83aaedc85703d707b400121;p=xonotic%2Fnetradiant.git diff --git a/radiant/preferences.cpp b/radiant/preferences.cpp index 021dc937..03486fd8 100644 --- a/radiant/preferences.cpp +++ b/radiant/preferences.cpp @@ -39,6 +39,13 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #include "missing.h" #include "gtkmisc.h" +#ifdef _WIN32 + // sanity check - some gtk2 win32 runtimes replace sprintf + #if defined( sprintf ) + #error sprintf is a macro. are you sure? + #endif +#endif + #ifdef _WIN32 #include #define X_OK 0 @@ -96,6 +103,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #define WIDETOOLBAR_KEY "WideToolBar" #define PLUGINTOOLBAR_KEY "PluginToolBar" #define NOCLAMP_KEY "NoClamp" +#define SNAP_KEY "Snap" #define PREFAB_KEY "PrefabPath" #define USERINI_KEY "UserINIPath" #define ROTATION_KEY "Rotation" @@ -635,6 +643,7 @@ PrefsDlg::PrefsDlg () m_bWideToolbar = TRUE; m_bPluginToolbar = TRUE; m_bNoClamp = FALSE; + m_bSnap = TRUE; m_strUserPath = ""; m_nRotation = 0; m_bChaseMouse = FALSE; @@ -695,30 +704,24 @@ Games selection dialog */ #if defined(WIN32) +#define TOOLS_ATTRIBUTE "gametools_win32" #define ENGINE_ATTRIBUTE "engine_win32" +#define ENGINEPATH_ATTRIBUTE "enginepath_win32" #define MP_ENGINE_ATTRIBUTE "mp_engine_win32" #elif defined(__linux__) || defined (__FreeBSD__) +#define TOOLS_ATTRIBUTE "gametools_linux" #define ENGINE_ATTRIBUTE "engine_linux" +#define ENGINEPATH_ATTRIBUTE "enginepath_linux" #define MP_ENGINE_ATTRIBUTE "mp_engine_linux" #elif defined(__APPLE__) +#define TOOLS_ATTRIBUTE "gametools_macos" #define ENGINE_ATTRIBUTE "engine_macos" +#define ENGINEPATH_ATTRIBUTE "enginepath_macos" #define MP_ENGINE_ATTRIBUTE "mp_engine_macos" #else #error "unsupported platform" #endif - -#if defined(WIN32) -#define ENGINEPATH_ATTRIBUTE "enginepath_win32" -#elif defined(__linux__) || defined (__FreeBSD__) -#define ENGINEPATH_ATTRIBUTE "enginepath_linux" -#elif defined(__APPLE__) -#define ENGINEPATH_ATTRIBUTE "enginepath_macos" -#else -#error "unknown platform" -#endif - - CGameDescription::CGameDescription(xmlDocPtr pDoc, const Str &GameFile) { char *p, *prop; @@ -733,9 +736,9 @@ CGameDescription::CGameDescription(xmlDocPtr pDoc, const Str &GameFile) Error("Didn't find 'game' node in the game description file '%s'\n", pDoc->URL); } // on win32, game tools path can now be specified relative to the exe's cwd - prop = (char*)xmlGetProp( pNode, (xmlChar*)"gametools" ); + prop = (char*)xmlGetProp( pNode, (xmlChar*)TOOLS_ATTRIBUTE); if ( prop == NULL ) { - Error( "Didn't find 'gametools' node in the game description file '%s'\n", pDoc->URL ); + Error( "Didn't find '"TOOLS_ATTRIBUTE"' node in the game description file '%s'\n", pDoc->URL ); } { char full[PATH_MAX]; @@ -2222,7 +2225,7 @@ void PrefsDlg::BuildDialog () #ifdef _WIN32 // win32 file dialog - check = gtk_check_button_new_with_label (_("Use win32 file load dialog")); + check = gtk_check_button_new_with_label (_("Use win32 file dialog (hacky)")); gtk_widget_show (check); // gtk_container_add (GTK_CONTAINER (vbox), check); gtk_box_pack_start(GTK_BOX(vbox), check, FALSE, FALSE, 0); @@ -2342,6 +2345,12 @@ void PrefsDlg::BuildDialog () gtk_box_pack_start(GTK_BOX(vbox), check, FALSE, FALSE, 0); AddDialogData (check, &m_bNoClamp, DLG_CHECK_BOOL); + // Snap to grid + check = gtk_check_button_new_with_label (_("Snap to grid")); + gtk_widget_show (check); + gtk_box_pack_start(GTK_BOX(vbox), check, FALSE, FALSE, 0); + AddDialogData (check, &m_bSnap, DLG_CHECK_BOOL); + // Select patch by bounding box check = gtk_check_button_new_with_label (_("Select patches by bounding box")); gtk_widget_show (check); @@ -2912,6 +2921,7 @@ void PrefsDlg::LoadPrefs () m_nShader = m_nLatchedShader; mLocalPrefs.GetPref(NOCLAMP_KEY, &m_bNoClamp, FALSE); + mLocalPrefs.GetPref(SNAP_KEY, &m_bSnap, TRUE); mLocalPrefs.GetPref(USERINI_KEY, &m_strUserPath, ""); mLocalPrefs.GetPref(ROTATION_KEY, &m_nRotation, 45); mLocalPrefs.GetPref(CHASEMOUSE_KEY, &m_bChaseMouse, TRUE); @@ -3226,14 +3236,14 @@ void CGameInstall::OnBtnBrowseEngine( GtkWidget *widget, gpointer data ) { Sys_Printf( "OnBtnBrowseEngine\n" ); CGameInstall* i = static_cast( data ); - char *dir = dir_dialog( widget, _("Select game directory"), NULL ); + char *dir = dir_dialog( i->m_pWidget, _("Select game directory"), NULL ); i->UpdateData( TRUE ); if ( dir != NULL ) { i->m_strEngine = dir; i->UpdateData( FALSE ); - free( dir ); + g_free( dir ); } } @@ -3292,6 +3302,9 @@ void CGameInstall::BuildDialog() { case GAME_TREMULOUS: gtk_combo_box_append_text( GTK_COMBO_BOX( combo ), _("Tremulous") ); break; + case GAME_JA: + gtk_combo_box_append_text( GTK_COMBO_BOX( combo ), _("Jedi Academy and mods") ); + break; } iGame++; } @@ -3353,6 +3366,9 @@ void CGameInstall::BuildDialog() { void CGameInstall::Run() { ScanGames(); + if ( m_availGames[0] == GAME_NONE ) { + return; + } if ( DoModal() == IDCANCEL ) { Sys_Printf( "game dialog cancelled\n" ); return; @@ -3366,7 +3382,7 @@ void CGameInstall::Run() { gameFilePath += ".game"; Sys_Printf( "game file: %s\n", gameFilePath.GetBuffer() ); - FILE *fg = fopen( gameFilePath.GetBuffer(), "w" ); + FILE * fg = fopen( gameFilePath.GetBuffer(), "w" ); if ( fg == NULL ) { Error( "Failed to open %s for writing\n", gameFilePath.GetBuffer() ); } @@ -3375,7 +3391,7 @@ void CGameInstall::Run() { fprintf( fg, " "ENGINEPATH_ATTRIBUTE"=\"%s\"\n", m_strEngine.GetBuffer() ); switch ( m_availGames[ m_nComboSelect ] ) { case GAME_Q2: { - fprintf( fg, " gametools=\"%sinstalls/Quake2Pack/game\"\n", g_strAppPath.GetBuffer() ); + fprintf( fg, " "TOOLS_ATTRIBUTE"=\"%sinstalls/Quake2Pack/game\"\n", g_strAppPath.GetBuffer() ); fprintf( fg, " prefix=\".quake2\"\n" ); Str source = g_strAppPath.GetBuffer(); source += "installs/"; @@ -3387,7 +3403,7 @@ void CGameInstall::Run() { break; } case GAME_Q3: { - fprintf( fg, " gametools=\"%sinstalls/Q3Pack/game\"\n", g_strAppPath.GetBuffer() ); + fprintf( fg, " "TOOLS_ATTRIBUTE"=\"%sinstalls/Q3Pack/game\"\n", g_strAppPath.GetBuffer() ); fprintf( fg, " prefix=\".q3a\"\n" ); Str source = g_strAppPath.GetBuffer(); source += "installs/"; @@ -3399,7 +3415,7 @@ void CGameInstall::Run() { break; } case GAME_URT: { - fprintf( fg, " gametools=\"%sinstalls/UrTPack/game\"\n", g_strAppPath.GetBuffer() ); + fprintf( fg, " "TOOLS_ATTRIBUTE"=\"%sinstalls/UrTPack/game\"\n", g_strAppPath.GetBuffer() ); fprintf( fg, " prefix=\".q3a\"\n" ); Str source = g_strAppPath.GetBuffer(); source += "installs/"; @@ -3411,7 +3427,7 @@ void CGameInstall::Run() { break; } case GAME_UFOAI: { - fprintf( fg, " gametools=\"%sinstalls/UFOAIPack/game\"\n", g_strAppPath.GetBuffer() ); + fprintf( fg, " "TOOLS_ATTRIBUTE"=\"%sinstalls/UFOAIPack/game\"\n", g_strAppPath.GetBuffer() ); fprintf( fg, " prefix=\".ufoai\"\n" ); Str source = g_strAppPath.GetBuffer(); source += "installs/"; @@ -3423,7 +3439,7 @@ void CGameInstall::Run() { break; } case GAME_Q2W: { - fprintf( fg, " gametools=\"%sinstalls/Q2WPack/game\"\n", g_strAppPath.GetBuffer() ); + fprintf( fg, " "TOOLS_ATTRIBUTE"=\"%sinstalls/Q2WPack/game\"\n", g_strAppPath.GetBuffer() ); fprintf( fg, " prefix=\".quake2world\"\n" ); Str source = g_strAppPath.GetBuffer(); source += "installs/"; @@ -3435,7 +3451,7 @@ void CGameInstall::Run() { break; } case GAME_WARSOW: { - fprintf( fg, " gametools=\"%sinstalls/WarsowPack/game\"\n", g_strAppPath.GetBuffer() ); + fprintf( fg, " "TOOLS_ATTRIBUTE"=\"%sinstalls/WarsowPack/game\"\n", g_strAppPath.GetBuffer() ); fprintf( fg, " prefix=\".warsow\"\n" ); Str source = g_strAppPath.GetBuffer(); source += "installs/"; @@ -3447,7 +3463,7 @@ void CGameInstall::Run() { break; } case GAME_NEXUIZ: { - fprintf( fg, " gametools=\"%sinstalls/NexuizPack/game\"\n", g_strAppPath.GetBuffer() ); + fprintf( fg, " "TOOLS_ATTRIBUTE"=\"%sinstalls/NexuizPack/game\"\n", g_strAppPath.GetBuffer() ); fprintf( fg, " prefix=\".nexuiz\"\n" ); Str source = g_strAppPath.GetBuffer(); source += "installs/"; @@ -3459,7 +3475,7 @@ void CGameInstall::Run() { break; } case GAME_TREMULOUS: { - fprintf( fg, " gametools=\"%sinstalls/TremulousPack/game\"\n", g_strAppPath.GetBuffer() ); + fprintf( fg, " "TOOLS_ATTRIBUTE"=\"%sinstalls/TremulousPack/game\"\n", g_strAppPath.GetBuffer() ); fprintf( fg, " prefix=\".tremulous\"\n" ); Str source = g_strAppPath.GetBuffer(); source += "installs/"; @@ -3470,6 +3486,18 @@ void CGameInstall::Run() { fprintf( fg, " basegame=\"base\"\n" ); break; } + case GAME_JA: { + fprintf( fg, " "TOOLS_ATTRIBUTE"=\"%sinstalls/JAPack/game\"\n", g_strAppPath.GetBuffer() ); + fprintf( fg, " prefix=\".ja\"\n" ); + Str source = g_strAppPath.GetBuffer(); + source += "installs/"; + source += JA_PACK; + source += "/install/"; + Str dest = m_strEngine.GetBuffer(); + CopyTree( source.GetBuffer(), dest.GetBuffer() ); + fprintf( fg, " basegame=\"base\"\n" ); + break; + } } fprintf( fg, "/>\n" ); fclose( fg ); @@ -3513,6 +3541,11 @@ void CGameInstall::ScanGames() { if ( stricmp( dirname, TREMULOUS_PACK ) == 0 ) { m_availGames[ iGame++ ] = GAME_TREMULOUS; } + if ( stricmp( dirname, JA_PACK ) == 0 ) { + m_availGames[ iGame++ ] = GAME_JA; + } } + Sys_Printf("No installable games found in: %s\n", + pakPaths.GetBuffer() ); }