This repository has been archived on 2020-04-11. You can view files and clone it, but cannot push or open issues or pull requests.
gnoemoe/gnoemoe/gm-editor.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);
}