Commit 2b535dc5bc2ae263bc7c3e4ce6bbcabd8cb5b572

Authored by Perry Werneck
1 parent 7c0d2479
Exists in master and in 1 other branch develop

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 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 111 static GtkToolItem * create_tool_item(GtkWidget *terminal, const gchar *label, const gchar *tooltip, GCallback callback)
91 112 {
92 113 GtkToolItem * item = gtk_toggle_tool_button_new();
... ... @@ -105,43 +126,20 @@
105 126 GtkWidget * window = gtk_application_window_new(app);
106 127 GtkWidget * terminal = v3270_new();
107 128 GtkWidget * notebook = gtk_notebook_new();
  129 + GModule * module = NULL;
108 130  
109 131 gtk_widget_set_name(window,session_name);
110 132  
111 133 // Setup tabs
112 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 136 // Load plugin
139 137 {
140 138 g_autofree gchar * plugin = g_build_filename(plugin_path,plugin_name,NULL);
141 139  
142 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 144 if(module)
147 145 {
... ... @@ -153,18 +151,42 @@
153 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 190 // Setup title.
169 191 const gchar *url = lib3270_get_url(v3270_get_session(terminal));
170 192 if(url) {
... ...