mirror of
https://github.com/TTimo/GtkRadiant.git
synced 2025-01-10 12:01:10 +00:00
* introduced a new config variable to be able to load maps directly from the enginePath/basePath/maps directory
git-svn-id: svn://svn.icculus.org/gtkradiant/GtkRadiant/trunk@286 8a3a26a2-13c4-0310-b231-cf6edde360e5
This commit is contained in:
parent
3138825cde
commit
88d21daa67
5 changed files with 71 additions and 36 deletions
|
@ -1197,7 +1197,10 @@ private:
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const char* file_dialog (void *parent, gboolean open, const char* title, const char* path, const char* pattern)
|
/**
|
||||||
|
* @param[in] baseSubDir should have a trailing slash if not @c NULL
|
||||||
|
*/
|
||||||
|
const char* file_dialog (void *parent, gboolean open, const char* title, const char* path, const char* pattern, const char *baseSubDir)
|
||||||
{
|
{
|
||||||
// Gtk dialog
|
// Gtk dialog
|
||||||
GtkWidget* file_sel;
|
GtkWidget* file_sel;
|
||||||
|
@ -1290,6 +1293,7 @@ const char* file_dialog (void *parent, gboolean open, const char* title, const c
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
#endif
|
#endif
|
||||||
|
char buf[PATH_MAX];
|
||||||
// do that the Gtk way
|
// do that the Gtk way
|
||||||
if (title == NULL)
|
if (title == NULL)
|
||||||
title = open ? _("Open File") : _("Save File");
|
title = open ? _("Open File") : _("Save File");
|
||||||
|
@ -1300,14 +1304,13 @@ const char* file_dialog (void *parent, gboolean open, const char* title, const c
|
||||||
// we expect an actual path below, if the path is NULL we might crash
|
// we expect an actual path below, if the path is NULL we might crash
|
||||||
if (!path || path[0] == '\0')
|
if (!path || path[0] == '\0')
|
||||||
{
|
{
|
||||||
#ifdef _WIN32
|
strcpy(buf, g_pGameDescription->mEnginePath.GetBuffer());
|
||||||
path = "C:\\";
|
strcat(buf, g_pGameDescription->mBaseGame.GetBuffer());
|
||||||
#elif defined (__linux__) || defined (__APPLE__)
|
strcat(buf, "/");
|
||||||
path = "/";
|
if (baseSubDir)
|
||||||
#else
|
strcat(buf, baseSubDir);
|
||||||
path = "/";
|
path = buf;
|
||||||
#endif
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// alloc new path with extra char for dir separator
|
// alloc new path with extra char for dir separator
|
||||||
new_path = new char[strlen(path)+1+1];
|
new_path = new char[strlen(path)+1+1];
|
||||||
|
@ -1320,16 +1323,13 @@ const char* file_dialog (void *parent, gboolean open, const char* title, const c
|
||||||
*w = '\0';
|
*w = '\0';
|
||||||
|
|
||||||
#ifdef FILEDLG_DBG
|
#ifdef FILEDLG_DBG
|
||||||
Sys_Printf("Done.\n");
|
Sys_Printf("Done.\n");
|
||||||
Sys_Printf("Calling gtk_file_selection_new with title: %s...", title);
|
Sys_Printf("Calling gtk_file_selection_new with title: %s...", title);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
file_sel = gtk_file_selection_new (title);
|
file_sel = gtk_file_selection_new (title);
|
||||||
gtk_file_selection_set_filename(GTK_FILE_SELECTION(file_sel), "/home/mattn/dev/ufoai/trunk/base/maps/");
|
|
||||||
|
|
||||||
#ifdef FILEDLG_DBG
|
#ifdef FILEDLG_DBG
|
||||||
Sys_Printf("Done.\n");
|
Sys_Printf("Done.\n");
|
||||||
Sys_Printf("Set the masks...");
|
Sys_Printf("Set the masks...");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if 0 //!\todo Add masks to GtkFileSelection in gtk-2.0
|
#if 0 //!\todo Add masks to GtkFileSelection in gtk-2.0
|
||||||
|
@ -1380,7 +1380,7 @@ const char* file_dialog (void *parent, gboolean open, const char* title, const c
|
||||||
if (new_path != NULL)
|
if (new_path != NULL)
|
||||||
{
|
{
|
||||||
#ifdef FILEDLG_DBG
|
#ifdef FILEDLG_DBG
|
||||||
Sys_Printf("gtk_file_selection_set_filename... %p", file_sel);
|
Sys_Printf("gtk_file_selection_set_filename... %p (%s)", file_sel, new_path);
|
||||||
#endif
|
#endif
|
||||||
gtk_file_selection_set_filename (GTK_FILE_SELECTION (file_sel), new_path);
|
gtk_file_selection_set_filename (GTK_FILE_SELECTION (file_sel), new_path);
|
||||||
delete[] new_path;
|
delete[] new_path;
|
||||||
|
|
|
@ -81,7 +81,7 @@ URL adds an optional 'go to URL' button
|
||||||
int WINAPI gtk_MessageBox (void *parent, const char* lpText, const char* lpCaption = "Radiant", guint32 uType = MB_OK, const char* URL = NULL);
|
int WINAPI gtk_MessageBox (void *parent, const char* lpText, const char* lpCaption = "Radiant", guint32 uType = MB_OK, const char* URL = NULL);
|
||||||
// NOTE: the returned filename is allocated with g_malloc and MUST be freed with g_free (both for win32 and Gtk dialogs)
|
// NOTE: the returned filename is allocated with g_malloc and MUST be freed with g_free (both for win32 and Gtk dialogs)
|
||||||
// GtkWidget *parent
|
// GtkWidget *parent
|
||||||
const char* file_dialog (void *parent, gboolean open, const char* title, const char* path = (char*)NULL, const char* pattern = NULL);
|
const char* file_dialog (void *parent, gboolean open, const char* title, const char* path = (char*)NULL, const char* pattern = NULL, const char *baseSubDir = NULL);
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\fn dir_dialog, prompts for a directory
|
\fn dir_dialog, prompts for a directory
|
||||||
|
|
|
@ -1425,7 +1425,7 @@ void MainFrame::create_main_menu (GtkWidget *window, GtkWidget *vbox)
|
||||||
item = create_menu_item_with_mnemonic (menu, _("Previous leak spot"),
|
item = create_menu_item_with_mnemonic (menu, _("Previous leak spot"),
|
||||||
GTK_SIGNAL_FUNC (HandleCommand), ID_MISC_PREVIOUSLEAKSPOT);
|
GTK_SIGNAL_FUNC (HandleCommand), ID_MISC_PREVIOUSLEAKSPOT);
|
||||||
// http://zerowing.idsoftware.com/bugzilla/show_bug.cgi?id=394
|
// http://zerowing.idsoftware.com/bugzilla/show_bug.cgi?id=394
|
||||||
// create_menu_item_with_mnemonic (menu, "_Print XY View", GTK_SIGNAL_FUNC (HandleCommand), ID_MISC_PRINTXY);
|
// create_menu_item_with_mnemonic (menu, _("_Print XY View"), GTK_SIGNAL_FUNC (HandleCommand), ID_MISC_PRINTXY);
|
||||||
item = create_menu_item_with_mnemonic (menu, _("_Select Entity Color..."),
|
item = create_menu_item_with_mnemonic (menu, _("_Select Entity Color..."),
|
||||||
GTK_SIGNAL_FUNC (HandleCommand), ID_MISC_SELECTENTITYCOLOR);
|
GTK_SIGNAL_FUNC (HandleCommand), ID_MISC_SELECTENTITYCOLOR);
|
||||||
g_object_set_data (G_OBJECT (window), "menu_misc_selectentitycolor", item);
|
g_object_set_data (G_OBJECT (window), "menu_misc_selectentitycolor", item);
|
||||||
|
@ -4264,10 +4264,14 @@ void MainFrame::OnFileOpen()
|
||||||
const char *str;
|
const char *str;
|
||||||
char buf[NAME_MAX];
|
char buf[NAME_MAX];
|
||||||
|
|
||||||
strcpy(buf, g_qeglobals.m_strHomeMaps.GetBuffer());
|
if (!g_pGameDescription->noMapsInHome) {
|
||||||
strcat(buf, "maps/");
|
strcpy(buf, g_qeglobals.m_strHomeMaps.GetBuffer());
|
||||||
|
strcat(buf, "maps/");
|
||||||
|
} else {
|
||||||
|
buf[0] = '\0';
|
||||||
|
}
|
||||||
|
|
||||||
str = file_dialog (m_pWidget, TRUE, _("Open Map"), buf, MAP_MAJOR);
|
str = file_dialog (m_pWidget, TRUE, _("Open Map"), buf, MAP_MAJOR, "maps/");
|
||||||
|
|
||||||
if (str != NULL)
|
if (str != NULL)
|
||||||
{
|
{
|
||||||
|
@ -4282,10 +4286,14 @@ void MainFrame::OnFileImportmap()
|
||||||
const char *str;
|
const char *str;
|
||||||
char buf[NAME_MAX];
|
char buf[NAME_MAX];
|
||||||
|
|
||||||
strcpy(buf, g_qeglobals.m_strHomeMaps.GetBuffer());
|
if (!g_pGameDescription->noMapsInHome) {
|
||||||
strcat(buf, "maps/");
|
strcpy(buf, g_qeglobals.m_strHomeMaps.GetBuffer());
|
||||||
|
strcat(buf, "maps/");
|
||||||
|
} else {
|
||||||
|
buf[0] = '\0';
|
||||||
|
}
|
||||||
|
|
||||||
str = file_dialog (m_pWidget, TRUE, _("Import Map"), buf, MAP_MAJOR);
|
str = file_dialog (m_pWidget, TRUE, _("Import Map"), buf, MAP_MAJOR, "maps/");
|
||||||
|
|
||||||
if (str != NULL)
|
if (str != NULL)
|
||||||
{
|
{
|
||||||
|
@ -4306,10 +4314,14 @@ void MainFrame::OnFileSaveas()
|
||||||
const char* str;
|
const char* str;
|
||||||
char buf[NAME_MAX];
|
char buf[NAME_MAX];
|
||||||
|
|
||||||
strcpy(buf, g_qeglobals.m_strHomeMaps.GetBuffer());
|
if (!g_pGameDescription->noMapsInHome) {
|
||||||
strcat(buf, "maps/");
|
strcpy(buf, g_qeglobals.m_strHomeMaps.GetBuffer());
|
||||||
|
strcat(buf, "maps/");
|
||||||
|
} else {
|
||||||
|
buf[0] = '\0';
|
||||||
|
}
|
||||||
|
|
||||||
str = file_dialog (g_pParentWnd->m_pWidget, FALSE, _("Save Map"), buf, MAP_MAJOR);
|
str = file_dialog (g_pParentWnd->m_pWidget, FALSE, _("Save Map"), buf, MAP_MAJOR, "maps/");
|
||||||
|
|
||||||
if (str != NULL)
|
if (str != NULL)
|
||||||
{
|
{
|
||||||
|
@ -4324,10 +4336,14 @@ void MainFrame::OnFileExportmap()
|
||||||
const char* str;
|
const char* str;
|
||||||
char buf[NAME_MAX];
|
char buf[NAME_MAX];
|
||||||
|
|
||||||
strcpy(buf, g_qeglobals.m_strHomeMaps.GetBuffer());
|
if (!g_pGameDescription->noMapsInHome) {
|
||||||
strcat(buf, "maps/");
|
strcpy(buf, g_qeglobals.m_strHomeMaps.GetBuffer());
|
||||||
|
strcat(buf, "maps/");
|
||||||
|
} else {
|
||||||
|
buf[0] = '\0';
|
||||||
|
}
|
||||||
|
|
||||||
str = file_dialog (m_pWidget, FALSE, _("Export Selection"), buf, MAP_MAJOR);
|
str = file_dialog (m_pWidget, FALSE, _("Export Selection"), buf, MAP_MAJOR, "maps/");
|
||||||
|
|
||||||
if (str != NULL)
|
if (str != NULL)
|
||||||
{
|
{
|
||||||
|
@ -4340,10 +4356,14 @@ void MainFrame::OnFileSaveregion()
|
||||||
const char* str;
|
const char* str;
|
||||||
char buf[NAME_MAX];
|
char buf[NAME_MAX];
|
||||||
|
|
||||||
strcpy(buf, g_qeglobals.m_strHomeMaps.GetBuffer());
|
if (!g_pGameDescription->noMapsInHome) {
|
||||||
strcat(buf, "maps/");
|
strcpy(buf, g_qeglobals.m_strHomeMaps.GetBuffer());
|
||||||
|
strcat(buf, "maps/");
|
||||||
|
} else {
|
||||||
|
buf[0] = '\0';
|
||||||
|
}
|
||||||
|
|
||||||
str = file_dialog (g_pParentWnd->m_pWidget, FALSE, _("Export Region"), buf, MAP_MAJOR);
|
str = file_dialog (g_pParentWnd->m_pWidget, FALSE, _("Export Region"), buf, MAP_MAJOR, "maps/");
|
||||||
|
|
||||||
if (str != NULL)
|
if (str != NULL)
|
||||||
{
|
{
|
||||||
|
@ -4576,7 +4596,7 @@ void MainFrame::OnEditLoadprefab()
|
||||||
AddSlash (CurPath);
|
AddSlash (CurPath);
|
||||||
}
|
}
|
||||||
|
|
||||||
filename = file_dialog (m_pWidget, TRUE, _("Import Prefab"), CurPath.GetBuffer(), MAP_MAJOR);
|
filename = file_dialog (m_pWidget, TRUE, _("Import Prefab"), CurPath.GetBuffer(), MAP_MAJOR, "prefabs/");
|
||||||
|
|
||||||
if (filename != NULL)
|
if (filename != NULL)
|
||||||
{
|
{
|
||||||
|
@ -4600,7 +4620,7 @@ void MainFrame::OnEditSaveprefab()
|
||||||
}
|
}
|
||||||
AddSlash (CurPath);
|
AddSlash (CurPath);
|
||||||
|
|
||||||
filename = file_dialog (m_pWidget, FALSE, _("Export Prefab"), CurPath.GetBuffer(), MAP_MAJOR);
|
filename = file_dialog (m_pWidget, FALSE, _("Export Prefab"), CurPath.GetBuffer(), MAP_MAJOR, "prefabs/");
|
||||||
if (filename != NULL)
|
if (filename != NULL)
|
||||||
{
|
{
|
||||||
Map_SaveSelected(filename);
|
Map_SaveSelected(filename);
|
||||||
|
|
|
@ -759,6 +759,20 @@ CGameDescription::CGameDescription(xmlDocPtr pDoc, const Str &GameFile)
|
||||||
xmlFree(prop);
|
xmlFree(prop);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// if this is set, the open maps dialoge will open the engine path not the
|
||||||
|
// home dir for map loading and saving
|
||||||
|
prop = (char*)xmlGetProp(pNode, (xmlChar*)"no_maps_in_home");
|
||||||
|
if (prop == NULL)
|
||||||
|
{
|
||||||
|
// default
|
||||||
|
noMapsInHome = false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
noMapsInHome = true;
|
||||||
|
xmlFree(prop);
|
||||||
|
}
|
||||||
|
|
||||||
prop = (char*)xmlGetProp(pNode, (xmlChar*)"basegame");
|
prop = (char*)xmlGetProp(pNode, (xmlChar*)"basegame");
|
||||||
if (prop == NULL)
|
if (prop == NULL)
|
||||||
{
|
{
|
||||||
|
|
|
@ -181,6 +181,7 @@ public:
|
||||||
bool mNoPatch; ///< this game doesn't support patch technology
|
bool mNoPatch; ///< this game doesn't support patch technology
|
||||||
Str mCaulkShader; ///< the shader to use for caulking
|
Str mCaulkShader; ///< the shader to use for caulking
|
||||||
bool quake2; ///< set this to true to get quake2
|
bool quake2; ///< set this to true to get quake2
|
||||||
|
bool noMapsInHome; ///< set this if you want to open the engine path/base dir/maps dir for map open/save dialoges */
|
||||||
|
|
||||||
CGameDescription() { mpDoc = NULL; }
|
CGameDescription() { mpDoc = NULL; }
|
||||||
/*!
|
/*!
|
||||||
|
|
Loading…
Reference in a new issue