Commit 2b535dc5bc2ae263bc7c3e4ce6bbcabd8cb5b572
1 parent
7c0d2479
Exists in
master
and in
1 other branch
Adding start/stop button.
Showing
1 changed file
with
55 additions
and
33 deletions
Show diff stats
src/testprogram/testprogram.c
| @@ -87,6 +87,27 @@ | @@ -87,6 +87,27 @@ | ||
| 87 | v3270_set_toggle(terminal,LIB3270_TOGGLE_SCREEN_TRACE,gtk_toggle_tool_button_get_active(button)); | 87 | v3270_set_toggle(terminal,LIB3270_TOGGLE_SCREEN_TRACE,gtk_toggle_tool_button_get_active(button)); |
| 88 | } | 88 | } |
| 89 | 89 | ||
| 90 | + static void toggle_started_trace(GtkToggleToolButton *button, GModule *module) | ||
| 91 | + { | ||
| 92 | + if(!module) | ||
| 93 | + return; | ||
| 94 | + | ||
| 95 | + GtkWidget * terminal = g_object_get_data(G_OBJECT(button),"terminal"); | ||
| 96 | + | ||
| 97 | + const gchar * method_name = (gtk_toggle_tool_button_get_active(button) ? "pw3270_plugin_start" : "pw3270_plugin_stop"); | ||
| 98 | + | ||
| 99 | + static void (*call)(GtkWidget *window, GtkWidget *terminal) = NULL; | ||
| 100 | + if(!g_module_symbol(module,method_name,(gpointer) &call)) | ||
| 101 | + { | ||
| 102 | + g_message("Can't get method \"%s\": %s",method_name,g_module_error()); | ||
| 103 | + return; | ||
| 104 | + } | ||
| 105 | + | ||
| 106 | + g_message("Calling %s",method_name); | ||
| 107 | + call(gtk_widget_get_toplevel(terminal), GTK_WIDGET(terminal)); | ||
| 108 | + | ||
| 109 | + } | ||
| 110 | + | ||
| 90 | static GtkToolItem * create_tool_item(GtkWidget *terminal, const gchar *label, const gchar *tooltip, GCallback callback) | 111 | static GtkToolItem * create_tool_item(GtkWidget *terminal, const gchar *label, const gchar *tooltip, GCallback callback) |
| 91 | { | 112 | { |
| 92 | GtkToolItem * item = gtk_toggle_tool_button_new(); | 113 | GtkToolItem * item = gtk_toggle_tool_button_new(); |
| @@ -105,43 +126,20 @@ | @@ -105,43 +126,20 @@ | ||
| 105 | GtkWidget * window = gtk_application_window_new(app); | 126 | GtkWidget * window = gtk_application_window_new(app); |
| 106 | GtkWidget * terminal = v3270_new(); | 127 | GtkWidget * terminal = v3270_new(); |
| 107 | GtkWidget * notebook = gtk_notebook_new(); | 128 | GtkWidget * notebook = gtk_notebook_new(); |
| 129 | + GModule * module = NULL; | ||
| 108 | 130 | ||
| 109 | gtk_widget_set_name(window,session_name); | 131 | gtk_widget_set_name(window,session_name); |
| 110 | 132 | ||
| 111 | // Setup tabs | 133 | // Setup tabs |
| 112 | gtk_notebook_append_page(GTK_NOTEBOOK(notebook),terminal,gtk_label_new(v3270_get_session_name(terminal))); | 134 | gtk_notebook_append_page(GTK_NOTEBOOK(notebook),terminal,gtk_label_new(v3270_get_session_name(terminal))); |
| 113 | 135 | ||
| 114 | - // Create trace window | ||
| 115 | - { | ||
| 116 | - GtkWidget * box = gtk_box_new(GTK_ORIENTATION_VERTICAL,0); | ||
| 117 | - GtkWidget * trace = v3270_trace_new(terminal); | ||
| 118 | - GtkWidget * toolbar = gtk_toolbar_new(); | ||
| 119 | - | ||
| 120 | - gtk_toolbar_insert(GTK_TOOLBAR(toolbar),create_tool_item(terminal, "DS Trace","Toggle DS Trace",G_CALLBACK(toggle_ds_trace)),-1); | ||
| 121 | - gtk_toolbar_insert(GTK_TOOLBAR(toolbar),create_tool_item(terminal, "Event Trace","Toggle Event Trace",G_CALLBACK(toggle_event_trace)),-1); | ||
| 122 | - gtk_toolbar_insert(GTK_TOOLBAR(toolbar),create_tool_item(terminal, "Screen Trace","Toggle Screen Trace",G_CALLBACK(toggle_screen_trace)),-1); | ||
| 123 | - gtk_toolbar_insert(GTK_TOOLBAR(toolbar),create_tool_item(terminal, "SSL Trace","Toggle SSL Trace",G_CALLBACK(toggle_ssl_trace)),-1); | ||
| 124 | - | ||
| 125 | - gtk_toolbar_insert(GTK_TOOLBAR(toolbar),gtk_separator_tool_item_new(),-1); | ||
| 126 | - | ||
| 127 | - gtk_box_pack_start(GTK_BOX(box),toolbar,FALSE,FALSE,0); | ||
| 128 | - gtk_box_pack_start(GTK_BOX(box),trace,TRUE,TRUE,0); | ||
| 129 | - gtk_notebook_append_page(GTK_NOTEBOOK(notebook),box,gtk_label_new("Trace")); | ||
| 130 | - } | ||
| 131 | - | ||
| 132 | - // Setup and show main window | ||
| 133 | - gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER); | ||
| 134 | - gtk_window_set_default_size (GTK_WINDOW (window), 800, 500); | ||
| 135 | - gtk_container_add(GTK_CONTAINER(window),notebook); | ||
| 136 | - gtk_widget_show_all (window); | ||
| 137 | - | ||
| 138 | // Load plugin | 136 | // Load plugin |
| 139 | { | 137 | { |
| 140 | g_autofree gchar * plugin = g_build_filename(plugin_path,plugin_name,NULL); | 138 | g_autofree gchar * plugin = g_build_filename(plugin_path,plugin_name,NULL); |
| 141 | 139 | ||
| 142 | g_message("Loading %s",plugin); | 140 | g_message("Loading %s",plugin); |
| 143 | 141 | ||
| 144 | - GModule * module = g_module_open(plugin,G_MODULE_BIND_LOCAL); | 142 | + module = g_module_open(plugin,G_MODULE_BIND_LOCAL); |
| 145 | 143 | ||
| 146 | if(module) | 144 | if(module) |
| 147 | { | 145 | { |
| @@ -153,18 +151,42 @@ | @@ -153,18 +151,42 @@ | ||
| 153 | gtk_main_quit(); | 151 | gtk_main_quit(); |
| 154 | } | 152 | } |
| 155 | 153 | ||
| 156 | - static void (*start)(GtkWidget *window, GtkWidget *terminal) = NULL; | ||
| 157 | - if(!g_module_symbol(module,"pw3270_plugin_start",(gpointer) &start)) | ||
| 158 | - { | ||
| 159 | - g_message("Can't get start method from \"%s\": %s",plugin,g_module_error()); | ||
| 160 | - gtk_main_quit(); | ||
| 161 | - } | 154 | + } |
| 155 | + // Create trace window | ||
| 156 | + { | ||
| 157 | + GtkWidget * box = gtk_box_new(GTK_ORIENTATION_VERTICAL,0); | ||
| 158 | + GtkWidget * trace = v3270_trace_new(terminal); | ||
| 159 | + GtkWidget * toolbar = gtk_toolbar_new(); | ||
| 160 | + GtkToolItem * start = gtk_toggle_tool_button_new(); | ||
| 161 | + | ||
| 162 | + gtk_widget_set_sensitive(GTK_WIDGET(start),module != NULL); | ||
| 163 | + | ||
| 164 | + g_object_set_data(G_OBJECT(start),"terminal",terminal); | ||
| 165 | + | ||
| 166 | + gtk_tool_button_set_label(GTK_TOOL_BUTTON(start),"Enable"); | ||
| 167 | + g_signal_connect(GTK_WIDGET(start), "toggled", G_CALLBACK(toggle_started_trace), module); | ||
| 168 | + gtk_widget_set_tooltip_text(GTK_WIDGET(start),"Start/Stop plugin module"); | ||
| 169 | + | ||
| 170 | + gtk_toolbar_insert(GTK_TOOLBAR(toolbar), start, -1); | ||
| 171 | + | ||
| 172 | + gtk_toolbar_insert(GTK_TOOLBAR(toolbar),gtk_separator_tool_item_new(),-1); | ||
| 162 | 173 | ||
| 163 | - g_message("Starting plugin %p",module); | ||
| 164 | - start(window,terminal); | 174 | + gtk_toolbar_insert(GTK_TOOLBAR(toolbar),create_tool_item(terminal, "DS Trace","Toggle DS Trace",G_CALLBACK(toggle_ds_trace)),-1); |
| 175 | + gtk_toolbar_insert(GTK_TOOLBAR(toolbar),create_tool_item(terminal, "Event Trace","Toggle Event Trace",G_CALLBACK(toggle_event_trace)),-1); | ||
| 176 | + gtk_toolbar_insert(GTK_TOOLBAR(toolbar),create_tool_item(terminal, "Screen Trace","Toggle Screen Trace",G_CALLBACK(toggle_screen_trace)),-1); | ||
| 177 | + gtk_toolbar_insert(GTK_TOOLBAR(toolbar),create_tool_item(terminal, "SSL Trace","Toggle SSL Trace",G_CALLBACK(toggle_ssl_trace)),-1); | ||
| 165 | 178 | ||
| 179 | + gtk_box_pack_start(GTK_BOX(box),toolbar,FALSE,FALSE,0); | ||
| 180 | + gtk_box_pack_start(GTK_BOX(box),trace,TRUE,TRUE,0); | ||
| 181 | + gtk_notebook_append_page(GTK_NOTEBOOK(notebook),box,gtk_label_new("Trace")); | ||
| 166 | } | 182 | } |
| 167 | 183 | ||
| 184 | + // Setup and show main window | ||
| 185 | + gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER); | ||
| 186 | + gtk_window_set_default_size (GTK_WINDOW (window), 800, 500); | ||
| 187 | + gtk_container_add(GTK_CONTAINER(window),notebook); | ||
| 188 | + gtk_widget_show_all (window); | ||
| 189 | + | ||
| 168 | // Setup title. | 190 | // Setup title. |
| 169 | const gchar *url = lib3270_get_url(v3270_get_session(terminal)); | 191 | const gchar *url = lib3270_get_url(v3270_get_session(terminal)); |
| 170 | if(url) { | 192 | if(url) { |