From 944225261e872785366d1df5377f59ea917a2195 Mon Sep 17 00:00:00 2001 From: Cyrille Bagard Date: Mon, 6 Apr 2015 11:09:00 +0000 Subject: Done some refactoring in order to make the code more GObject-friendly. git-svn-id: svn://svn.gna.org/svn/chrysalide/trunk@506 abbe820e-26c8-41b2-8c08-b7b2b41f8b0a --- ChangeLog | 21 +++++++++++++++++++++ src/analysis/block-int.h | 12 ++++++------ src/analysis/block.c | 16 ++++------------ src/analysis/blocks/flow.c | 18 ++++++++---------- src/analysis/blocks/virtual.c | 17 ++++++++--------- src/gtkext/graph/node-int.h | 16 ++++++++-------- src/gtkext/graph/node.c | 22 +++++++++++----------- src/gtkext/graph/node.h | 11 ++++++----- src/gtkext/graph/nodes/flow.c | 13 ++++++------- src/gtkext/graph/nodes/flow.h | 11 ++++++----- src/gtkext/graph/nodes/virtual.c | 32 ++++++++++---------------------- src/gtkext/graph/nodes/virtual.h | 11 ++++++----- src/gtkext/gtkblockview.c | 11 +++++------ src/gtkext/gtkbufferview.c | 8 ++------ src/gtkext/gtkgraphview.c | 3 +-- src/gtkext/gtksourceview.c | 10 +++++----- src/gtkext/gtkviewpanel-int.h | 10 +++++----- src/gtkext/gtkviewpanel.c | 8 ++++---- 18 files changed, 122 insertions(+), 128 deletions(-) diff --git a/ChangeLog b/ChangeLog index c45fccb..1b89b61 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,26 @@ 15-04-06 Cyrille Bagard + * src/analysis/block.c: + * src/analysis/block-int.h: + * src/analysis/blocks/flow.c: + * src/analysis/blocks/virtual.c: + * src/gtkext/graph/node.c: + * src/gtkext/graph/node.h: + * src/gtkext/graph/node-int.h: + * src/gtkext/graph/nodes/flow.c: + * src/gtkext/graph/nodes/flow.h: + * src/gtkext/graph/nodes/virtual.c: + * src/gtkext/graph/nodes/virtual.h: + * src/gtkext/gtkblockview.c: + * src/gtkext/gtkbufferview.c: + * src/gtkext/gtkgraphview.c: + * src/gtkext/gtksourceview.c: + * src/gtkext/gtkviewpanel.c: + * src/gtkext/gtkviewpanel-int.h: + Do some refactoring in order to make the code more GObject-friendly. + +15-04-06 Cyrille Bagard + * configure.ac: * src/gtkext/graph/dot.c: * src/gtkext/graph/dot.h: diff --git a/src/analysis/block-int.h b/src/analysis/block-int.h index 18b1ce4..ce401ae 100644 --- a/src/analysis/block-int.h +++ b/src/analysis/block-int.h @@ -52,12 +52,6 @@ struct _GInstrBlock { GObject parent; /* A laisser en premier */ - find_by_addr_fc find_by_addr; /* Recherche par adresse */ - visit_all_blocks_fc visit_blocks; /* Visite des différents blocs */ - list_all_blocks_fc list_blocks; /* Liste de tous les blocs */ - list_leafs_blocks_fc list_leafs; /* Liste des blocs terminaux */ - //list_regs_accesses_fc list_regs; /* Liste des accès registres */ - GInstrBlock *links_block; /* Lieu des blocs attachés */ }; @@ -67,6 +61,12 @@ struct _GInstrBlockClass { GObjectClass parent; /* A laisser en premier */ + find_by_addr_fc find_by_addr; /* Recherche par adresse */ + visit_all_blocks_fc visit_blocks; /* Visite des différents blocs */ + list_all_blocks_fc list_blocks; /* Liste de tous les blocs */ + list_leafs_blocks_fc list_leafs; /* Liste des blocs terminaux */ + //list_regs_accesses_fc list_regs; /* Liste des accès registres */ + }; diff --git a/src/analysis/block.c b/src/analysis/block.c index 23fbfc5..e906d36 100644 --- a/src/analysis/block.c +++ b/src/analysis/block.c @@ -42,14 +42,6 @@ static void g_instr_block_finalize(GInstrBlock *); - - - - - - - - /* Indique le type défini pour un bloc d'instructions. */ G_DEFINE_TYPE(GInstrBlock, g_instr_block, G_TYPE_OBJECT); @@ -153,7 +145,7 @@ static void g_instr_block_finalize(GInstrBlock *block) GInstrBlock *g_instr_block_find_by_addr(const GInstrBlock *block, const vmpa2t *addr, bool final) { - return block->find_by_addr(block, addr, final); + return G_INSTR_BLOCK_GET_CLASS(block)->find_by_addr(block, addr, final); } @@ -174,7 +166,7 @@ GInstrBlock *g_instr_block_find_by_addr(const GInstrBlock *block, const vmpa2t * bool g_instr_block_visit(GInstrBlock *block, instr_block_visitor_cb callback, void *data) { - return block->visit_blocks(block, callback, data); + return G_INSTR_BLOCK_GET_CLASS(block)->visit_blocks(block, callback, data); } @@ -195,7 +187,7 @@ bool g_instr_block_visit(GInstrBlock *block, instr_block_visitor_cb callback, vo void g_instr_block_list_all_blocks(const GInstrBlock *block, GInstrBlock ***list, size_t *count) { - block->list_blocks(block, list, count); + G_INSTR_BLOCK_GET_CLASS(block)->list_blocks(block, list, count); } @@ -216,7 +208,7 @@ void g_instr_block_list_all_blocks(const GInstrBlock *block, GInstrBlock ***list void g_instr_block_list_leafs_blocks(const GInstrBlock *block, GInstrBlock ***list, size_t *count) { - block->list_leafs(block, list, count); + G_INSTR_BLOCK_GET_CLASS(block)->list_leafs(block, list, count); } diff --git a/src/analysis/blocks/flow.c b/src/analysis/blocks/flow.c index 305dad0..99d4553 100644 --- a/src/analysis/blocks/flow.c +++ b/src/analysis/blocks/flow.c @@ -111,12 +111,20 @@ G_DEFINE_TYPE(GFlowBlock, g_flow_block, G_TYPE_INSTR_BLOCK); static void g_flow_block_class_init(GFlowBlockClass *class) { GObjectClass *object; /* Autre version de la classe */ + GInstrBlockClass *block_class; /* Version parente du la classe*/ object = G_OBJECT_CLASS(class); + block_class = G_INSTR_BLOCK_CLASS(class); object->dispose = (GObjectFinalizeFunc/* ! */)g_flow_block_dispose; object->finalize = (GObjectFinalizeFunc)g_flow_block_finalize; + block_class->find_by_addr = (find_by_addr_fc)g_flow_block_find_by_addr; + block_class->visit_blocks = (visit_all_blocks_fc)g_flow_block_visit; + block_class->list_blocks = (list_all_blocks_fc)g_flow_block_list_all_blocks; + block_class->list_leafs = (list_leafs_blocks_fc)g_flow_block_list_leafs_blocks; + //block_class->list_regs = (list_regs_accesses_fc)g_flow_block_list_regs_accesses; + } @@ -134,16 +142,6 @@ static void g_flow_block_class_init(GFlowBlockClass *class) static void g_flow_block_init(GFlowBlock *block) { - GInstrBlock *parent; /* Instance parente */ - - parent = G_INSTR_BLOCK(block); - - parent->find_by_addr = (find_by_addr_fc)g_flow_block_find_by_addr; - parent->visit_blocks = (visit_all_blocks_fc)g_flow_block_visit; - parent->list_blocks = (list_all_blocks_fc)g_flow_block_list_all_blocks; - parent->list_leafs = (list_leafs_blocks_fc)g_flow_block_list_leafs_blocks; - //parent->list_regs = (list_regs_accesses_fc)g_flow_block_list_regs_accesses; - g_flow_block_set_rank(block, 0); block->regs = g_raccess_list_new(); diff --git a/src/analysis/blocks/virtual.c b/src/analysis/blocks/virtual.c index a3e1695..d5b1b5a 100644 --- a/src/analysis/blocks/virtual.c +++ b/src/analysis/blocks/virtual.c @@ -107,12 +107,20 @@ G_DEFINE_TYPE(GVirtualBlock, g_virtual_block, G_TYPE_INSTR_BLOCK); static void g_virtual_block_class_init(GVirtualBlockClass *class) { GObjectClass *object; /* Autre version de la classe */ + GInstrBlockClass *block_class; /* Version parente du la classe*/ object = G_OBJECT_CLASS(class); + block_class = G_INSTR_BLOCK_CLASS(class); object->dispose = (GObjectFinalizeFunc/* ! */)g_virtual_block_dispose; object->finalize = (GObjectFinalizeFunc)g_virtual_block_finalize; + block_class->find_by_addr = (find_by_addr_fc)g_virtual_block_find_by_addr; + block_class->visit_blocks = (visit_all_blocks_fc)g_virtual_block_visit; + block_class->list_blocks = (list_all_blocks_fc)g_virtual_block_list_all_blocks; + block_class->list_leafs = (list_leafs_blocks_fc)g_virtual_block_list_leafs_blocks; + //block_class->list_regs = (list_regs_accesses_fc)g_virtual_block_list_regs_accesses; + } @@ -130,15 +138,6 @@ static void g_virtual_block_class_init(GVirtualBlockClass *class) static void g_virtual_block_init(GVirtualBlock *block) { - GInstrBlock *parent; /* Instance parente */ - - parent = G_INSTR_BLOCK(block); - - parent->find_by_addr = (find_by_addr_fc)g_virtual_block_find_by_addr; - parent->visit_blocks = (visit_all_blocks_fc)g_virtual_block_visit; - parent->list_blocks = (list_all_blocks_fc)g_virtual_block_list_all_blocks; - parent->list_leafs = (list_leafs_blocks_fc)g_virtual_block_list_leafs_blocks; - //parent->list_regs = (list_regs_accesses_fc)g_virtual_block_list_regs_accesses; } diff --git a/src/gtkext/graph/node-int.h b/src/gtkext/graph/node-int.h index 18b6b20..2572fce 100644 --- a/src/gtkext/graph/node-int.h +++ b/src/gtkext/graph/node-int.h @@ -56,14 +56,6 @@ struct _GGraphNode { GObject parent; /* A laisser en premier */ - get_node_rank_fc get_rank; /* Premier rang d'appartenance */ - node_reset_pos_fc reset_pos; /* Réinitialise l'emplacement */ - node_prepare_x_fc prepare_x; /* Préparation des abscisses */ - node_apply_pos_fc apply_pos; /* Applique une absisse finale */ - node_set_pos_fc set_pos; /* Définit l'emplacement */ - visit_flow_nodes_fc visit; /* Visite des noeuds d'exécut° */ - find_container_fc contain; /* Retrouve un conteneur */ - GtkAllocation alloc; /* Emplacement du bloc rattaché*/ pending_position pending_pos; /* Indication sur la position */ PendingPositionFlags pending_flag; /* Cible le champ valide */ @@ -81,6 +73,14 @@ struct _GGraphNodeClass { GObjectClass parent; /* A laisser en premier */ + get_node_rank_fc get_rank; /* Premier rang d'appartenance */ + node_reset_pos_fc reset_pos; /* Réinitialise l'emplacement */ + node_prepare_x_fc prepare_x; /* Préparation des abscisses */ + node_apply_pos_fc apply_pos; /* Applique une absisse finale */ + node_set_pos_fc set_pos; /* Définit l'emplacement */ + visit_flow_nodes_fc visit; /* Visite des noeuds d'exécut° */ + find_container_fc contain; /* Retrouve un conteneur */ + }; diff --git a/src/gtkext/graph/node.c b/src/gtkext/graph/node.c index 439d4e7..4fd7a8e 100644 --- a/src/gtkext/graph/node.c +++ b/src/gtkext/graph/node.c @@ -159,7 +159,7 @@ static void g_graph_node_finalize(GGraphNode *node) unsigned int g_graph_node_get_rank(const GGraphNode *node) { - return node->get_rank(node); + return G_GRAPH_NODE_GET_CLASS(node)->get_rank(node); } @@ -183,8 +183,8 @@ void g_graph_node_reset_position(GGraphNode *node) node->pending_flag = PPF_NONE; - if (node->reset_pos != NULL) - node->reset_pos(node); + if (G_GRAPH_NODE_GET_CLASS(node)->reset_pos != NULL) + G_GRAPH_NODE_GET_CLASS(node)->reset_pos(node); } @@ -204,7 +204,7 @@ void g_graph_node_reset_position(GGraphNode *node) void g_graph_node_prepare_x_line(GGraphNode *node, GGraphNode *nodes) { - node->prepare_x(node, nodes); + G_GRAPH_NODE_GET_CLASS(node)->prepare_x(node, nodes); } @@ -226,8 +226,8 @@ void g_graph_node_apply_position(GGraphNode *node) gint x_pos; /* Position de référence */ GGraphNode *ref; /* Accès rapide */ - if (node->apply_pos != NULL) - node->apply_pos(node); + if (G_GRAPH_NODE_GET_CLASS(node)->apply_pos != NULL) + G_GRAPH_NODE_GET_CLASS(node)->apply_pos(node); switch (node->pending_flag) { @@ -289,8 +289,8 @@ void g_graph_node_apply_position(GGraphNode *node) void g_graph_node_set_x_position(GGraphNode *node, gint x) { - if (node->set_pos != NULL && x != GRAPH_HORIZONTAL_MARGIN) - node->set_pos(node, x); + if (G_GRAPH_NODE_GET_CLASS(node)->set_pos != NULL && x != GRAPH_HORIZONTAL_MARGIN) + G_GRAPH_NODE_GET_CLASS(node)->set_pos(node, x); node->alloc.x = x; @@ -403,7 +403,7 @@ GtkAllocation g_graph_node_get_allocation(const GGraphNode *node) bool g_graph_node_visit_nodes(GGraphNode *node, graph_node_visitor_cb callback, void *data) { - return node->visit(node, callback, data); + return G_GRAPH_NODE_GET_CLASS(node)->visit(node, callback, data); } @@ -427,8 +427,8 @@ GGraphNode *g_graph_node_find_container(GGraphNode *nodes, GGraphNode *target) result = NULL; - if (nodes->contain != NULL) - result = nodes->contain(nodes, target); + if (G_GRAPH_NODE_GET_CLASS(nodes)->contain != NULL) + result = G_GRAPH_NODE_GET_CLASS(nodes)->contain(nodes, target); return result; diff --git a/src/gtkext/graph/node.h b/src/gtkext/graph/node.h index c68719e..ab7d0da 100644 --- a/src/gtkext/graph/node.h +++ b/src/gtkext/graph/node.h @@ -37,11 +37,12 @@ /* -------------------------- GESTION DES NOEUDS A L'UNITE -------------------------- */ -#define G_TYPE_GRAPH_NODE g_graph_node_get_type() -#define G_GRAPH_NODE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), g_graph_node_get_type(), GGraphNode)) -#define G_IS_GRAPH_NODE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), g_graph_node_get_type())) -#define G_GRAPH_NODE_GET_IFACE(inst) (G_TYPE_INSTANCE_GET_INTERFACE((inst), g_graph_node_get_type(), GGraphNodeIface)) -#define G_GRAPH_NODE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), G_TYPE_GRAPH_NODE, GGraphNodeClass)) +#define G_TYPE_GRAPH_NODE (g_graph_node_get_type()) +#define G_GRAPH_NODE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), G_TYPE_GRAPH_NODE, GGraphNode)) +#define G_GRAPH_NODE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), G_TYPE_GRAPH_NODE, GGraphNodeClass)) +#define G_IS_GRAPH_NODE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), G_TYPE_GRAPH_NODE)) +#define G_IS_GRAPH_NODE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), G_TYPE_GRAPH_NODE)) +#define G_GRAPH_NODE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), G_TYPE_GRAPH_NODE, GGraphNodeClass)) /* Intermédiaire entre le noeud dot et la bribe de code (instance) */ diff --git a/src/gtkext/graph/nodes/flow.c b/src/gtkext/graph/nodes/flow.c index d691da5..5ff21c9 100644 --- a/src/gtkext/graph/nodes/flow.c +++ b/src/gtkext/graph/nodes/flow.c @@ -130,12 +130,18 @@ G_DEFINE_TYPE(GFlowNode, g_flow_node, G_TYPE_GRAPH_NODE); static void g_flow_node_class_init(GFlowNodeClass *klass) { GObjectClass *object; /* Autre version de la classe */ + GGraphNodeClass *node_class; /* Version parente de la classe*/ object = G_OBJECT_CLASS(klass); + node_class = G_GRAPH_NODE_CLASS(klass); object->dispose = (GObjectFinalizeFunc/* ! */)g_flow_node_dispose; object->finalize = (GObjectFinalizeFunc)g_flow_node_finalize; + node_class->get_rank = (get_node_rank_fc)g_flow_node_get_rank; + node_class->prepare_x = (node_prepare_x_fc)g_flow_node_prepare_x_line; + node_class->visit = (visit_flow_nodes_fc)g_flow_node_visit_flow_nodes; + } @@ -153,13 +159,6 @@ static void g_flow_node_class_init(GFlowNodeClass *klass) static void g_flow_node_init(GFlowNode *node) { - GGraphNode *base; /* Version basique */ - - base = G_GRAPH_NODE(node); - - base->get_rank = (get_node_rank_fc)g_flow_node_get_rank; - base->prepare_x = (node_prepare_x_fc)g_flow_node_prepare_x_line; - base->visit = (visit_flow_nodes_fc)g_flow_node_visit_flow_nodes; } diff --git a/src/gtkext/graph/nodes/flow.h b/src/gtkext/graph/nodes/flow.h index 4e34481..413a8f2 100644 --- a/src/gtkext/graph/nodes/flow.h +++ b/src/gtkext/graph/nodes/flow.h @@ -35,11 +35,12 @@ typedef struct _GGraphLayout GGraphLayout; -#define G_TYPE_FLOW_NODE g_flow_node_get_type() -#define G_FLOW_NODE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), g_flow_node_get_type(), GFlowNode)) -#define G_IS_FLOW_NODE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), g_flow_node_get_type())) -#define G_FLOW_NODE_GET_IFACE(inst) (G_TYPE_INSTANCE_GET_INTERFACE((inst), g_flow_node_get_type(), GFlowNodeIface)) -#define G_FLOW_NODE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), G_TYPE_FLOW_NODE, GFlowNodeClass)) +#define G_TYPE_FLOW_NODE (g_flow_node_get_type()) +#define G_FLOW_NODE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), G_TYPE_FLOW_NODE, GFlowNode)) +#define G_FLOW_NODE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), G_TYPE_FLOW_NODE, GFlowNodeClass)) +#define G_IS_FLOW_NODE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), G_TYPE_FLOW_NODE)) +#define G_IS_FLOW_NODE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), G_TYPE_FLOW_NODE)) +#define G_FLOW_NODE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), G_TYPE_FLOW_NODE, GFlowNodeClass)) /* Type d'un accrochage pour lien */ diff --git a/src/gtkext/graph/nodes/virtual.c b/src/gtkext/graph/nodes/virtual.c index cb46aee..894c6b6 100644 --- a/src/gtkext/graph/nodes/virtual.c +++ b/src/gtkext/graph/nodes/virtual.c @@ -85,9 +85,6 @@ struct _GVirtualNode GVirtualBlock *block; /* Bloc virtuel associé */ - gint x; /* Abscisse du noeud */ - gint y; /* Ordonnée du noeud */ - GGraphNode **children; /* Noeuds englobés */ size_t count; /* Quantité de ces noeuds */ virtual_level *levels; /* Différents étages de noeuds */ @@ -245,11 +242,6 @@ static void extend_vertical_links_spans(vert_links *links, const reserved_vspan - - - - - /* ---------------------------------------------------------------------------------- */ /* REPRESENTATIONS DES GROUPES LOGIQUES */ /* ---------------------------------------------------------------------------------- */ @@ -274,12 +266,22 @@ G_DEFINE_TYPE(GVirtualNode, g_virtual_node, G_TYPE_GRAPH_NODE); static void g_virtual_node_class_init(GVirtualNodeClass *klass) { GObjectClass *object; /* Autre version de la classe */ + GGraphNodeClass *node_class; /* Version parente de la classe*/ object = G_OBJECT_CLASS(klass); + node_class = G_GRAPH_NODE_CLASS(klass); object->dispose = (GObjectFinalizeFunc/* ! */)g_virtual_node_dispose; object->finalize = (GObjectFinalizeFunc)g_virtual_node_finalize; + node_class->get_rank = (get_node_rank_fc)g_virtual_node_get_rank; + node_class->reset_pos = (node_reset_pos_fc)g_virtual_node_reset_position; + node_class->prepare_x = (node_prepare_x_fc)g_virtual_node_prepare_x_line; + node_class->apply_pos = (node_apply_pos_fc)g_virtual_node_apply_position; + node_class->set_pos = (node_set_pos_fc)g_virtual_node_set_position; + node_class->visit = (visit_flow_nodes_fc)g_virtual_node_visit_flow_nodes; + node_class->contain = (find_container_fc)g_virtual_node_find_container; + } @@ -297,20 +299,6 @@ static void g_virtual_node_class_init(GVirtualNodeClass *klass) static void g_virtual_node_init(GVirtualNode *node) { - GGraphNode *base; /* Version basique */ - - base = G_GRAPH_NODE(node); - - base->get_rank = (get_node_rank_fc)g_virtual_node_get_rank; - base->reset_pos = (node_reset_pos_fc)g_virtual_node_reset_position; - base->prepare_x = (node_prepare_x_fc)g_virtual_node_prepare_x_line; - base->apply_pos = (node_apply_pos_fc)g_virtual_node_apply_position; - base->set_pos = (node_set_pos_fc)g_virtual_node_set_position; - base->visit = (visit_flow_nodes_fc)g_virtual_node_visit_flow_nodes; - base->contain = (find_container_fc)g_virtual_node_find_container; - - node->x = UNINITIALIZED_NODE_POS; - node->y = UNINITIALIZED_NODE_POS; } diff --git a/src/gtkext/graph/nodes/virtual.h b/src/gtkext/graph/nodes/virtual.h index c496df5..7f32591 100644 --- a/src/gtkext/graph/nodes/virtual.h +++ b/src/gtkext/graph/nodes/virtual.h @@ -36,11 +36,12 @@ typedef size_t vspan_slot_t; #define UNINITIALIZED_VSPAN_SLOT (~((vspan_slot_t)0)) -#define G_TYPE_VIRTUAL_NODE g_virtual_node_get_type() -#define G_VIRTUAL_NODE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), g_virtual_node_get_type(), GVirtualNode)) -#define G_IS_VIRTUAL_NODE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), g_virtual_node_get_type())) -#define G_VIRTUAL_NODE_GET_IFACE(inst) (G_TYPE_INSTANCE_GET_INTERFACE((inst), g_virtual_node_get_type(), GVirtualNodeIface)) -#define G_VIRTUAL_NODE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), G_TYPE_VIRTUAL_NODE, GVirtualNodeClass)) +#define G_TYPE_VIRTUAL_NODE (g_virtual_node_get_type()) +#define G_VIRTUAL_NODE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), G_TYPE_VIRTUAL_NODE, GVirtualNode)) +#define G_VIRTUAL_NODE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), G_TYPE_VIRTUAL_NODE, GVirtualNodeClass)) +#define G_IS_VIRTUAL_NODE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), G_TYPE_VIRTUAL_NODE)) +#define G_IS_VIRTUAL_NODE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), G_TYPE_VIRTUAL_NODE)) +#define G_VIRTUAL_NODE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), G_TYPE_VIRTUAL_NODE, GVirtualNodeClass)) /* Encapsulation graphique d'un bloc virtuel (instance) */ diff --git a/src/gtkext/gtkblockview.c b/src/gtkext/gtkblockview.c index c0004b5..2584405 100644 --- a/src/gtkext/gtkblockview.c +++ b/src/gtkext/gtkblockview.c @@ -86,6 +86,11 @@ G_DEFINE_TYPE(GtkBlockView, gtk_block_view, GTK_TYPE_BUFFER_VIEW) static void gtk_block_view_class_init(GtkBlockViewClass *class) { + GtkViewPanelClass *panel_class; /* Classe parente */ + + panel_class = GTK_VIEW_PANEL_CLASS(class); + + panel_class->attach = (attach_binary_fc)gtk_block_view_attach_binary; } @@ -104,12 +109,6 @@ static void gtk_block_view_class_init(GtkBlockViewClass *class) static void gtk_block_view_init(GtkBlockView *view) { - GtkViewPanel *panel; /* Instance parente */ - - panel = GTK_VIEW_PANEL(view); - - panel->attach = (attach_binary_fc)gtk_block_view_attach_binary; - g_signal_connect(G_OBJECT(view), "button_press_event", G_CALLBACK(gtk_block_view_button_press_event), NULL); diff --git a/src/gtkext/gtkbufferview.c b/src/gtkext/gtkbufferview.c index 0d74176..ef4f985 100644 --- a/src/gtkext/gtkbufferview.c +++ b/src/gtkext/gtkbufferview.c @@ -125,6 +125,8 @@ static void gtk_buffer_view_class_init(GtkBufferViewClass *class) panel_class->adjust = (adjust_scroll_value_fc)gtk_buffer_view_adjust_scroll_value; panel_class->get_coordinates = (get_addr_coordinates_fc)gtk_buffer_view_get_address_coordinates; panel_class->get_position = (get_view_position_fc)gtk_buffer_view_get_position; + panel_class->cache_glance = (cache_glance_fc)gtk_buffer_view_cache_glance; + g_signal_new("caret-moved", GTK_TYPE_BUFFER_VIEW, @@ -151,12 +153,6 @@ static void gtk_buffer_view_class_init(GtkBufferViewClass *class) static void gtk_buffer_view_init(GtkBufferView *view) { - GtkViewPanel *viewpanel; /* Instance parente */ - - viewpanel = GTK_VIEW_PANEL(view); - - viewpanel->cache_glance = (cache_glance_fc)gtk_buffer_view_cache_glance; - view->caret.x = 10; view->caret.y = 10; view->caret.width = 100; diff --git a/src/gtkext/gtkgraphview.c b/src/gtkext/gtkgraphview.c index 70a803b..875c1b4 100644 --- a/src/gtkext/gtkgraphview.c +++ b/src/gtkext/gtkgraphview.c @@ -128,6 +128,7 @@ static void gtk_graph_view_class_init(GtkGraphViewClass *class) panel_class->adjust = (adjust_scroll_value_fc)gtk_graph_view_adjust_scroll_value; panel_class->define = (define_address_fc)gtk_graph_view_define_main_address; panel_class->get_coordinates = (get_addr_coordinates_fc)gtk_graph_view_get_address_coordinates; + panel_class->cache_glance = (cache_glance_fc)gtk_graph_view_cache_glance; } @@ -148,13 +149,11 @@ static void gtk_graph_view_init(GtkGraphView *view) { GtkViewPanel *viewpanel; /* Instance parente #1 */ //GtkBinView *binview; /* Instance parente #2 */ - GdkColor white; /* Couleur de fond normale */ viewpanel = GTK_VIEW_PANEL(view); viewpanel->resize = (prepare_resize_fc)gtk_graph_view_prepare_resize; ////////viewpanel->get_coordinates = (get_addr_coordinates_fc)gtk_graph_view_get_address_coordinates; - viewpanel->cache_glance = (cache_glance_fc)gtk_graph_view_cache_glance; //binview = GTK_BIN_VIEW(view); diff --git a/src/gtkext/gtksourceview.c b/src/gtkext/gtksourceview.c index 0b008fa..113b9bb 100644 --- a/src/gtkext/gtksourceview.c +++ b/src/gtkext/gtksourceview.c @@ -80,6 +80,11 @@ G_DEFINE_TYPE(GtkSourceView, gtk_source_view, GTK_TYPE_BUFFER_VIEW) static void gtk_source_view_class_init(GtkSourceViewClass *class) { + GtkViewPanelClass *panel_class; /* Classe parente */ + + panel_class = GTK_VIEW_PANEL_CLASS(class); + + panel_class->attach = (attach_binary_fc)gtk_source_view_attach_binary; } @@ -98,11 +103,6 @@ static void gtk_source_view_class_init(GtkSourceViewClass *class) static void gtk_source_view_init(GtkSourceView *view) { - GtkViewPanel *panel; /* Instance parente */ - - panel = GTK_VIEW_PANEL(view); - - panel->attach = (attach_binary_fc)gtk_source_view_attach_binary; } diff --git a/src/gtkext/gtkviewpanel-int.h b/src/gtkext/gtkviewpanel-int.h index 07ce6e9..10ae933 100644 --- a/src/gtkext/gtkviewpanel-int.h +++ b/src/gtkext/gtkviewpanel-int.h @@ -33,6 +33,9 @@ +/* Prend acte de l'association d'un binaire chargé. */ +typedef void (* attach_binary_fc) (GtkViewPanel *, GLoadedBinary *); + /* Indique les dimensions de travail du composant d'affichage. */ typedef void (* compute_requested_size_fc) (GtkViewPanel *, gint *, gint *); @@ -42,9 +45,6 @@ typedef void (* compute_scroll_inc_fc) (GtkViewPanel *, gint, GtkOrientation, gd /* Réagit à un défilement chez une barre associée au composant. */ typedef void (* adjust_scroll_value_fc) (GtkViewPanel *, GtkAdjustment *, GtkOrientation); -/* Prend acte de l'association d'un binaire chargé. */ -typedef void (* attach_binary_fc) (GtkViewPanel *, GLoadedBinary *); - /* Réagit à la sélection externe d'une adresse. */ typedef void (* define_address_fc) (GtkViewPanel *, const vmpa2t *); @@ -78,10 +78,8 @@ struct _GtkViewPanel GLoadedBinary *binary; /* Binaire à visualiser */ - attach_binary_fc attach; /* Association avec un binaire */ //define_address_fc define; /* Centrage sur une partie */ prepare_resize_fc resize; /* Prépare une nouvelle taille */ - cache_glance_fc cache_glance; /* Cache de la mignature */ }; @@ -90,12 +88,14 @@ struct _GtkViewPanelClass { GtkFixedClass parent; /* A laisser en premier */ + attach_binary_fc attach; /* Association avec un binaire */ compute_requested_size_fc compute_size; /* Calcul de la taille requise */ compute_scroll_inc_fc compute_inc; /* Calcul des bonds */ adjust_scroll_value_fc adjust; /* Réaction à un défilement */ define_address_fc define; /* Centrage sur une partie */ get_addr_coordinates_fc get_coordinates;/* Conversion adresse <-> pos. */ get_view_position_fc get_position; /* Indications sur la position */ + cache_glance_fc cache_glance; /* Cache de la mignature */ }; diff --git a/src/gtkext/gtkviewpanel.c b/src/gtkext/gtkviewpanel.c index 1496056..a85853b 100644 --- a/src/gtkext/gtkviewpanel.c +++ b/src/gtkext/gtkviewpanel.c @@ -737,8 +737,8 @@ void gtk_view_panel_attach_binary(GtkViewPanel *panel, GLoadedBinary *binary, Bi panel->content = view; panel->display = g_loaded_binary_get_column_display(binary, view); - if (panel->attach != NULL) /* REMME */ - panel->attach(panel, binary); + if (GTK_VIEW_PANEL_GET_CLASS(panel)->attach != NULL) /* REMME */ + GTK_VIEW_PANEL_GET_CLASS(panel)->attach(panel, binary); g_signal_connect(binary, "display-changed", G_CALLBACK(on_view_panel_binary_display_change), panel); @@ -937,7 +937,7 @@ bool gtk_view_panel_get_position(const GtkViewPanel *panel, GBufferLine **line, void gtk_view_panel_cache_glance(GtkViewPanel *panel, cairo_t *cairo, const GtkAllocation *area, double scale) { - if (panel->cache_glance != NULL) - panel->cache_glance(panel, cairo, area, scale); + if (GTK_VIEW_PANEL_GET_CLASS(panel)->cache_glance != NULL) + GTK_VIEW_PANEL_GET_CLASS(panel)->cache_glance(panel, cairo, area, scale); } -- cgit v0.11.2-87-g4458