- Modified the directories dialog so that it uses GtkFileChooserButtons instead of just txt fields
- The emulator won't try to write in the rom folder anymore by default, since it has no reason to be writable
- Fixed the quicksave menu
This commit is contained in:
bgk 2008-06-05 16:31:38 +00:00
parent 4f88520566
commit b72cabd80e
4 changed files with 71 additions and 344 deletions

View File

@ -1661,7 +1661,7 @@
<widget class="GtkTable" id="table1"> <widget class="GtkTable" id="table1">
<property name="visible">True</property> <property name="visible">True</property>
<property name="n_rows">5</property> <property name="n_rows">5</property>
<property name="n_columns">4</property> <property name="n_columns">2</property>
<child> <child>
<widget class="GtkLabel" id="label6"> <widget class="GtkLabel" id="label6">
<property name="visible">True</property> <property name="visible">True</property>
@ -1674,10 +1674,9 @@
</packing> </packing>
</child> </child>
<child> <child>
<widget class="GtkEntry" id="GBARomsDirEntry"> <widget class="GtkFileChooserButton" id="GBARomsDirEntry">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">True</property> <property name="action">GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER</property>
<property name="invisible_char">*</property>
</widget> </widget>
<packing> <packing>
<property name="left_attach">1</property> <property name="left_attach">1</property>
@ -1685,46 +1684,6 @@
<property name="y_options">GTK_EXPAND</property> <property name="y_options">GTK_EXPAND</property>
</packing> </packing>
</child> </child>
<child>
<widget class="GtkButton" id="GBARomsDirResetButton">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="relief">GTK_RELIEF_NONE</property>
<property name="response_id">0</property>
<child>
<widget class="GtkImage" id="image83">
<property name="visible">True</property>
<property name="stock">gtk-cancel</property>
</widget>
</child>
</widget>
<packing>
<property name="left_attach">2</property>
<property name="right_attach">3</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options">GTK_EXPAND</property>
</packing>
</child>
<child>
<widget class="GtkButton" id="GBARomsDirSelectButton">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="relief">GTK_RELIEF_NONE</property>
<property name="response_id">0</property>
<child>
<widget class="GtkImage" id="image84">
<property name="visible">True</property>
<property name="stock">gtk-open</property>
</widget>
</child>
</widget>
<packing>
<property name="left_attach">3</property>
<property name="right_attach">4</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options">GTK_EXPAND</property>
</packing>
</child>
<child> <child>
<widget class="GtkLabel" id="label7"> <widget class="GtkLabel" id="label7">
<property name="visible">True</property> <property name="visible">True</property>
@ -1738,28 +1697,6 @@
<property name="y_options">GTK_EXPAND</property> <property name="y_options">GTK_EXPAND</property>
</packing> </packing>
</child> </child>
<child>
<widget class="GtkButton" id="GBRomsDirSelectButton">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="relief">GTK_RELIEF_NONE</property>
<property name="response_id">0</property>
<child>
<widget class="GtkImage" id="image94">
<property name="visible">True</property>
<property name="stock">gtk-open</property>
</widget>
</child>
</widget>
<packing>
<property name="left_attach">3</property>
<property name="right_attach">4</property>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options">GTK_EXPAND</property>
</packing>
</child>
<child> <child>
<widget class="GtkLabel" id="label8"> <widget class="GtkLabel" id="label8">
<property name="visible">True</property> <property name="visible">True</property>
@ -1774,10 +1711,9 @@
</packing> </packing>
</child> </child>
<child> <child>
<widget class="GtkEntry" id="BatteriesDirEntry"> <widget class="GtkFileChooserButton" id="BatteriesDirEntry">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">True</property> <property name="action">GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER</property>
<property name="invisible_char">*</property>
</widget> </widget>
<packing> <packing>
<property name="left_attach">1</property> <property name="left_attach">1</property>
@ -1787,50 +1723,6 @@
<property name="y_options">GTK_EXPAND</property> <property name="y_options">GTK_EXPAND</property>
</packing> </packing>
</child> </child>
<child>
<widget class="GtkButton" id="BatteriesDirSelectButton">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="relief">GTK_RELIEF_NONE</property>
<property name="response_id">0</property>
<child>
<widget class="GtkImage" id="image98">
<property name="visible">True</property>
<property name="stock">gtk-open</property>
</widget>
</child>
</widget>
<packing>
<property name="left_attach">3</property>
<property name="right_attach">4</property>
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options">GTK_EXPAND</property>
</packing>
</child>
<child>
<widget class="GtkButton" id="BatteriesDirResetButton">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="relief">GTK_RELIEF_NONE</property>
<property name="response_id">0</property>
<child>
<widget class="GtkImage" id="image95">
<property name="visible">True</property>
<property name="stock">gtk-cancel</property>
</widget>
</child>
</widget>
<packing>
<property name="left_attach">2</property>
<property name="right_attach">3</property>
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options">GTK_EXPAND</property>
</packing>
</child>
<child> <child>
<widget class="GtkLabel" id="label9"> <widget class="GtkLabel" id="label9">
<property name="visible">True</property> <property name="visible">True</property>
@ -1845,10 +1737,9 @@
</packing> </packing>
</child> </child>
<child> <child>
<widget class="GtkEntry" id="SavesDirEntry"> <widget class="GtkFileChooserButton" id="SavesDirEntry">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">True</property> <property name="action">GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER</property>
<property name="invisible_char">*</property>
</widget> </widget>
<packing> <packing>
<property name="left_attach">1</property> <property name="left_attach">1</property>
@ -1858,50 +1749,6 @@
<property name="y_options">GTK_EXPAND</property> <property name="y_options">GTK_EXPAND</property>
</packing> </packing>
</child> </child>
<child>
<widget class="GtkButton" id="SavesDirResetButton">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="relief">GTK_RELIEF_NONE</property>
<property name="response_id">0</property>
<child>
<widget class="GtkImage" id="image96">
<property name="visible">True</property>
<property name="stock">gtk-cancel</property>
</widget>
</child>
</widget>
<packing>
<property name="left_attach">2</property>
<property name="right_attach">3</property>
<property name="top_attach">3</property>
<property name="bottom_attach">4</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options">GTK_EXPAND</property>
</packing>
</child>
<child>
<widget class="GtkButton" id="SavesDirSelectButton">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="relief">GTK_RELIEF_NONE</property>
<property name="response_id">0</property>
<child>
<widget class="GtkImage" id="image99">
<property name="visible">True</property>
<property name="stock">gtk-open</property>
</widget>
</child>
</widget>
<packing>
<property name="left_attach">3</property>
<property name="right_attach">4</property>
<property name="top_attach">3</property>
<property name="bottom_attach">4</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options">GTK_EXPAND</property>
</packing>
</child>
<child> <child>
<widget class="GtkLabel" id="label10"> <widget class="GtkLabel" id="label10">
<property name="visible">True</property> <property name="visible">True</property>
@ -1916,10 +1763,9 @@
</packing> </packing>
</child> </child>
<child> <child>
<widget class="GtkEntry" id="CapturesDirEntry"> <widget class="GtkFileChooserButton" id="CapturesDirEntry">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">True</property> <property name="action">GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER</property>
<property name="invisible_char">*</property>
</widget> </widget>
<packing> <packing>
<property name="left_attach">1</property> <property name="left_attach">1</property>
@ -1930,54 +1776,9 @@
</packing> </packing>
</child> </child>
<child> <child>
<widget class="GtkButton" id="CapturesDirResetButton"> <widget class="GtkFileChooserButton" id="GBRomsDirEntry">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">True</property> <property name="action">GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER</property>
<property name="relief">GTK_RELIEF_NONE</property>
<property name="response_id">0</property>
<child>
<widget class="GtkImage" id="image97">
<property name="visible">True</property>
<property name="stock">gtk-cancel</property>
</widget>
</child>
</widget>
<packing>
<property name="left_attach">2</property>
<property name="right_attach">3</property>
<property name="top_attach">4</property>
<property name="bottom_attach">5</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options">GTK_EXPAND</property>
</packing>
</child>
<child>
<widget class="GtkButton" id="CapturesDirSelectButton">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="relief">GTK_RELIEF_NONE</property>
<property name="response_id">0</property>
<child>
<widget class="GtkImage" id="image100">
<property name="visible">True</property>
<property name="stock">gtk-open</property>
</widget>
</child>
</widget>
<packing>
<property name="left_attach">3</property>
<property name="right_attach">4</property>
<property name="top_attach">4</property>
<property name="bottom_attach">5</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options">GTK_EXPAND</property>
</packing>
</child>
<child>
<widget class="GtkEntry" id="GBRomsDirEntry">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="invisible_char">*</property>
</widget> </widget>
<packing> <packing>
<property name="left_attach">1</property> <property name="left_attach">1</property>
@ -1987,28 +1788,6 @@
<property name="y_options">GTK_EXPAND</property> <property name="y_options">GTK_EXPAND</property>
</packing> </packing>
</child> </child>
<child>
<widget class="GtkButton" id="GBRomsDirResetButton">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="relief">GTK_RELIEF_NONE</property>
<property name="response_id">0</property>
<child>
<widget class="GtkImage" id="image101">
<property name="visible">True</property>
<property name="stock">gtk-cancel</property>
</widget>
</child>
</widget>
<packing>
<property name="left_attach">2</property>
<property name="right_attach">3</property>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options">GTK_EXPAND</property>
</packing>
</child>
</widget> </widget>
<packing> <packing>
<property name="position">2</property> <property name="position">2</property>
@ -2019,21 +1798,11 @@
<property name="visible">True</property> <property name="visible">True</property>
<property name="layout_style">GTK_BUTTONBOX_END</property> <property name="layout_style">GTK_BUTTONBOX_END</property>
<child> <child>
<widget class="GtkButton" id="cancelbutton2"> <widget class="GtkButton" id="closebutton2">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">True</property> <property name="can_focus">True</property>
<property name="can_default">True</property> <property name="can_default">True</property>
<property name="label">gtk-cancel</property> <property name="label">gtk-close</property>
<property name="use_stock">True</property>
<property name="response_id">-6</property>
</widget>
</child>
<child>
<widget class="GtkButton" id="okbutton2">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="can_default">True</property>
<property name="label">gtk-ok</property>
<property name="use_stock">True</property> <property name="use_stock">True</property>
<property name="response_id">-5</property> <property name="response_id">-5</property>
</widget> </widget>

View File

@ -107,11 +107,11 @@ Window::Window(GtkWindow * _pstWindow, const Glib::RefPtr<Xml> & _poXml) :
// Get config // Get config
// //
vInitConfig();
m_sUserDataDir = Glib::get_home_dir() + "/.gvba"; m_sUserDataDir = Glib::get_home_dir() + "/.gvba";
m_sConfigFile = m_sUserDataDir + "/config"; m_sConfigFile = m_sUserDataDir + "/config";
vInitConfig();
if (! Glib::file_test(m_sUserDataDir, Glib::FILE_TEST_EXISTS)) if (! Glib::file_test(m_sUserDataDir, Glib::FILE_TEST_EXISTS))
{ {
mkdir(m_sUserDataDir.c_str(), 0777); mkdir(m_sUserDataDir.c_str(), 0777);
@ -180,7 +180,7 @@ Window::Window(GtkWindow * _pstWindow, const Glib::RefPtr<Xml> & _poXml) :
char csName[20]; char csName[20];
snprintf(csName, 20, "LoadGameSlot%d", i + 1); snprintf(csName, 20, "LoadGameSlot%d", i + 1);
m_apoLoadGameItem[i] = dynamic_cast<Gtk::MenuItem *>(_poXml->get_widget(csName)); m_apoLoadGameItem[i] = dynamic_cast<Gtk::MenuItem *>(_poXml->get_widget(csName));
snprintf(csName, 20, "LoadGameSlot%d", i + 1); snprintf(csName, 20, "SaveGameSlot%d", i + 1);
m_apoSaveGameItem[i] = dynamic_cast<Gtk::MenuItem *>(_poXml->get_widget(csName)); m_apoSaveGameItem[i] = dynamic_cast<Gtk::MenuItem *>(_poXml->get_widget(csName));
m_apoLoadGameItem[i]->signal_activate().connect(sigc::bind( m_apoLoadGameItem[i]->signal_activate().connect(sigc::bind(
@ -968,11 +968,11 @@ void Window::vInitConfig()
// Directories section // Directories section
// //
m_poDirConfig = m_oConfig.poAddSection("Directories"); m_poDirConfig = m_oConfig.poAddSection("Directories");
m_poDirConfig->vSetKey("gb_roms", "" ); m_poDirConfig->vSetKey("gb_roms", Glib::get_home_dir());
m_poDirConfig->vSetKey("gba_roms", "" ); m_poDirConfig->vSetKey("gba_roms", Glib::get_home_dir());
m_poDirConfig->vSetKey("batteries", "" ); m_poDirConfig->vSetKey("batteries", m_sUserDataDir);
m_poDirConfig->vSetKey("saves", "" ); m_poDirConfig->vSetKey("saves", m_sUserDataDir);
m_poDirConfig->vSetKey("captures", "" ); m_poDirConfig->vSetKey("captures", m_sUserDataDir);
// Core section // Core section
// //
@ -1068,27 +1068,27 @@ void Window::vCheckConfig()
sValue = m_poDirConfig->sGetKey("gb_roms"); sValue = m_poDirConfig->sGetKey("gb_roms");
if (sValue != "" && ! Glib::file_test(sValue, Glib::FILE_TEST_IS_DIR)) if (sValue != "" && ! Glib::file_test(sValue, Glib::FILE_TEST_IS_DIR))
{ {
m_poDirConfig->vSetKey("gb_roms", ""); m_poDirConfig->vSetKey("gb_roms", Glib::get_home_dir());
} }
sValue = m_poDirConfig->sGetKey("gba_roms"); sValue = m_poDirConfig->sGetKey("gba_roms");
if (sValue != "" && ! Glib::file_test(sValue, Glib::FILE_TEST_IS_DIR)) if (sValue != "" && ! Glib::file_test(sValue, Glib::FILE_TEST_IS_DIR))
{ {
m_poDirConfig->vSetKey("gba_roms", ""); m_poDirConfig->vSetKey("gba_roms", Glib::get_home_dir());
} }
sValue = m_poDirConfig->sGetKey("batteries"); sValue = m_poDirConfig->sGetKey("batteries");
if (sValue != "" && ! Glib::file_test(sValue, Glib::FILE_TEST_IS_DIR)) if (sValue != "" && ! Glib::file_test(sValue, Glib::FILE_TEST_IS_DIR))
{ {
m_poDirConfig->vSetKey("batteries", ""); m_poDirConfig->vSetKey("batteries", m_sUserDataDir);
} }
sValue = m_poDirConfig->sGetKey("saves"); sValue = m_poDirConfig->sGetKey("saves");
if (sValue != "" && ! Glib::file_test(sValue, Glib::FILE_TEST_IS_DIR)) if (sValue != "" && ! Glib::file_test(sValue, Glib::FILE_TEST_IS_DIR))
{ {
m_poDirConfig->vSetKey("saves", ""); m_poDirConfig->vSetKey("saves", m_sUserDataDir);
} }
sValue = m_poDirConfig->sGetKey("captures"); sValue = m_poDirConfig->sGetKey("captures");
if (sValue != "" && ! Glib::file_test(sValue, Glib::FILE_TEST_IS_DIR)) if (sValue != "" && ! Glib::file_test(sValue, Glib::FILE_TEST_IS_DIR))
{ {
m_poDirConfig->vSetKey("captures", ""); m_poDirConfig->vSetKey("captures", m_sUserDataDir);
} }
// Core section // Core section
@ -1575,16 +1575,15 @@ void Window::vComputeFrameskip(int _iRate)
void Window::vCaptureScreen(int _iNum) void Window::vCaptureScreen(int _iNum)
{ {
std::string sBaseName; std::string sBaseName;
std::string sCaptureDir = m_poDirConfig->sGetKey("captures"); std::string sDir = m_poDirConfig->sGetKey("captures");
if (sCaptureDir == "") if (sDir == "")
{ {
sBaseName = sCutSuffix(m_sRomFile); sDir = m_sUserDataDir;
}
else
{
sBaseName = sCaptureDir + "/" + sCutSuffix(Glib::path_get_basename(m_sRomFile));
} }
sBaseName = sDir + "/" + sCutSuffix(Glib::path_get_basename(m_sRomFile));
char * csFile = g_strdup_printf("%s_%02d.png", char * csFile = g_strdup_printf("%s_%02d.png",
sBaseName.c_str(), sBaseName.c_str(),
_iNum); _iNum);
@ -1625,6 +1624,8 @@ void Window::vCreateFileOpenDialog()
poDialog->add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL); poDialog->add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL);
poDialog->add_button(Gtk::Stock::OPEN, Gtk::RESPONSE_OK); poDialog->add_button(Gtk::Stock::OPEN, Gtk::RESPONSE_OK);
try
{
if (sGBDir != "") if (sGBDir != "")
{ {
poDialog->add_shortcut_folder(sGBDir); poDialog->add_shortcut_folder(sGBDir);
@ -1636,6 +1637,11 @@ void Window::vCreateFileOpenDialog()
poDialog->add_shortcut_folder(sGBADir); poDialog->add_shortcut_folder(sGBADir);
poDialog->set_current_folder(sGBADir); poDialog->set_current_folder(sGBADir);
} }
}
catch (const Gtk::FileChooserError& e)
{
// Most likely the shortcut already exists, so do nothing
}
const char * acsPattern[] = const char * acsPattern[] =
{ {
@ -1681,12 +1687,10 @@ void Window::vLoadBattery()
std::string sDir = m_poDirConfig->sGetKey("batteries"); std::string sDir = m_poDirConfig->sGetKey("batteries");
if (sDir == "") if (sDir == "")
{ {
sBattery = sCutSuffix(m_sRomFile) + ".sav"; sDir = m_sUserDataDir;
} }
else
{
sBattery = sDir + "/" + sCutSuffix(Glib::path_get_basename(m_sRomFile)) + ".sav"; sBattery = sDir + "/" + sCutSuffix(Glib::path_get_basename(m_sRomFile)) + ".sav";
}
if (m_stEmulator.emuReadBattery(sBattery.c_str())) if (m_stEmulator.emuReadBattery(sBattery.c_str()))
{ {
@ -1700,12 +1704,10 @@ void Window::vSaveBattery()
std::string sDir = m_poDirConfig->sGetKey("batteries"); std::string sDir = m_poDirConfig->sGetKey("batteries");
if (sDir == "") if (sDir == "")
{ {
sBattery = sCutSuffix(m_sRomFile) + ".sav"; sDir = m_sUserDataDir;
} }
else
{
sBattery = sDir + "/" + sCutSuffix(Glib::path_get_basename(m_sRomFile)) + ".sav"; sBattery = sDir + "/" + sCutSuffix(Glib::path_get_basename(m_sRomFile)) + ".sav";
}
if (m_stEmulator.emuWriteBattery(sBattery.c_str())) if (m_stEmulator.emuWriteBattery(sBattery.c_str()))
{ {
@ -1792,12 +1794,10 @@ void Window::vUpdateGameSlots()
std::string sDir = m_poDirConfig->sGetKey("saves"); std::string sDir = m_poDirConfig->sGetKey("saves");
if (sDir == "") if (sDir == "")
{ {
sFileBase = sCutSuffix(m_sRomFile); sDir = m_sUserDataDir;
} }
else
{
sFileBase = sDir + "/" + sCutSuffix(Glib::path_get_basename(m_sRomFile)); sFileBase = sDir + "/" + sCutSuffix(Glib::path_get_basename(m_sRomFile));
}
const char * csDateFormat = _("%Y/%m/%d %H:%M:%S"); const char * csDateFormat = _("%Y/%m/%d %H:%M:%S");

View File

@ -162,8 +162,6 @@ protected:
virtual void vOnVideoScaleToggled(Gtk::CheckMenuItem * _poCMI, int _iScale); virtual void vOnVideoScaleToggled(Gtk::CheckMenuItem * _poCMI, int _iScale);
virtual void vOnLayerToggled(Gtk::CheckMenuItem * _poCMI, int _iLayer); virtual void vOnLayerToggled(Gtk::CheckMenuItem * _poCMI, int _iLayer);
virtual void vOnDirectories(); virtual void vOnDirectories();
virtual void vOnDirectoryReset(Gtk::Entry * _poEntry);
virtual void vOnDirectorySelect(Gtk::Entry * _poEntry);
virtual void vOnPauseWhenInactiveToggled(Gtk::CheckMenuItem * _poCMI); virtual void vOnPauseWhenInactiveToggled(Gtk::CheckMenuItem * _poCMI);
virtual void vOnSelectBios(); virtual void vOnSelectBios();
virtual void vOnUseBiosToggled(Gtk::CheckMenuItem * _poCMI); virtual void vOnUseBiosToggled(Gtk::CheckMenuItem * _poCMI);

View File

@ -618,82 +618,42 @@ void Window::vOnDirectories()
struct struct
{ {
const char * m_csKey; const char * m_csKey;
const char * m_csEntry; const char * m_csFileChooserButton;
const char * m_csResetButton;
const char * m_csSelectButton;
} }
astRow[] = astRow[] =
{ {
{ "gba_roms", "GBARomsDirEntry", "GBARomsDirResetButton", "GBARomsDirSelectButton" }, { "gba_roms", "GBARomsDirEntry" },
{ "gb_roms", "GBRomsDirEntry", "GBRomsDirResetButton", "GBRomsDirSelectButton" }, { "gb_roms", "GBRomsDirEntry" },
{ "batteries", "BatteriesDirEntry", "BatteriesDirResetButton", "BatteriesDirSelectButton" }, { "batteries", "BatteriesDirEntry" },
{ "saves", "SavesDirEntry", "SavesDirResetButton", "SavesDirSelectButton" }, { "saves", "SavesDirEntry" },
{ "captures", "CapturesDirEntry", "CapturesDirResetButton", "CapturesDirSelectButton" } { "captures", "CapturesDirEntry" }
}; };
for (guint i = 0; i < G_N_ELEMENTS(astRow); i++) for (guint i = 0; i < G_N_ELEMENTS(astRow); i++)
{ {
Gtk::Entry * poEntry = dynamic_cast<Gtk::Entry *>(poXml->get_widget(astRow[i].m_csEntry)); Gtk::FileChooserButton * poFileChooserButton = dynamic_cast<Gtk::FileChooserButton *>(poXml->get_widget(astRow[i].m_csFileChooserButton));
Gtk::Button * poReset = dynamic_cast<Gtk::Button *>(poXml->get_widget(astRow[i].m_csResetButton));
Gtk::Button * poSelect = dynamic_cast<Gtk::Button *>(poXml->get_widget(astRow[i].m_csSelectButton));
poEntry->set_text(m_poDirConfig->sGetKey(astRow[i].m_csKey)); poFileChooserButton->set_current_folder(m_poDirConfig->sGetKey(astRow[i].m_csKey));
poReset->signal_clicked().connect(sigc::bind(
sigc::mem_fun(*this, &Window::vOnDirectoryReset),
poEntry));
poSelect->signal_clicked().connect(sigc::bind(
sigc::mem_fun(*this, &Window::vOnDirectorySelect),
poEntry));
} }
Gtk::Dialog * poDialog = dynamic_cast<Gtk::Dialog *>(poXml->get_widget("DirectoriesDialog")); Gtk::Dialog * poDialog = dynamic_cast<Gtk::Dialog *>(poXml->get_widget("DirectoriesDialog"));
poDialog->set_transient_for(*this); poDialog->set_transient_for(*this);
poDialog->run();
if (poDialog->run() == Gtk::RESPONSE_OK)
{
for (guint i = 0; i < G_N_ELEMENTS(astRow); i++) for (guint i = 0; i < G_N_ELEMENTS(astRow); i++)
{ {
Gtk::Entry * poEntry = dynamic_cast<Gtk::Entry *>(poXml->get_widget(astRow[i].m_csEntry)); Gtk::FileChooserButton * poFileChooserButton = dynamic_cast<Gtk::FileChooserButton *>(poXml->get_widget(astRow[i].m_csFileChooserButton));
Glib::ustring sDir = poEntry->get_text(); Glib::ustring sDir = poFileChooserButton->get_current_folder();
if (! Glib::file_test(sDir, Glib::FILE_TEST_IS_DIR))
{
sDir = "";
}
m_poDirConfig->vSetKey(astRow[i].m_csKey, sDir); m_poDirConfig->vSetKey(astRow[i].m_csKey, sDir);
} }
// Needed if saves dir changed // Needed if saves dir changed
vUpdateGameSlots(); vUpdateGameSlots();
}
delete poDialog; delete poDialog;
} }
void Window::vOnDirectoryReset(Gtk::Entry * _poEntry)
{
_poEntry->set_text("");
}
void Window::vOnDirectorySelect(Gtk::Entry * _poEntry)
{
Gtk::FileChooserDialog oDialog(*this, _("Select directory"),
Gtk::FILE_CHOOSER_ACTION_SELECT_FOLDER);
oDialog.add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL);
oDialog.add_button(Gtk::Stock::OK, Gtk::RESPONSE_OK);
if (_poEntry->get_text() != "")
{
oDialog.add_shortcut_folder(_poEntry->get_text());
oDialog.set_current_folder(_poEntry->get_text());
}
if (oDialog.run() == Gtk::RESPONSE_OK)
{
_poEntry->set_text(oDialog.get_filename());
}
}
void Window::vOnPauseWhenInactiveToggled(Gtk::CheckMenuItem * _poCMI) void Window::vOnPauseWhenInactiveToggled(Gtk::CheckMenuItem * _poCMI)
{ {
m_poDisplayConfig->vSetKey("pause_when_inactive", _poCMI->get_active()); m_poDisplayConfig->vSetKey("pause_when_inactive", _poCMI->get_active());