visualboyadvance-m/src/gtk/gameboyadvanceconfig.cpp

124 lines
4.1 KiB
C++

// -*- C++ -*-
// VisualBoyAdvance - Nintendo Gameboy/GameboyAdvance (TM) emulator.
// Copyright (C) 2008 VBA-M development team
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2, or(at your option)
// any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software Foundation,
// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#include "gameboyadvanceconfig.h"
#include "intl.h"
namespace VBA
{
GameBoyAdvanceConfigDialog::GameBoyAdvanceConfigDialog(GtkDialog* _pstDialog, const Glib::RefPtr<Gtk::Builder>& refBuilder) :
Gtk::Dialog(_pstDialog),
m_poConfig(0)
{
refBuilder->get_widget("SaveTypeComboBox", m_poSaveTypeComboBox);
refBuilder->get_widget("FlashSizeComboBox", m_poFlashSizeComboBox);
refBuilder->get_widget("BiosCheckButton", m_poBiosCheckButton);
refBuilder->get_widget("BiosFileChooserButton", m_poBiosFileChooserButton);
m_poSaveTypeComboBox->signal_changed().connect(sigc::mem_fun(*this, &GameBoyAdvanceConfigDialog::vOnSaveTypeChanged));
m_poFlashSizeComboBox->signal_changed().connect(sigc::mem_fun(*this, &GameBoyAdvanceConfigDialog::vOnFlashSizeChanged));
m_poBiosCheckButton->signal_toggled().connect(sigc::mem_fun(*this, &GameBoyAdvanceConfigDialog::vOnUseBiosChanged));
m_poBiosFileChooserButton->signal_selection_changed().connect(sigc::mem_fun(*this, &GameBoyAdvanceConfigDialog::vOnBiosSelectionChanged));
}
void GameBoyAdvanceConfigDialog::vSetConfig(Config::Section * _poConfig, VBA::Window * _poWindow)
{
m_poConfig = _poConfig;
m_poWindow = _poWindow;
VBA::Window::ESaveType eDefaultSaveType = (VBA::Window::ESaveType)m_poConfig->oGetKey<int>("save_type");
m_poSaveTypeComboBox->set_active(eDefaultSaveType);
int iDefaultFlashSize = m_poConfig->oGetKey<int>("flash_size");
if (iDefaultFlashSize == 128)
{
m_poFlashSizeComboBox->set_active(1);
}
else
{
m_poFlashSizeComboBox->set_active(0);
}
bool bUseBios = m_poConfig->oGetKey<bool>("use_bios_file");
m_poBiosCheckButton->set_active(bUseBios);
m_poBiosFileChooserButton->set_sensitive(bUseBios);
std::string sBios = m_poConfig->oGetKey<std::string>("bios_file");
m_poBiosFileChooserButton->set_filename(sBios);
const char * acsPattern[] =
{
"*.[bB][iI][nN]", "*.[aA][gG][bB]", "*.[gG][bB][aA]",
"*.[bB][iI][oO][sS]", "*.[zZ][iI][pP]", "*.[zZ]", "*.[gG][zZ]"
};
Gtk::FileFilter oAllFilter;
oAllFilter.set_name(_("All files"));
oAllFilter.add_pattern("*");
Gtk::FileFilter oBiosFilter;
oBiosFilter.set_name(_("Gameboy Advance BIOS"));
for (guint i = 0; i < G_N_ELEMENTS(acsPattern); i++)
{
oBiosFilter.add_pattern(acsPattern[i]);
}
m_poBiosFileChooserButton->add_filter(oAllFilter);
m_poBiosFileChooserButton->add_filter(oBiosFilter);
m_poBiosFileChooserButton->set_filter(oBiosFilter);
}
void GameBoyAdvanceConfigDialog::vOnSaveTypeChanged()
{
int iSaveType = m_poSaveTypeComboBox->get_active_row_number();
m_poConfig->vSetKey("save_type", iSaveType);
m_poWindow->vApplyConfigGBASaveType();
}
void GameBoyAdvanceConfigDialog::vOnFlashSizeChanged()
{
int iFlashSize = m_poFlashSizeComboBox->get_active_row_number();
if (iFlashSize == 0)
{
m_poConfig->vSetKey("flash_size", 64);
}
else
{
m_poConfig->vSetKey("flash_size", 128);
}
m_poWindow->vApplyConfigGBAFlashSize();
}
void GameBoyAdvanceConfigDialog::vOnUseBiosChanged()
{
bool bUseBios = m_poBiosCheckButton->get_active();
m_poConfig->vSetKey("use_bios_file", bUseBios);
m_poBiosFileChooserButton->set_sensitive(bUseBios);
}
void GameBoyAdvanceConfigDialog::vOnBiosSelectionChanged()
{
std::string sBios = m_poBiosFileChooserButton->get_filename();
m_poConfig->vSetKey("bios_file", sBios);
}
} // namespace VBA