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,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) {