/* * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270 * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a * aplicativos mainframe. Registro no INPI sob o nome G3270. * * Copyright (C) <2008> * * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela * Free Software Foundation. * * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para * obter mais detalhes. * * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin * St, Fifth Floor, Boston, MA 02110-1301 USA * * Este programa está nomeado como - e possui - linhas de código. * * Contatos: * * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck) * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça) * */ #ifndef V3270_ACTIONS_H_INCLUDED #define V3270_ACTIONS_H_INCLUDED 1 #include #include #include #include G_BEGIN_DECLS typedef struct _V3270Accelerator V3270Accelerator; typedef enum _v3270_action_flag { V3270_ACTION_FLAG_DEFAULT = 0x00000000, V3270_ACTION_FLAG_CUT = 0x10000000, } V3270_ACTION_FLAGS; typedef struct _v3270_action V3270_ACTION; struct _v3270_action { LIB3270_PROPERTY_HEAD V3270_ACTION_FLAGS flags; ///< @brief (The flags for activation). int (*activate)(GtkWidget *widget, const V3270_ACTION *action); const char *keys; ///< @brief Default accelerators (or NULL if no default). }; /// /// @brief Get internal V3270 action table. /// LIB3270_EXPORT const V3270_ACTION * v3270_get_actions(); // // Actions // LIB3270_EXPORT void v3270_tab(GtkWidget *widget); // // Misc // LIB3270_EXPORT void v3270_set_scroll_handler(GtkWidget *widget, GdkScrollDirection direction, GCallback callback, gpointer data); LIB3270_EXPORT void v3270_set_scroll_action(GtkWidget *widget, GdkScrollDirection direction, GtkAction *action) G_GNUC_DEPRECATED; // // Keyboard accelerators // LIB3270_EXPORT void v3270_backtab(GtkWidget *widget); /// @brief Reset accelerator map to defaults. LIB3270_EXPORT void v3270_accelerator_map_reset(GtkWidget *widget); LIB3270_EXPORT void v3270_accelerator_map_foreach(GtkWidget *widget,void (*call)(const V3270Accelerator * accel, const char *keys, gpointer ptr), gpointer ptr); LIB3270_EXPORT void v3270_accelerator_map_to_key_file(GtkWidget *widget, GKeyFile *key_file, const gchar *group_name); LIB3270_EXPORT gboolean v3270_accelerator_map_load_key_file(GtkWidget *widget, GKeyFile *key_file, const gchar *group_name); LIB3270_EXPORT V3270Accelerator * v3270_accelerator_map_add_entry(GtkWidget *widget, const gchar *name, const gchar *accelerator, GCallback callback, gpointer data); LIB3270_EXPORT const V3270Accelerator * v3270_get_accelerator(GtkWidget *widget, guint keyval, GdkModifierType state); LIB3270_EXPORT void v3270_accelerator_activate(const V3270Accelerator * accel, GtkWidget *terminal); LIB3270_EXPORT gboolean v3270_accelerator_compare(const V3270Accelerator * accel, const guint keyval, const GdkModifierType mods); LIB3270_EXPORT const gchar * v3270_accelerator_get_name(const V3270Accelerator * accel); LIB3270_EXPORT const gchar * v3270_accelerator_get_description(const V3270Accelerator * accel); LIB3270_EXPORT const gchar * v3270_accelerator_get_summary(const V3270Accelerator * accel); LIB3270_EXPORT void v3270_accelerator_parse(V3270Accelerator * accel, const char *key); /// @brief Converts the accelerator into a string which can be used to represent the accelerator to the user. /// @return A newly-allocated string representing the accelerator. LIB3270_EXPORT gchar * v3270_accelerator_get_label(const V3270Accelerator * accel); LIB3270_EXPORT V3270Accelerator * v3270_accelerator_clone(const V3270Accelerator *accel); LIB3270_EXPORT const V3270Accelerator * v3270_accelerator_map_lookup_entry(GtkWidget *widget, guint keyval, GdkModifierType state); // // GAction wrapper for V3270 terminal widget. // #define V3270_TYPE_ACTION (V3270Action_get_type()) #define V3270_ACTION(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), V3270_TYPE_ACTION, V3270Action)) #define V3270_ACTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), V3270_TYPE_ACTION, V3270ActionClass)) #define V3270_IS_ACTION(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), V3270_TYPE_ACTION)) #define V3270_IS_ACTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), V3270_TYPE_ACTION)) #define V3270_ACTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), V3270_TYPE_ACTION, V3270ActionClass)) typedef struct _V3270Action { GObject parent; GtkWidget * terminal; ///> @brief The active terminal widget. const void * listener; ///> @brief Signal listener for the action group. const gchar * translation_domain; ///> @brief The translation domain for the action. } V3270Action; typedef struct _V3270ActionClass { GObjectClass parent_class; struct { GParamSpec * state; GParamSpec * enabled; } properties; void (*activate)(GAction *action, GVariant *parameter, GtkWidget *terminal); void (*change_widget)(GAction *action, GtkWidget *from, GtkWidget *to); const gchar * (*translate)(GAction *action, const gchar *text); const GVariantType * (*get_state_type)(GAction *object); GVariant * (*get_state)(GAction *action, GtkWidget *terminal); const GVariantType * (*get_parameter_type)(GAction *object); gboolean (*get_enabled)(GAction *action, GtkWidget *terminal); const gchar * (*get_name)(GAction *action); const gchar * (*get_icon_name)(GAction *action); const gchar * (*get_label)(GAction *action); const gchar * (*get_tooltip)(GAction *action); LIB3270_ACTION_GROUP (*get_action_group)(GAction *action); } V3270ActionClass; LIB3270_EXPORT GType V3270Action_get_type(void) G_GNUC_CONST; LIB3270_EXPORT GAction * v3270_action_new(); LIB3270_EXPORT void v3270_action_set_terminal_widget(GAction *object, GtkWidget *widget); LIB3270_EXPORT GtkWidget * v3270_action_get_terminal_widget(GAction *object); LIB3270_EXPORT LIB3270_ACTION_GROUP v3270_action_get_group(GAction *action); LIB3270_EXPORT void v3270_action_notify_state(GAction *action); LIB3270_EXPORT void v3270_action_notify_enabled(GAction *action); LIB3270_EXPORT const gchar * v3270_action_translate(GAction *action, const gchar *text); LIB3270_EXPORT H3270 * v3270_action_get_session(GAction *action); LIB3270_EXPORT const gchar * v3270_action_get_icon_name(GAction *action); LIB3270_EXPORT const gchar * v3270_action_get_label(GAction *action); LIB3270_EXPORT const gchar * v3270_action_get_tooltip(GAction *action); LIB3270_EXPORT GdkPixbuf * v3270_action_get_pixbuf(GAction *action, GtkIconSize icon_size, GtkIconLookupFlags flags); LIB3270_EXPORT GAction * g_action_new_from_lib3270(const LIB3270_ACTION * definition); LIB3270_EXPORT GAction * g_action_new_from_toggle(const LIB3270_TOGGLE * definition); LIB3270_EXPORT GAction * v3270_pfkey_action_new(void); LIB3270_EXPORT GAction * v3270_pakey_action_new(void); LIB3270_EXPORT void g_action_map_add_v3270_actions(GActionMap *action_map); LIB3270_EXPORT void g_action_map_add_lib3270_actions(GActionMap *action_map); LIB3270_EXPORT void g_action_map_add_lib3270_toggles(GActionMap *action_map); // // "Simple" action // #define V3270_TYPE_SIMPLE_ACTION (V3270SimpleAction_get_type()) #define V3270_SIMPLE_ACTION(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), V3270_TYPE_SIMPLE_ACTION, V3270SimpleAction)) #define V3270_SIMPLE_ACTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), V3270_TYPE_SIMPLE_ACTION, V3270SimpleActionClass)) #define V3270_IS_SIMPLE_ACTION(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), V3270_TYPE_SIMPLE_ACTION)) #define V3270_IS_SIMPLE_ACTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), V3270_TYPE_SIMPLE_ACTION)) #define V3270_SIMPLE_ACTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), V3270_TYPE_SIMPLE_ACTION, V3270SimpleActionClass)) typedef struct _V3270SimpleAction { V3270Action parent; // Fixed data const gchar * name; const gchar * icon_name; const gchar * label; const gchar * tooltip; // Lib3270 Action group struct { LIB3270_ACTION_GROUP id; const void * listener; } group; /// @brief Activation method. void (*activate)(GAction *action, GVariant *parameter, GtkWidget *terminal); } V3270SimpleAction; typedef struct _V3270SimpleActionClass { V3270ActionClass parent_class; } V3270SimpleActionClass; GType V3270SimpleAction_get_type(void) G_GNUC_CONST; /// @brief Create an empty simple action. LIB3270_EXPORT V3270SimpleAction * v3270_simple_action_new(); /// @brief Create a dialog action. LIB3270_EXPORT V3270SimpleAction * v3270_dialog_action_new(GtkWidget * (*factory)(V3270SimpleAction *, GtkWidget *)); /// @brief Create an action from property name. LIB3270_EXPORT V3270SimpleAction * v3270_property_action_new(GtkWidget *widget, const gchar *property_name, const LIB3270_ACTION_GROUP action_group); /// @brief Create an action with the "enable" property binded with terminal property. LIB3270_EXPORT V3270SimpleAction * v3270_conditional_action_new(GtkWidget *widget, const gchar *property_name); G_END_DECLS #endif // V3270_ACTIONS_H_INCLUDED