mirror of
https://github.com/raphnet/gc_n64_usb-v3
synced 2025-01-30 14:50:10 -05:00
mempak editor gui (wip)
This commit is contained in:
parent
f3129ed377
commit
dd2ec8f71e
@ -24,15 +24,18 @@ MEMPAKLIB_OBJS=mempak.o mempak_fs.o
|
|||||||
|
|
||||||
.PHONY : clean install
|
.PHONY : clean install
|
||||||
|
|
||||||
all: gcn64ctl gcn64ctl_gui mempak_ls mempak_format mempak_extract_note mempak_insert_note mempak_rm mempak_convert
|
all: gcn64ctl mempak_ls mempak_format mempak_extract_note mempak_insert_note mempak_rm mempak_convert gcn64ctl_gui
|
||||||
|
|
||||||
gcn64ctl_gui: gcn64ctl_gui.o gcn64.o gcn64lib.o mempak_old.o hexdump.o ihex.o $(COMPAT_OBJS)
|
gcn64ctl_gui: gcn64ctl_gui.o gcn64ctl_gui_mpkedit.o gcn64.o gcn64lib.o hexdump.o ihex.o $(COMPAT_OBJS) $(MEMPAKLIB_OBJS)
|
||||||
$(LD) $^ $(LDFLAGS) $(GTK_LDFLAGS) -o $@
|
$(LD) $^ $(LDFLAGS) $(GTK_LDFLAGS) -o $@
|
||||||
|
|
||||||
gcn64ctl: main.o gcn64.o mempak_old.o gcn64lib.o hexdump.o gc2n64_adapter.o ihex.o delay.o $(COMPAT_OBJS)
|
gcn64ctl: main.o gcn64.o mempak_old.o gcn64lib.o hexdump.o gc2n64_adapter.o ihex.o delay.o $(COMPAT_OBJS)
|
||||||
$(LD) $^ $(LDFLAGS) -o $@
|
$(LD) $^ $(LDFLAGS) -o $@
|
||||||
|
|
||||||
gcn64ctl_gui.o: gcn64ctl_gui.c
|
gcn64ctl_gui.o: gcn64ctl_gui.c gcn64ctl_gui.h
|
||||||
|
$(CC) $(CFLAGS) $(GTK_CFLAGS) -c $<
|
||||||
|
|
||||||
|
gcn64ctl_gui_mpkedit.o: gcn64ctl_gui_mpkedit.c gcn64ctl_gui_mpkedit.h
|
||||||
$(CC) $(CFLAGS) $(GTK_CFLAGS) -c $<
|
$(CC) $(CFLAGS) $(GTK_CFLAGS) -c $<
|
||||||
|
|
||||||
mempak_convert: mempak_convert.o $(MEMPAKLIB_OBJS)
|
mempak_convert: mempak_convert.o $(MEMPAKLIB_OBJS)
|
||||||
|
@ -82,6 +82,21 @@ Author: Raphaël Assénat
|
|||||||
<property name="can_focus">False</property>
|
<property name="can_focus">False</property>
|
||||||
<property name="stock">gtk-missing-image</property>
|
<property name="stock">gtk-missing-image</property>
|
||||||
</object>
|
</object>
|
||||||
|
<object class="GtkImage" id="image2">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="stock">gtk-missing-image</property>
|
||||||
|
</object>
|
||||||
|
<object class="GtkListStore" id="n64_notes">
|
||||||
|
<columns>
|
||||||
|
<!-- column-name Note -->
|
||||||
|
<column type="gint"/>
|
||||||
|
<!-- column-name Game -->
|
||||||
|
<column type="gchararray"/>
|
||||||
|
<!-- column-name Pages -->
|
||||||
|
<column type="gint"/>
|
||||||
|
</columns>
|
||||||
|
</object>
|
||||||
<object class="GtkAdjustment" id="pollrate_adjustment">
|
<object class="GtkAdjustment" id="pollrate_adjustment">
|
||||||
<property name="lower">1</property>
|
<property name="lower">1</property>
|
||||||
<property name="upper">255</property>
|
<property name="upper">255</property>
|
||||||
@ -139,7 +154,30 @@ Author: Raphaël Assénat
|
|||||||
<property name="can_focus">False</property>
|
<property name="can_focus">False</property>
|
||||||
<property name="use_underline">True</property>
|
<property name="use_underline">True</property>
|
||||||
<property name="use_stock">True</property>
|
<property name="use_stock">True</property>
|
||||||
<signal name="activate" handler="gtk_main_quit" object="window1" swapped="no"/>
|
<signal name="activate" handler="gtk_main_quit" object="mainWindow" swapped="yes"/>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkMenuItem" id="menuitem6">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="label" translatable="yes">_Tools</property>
|
||||||
|
<property name="use_underline">True</property>
|
||||||
|
<child type="submenu">
|
||||||
|
<object class="GtkMenu" id="menu6">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkMenuItem" id="menuitem7">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="label" translatable="yes">Open mempak editor</property>
|
||||||
|
<property name="use_underline">True</property>
|
||||||
|
<signal name="activate" handler="gtk_widget_show" object="n64_mempak_editor_window" swapped="yes"/>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
@ -768,4 +806,197 @@ Author: Raphaël Assénat
|
|||||||
<action-widget response="1">update_cancel_button</action-widget>
|
<action-widget response="1">update_cancel_button</action-widget>
|
||||||
</action-widgets>
|
</action-widgets>
|
||||||
</object>
|
</object>
|
||||||
|
<object class="GtkWindow" id="n64_mempak_editor_window">
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="destroy_with_parent">True</property>
|
||||||
|
<property name="attached_to">mainWindow</property>
|
||||||
|
<signal name="delete-event" handler="gtk_widget_hide" swapped="no"/>
|
||||||
|
<signal name="show" handler="onMempakWindowShow" swapped="no"/>
|
||||||
|
<child>
|
||||||
|
<object class="GtkBox" id="box8">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="hexpand">True</property>
|
||||||
|
<property name="orientation">vertical</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkMenuBar" id="menubar2">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkMenuItem" id="menuitem2">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="label" translatable="yes">_File</property>
|
||||||
|
<property name="use_underline">True</property>
|
||||||
|
<child type="submenu">
|
||||||
|
<object class="GtkMenu" id="menu2">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkImageMenuItem" id="imagemenuitem2">
|
||||||
|
<property name="label">gtk-new</property>
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="use_underline">True</property>
|
||||||
|
<property name="use_stock">True</property>
|
||||||
|
<signal name="activate" handler="mpke_new" swapped="no"/>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkImageMenuItem" id="imagemenuitem3">
|
||||||
|
<property name="label">gtk-open</property>
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="use_underline">True</property>
|
||||||
|
<property name="use_stock">True</property>
|
||||||
|
<signal name="activate" handler="mpke_open" swapped="no"/>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkImageMenuItem" id="imagemenuitem4">
|
||||||
|
<property name="label">gtk-save</property>
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="use_underline">True</property>
|
||||||
|
<property name="use_stock">True</property>
|
||||||
|
<signal name="activate" handler="mpke_save" swapped="no"/>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkImageMenuItem" id="imagemenuitem6">
|
||||||
|
<property name="label">gtk-save-as</property>
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="use_underline">True</property>
|
||||||
|
<property name="use_stock">True</property>
|
||||||
|
<signal name="activate" handler="mpke_saveas" swapped="no"/>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkSeparatorMenuItem" id="separatormenuitem3">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkImageMenuItem" id="imagemenuitem7">
|
||||||
|
<property name="label">gtk-close</property>
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="use_underline">True</property>
|
||||||
|
<property name="use_stock">True</property>
|
||||||
|
<signal name="activate" handler="gtk_widget_hide" object="n64_mempak_editor_window" swapped="yes"/>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkMenuItem" id="menuitem3">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="label" translatable="yes">_Edit</property>
|
||||||
|
<property name="use_underline">True</property>
|
||||||
|
<child type="submenu">
|
||||||
|
<object class="GtkMenu" id="menu4">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkMenuItem" id="menuitem4">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="label" translatable="yes">Insert note</property>
|
||||||
|
<property name="use_underline">True</property>
|
||||||
|
<signal name="activate" handler="mpke_insert_note" swapped="no"/>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkMenuItem" id="menuitem5">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="label" translatable="yes">Export note</property>
|
||||||
|
<property name="use_underline">True</property>
|
||||||
|
<signal name="activate" handler="mpke_export_note" swapped="no"/>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkImageMenuItem" id="imagemenuitem12">
|
||||||
|
<property name="label">Delete note</property>
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="image">image2</property>
|
||||||
|
<property name="use_stock">False</property>
|
||||||
|
<signal name="activate" handler="mpke_delete" swapped="no"/>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
|
<property name="position">0</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkTreeView" id="n64_notes_treeview">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">True</property>
|
||||||
|
<property name="model">n64_notes</property>
|
||||||
|
<property name="enable_search">False</property>
|
||||||
|
<property name="enable_grid_lines">both</property>
|
||||||
|
<property name="enable_tree_lines">True</property>
|
||||||
|
<child internal-child="selection">
|
||||||
|
<object class="GtkTreeSelection" id="treeview-selection1"/>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkTreeViewColumn" id="treeviewcolumn1">
|
||||||
|
<property name="resizable">True</property>
|
||||||
|
<property name="title" translatable="yes">Note ID</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkCellRendererText" id="cellrenderertext3"/>
|
||||||
|
<attributes>
|
||||||
|
<attribute name="text">0</attribute>
|
||||||
|
</attributes>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkTreeViewColumn" id="treeviewcolumn2">
|
||||||
|
<property name="resizable">True</property>
|
||||||
|
<property name="title" translatable="yes">Game Data</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkCellRendererText" id="cellrenderertext4"/>
|
||||||
|
<attributes>
|
||||||
|
<attribute name="text">1</attribute>
|
||||||
|
</attributes>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkTreeViewColumn" id="treeviewcolumn3">
|
||||||
|
<property name="resizable">True</property>
|
||||||
|
<property name="title" translatable="yes">Pages</property>
|
||||||
|
<property name="sort_order">descending</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkCellRendererText" id="cellrenderertext5"/>
|
||||||
|
<attributes>
|
||||||
|
<attribute name="text">2</attribute>
|
||||||
|
</attributes>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="expand">True</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
|
<property name="position">1</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
</interface>
|
</interface>
|
||||||
|
@ -2,29 +2,10 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <glib.h>
|
|
||||||
#include <gtk/gtk.h>
|
|
||||||
#include "gcn64.h"
|
|
||||||
#include "gcn64lib.h"
|
|
||||||
#include "../requests.h"
|
#include "../requests.h"
|
||||||
#include "ihex.h"
|
#include "ihex.h"
|
||||||
|
|
||||||
#define GET_ELEMENT(TYPE, ELEMENT) (TYPE *)gtk_builder_get_object(app->builder, #ELEMENT)
|
#include "gcn64ctl_gui.h"
|
||||||
#define GET_UI_ELEMENT(TYPE, ELEMENT) TYPE *ELEMENT = GET_ELEMENT(TYPE, ELEMENT)
|
|
||||||
|
|
||||||
struct application {
|
|
||||||
GtkBuilder *builder;
|
|
||||||
GtkWindow *mainwindow;
|
|
||||||
|
|
||||||
gcn64_hdl_t current_adapter_handle;
|
|
||||||
struct gcn64_info current_adapter_info;
|
|
||||||
GThread *updater_thread;
|
|
||||||
|
|
||||||
const char *update_status;
|
|
||||||
const char *updateHexFile;
|
|
||||||
int update_percent;
|
|
||||||
int update_dialog_response;
|
|
||||||
};
|
|
||||||
|
|
||||||
static void updateGuiFromAdapter(struct application *app);
|
static void updateGuiFromAdapter(struct application *app);
|
||||||
gboolean rebuild_device_list_store(gpointer data);
|
gboolean rebuild_device_list_store(gpointer data);
|
||||||
@ -600,6 +581,8 @@ main( int argc,
|
|||||||
return( 1 );
|
return( 1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
app.mpke = mpkedit_new(&app);
|
||||||
|
|
||||||
/* Get main window pointer from UI */
|
/* Get main window pointer from UI */
|
||||||
window = GTK_WINDOW( gtk_builder_get_object( app.builder, "mainWindow" ) );
|
window = GTK_WINDOW( gtk_builder_get_object( app.builder, "mainWindow" ) );
|
||||||
app.mainwindow = window;
|
app.mainwindow = window;
|
||||||
@ -616,6 +599,8 @@ main( int argc,
|
|||||||
/* Start main loop */
|
/* Start main loop */
|
||||||
gtk_main();
|
gtk_main();
|
||||||
|
|
||||||
|
mpkedit_free(app.mpke);
|
||||||
|
|
||||||
return( 0 );
|
return( 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
27
tool/gcn64ctl_gui.h
Normal file
27
tool/gcn64ctl_gui.h
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
#include <glib.h>
|
||||||
|
#include <gtk/gtk.h>
|
||||||
|
|
||||||
|
#include "gcn64.h"
|
||||||
|
#include "gcn64lib.h"
|
||||||
|
#include "gcn64ctl_gui_mpkedit.h"
|
||||||
|
|
||||||
|
#define GET_ELEMENT(TYPE, ELEMENT) (TYPE *)gtk_builder_get_object(app->builder, #ELEMENT)
|
||||||
|
#define GET_UI_ELEMENT(TYPE, ELEMENT) TYPE *ELEMENT = GET_ELEMENT(TYPE, ELEMENT)
|
||||||
|
|
||||||
|
struct application {
|
||||||
|
GtkBuilder *builder;
|
||||||
|
GtkWindow *mainwindow;
|
||||||
|
|
||||||
|
gcn64_hdl_t current_adapter_handle;
|
||||||
|
struct gcn64_info current_adapter_info;
|
||||||
|
GThread *updater_thread;
|
||||||
|
|
||||||
|
const char *update_status;
|
||||||
|
const char *updateHexFile;
|
||||||
|
int update_percent;
|
||||||
|
int update_dialog_response;
|
||||||
|
|
||||||
|
struct mpkedit_data *mpke;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
107
tool/gcn64ctl_gui_mpkedit.c
Normal file
107
tool/gcn64ctl_gui_mpkedit.c
Normal file
@ -0,0 +1,107 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include "gcn64ctl_gui.h"
|
||||||
|
#include "mempak.h"
|
||||||
|
|
||||||
|
void mpke_syncModel(struct application *app);
|
||||||
|
|
||||||
|
struct mpkedit_data {
|
||||||
|
struct mempak_structure *mpk;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct mpkedit_data *mpkedit_new(struct application *app)
|
||||||
|
{
|
||||||
|
struct mpkedit_data *mpke;
|
||||||
|
|
||||||
|
mpke = calloc(sizeof(struct mpkedit_data), 1);
|
||||||
|
if (!mpke) {
|
||||||
|
perror("calloc");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
// mpke->mpk = mempak_new();
|
||||||
|
mpke->mpk = mempak_loadFromFile("/home/raph/0Dream/programming/multiuse_pcbX/gc_n64_usb-v3/tmp/perfect_dark_b.N64");
|
||||||
|
|
||||||
|
|
||||||
|
return mpke;
|
||||||
|
}
|
||||||
|
|
||||||
|
void mpkedit_free(struct mpkedit_data *mpke)
|
||||||
|
{
|
||||||
|
if (mpke) {
|
||||||
|
free(mpke);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void mpke_syncModel(struct application *app)
|
||||||
|
{
|
||||||
|
GET_UI_ELEMENT(GtkListStore, n64_notes);
|
||||||
|
GET_UI_ELEMENT(GtkTreeView, n64_notes_treeview);
|
||||||
|
int i, res;
|
||||||
|
|
||||||
|
gtk_list_store_clear(n64_notes);
|
||||||
|
if (!app->mpke->mpk) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i=0; i<16; i++) {
|
||||||
|
GtkTreeIter iter;
|
||||||
|
entry_structure_t note_data;
|
||||||
|
|
||||||
|
gtk_list_store_append(n64_notes, &iter);
|
||||||
|
|
||||||
|
res = get_mempak_entry(app->mpke->mpk, i, ¬e_data);
|
||||||
|
if (res) {
|
||||||
|
gtk_list_store_set(n64_notes, &iter, 0, i, 1, "!!ERROR!!", 2, 0, -1);
|
||||||
|
} else {
|
||||||
|
if (note_data.valid) {
|
||||||
|
gtk_list_store_set(n64_notes, &iter, 0, i, 1, note_data.name, 2, note_data.blocks, -1);
|
||||||
|
} else {
|
||||||
|
gtk_list_store_set(n64_notes, &iter, 0, i, -1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
gtk_tree_view_set_model(n64_notes_treeview, GTK_TREE_MODEL(n64_notes));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
G_MODULE_EXPORT void mpke_export_note(GtkWidget *win, gpointer data)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
G_MODULE_EXPORT void mpke_insert_note(GtkWidget *win, gpointer data)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
G_MODULE_EXPORT void mpke_new(GtkWidget *win, gpointer data)
|
||||||
|
{
|
||||||
|
struct application *app = data;
|
||||||
|
|
||||||
|
mempak_free(app->mpke->mpk);
|
||||||
|
app->mpke->mpk = mempak_new();
|
||||||
|
|
||||||
|
mpke_syncModel(app);
|
||||||
|
}
|
||||||
|
|
||||||
|
G_MODULE_EXPORT void mpke_open(GtkWidget *win, gpointer data)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
G_MODULE_EXPORT void mpke_saveas(GtkWidget *win, gpointer data)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
G_MODULE_EXPORT void mpke_save(GtkWidget *win, gpointer data)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
G_MODULE_EXPORT void mpke_delete(GtkWidget *win, gpointer data)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
G_MODULE_EXPORT void onMempakWindowShow(GtkWidget *win, gpointer data)
|
||||||
|
{
|
||||||
|
struct application *app = data;
|
||||||
|
mpke_syncModel(app);
|
||||||
|
}
|
10
tool/gcn64ctl_gui_mpkedit.h
Normal file
10
tool/gcn64ctl_gui_mpkedit.h
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
#ifndef gcn64ctl_gui_mpkedit_h__
|
||||||
|
#define gcn64ctl_gui_mpkedit_h__
|
||||||
|
|
||||||
|
struct mpkedit_data;
|
||||||
|
struct application;
|
||||||
|
|
||||||
|
struct mpkedit_data *mpkedit_new(struct application *app);
|
||||||
|
void mpkedit_free(struct mpkedit_data *mpke);
|
||||||
|
|
||||||
|
#endif
|
Loading…
Reference in New Issue
Block a user