129 lines
2.7 KiB
C
129 lines
2.7 KiB
C
|
#include <string.h>
|
||
|
|
||
|
#include "gm-editor.h"
|
||
|
#include "gm-world.h"
|
||
|
#include "gm-support.h"
|
||
|
|
||
|
#define GM_EDITOR_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE((object), GM_TYPE_EDITOR, GmEditorPrivate))
|
||
|
|
||
|
struct _GmEditorPrivate {
|
||
|
gchar *name;
|
||
|
gchar *upload_cmd;
|
||
|
gchar *mcp_type;
|
||
|
|
||
|
GmEditType type;
|
||
|
gboolean is_code;
|
||
|
|
||
|
GList *lines;
|
||
|
};
|
||
|
|
||
|
/* Signals */
|
||
|
|
||
|
enum {
|
||
|
SAVE,
|
||
|
NUM_SIGNALS
|
||
|
};
|
||
|
|
||
|
static guint editor_signals[NUM_SIGNALS] = {0};
|
||
|
|
||
|
G_DEFINE_TYPE(GmEditor, gm_editor, G_TYPE_OBJECT)
|
||
|
|
||
|
static void
|
||
|
gm_editor_finalize(GObject *object) {
|
||
|
GmEditor *editor = GM_EDITOR(object);
|
||
|
|
||
|
g_free(editor->priv->name);
|
||
|
g_free(editor->priv->upload_cmd);
|
||
|
g_free(editor->priv->mcp_type);
|
||
|
g_list_free_simple(editor->priv->lines);
|
||
|
|
||
|
G_OBJECT_CLASS(gm_editor_parent_class)->finalize(object);
|
||
|
}
|
||
|
|
||
|
static void
|
||
|
gm_editor_class_init(GmEditorClass *klass) {
|
||
|
GObjectClass *object_class = G_OBJECT_CLASS(klass);
|
||
|
|
||
|
object_class->finalize = gm_editor_finalize;
|
||
|
|
||
|
editor_signals[SAVE] =
|
||
|
g_signal_new("save",
|
||
|
G_OBJECT_CLASS_TYPE(object_class),
|
||
|
G_SIGNAL_RUN_LAST,
|
||
|
G_STRUCT_OFFSET(GmEditorClass, save),
|
||
|
NULL, NULL,
|
||
|
g_cclosure_marshal_VOID__VOID,
|
||
|
G_TYPE_NONE,
|
||
|
0);
|
||
|
|
||
|
g_type_class_add_private(object_class, sizeof(GmEditorPrivate));
|
||
|
}
|
||
|
|
||
|
static void
|
||
|
gm_editor_init(GmEditor *view) {
|
||
|
view->priv = GM_EDITOR_GET_PRIVATE(view);
|
||
|
}
|
||
|
|
||
|
GmEditor *
|
||
|
gm_editor_new(gchar *name, gchar *uploadcmd, GList *text) {
|
||
|
GmEditor *editor = GM_EDITOR(g_object_new(GM_TYPE_EDITOR, NULL));
|
||
|
|
||
|
editor->priv->name = g_strdup(name);
|
||
|
editor->priv->upload_cmd = g_strdup(uploadcmd);
|
||
|
editor->priv->mcp_type = NULL;
|
||
|
editor->priv->lines = g_list_copy(text);
|
||
|
editor->priv->type = E_LEGACY;
|
||
|
editor->priv->is_code = (strncmp(uploadcmd, "@program", 7) == 0);
|
||
|
return editor;
|
||
|
}
|
||
|
|
||
|
GmEditor *
|
||
|
gm_editor_new_mcp(gchar *name, gchar *reference, gchar *type,
|
||
|
GList *text) {
|
||
|
GmEditor *editor = GM_EDITOR(g_object_new(GM_TYPE_EDITOR, NULL));
|
||
|
|
||
|
editor->priv->name = g_strdup(name);
|
||
|
editor->priv->upload_cmd = g_strdup(reference);
|
||
|
editor->priv->mcp_type = g_strdup(type);
|
||
|
editor->priv->lines = g_list_copy(text);
|
||
|
editor->priv->type = E_LEGACY;
|
||
|
editor->priv->is_code = (strcmp(type, "moo-code") == 0);
|
||
|
|
||
|
return editor;
|
||
|
}
|
||
|
|
||
|
gboolean
|
||
|
gm_editor_is_code(GmEditor *editor) {
|
||
|
return editor->priv->is_code;
|
||
|
}
|
||
|
|
||
|
gchar *
|
||
|
gm_editor_name(GmEditor *editor) {
|
||
|
return editor->priv->name;
|
||
|
}
|
||
|
|
||
|
gchar *
|
||
|
gm_editor_upload_cmd(GmEditor *editor) {
|
||
|
return editor->priv->upload_cmd;
|
||
|
}
|
||
|
|
||
|
gchar *
|
||
|
gm_editor_mcp_type(GmEditor *editor) {
|
||
|
return editor->priv->mcp_type;
|
||
|
}
|
||
|
|
||
|
GList *
|
||
|
gm_editor_lines(GmEditor *editor) {
|
||
|
return editor->priv->lines;
|
||
|
}
|
||
|
|
||
|
GmEditType
|
||
|
gm_editor_type(GmEditor *editor) {
|
||
|
return editor->priv->type;
|
||
|
}
|
||
|
|
||
|
void
|
||
|
gm_editor_save(GmEditor *editor) {
|
||
|
g_signal_emit(editor, editor_signals[SAVE], 0);
|
||
|
}
|