Commit 068bbf7b306f350263511a4b9672038a597753b9
1 parent
17bb509e
Exists in
master
and in
4 other branches
Refactoring terminal property actions.
Showing
2 changed files
with
70 additions
and
43 deletions
Show diff stats
src/include/pw3270/actions.h
| @@ -200,29 +200,6 @@ | @@ -200,29 +200,6 @@ | ||
| 200 | // | 200 | // |
| 201 | // V3270 Property Action | 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 | GAction * v3270_property_action_new(GtkWidget *widget, const gchar *property_name); | 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,21 +42,49 @@ | ||
| 42 | #include <v3270.h> | 42 | #include <v3270.h> |
| 43 | #include <lib3270/properties.h> | 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 | void v3270PropertyAction_class_init(v3270PropertyActionClass *klass) { | 80 | void v3270PropertyAction_class_init(v3270PropertyActionClass *klass) { |
| 53 | klass->parent_class.parent_class.change_widget = change_widget; | 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 | GVariant * get_state(GAction *object, GtkWidget *terminal) { | 90 | GVariant * get_state(GAction *object, GtkWidget *terminal) { |
| @@ -207,26 +235,48 @@ | @@ -207,26 +235,48 @@ | ||
| 207 | 235 | ||
| 208 | v3270PropertyAction * action = (v3270PropertyAction *) g_object_new(V3270_TYPE_PROPERTY_ACTION, NULL); | 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 | action->parent.parent.activate = activate; | 250 | action->parent.parent.activate = activate; |
| 223 | action->pspec = pspec; | 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 | return G_ACTION(action); | 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 | void change_widget(GAction *object, GtkWidget *from, GtkWidget *to) { | 280 | void change_widget(GAction *object, GtkWidget *from, GtkWidget *to) { |
| 231 | 281 | ||
| 232 | v3270PropertyAction * action = V3270_PROPERTY_ACTION(object); | 282 | v3270PropertyAction * action = V3270_PROPERTY_ACTION(object); |
| @@ -248,7 +298,7 @@ | @@ -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 | if(to) { | 303 | if(to) { |
| 254 | g_signal_connect(G_OBJECT(to),signal_name,G_CALLBACK(on_notify),action); | 304 | g_signal_connect(G_OBJECT(to),signal_name,G_CALLBACK(on_notify),action); |