Commit 068bbf7b306f350263511a4b9672038a597753b9

Authored by Perry Werneck
1 parent 17bb509e

Refactoring terminal property actions.

src/include/pw3270/actions.h
... ... @@ -200,29 +200,6 @@
200 200 //
201 201 // V3270 Property Action
202 202 //
203   - #define V3270_TYPE_PROPERTY_ACTION (v3270PropertyAction_get_type())
204   - #define V3270_PROPERTY_ACTION(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), V3270_TYPE_PROPERTY_ACTION, v3270PropertyAction))
205   - #define V3270_PROPERTY_ACTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), V3270_TYPE_PROPERTY_ACTION, v3270PropertyActionClass))
206   - #define V3270_IS_PROPERTY_ACTION(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), V3270_TYPE_PROPERTY_ACTION))
207   - #define V3270_IS_PROPERTY_ACTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), V3270_TYPE_PROPERTY_ACTION))
208   - #define V3270_PROPERTY_ACTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), V3270_TYPE_PROPERTY_ACTION, v3270PropertyActionClass))
209   -
210   - typedef struct _v3270PropertyAction {
211   -
212   - pw3270SimpleAction parent;
213   -
214   - GParamSpec *pspec;
215   -
216   - } v3270PropertyAction;
217   -
218   - typedef struct _v3270PropertyActionClass {
219   -
220   - pw3270SimpleActionClass parent_class;
221   -
222   - } v3270PropertyActionClass;
223   -
224   - GType v3270PropertyAction_get_type(void) G_GNUC_CONST;
225   -
226 203 GAction * v3270_property_action_new(GtkWidget *widget, const gchar *property_name);
227 204  
228 205 //
... ...
src/objects/actions/v3270/property.c
... ... @@ -42,21 +42,49 @@
42 42 #include <v3270.h>
43 43 #include <lib3270/properties.h>
44 44  
45   - static void v3270PropertyAction_class_init(v3270PropertyActionClass *klass);
46   - static void v3270PropertyAction_init(v3270PropertyAction *action);
47   - static GVariant * get_state(GAction *action, GtkWidget *terminal);
48   - static void change_widget(GAction *object, GtkWidget *from, GtkWidget *to);
  45 + //
  46 + // V3270 Property Action
  47 + //
  48 + #define V3270_TYPE_PROPERTY_ACTION (v3270PropertyAction_get_type())
  49 + #define V3270_PROPERTY_ACTION(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), V3270_TYPE_PROPERTY_ACTION, v3270PropertyAction))
  50 + #define V3270_PROPERTY_ACTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), V3270_TYPE_PROPERTY_ACTION, v3270PropertyActionClass))
  51 + #define V3270_IS_PROPERTY_ACTION(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), V3270_TYPE_PROPERTY_ACTION))
  52 + #define V3270_IS_PROPERTY_ACTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), V3270_TYPE_PROPERTY_ACTION))
  53 + #define V3270_PROPERTY_ACTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), V3270_TYPE_PROPERTY_ACTION, v3270PropertyActionClass))
49 54  
50   - G_DEFINE_TYPE(v3270PropertyAction, v3270PropertyAction, PW3270_TYPE_SIMPLE_ACTION);
  55 + typedef struct _v3270PropertyAction {
  56 +
  57 + V3270SimpleAction parent;
  58 +
  59 + GParamSpec *pspec;
  60 +
  61 + } v3270PropertyAction;
  62 +
  63 + typedef struct _v3270PropertyActionClass {
  64 +
  65 + V3270SimpleActionClass parent_class;
  66 +
  67 + } v3270PropertyActionClass;
  68 +
  69 +// static void v3270PropertyAction_class_init(v3270PropertyActionClass *klass);
  70 +// static void v3270PropertyAction_init(v3270PropertyAction *action);
  71 +
  72 + static GVariant * get_state(GAction *action, GtkWidget *terminal);
  73 + static const GVariantType * get_state_type(GAction *object);
  74 + static const GVariantType * get_parameter_type(GAction *object);
  75 +
  76 + static void change_widget(GAction *object, GtkWidget *from, GtkWidget *to);
  77 +
  78 + G_DEFINE_TYPE(v3270PropertyAction, v3270PropertyAction, V3270_TYPE_SIMPLE_ACTION);
51 79  
52 80 void v3270PropertyAction_class_init(v3270PropertyActionClass *klass) {
53 81 klass->parent_class.parent_class.change_widget = change_widget;
  82 + klass->parent_class.parent_class.get_parameter_type = get_parameter_type;
  83 + klass->parent_class.parent_class.get_state = get_state;
  84 + klass->parent_class.parent_class.get_state_type = get_state_type;
54 85 }
55 86  
56   - static void v3270PropertyAction_init(v3270PropertyAction *action) {
57   -
58   - action->parent.parent.get_state_property = get_state;
59   -
  87 + static void v3270PropertyAction_init(v3270PropertyAction G_GNUC_UNUSED(*action)) {
60 88 }
61 89  
62 90 GVariant * get_state(GAction *object, GtkWidget *terminal) {
... ... @@ -207,26 +235,48 @@
207 235  
208 236 v3270PropertyAction * action = (v3270PropertyAction *) g_object_new(V3270_TYPE_PROPERTY_ACTION, NULL);
209 237  
210   - pw3270_simple_action_set_lib3270_property(PW3270_SIMPLE_ACTION(action), lib3270_property_get_by_name(pspec->name));
211   -
212   - action->parent.parent.name = g_param_spec_get_name(pspec);
213   - action->parent.tooltip = g_param_spec_get_blurb(pspec);
  238 + action->parent.name = g_param_spec_get_name(pspec);
214 239  
215   - if(pspec->value_type == G_TYPE_BOOLEAN) {
216   - action->parent.parent.types.state = G_VARIANT_TYPE_BOOLEAN;
217   - } else {
218   - action->parent.parent.types.state = G_VARIANT_TYPE_STRING;
219   - action->parent.parent.types.parameter = G_VARIANT_TYPE_STRING;
  240 + const LIB3270_PROPERTY * lProperty = lib3270_property_get_by_name(pspec->name);
  241 + if(lProperty) {
  242 + action->parent.label = lib3270_property_get_label(lProperty);
  243 + action->parent.tooltip = lib3270_property_get_summary(lProperty);
  244 +// action->group.id = lProperty->group;
220 245 }
221 246  
  247 + if(!action->parent.tooltip)
  248 + action->parent.tooltip = g_param_spec_get_blurb(pspec);
  249 +
222 250 action->parent.parent.activate = activate;
223 251 action->pspec = pspec;
224 252  
225   - pw3270_action_set_terminal_widget(G_ACTION(action), widget);
  253 + v3270_action_set_terminal_widget(G_ACTION(action), widget);
226 254  
227 255 return G_ACTION(action);
228 256 }
229 257  
  258 + const GVariantType * get_state_type(GAction *object) {
  259 +
  260 + v3270PropertyAction * action = V3270_PROPERTY_ACTION(object);
  261 +
  262 + if(action->pspec->value_type == G_TYPE_BOOLEAN)
  263 + return G_VARIANT_TYPE_BOOLEAN;
  264 +
  265 + return G_VARIANT_TYPE_STRING;
  266 +
  267 + }
  268 +
  269 + const GVariantType * get_parameter_type(GAction *object) {
  270 +
  271 + v3270PropertyAction * action = V3270_PROPERTY_ACTION(object);
  272 +
  273 + if(action->pspec->value_type == G_TYPE_BOOLEAN)
  274 + return G_VARIANT_TYPE_BOOLEAN;
  275 +
  276 + return G_VARIANT_TYPE_STRING;
  277 +
  278 + }
  279 +
230 280 void change_widget(GAction *object, GtkWidget *from, GtkWidget *to) {
231 281  
232 282 v3270PropertyAction * action = V3270_PROPERTY_ACTION(object);
... ... @@ -248,7 +298,7 @@
248 298  
249 299 }
250 300  
251   - PW3270_ACTION_CLASS(v3270PropertyAction_parent_class)->change_widget(object,from,to);
  301 + V3270_ACTION_CLASS(v3270PropertyAction_parent_class)->change_widget(object,from,to);
252 302  
253 303 if(to) {
254 304 g_signal_connect(G_OBJECT(to),signal_name,G_CALLBACK(on_notify),action);
... ...