GTK: Add GameBoy cheats support. Thanks to unmacaque for the patch.

git-svn-id: https://svn.code.sf.net/p/vbam/code/trunk@1003 a31d4220-a93d-0410-bf67-fe4944624d44
This commit is contained in:
bgk 2011-02-25 17:56:10 +00:00
parent 345012a2a6
commit 73e22a800d
7 changed files with 108 additions and 56 deletions

View File

@ -246,6 +246,7 @@ SET(SRC_GTK
src/gtk/gameboyadvanceconfig.cpp
src/gtk/cheatlist.cpp
src/gtk/cheatedit.cpp
src/gtk/gameboycheatlist.cpp
src/gtk/joypadconfig.cpp
src/gtk/directoriesconfig.cpp
src/gtk/displayconfig.cpp

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-02-24 17:56+0100\n"
"POT-Creation-Date: 2011-02-25 18:50+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -13,23 +13,33 @@ msgstr ""
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
#: ../src/gtk/cheatedit.cpp:48
#: ../src/gtk/cheatedit.cpp:83
msgid "Generic Code"
msgstr ""
#: ../src/gtk/cheatedit.cpp:53
#: ../src/gtk/cheatedit.cpp:88
msgid "Gameshark Advance"
msgstr ""
#: ../src/gtk/cheatedit.cpp:58
#: ../src/gtk/cheatedit.cpp:93
msgid "CodeBreaker Advance"
msgstr ""
#: ../src/gtk/cheatlist.cpp:73 tmp/cheatlist.ui.h:5
#: ../src/gtk/cheatedit.cpp:103
msgid "GameShark"
msgstr ""
#: ../src/gtk/cheatedit.cpp:108
msgid "GameGenie"
msgstr ""
#: ../src/gtk/cheatlist.cpp:73 ../src/gtk/gameboycheatlist.cpp:73
#: tmp/cheatlist.ui.h:5
msgid "Open cheat list"
msgstr ""
#: ../src/gtk/cheatlist.cpp:96 tmp/cheatlist.ui.h:6
#: ../src/gtk/cheatlist.cpp:96 ../src/gtk/gameboycheatlist.cpp:96
#: tmp/cheatlist.ui.h:6
msgid "Save cheat list"
msgstr ""
@ -226,19 +236,19 @@ msgstr ""
msgid "<Undefined>"
msgstr ""
#: ../src/gtk/main.cpp:42 ../src/gtk/windowcallbacks.cpp:496
#: ../src/gtk/main.cpp:41 ../src/gtk/windowcallbacks.cpp:506
msgid "VBA-M"
msgstr ""
#: ../src/gtk/main.cpp:51
#: ../src/gtk/main.cpp:50
msgid "Main VBA-M options"
msgstr ""
#: ../src/gtk/main.cpp:56
#: ../src/gtk/main.cpp:55
msgid "Output version information."
msgstr ""
#: ../src/gtk/main.cpp:82
#: ../src/gtk/main.cpp:81
#, c-format
msgid "VisualBoyAdvance version %s [GTK+]\n"
msgstr ""
@ -248,92 +258,88 @@ msgstr ""
msgid "*** OpenGL : Cannot open display.\n"
msgstr ""
#: ../src/gtk/window.cpp:426
#: ../src/gtk/window.cpp:427
#, c-format
msgid "Unable to initialize output, falling back to Cairo\n"
msgstr ""
#: ../src/gtk/window.cpp:467
#: ../src/gtk/window.cpp:468
#, c-format
msgid "Failed to init SDL: %s"
msgstr ""
#: ../src/gtk/window.cpp:975
#: ../src/gtk/window.cpp:1021
#, c-format
msgid "Unknown file type %s"
msgstr ""
#: ../src/gtk/window.cpp:1114
#: ../src/gtk/window.cpp:1158
#, c-format
msgid "VBA-M - %d%%"
msgstr ""
#: ../src/gtk/window.cpp:1119
#: ../src/gtk/window.cpp:1163
#, c-format
msgid "VBA-M - %d%% (%d, %d fps)"
msgstr ""
#: ../src/gtk/window.cpp:1221
#: ../src/gtk/window.cpp:1265
msgid "Open"
msgstr ""
#: ../src/gtk/window.cpp:1256
#: ../src/gtk/window.cpp:1300
msgid "All Gameboy Advance files"
msgstr ""
#: ../src/gtk/window.cpp:1263
#: ../src/gtk/window.cpp:1307
msgid "Gameboy Advance files"
msgstr ""
#: ../src/gtk/window.cpp:1270
#: ../src/gtk/window.cpp:1314
msgid "Gameboy files"
msgstr ""
#: ../src/gtk/window.cpp:1296
#: ../src/gtk/window.cpp:1340
msgid "Loaded battery"
msgstr ""
#: ../src/gtk/window.cpp:1313
#: ../src/gtk/window.cpp:1357
msgid "Saved battery"
msgstr ""
#: ../src/gtk/window.cpp:1338 ../src/gtk/window.cpp:1383
#: ../src/gtk/window.cpp:1382 ../src/gtk/window.cpp:1427
msgid "----/--/-- --:--:--"
msgstr ""
#: ../src/gtk/window.cpp:1368
#: ../src/gtk/window.cpp:1412
msgid "%Y/%m/%d %H:%M:%S"
msgstr ""
#: ../src/gtk/windowcallbacks.cpp:83
#: ../src/gtk/windowcallbacks.cpp:84
msgid "Load game"
msgstr ""
#: ../src/gtk/windowcallbacks.cpp:98 ../src/gtk/windowcallbacks.cpp:133
#: ../src/gtk/windowcallbacks.cpp:99 ../src/gtk/windowcallbacks.cpp:134
msgid "VisualBoyAdvance save game"
msgstr ""
#: ../src/gtk/windowcallbacks.cpp:116
#: ../src/gtk/windowcallbacks.cpp:117
msgid "Save game"
msgstr ""
#: ../src/gtk/windowcallbacks.cpp:149 ../src/gtk/windowcallbacks.cpp:311
#: ../src/gtk/windowcallbacks.cpp:150 ../src/gtk/windowcallbacks.cpp:312
msgid "File already exists. Overwrite it?"
msgstr ""
#: ../src/gtk/windowcallbacks.cpp:276
#: ../src/gtk/windowcallbacks.cpp:277
msgid "Save screenshot"
msgstr ""
#: ../src/gtk/windowcallbacks.cpp:293
#: ../src/gtk/windowcallbacks.cpp:294
msgid "PNG image"
msgstr ""
#: ../src/gtk/windowcallbacks.cpp:461
msgid "Only Gameboy Advance cheats are supported"
msgstr ""
#: ../src/gtk/windowcallbacks.cpp:498
#: ../src/gtk/windowcallbacks.cpp:508
msgid "Nintendo GameBoy Advance emulator."
msgstr ""

View File

@ -42,23 +42,6 @@ CheatEditDialog::CheatEditDialog(GtkDialog* _pstDialog, const Glib::RefPtr<Gtk::
m_poCheatTypeComboBox->set_model(m_poCheatTypeStore);
Gtk::TreeModel::Row row = *(m_poCheatTypeStore->append());
row[m_oTypeModel.iType] = CheatGeneric;
row[m_oTypeModel.uText] = _("Generic Code");
row = *(m_poCheatTypeStore->append());
row[m_oTypeModel.iType] = CheatGSA;
row[m_oTypeModel.uText] = _("Gameshark Advance");
row = *(m_poCheatTypeStore->append());
row[m_oTypeModel.iType] = CheatCBA;
row[m_oTypeModel.uText] = _("CodeBreaker Advance");
m_poCheatTypeComboBox->set_active(CheatGeneric);
m_poCheatApplyButton->signal_clicked().connect(sigc::mem_fun(*this, &CheatEditDialog::vOnApply));
m_poCheatCancelButton->signal_clicked().connect(sigc::mem_fun(*this, &CheatEditDialog::vOnCancel));
}
@ -87,6 +70,47 @@ ECheatType CheatEditDialog::vGetType()
return CheatGeneric;
}
void CheatEditDialog::vSetWindow(VBA::Window * _poWindow)
{
m_poWindow = _poWindow;
// GameBoy Advance
if (m_poWindow->eGetCartridge() == VBA::Window::CartridgeGBA)
{
Gtk::TreeModel::Row row = *(m_poCheatTypeStore->append());
row[m_oTypeModel.iType] = CheatGeneric;
row[m_oTypeModel.uText] = _("Generic Code");
row = *(m_poCheatTypeStore->append());
row[m_oTypeModel.iType] = CheatGSA;
row[m_oTypeModel.uText] = _("Gameshark Advance");
row = *(m_poCheatTypeStore->append());
row[m_oTypeModel.iType] = CheatCBA;
row[m_oTypeModel.uText] = _("CodeBreaker Advance");
m_poCheatTypeComboBox->set_active(CheatGeneric);
}
// GameBoy
else if (m_poWindow->eGetCartridge() == VBA::Window::CartridgeGB)
{
Gtk::TreeModel::Row row = *(m_poCheatTypeStore->append());
row[m_oTypeModel.iType] = CheatGS;
row[m_oTypeModel.uText] = _("GameShark");
row = *(m_poCheatTypeStore->append());
row[m_oTypeModel.iType] = CheatGG;
row[m_oTypeModel.uText] = _("GameGenie");
m_poCheatTypeComboBox->set_active(0);
}
}
void CheatEditDialog::vOnApply()
{
response(Gtk::RESPONSE_APPLY);

View File

@ -34,7 +34,9 @@ enum ECheatType
{
CheatGeneric,
CheatGSA,
CheatCBA
CheatCBA,
CheatGS,
CheatGG
};
class EditCheatCodeColumns : public Gtk::TreeModel::ColumnRecord
@ -59,6 +61,7 @@ public:
Glib::RefPtr<Gtk::TextBuffer> vGetCode();
Glib::ustring vGetDesc();
ECheatType vGetType();
void vSetWindow(VBA::Window * _poWindow);
private:
void vOnApply();

View File

@ -74,7 +74,7 @@ void CheatListDialog::vOnCheatOpen()
oDialog.add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL);
oDialog.add_button(Gtk::Stock::OPEN, Gtk::RESPONSE_OK);
oDialog.set_current_folder(Glib::get_home_dir()); // TODO: remember dir?
oDialog.set_current_folder(Glib::get_home_dir());
while (oDialog.run() == Gtk::RESPONSE_OK)
{
@ -111,6 +111,7 @@ void CheatListDialog::vOnCheatAdd()
CheatEditDialog * poDialog = 0;
poBuilder->get_widget_derived("CheatEditDialog", poDialog);
poDialog->set_transient_for(*this);
poDialog->vSetWindow(m_poWindow);
int response = poDialog->run();
poDialog->hide();
@ -198,6 +199,7 @@ void CheatListDialog::vOnCheatAdd()
} // end of loop
} // end of case
default:; // silence warnings
} // end of switch
vUpdateList(previous);
@ -253,6 +255,11 @@ void CheatListDialog::vOnCheatToggled(Glib::ustring const& string_path)
vToggleCheat(row[m_oRecordModel.iIndex], row[m_oRecordModel.bEnabled]);
}
void CheatListDialog::vSetWindow(VBA::Window * _poWindow)
{
m_poWindow = _poWindow;
}
void CheatListDialog::vToggleCheat(int index, bool enable) {
if (enable)
cheatsEnable(index);

View File

@ -53,6 +53,7 @@ class CheatListDialog : public Gtk::Dialog
{
public:
CheatListDialog(GtkDialog* _pstDialog, const Glib::RefPtr<Gtk::Builder>& refBuilder);
void vSetWindow(VBA::Window * _poWindow);
private:
void vAddCheat(int index, Glib::ustring desc, bool enabled = true);

View File

@ -42,6 +42,7 @@
#include "gameboyadvanceconfig.h"
#include "generalconfig.h"
#include "cheatlist.h"
#include "gameboycheatlist.h"
namespace VBA
{
@ -453,19 +454,28 @@ void Window::vOnCheatList()
CheatListDialog * poDialog = 0;
poBuilder->get_widget_derived("CheatListDialog", poDialog);
poDialog->set_transient_for(*this);
poDialog->vSetWindow(this);
poDialog->run();
poDialog->hide();
}
else
else if (m_eCartridge == CartridgeGB)
{
vPopupError(_("Only Gameboy Advance cheats are supported"));
std::string sUiFile = sGetUiFilePath("cheatlist.ui");
Glib::RefPtr<Gtk::Builder> poBuilder = Gtk::Builder::create_from_file(sUiFile);
GameBoyCheatListDialog * poDialog = 0;
poBuilder->get_widget_derived("CheatListDialog", poDialog);
poDialog->set_transient_for(*this);
poDialog->vSetWindow(this);
poDialog->run();
poDialog->hide();
}
}
void Window::vOnCheatDisableToggled(Gtk::CheckMenuItem * _poCMI)
{
if (m_eCartridge == CartridgeGB) {
// TODO: implement
cheatsEnabled = !cheatsEnabled;
}
else if (m_eCartridge == CartridgeGBA) {
cheatsEnabled = !cheatsEnabled;