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/mcp/gm-mcp-vmoo-client.c

230 lines
6.1 KiB
C
Raw Normal View History

2006-01-06 00:27:37 +01:00
#include <string.h>
2005-11-15 12:48:19 +01:00
#include "gm-mcp-vmoo-client.h"
#include "gm-mcp-session.h"
2006-01-10 01:41:39 +01:00
#include "widgets/gm-world-view.h"
#include "widgets/gm-world-text-view.h"
2006-04-07 19:33:08 +02:00
#include "gm-string.h"
2005-11-15 12:48:19 +01:00
#define GM_MCP_VMOO_CLIENT_GET_PRIVATE(object)( \
G_TYPE_INSTANCE_GET_PRIVATE((object), \
GM_TYPE_MCP_VMOO_CLIENT, GmMcpVmooClientPrivate))
2006-02-20 23:31:00 +01:00
/*struct _GmMcpVmooClientPrivate {
2005-11-15 12:48:19 +01:00
2006-02-20 23:31:00 +01:00
};*/
2005-11-15 12:48:19 +01:00
typedef struct _GmMcpVmooClientView {
GmMcpVmooClient *package;
GmWorldTextView *view;
guint width;
guint height;
guint margin_width;
guint margin_height;
* VERSION CHANGED TO 2.0.9 * po/POTFILES.in: added gnoemoe/dialogs/gm-world-paste-dialog.c and ui/gm-world-paste.glade * po/nl.po: added translations * ui/Makefile.am: * ui/gm-ui.xml: * ui/gm-world-paste.glade: new paste dialog * gnoemoe/mcp/Makefile.include: added gm-cell-renderer-text.[ch] * gnoemoe/mcp/gm-cell-renderer-text.[ch]: new cell renderer for rendering userlist * gnoemoe/mcp/gm-mcp-vmoo-client.c: update metrics in timeout so to reduce the number of updates when resizing * gnoemoe/mcp/gm-mcp-icecrew-serverinfo.c: max version set to 1.0 (1.0 does not actively request the info because it will be send on initialization). Set menu item invisible instead of insensitive when there is no info available * gnoemoe/mcp/gm-mcp-icecrew-userlist.c: fixed menu item substitution * gnoemoe/mcp/gm-mcp-vmoo-userlist.c: removed support for status because it doesn't really support it * gm-mcp-userlist-view.[ch]: moved column constants to header. Render items with new gm-cell-renderer-text. * gnoemoe/mcp/gm-mcp-icecrew-playerdb.[ch]: made gm_mcp_icecrew_playerdb_players public * gnoemoe/dialogs/Makefile.include: added gm-world-paste-dialog * gnoemoe/dialogs/gm-world-paste-dialog.[ch]: new paste dialog * gnoemoe/dialogs/gm-world-properties-dialog.c: * gnoemoe/dialogs/gm-world-logs-dialog.c: fixed leaking tree stores * gnoemoe/widgets/Makefile.include: added gm-commands.[ch] * gnoemoe/widgets/gm-commands.[ch]: new file for handling action activation (removed from gm-app-view) * gnoemoe/widgets/gm-world-view.c: fixed userlist size restore * gnoemoe/widgets/gm-app-view.c: removed action handlers * gnoemoe/gm-support.[ch]: added gm_find_child * gnoemoe/gm-world.c: removed debug message * gnoemoe/gm-ui.h: changed actions to gm-commands
2006-04-23 16:51:04 +02:00
guint timeout;
2005-11-15 12:48:19 +01:00
} GmMcpVmooClientView;
/* Signals
enum {
PROTO
NUM_SIGNALS
};
static guint gm_mcp_vmoo_client_signals[NUM_SIGNALS] = {0};*/
G_DEFINE_TYPE(GmMcpVmooClient, gm_mcp_vmoo_client, GM_TYPE_MCP_PACKAGE)
void gm_mcp_vmoo_client_handle_simple(GmMcpPackage *package, gchar *suffix,
GList *fields);
void gm_mcp_vmoo_client_create_view(GmMcpPackage *package, GObject *parent);
void gm_mcp_vmoo_client_set_session(GmMcpPackage *package, GObject *session);
static void
gm_mcp_vmoo_client_finalize(GObject *object) {
//GmMcpVmooClient *obj = GM_MCP_VMOO_CLIENT(object);
G_OBJECT_CLASS(gm_mcp_vmoo_client_parent_class)->finalize(object);
}
static void
gm_mcp_vmoo_client_class_init(GmMcpVmooClientClass *klass) {
GObjectClass *object_class = G_OBJECT_CLASS(klass);
GmMcpPackageClass *pklass = GM_MCP_PACKAGE_CLASS(klass);
object_class->finalize = gm_mcp_vmoo_client_finalize;
/*gm_mcp_vmoo_client_signals[PROTO] =
g_signal_new("proto",
G_OBJECT_CLASS_TYPE(object_class),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET(GmMcpVmooClientClass, proto),
NULL, NULL,
g_cclosure_marshal_VOID__VOID,
G_TYPE_NONE,
0);*/
pklass->name = "dns-com-vmoo-client";
2006-01-06 00:27:37 +01:00
pklass->set_session = gm_mcp_vmoo_client_set_session;
pklass->handle_simple = gm_mcp_vmoo_client_handle_simple;
pklass->create_view = gm_mcp_vmoo_client_create_view;
2005-11-15 12:48:19 +01:00
2006-02-20 23:31:00 +01:00
//g_type_class_add_private(object_class, sizeof(GmMcpVmooClientPrivate));
2005-11-15 12:48:19 +01:00
}
static void
gm_mcp_vmoo_client_init(GmMcpVmooClient *obj) {
2006-02-20 23:31:00 +01:00
//obj->priv = GM_MCP_VMOO_CLIENT_GET_PRIVATE(obj);
2005-11-15 12:48:19 +01:00
}
GmMcpVmooClient *
gm_mcp_vmoo_client_new() {
GmMcpVmooClient *obj = GM_MCP_VMOO_CLIENT(g_object_new(GM_TYPE_MCP_VMOO_CLIENT, NULL));
return obj;
}
void
gm_mcp_vmoo_client_handle_simple(GmMcpPackage *package, gchar *suffix,
GList *fields) {
2006-01-06 00:27:37 +01:00
if (strcmp(suffix, "disconnect") == 0) {
gm_world_prepare_disconnect(GM_MCP_SESSION_WORLD(
GM_MCP_PACKAGE_SESSION(package)));
}
2005-11-15 12:48:19 +01:00
}
void
gm_mcp_vmoo_client_set_session(GmMcpPackage *package, GObject *session) {
GmMcpPackageClass *parent_class = g_type_class_peek_parent(
GM_MCP_VMOO_CLIENT_GET_CLASS(package));
2006-04-07 19:33:08 +02:00
gchar *iversion;
2005-11-15 12:48:19 +01:00
parent_class->set_session(package, session);
2006-04-07 19:33:08 +02:00
iversion = gm_string_remove_char(g_strdup(VERSION), '.');
2005-11-15 12:48:19 +01:00
gm_mcp_session_send_simple(GM_MCP_SESSION(session),
"dns-com-vmoo-client-info", "name", "GnoeMoe",
2006-04-07 19:33:08 +02:00
"text-version", VERSION, "internal-version", iversion,
2005-11-15 12:48:19 +01:00
"reg-id", "0", "flags", "", NULL);
2006-04-07 19:33:08 +02:00
g_free(iversion);
2005-11-15 12:48:19 +01:00
}
/* GmMcpVmooClientView */
void
gm_mcp_vmoo_client_view_update_metrics(GmMcpVmooClientView *view) {
guint width, height, cwidth, cheight;
gchar *w, *h;
GtkAllocation *allocation = &(GTK_WIDGET(view->view)->allocation);
width = (allocation->width - view->margin_width);
height = (allocation->height - view->margin_width);
gm_world_text_view_get_metrics(view->view, &cwidth, &cheight);
if ((width % cwidth) != 0) {
width = (width / cwidth);
} else {
width = (width / cwidth) - 1;
}
if ((height % cheight) != 0) {
height = (height / cheight);
} else {
height = (height / cheight) - 1;
}
if (view->width != width || view->height != height) {
w = g_strdup_printf("%d", width);
h = g_strdup_printf("%d", height);
gm_mcp_session_send_simple(GM_MCP_PACKAGE_SESSION(view->package),
"dns-com-vmoo-client-screensize", "cols", w, "rows", h, NULL);
g_free(w);
g_free(h);
view->width = width;
view->height = height;
}
}
* VERSION CHANGED TO 2.0.9 * po/POTFILES.in: added gnoemoe/dialogs/gm-world-paste-dialog.c and ui/gm-world-paste.glade * po/nl.po: added translations * ui/Makefile.am: * ui/gm-ui.xml: * ui/gm-world-paste.glade: new paste dialog * gnoemoe/mcp/Makefile.include: added gm-cell-renderer-text.[ch] * gnoemoe/mcp/gm-cell-renderer-text.[ch]: new cell renderer for rendering userlist * gnoemoe/mcp/gm-mcp-vmoo-client.c: update metrics in timeout so to reduce the number of updates when resizing * gnoemoe/mcp/gm-mcp-icecrew-serverinfo.c: max version set to 1.0 (1.0 does not actively request the info because it will be send on initialization). Set menu item invisible instead of insensitive when there is no info available * gnoemoe/mcp/gm-mcp-icecrew-userlist.c: fixed menu item substitution * gnoemoe/mcp/gm-mcp-vmoo-userlist.c: removed support for status because it doesn't really support it * gm-mcp-userlist-view.[ch]: moved column constants to header. Render items with new gm-cell-renderer-text. * gnoemoe/mcp/gm-mcp-icecrew-playerdb.[ch]: made gm_mcp_icecrew_playerdb_players public * gnoemoe/dialogs/Makefile.include: added gm-world-paste-dialog * gnoemoe/dialogs/gm-world-paste-dialog.[ch]: new paste dialog * gnoemoe/dialogs/gm-world-properties-dialog.c: * gnoemoe/dialogs/gm-world-logs-dialog.c: fixed leaking tree stores * gnoemoe/widgets/Makefile.include: added gm-commands.[ch] * gnoemoe/widgets/gm-commands.[ch]: new file for handling action activation (removed from gm-app-view) * gnoemoe/widgets/gm-world-view.c: fixed userlist size restore * gnoemoe/widgets/gm-app-view.c: removed action handlers * gnoemoe/gm-support.[ch]: added gm_find_child * gnoemoe/gm-world.c: removed debug message * gnoemoe/gm-ui.h: changed actions to gm-commands
2006-04-23 16:51:04 +02:00
gboolean
gm_mcp_vmoo_client_timeout_update(GmMcpVmooClientView *view) {
view->timeout = 0;
gm_mcp_vmoo_client_view_update_metrics(view);
return FALSE;
}
void
gm_mcp_vmoo_client_install_timeout(GmMcpVmooClientView *view) {
if (view->timeout) {
g_source_remove(view->timeout);
}
view->timeout = g_timeout_add(500,
(GSourceFunc)(gm_mcp_vmoo_client_timeout_update), view);
}
2005-11-15 12:48:19 +01:00
void
on_gm_mcp_vmoo_client_text_view_size_allocate(GtkWidget *widget,
GtkAllocation *allocation, GmMcpVmooClientView *view) {
* VERSION CHANGED TO 2.0.9 * po/POTFILES.in: added gnoemoe/dialogs/gm-world-paste-dialog.c and ui/gm-world-paste.glade * po/nl.po: added translations * ui/Makefile.am: * ui/gm-ui.xml: * ui/gm-world-paste.glade: new paste dialog * gnoemoe/mcp/Makefile.include: added gm-cell-renderer-text.[ch] * gnoemoe/mcp/gm-cell-renderer-text.[ch]: new cell renderer for rendering userlist * gnoemoe/mcp/gm-mcp-vmoo-client.c: update metrics in timeout so to reduce the number of updates when resizing * gnoemoe/mcp/gm-mcp-icecrew-serverinfo.c: max version set to 1.0 (1.0 does not actively request the info because it will be send on initialization). Set menu item invisible instead of insensitive when there is no info available * gnoemoe/mcp/gm-mcp-icecrew-userlist.c: fixed menu item substitution * gnoemoe/mcp/gm-mcp-vmoo-userlist.c: removed support for status because it doesn't really support it * gm-mcp-userlist-view.[ch]: moved column constants to header. Render items with new gm-cell-renderer-text. * gnoemoe/mcp/gm-mcp-icecrew-playerdb.[ch]: made gm_mcp_icecrew_playerdb_players public * gnoemoe/dialogs/Makefile.include: added gm-world-paste-dialog * gnoemoe/dialogs/gm-world-paste-dialog.[ch]: new paste dialog * gnoemoe/dialogs/gm-world-properties-dialog.c: * gnoemoe/dialogs/gm-world-logs-dialog.c: fixed leaking tree stores * gnoemoe/widgets/Makefile.include: added gm-commands.[ch] * gnoemoe/widgets/gm-commands.[ch]: new file for handling action activation (removed from gm-app-view) * gnoemoe/widgets/gm-world-view.c: fixed userlist size restore * gnoemoe/widgets/gm-app-view.c: removed action handlers * gnoemoe/gm-support.[ch]: added gm_find_child * gnoemoe/gm-world.c: removed debug message * gnoemoe/gm-ui.h: changed actions to gm-commands
2006-04-23 16:51:04 +02:00
gm_mcp_vmoo_client_install_timeout(view);
2005-11-15 12:48:19 +01:00
}
void
on_gm_mcp_vmoo_client_character_size_changed(GmWorldTextView *v,
guint width, guint height, GmMcpVmooClientView *view) {
* VERSION CHANGED TO 2.0.9 * po/POTFILES.in: added gnoemoe/dialogs/gm-world-paste-dialog.c and ui/gm-world-paste.glade * po/nl.po: added translations * ui/Makefile.am: * ui/gm-ui.xml: * ui/gm-world-paste.glade: new paste dialog * gnoemoe/mcp/Makefile.include: added gm-cell-renderer-text.[ch] * gnoemoe/mcp/gm-cell-renderer-text.[ch]: new cell renderer for rendering userlist * gnoemoe/mcp/gm-mcp-vmoo-client.c: update metrics in timeout so to reduce the number of updates when resizing * gnoemoe/mcp/gm-mcp-icecrew-serverinfo.c: max version set to 1.0 (1.0 does not actively request the info because it will be send on initialization). Set menu item invisible instead of insensitive when there is no info available * gnoemoe/mcp/gm-mcp-icecrew-userlist.c: fixed menu item substitution * gnoemoe/mcp/gm-mcp-vmoo-userlist.c: removed support for status because it doesn't really support it * gm-mcp-userlist-view.[ch]: moved column constants to header. Render items with new gm-cell-renderer-text. * gnoemoe/mcp/gm-mcp-icecrew-playerdb.[ch]: made gm_mcp_icecrew_playerdb_players public * gnoemoe/dialogs/Makefile.include: added gm-world-paste-dialog * gnoemoe/dialogs/gm-world-paste-dialog.[ch]: new paste dialog * gnoemoe/dialogs/gm-world-properties-dialog.c: * gnoemoe/dialogs/gm-world-logs-dialog.c: fixed leaking tree stores * gnoemoe/widgets/Makefile.include: added gm-commands.[ch] * gnoemoe/widgets/gm-commands.[ch]: new file for handling action activation (removed from gm-app-view) * gnoemoe/widgets/gm-world-view.c: fixed userlist size restore * gnoemoe/widgets/gm-app-view.c: removed action handlers * gnoemoe/gm-support.[ch]: added gm_find_child * gnoemoe/gm-world.c: removed debug message * gnoemoe/gm-ui.h: changed actions to gm-commands
2006-04-23 16:51:04 +02:00
gm_mcp_vmoo_client_install_timeout(view);
2005-11-15 12:48:19 +01:00
}
void
on_gm_mcp_vmoo_client_view_weak_notify(gpointer data, GObject *obj) {
GmMcpVmooClientView *view = (GmMcpVmooClientView *)(data);
g_signal_handlers_disconnect_by_func(view->view,
on_gm_mcp_vmoo_client_text_view_size_allocate, view);
g_signal_handlers_disconnect_by_func(view->view,
on_gm_mcp_vmoo_client_character_size_changed, view);
g_free(data);
}
void
gm_mcp_vmoo_client_create_view(GmMcpPackage *package, GObject *parent) {
GmMcpVmooClientView *client_view;
if (!GM_IS_WORLD_VIEW(parent)) {
return;
}
client_view = g_new0(GmMcpVmooClientView, 1);
client_view->package = GM_MCP_VMOO_CLIENT(package);
client_view->view = gm_world_view_text_view(GM_WORLD_VIEW(parent));
client_view->width = 0;
client_view->height = 0;
client_view->margin_width = gtk_text_view_get_left_margin(
GTK_TEXT_VIEW(client_view->view)) +
gtk_text_view_get_right_margin(
GTK_TEXT_VIEW(client_view->view));
client_view->margin_height = gtk_text_view_get_pixels_above_lines(
GTK_TEXT_VIEW(client_view->view)) +
gtk_text_view_get_pixels_below_lines(
GTK_TEXT_VIEW(client_view->view));
g_signal_connect(client_view->view, "size-allocate",
G_CALLBACK(on_gm_mcp_vmoo_client_text_view_size_allocate),
client_view);
g_signal_connect(client_view->view, "character_size_changed",
G_CALLBACK(on_gm_mcp_vmoo_client_character_size_changed),
client_view);
g_object_weak_ref(G_OBJECT(package),
on_gm_mcp_vmoo_client_view_weak_notify, client_view);
}