cuikexplore_interface.c
Go to the documentation of this file.
1 
12 #include <sys/types.h>
13 #include <sys/stat.h>
14 #include <unistd.h>
15 #include <string.h>
16 #include <stdio.h>
17 #include <math.h>
18 
19 #include <gdk/gdkkeysyms.h>
20 #include <gtk/gtk.h>
21 
22 #include "cuikexplore.h"
23 #include "chart.h"
24 
25 #include "cuikexplore_callbacks.h"
26 #include "cuikexplore_interface.h"
27 #include "cuikplay_support.h"
28 
29 GtkWidget *create_window_cuikexplore(gpointer status)
30 {
31  GtkWidget *window;
32  GtkWidget *table;
33  GtkWidget *Quit;
34  GtkWidget *Save;
35  GtkWidget *reset;
36  GtkWidget *entry;
37  GtkWidget *plus;
38  GtkWidget *up;
39  GtkWidget *minus;
40  GtkWidget *down;
41  GtkWidget *menu;
42  GtkWidget *alignment;
43  GtkWidget *hbox;
44  GtkWidget *image;
45  GtkWidget *label;
46  char *string;
48  unsigned int i,j;
49  char name[200];
50  unsigned int h;
51 
52  c=(TCuikexploreControl *)status;
53 
54  window=gtk_window_new(GTK_WINDOW_TOPLEVEL);
55 
56  h=35;
57  gtk_widget_set_size_request(window,500,(h+4)*(1+c->k));
58  gtk_container_border_width (GTK_CONTAINER(window),3);
59  gtk_window_set_title(GTK_WINDOW(window),_("Cuikexplore"));
60  gtk_window_set_resizable(GTK_WINDOW(window),FALSE);
61 
62  GLADE_HOOKUP_OBJECT_NO_REF(window,window,"window");
63 
64  g_signal_connect((gpointer)window,"destroy",
65  G_CALLBACK(on_cuikexplore_quit),
66  status);
67 
68  table=gtk_table_new(c->k+1,5,FALSE);
69  gtk_widget_show(table);
70  gtk_container_add(GTK_CONTAINER(window),table);
71 
72  gtk_table_set_row_spacings(GTK_TABLE(table),2);
73  gtk_table_set_col_spacings(GTK_TABLE(table),2);
74 
75  /***********************************************************/
76 
77  for(i=0;i<c->k;i++)
78  {
79  down=gtk_button_new();
80  gtk_widget_show(down);
81 
82  gtk_table_attach_defaults(GTK_TABLE(table),down,0,1,i,i+1);
83 
84  gtk_widget_set_size_request(down,50,31);
85 
86  gtk_widget_set_tooltip_text(down,"Fast backward (while pressed)");
87 
88  sprintf(name,"D%u",i);
89  gtk_widget_set_name(down,name);
90 
91  alignment=gtk_alignment_new(0.5,0.5,0,0);
92  gtk_widget_show(alignment);
93  gtk_container_add(GTK_CONTAINER(down),alignment);
94 
95  hbox=gtk_hbox_new(FALSE,2);
96  gtk_widget_show(hbox);
97  gtk_container_add(GTK_CONTAINER(alignment),hbox);
98 
99  //image=gtk_image_new_from_icon_name("gtk-media-forward-rtl",GTK_ICON_SIZE_BUTTON);
100  image=gtk_image_new_from_stock("gtk-media-rewind",GTK_ICON_SIZE_BUTTON);
101  gtk_widget_show(image);
102  gtk_box_pack_start(GTK_BOX(hbox),image,FALSE,FALSE,0);
103 
104  g_signal_connect((gpointer)down,"pressed",
105  G_CALLBACK(on_cuikexplore_down_pressed),
106  status);
107  g_signal_connect((gpointer)down,"released",
108  G_CALLBACK(on_cuikexplore_down_released),
109  status);
110 
111 
112  GLADE_HOOKUP_OBJECT(window,down,name);
113  sprintf(name,"AD%u",i);GLADE_HOOKUP_OBJECT(window,alignment,name);
114  sprintf(name,"BD%u",i);GLADE_HOOKUP_OBJECT(window,hbox,name);
115  sprintf(name,"ID%u",i);GLADE_HOOKUP_OBJECT(window,image,name);
116 
117  /*--------------------------------------*/
118  minus=gtk_button_new();
119  gtk_widget_show(minus);
120 
121  gtk_table_attach_defaults(GTK_TABLE(table),minus,1,2,i,i+1);
122 
123  gtk_widget_set_size_request(minus,50,31);
124 
125  gtk_widget_set_tooltip_text(minus,"One step backward");
126 
127  sprintf(name,"M%u",i);
128  gtk_widget_set_name(minus,name);
129 
130  alignment=gtk_alignment_new(0.5,0.5,0,0);
131  gtk_widget_show(alignment);
132  gtk_container_add(GTK_CONTAINER(minus),alignment);
133 
134  hbox=gtk_hbox_new(FALSE,2);
135  gtk_widget_show(hbox);
136  gtk_container_add(GTK_CONTAINER(alignment),hbox);
137 
138  //image=gtk_image_new_from_icon_name("gtk-media-next-rtl",GTK_ICON_SIZE_BUTTON);
139  image=gtk_image_new_from_stock("gtk-media-previous",GTK_ICON_SIZE_BUTTON);
140  gtk_widget_show(image);
141  gtk_box_pack_start(GTK_BOX(hbox),image,FALSE,FALSE,0);
142 
143  g_signal_connect((gpointer)minus,"clicked",
144  G_CALLBACK(on_cuikexplore_minus_clicked),
145  status);
146 
147  GLADE_HOOKUP_OBJECT(window,minus,name);
148  sprintf(name,"AM%u",i);GLADE_HOOKUP_OBJECT(window,alignment,name);
149  sprintf(name,"BM%u",i);GLADE_HOOKUP_OBJECT(window,hbox,name);
150  sprintf(name,"IM%u",i);GLADE_HOOKUP_OBJECT(window,image,name);
151 
152 
153  /*--------------------------------------*/
154 
155  menu=gtk_combo_box_new_text();
156 
157  gtk_table_attach_defaults(GTK_TABLE(table),menu,2,3,i,i+1);
158 
159  gtk_widget_set_size_request(menu,150,31);
160 
161  gtk_widget_set_tooltip_text(menu,"Select a (not yet selected) parameter");
162 
163  sprintf(name,"O%u",i);
164  gtk_widget_set_name(menu,name);
165 
166  for(j=0;j<c->m;j++)
167  {
168  GetWorldDOFLabel(j,&string,GET_WORLD(c->w));
169  if (string==NULL)
170  Error("A dof without a name?");
171 
172  /* coupled fixed/joints have no name */
173  gtk_combo_box_append_text(GTK_COMBO_BOX(menu),string);
174  free(string);
175  }
176  gtk_combo_box_set_active(GTK_COMBO_BOX(menu),c->ndx[i]);
177 
178  gtk_widget_show(menu);
179 
180  g_signal_connect((gpointer)menu,"changed",
181  G_CALLBACK(on_cuikexplore_menu_changed),
182  status);
183 
184  GLADE_HOOKUP_OBJECT(window,menu,name);
185 
186  /*--------------------------------------*/
187  plus=gtk_button_new();
188  gtk_widget_show(plus);
189 
190  gtk_table_attach_defaults(GTK_TABLE(table),plus,3,4,i,i+1);
191 
192  gtk_widget_set_size_request(plus,50,31);
193 
194  gtk_widget_set_tooltip_text(plus,"One step forward");
195 
196  sprintf(name,"P%u",i);
197  gtk_widget_set_name(plus,name);
198 
199  alignment=gtk_alignment_new(0.5,0.5,0,0);
200  gtk_widget_show(alignment);
201  gtk_container_add(GTK_CONTAINER(plus),alignment);
202 
203  hbox=gtk_hbox_new(FALSE,2);
204  gtk_widget_show(hbox);
205  gtk_container_add(GTK_CONTAINER(alignment),hbox);
206 
207  //image=gtk_image_new_from_icon_name("gtk-media-next-ltr",GTK_ICON_SIZE_BUTTON);
208  image=gtk_image_new_from_stock("gtk-media-next",GTK_ICON_SIZE_BUTTON);
209  gtk_widget_show(image);
210  gtk_box_pack_start(GTK_BOX(hbox),image,FALSE,FALSE,0);
211 
212  g_signal_connect((gpointer)plus,"clicked",
213  G_CALLBACK (on_cuikexplore_plus_clicked),
214  status);
215 
216  GLADE_HOOKUP_OBJECT(window,plus,name);
217  sprintf(name,"AP%u",i);GLADE_HOOKUP_OBJECT(window,alignment,name);
218  sprintf(name,"BP%u",i);GLADE_HOOKUP_OBJECT(window,hbox,name);
219  sprintf(name,"IP%u",i);GLADE_HOOKUP_OBJECT(window,image,name);
220 
221  /*--------------------------------------*/
222  up=gtk_button_new();
223  gtk_widget_show(up);
224 
225  gtk_table_attach_defaults(GTK_TABLE(table),up,4,5,i,i+1);
226 
227  gtk_widget_set_size_request(up,50,31);
228 
229  gtk_widget_set_tooltip_text(up,"Fast forward (while pressed)");
230 
231  sprintf(name,"U%u",i);
232  gtk_widget_set_name(up,name);
233 
234  alignment=gtk_alignment_new(0.5,0.5,0,0);
235  gtk_widget_show(alignment);
236  gtk_container_add(GTK_CONTAINER(up),alignment);
237 
238  hbox=gtk_hbox_new(FALSE,2);
239  gtk_widget_show(hbox);
240  gtk_container_add(GTK_CONTAINER(alignment),hbox);
241 
242  //image=gtk_image_new_from_icon_name("gtk-media-forward-ltr",GTK_ICON_SIZE_BUTTON);
243  image=gtk_image_new_from_stock("gtk-media-forward",GTK_ICON_SIZE_BUTTON);
244  gtk_widget_show(image);
245  gtk_box_pack_start(GTK_BOX(hbox),image,FALSE,FALSE,0);
246 
247  g_signal_connect((gpointer)up,"pressed",
248  G_CALLBACK (on_cuikexplore_up_pressed),
249  status);
250  g_signal_connect((gpointer)up,"released",
251  G_CALLBACK (on_cuikexplore_up_released),
252  status);
253 
254  GLADE_HOOKUP_OBJECT(window,up,name);
255  sprintf(name,"AU%u",i);GLADE_HOOKUP_OBJECT(window,alignment,name);
256  sprintf(name,"BU%u",i);GLADE_HOOKUP_OBJECT(window,hbox,name);
257  sprintf(name,"IU%u",i);GLADE_HOOKUP_OBJECT(window,image,name);
258  }
259 
260  /***********************************************************/
261 
262  Save=gtk_button_new();
263  gtk_widget_show(Save);
264 
265  gtk_table_attach_defaults(GTK_TABLE(table),Save,0,1,c->k,c->k+1);
266 
267  gtk_widget_set_size_request(Save,50,31);
268 
269  gtk_widget_set_tooltip_text(Save,"Save the current configuration");
270 
271  alignment=gtk_alignment_new(0.5,0.5,0,0);
272  gtk_widget_show(alignment);
273  gtk_container_add(GTK_CONTAINER(Save),alignment);
274 
275  hbox=gtk_hbox_new(FALSE,2);
276  gtk_widget_show(hbox);
277  gtk_container_add(GTK_CONTAINER(alignment),hbox);
278 
279  image=gtk_image_new_from_stock("gtk-save",GTK_ICON_SIZE_BUTTON);
280  gtk_widget_show(image);
281  gtk_box_pack_start(GTK_BOX(hbox),image,FALSE,FALSE,0);
282 
283  label=gtk_label_new_with_mnemonic(_("Save"));
284  gtk_widget_show(label);
285  gtk_box_pack_start(GTK_BOX(hbox),label,FALSE,FALSE,0);
286 
287  g_signal_connect((gpointer)Save,"clicked",
288  G_CALLBACK (on_cuikexplore_save),
289  status);
290 
291  GLADE_HOOKUP_OBJECT(window,Save,"Save");
292  GLADE_HOOKUP_OBJECT(window,alignment,"alignment_save");
293  GLADE_HOOKUP_OBJECT(window,hbox,"hbox_save");
294  GLADE_HOOKUP_OBJECT(window,image,"image_save");
295  GLADE_HOOKUP_OBJECT(window,label,"label_save");
296 
297  /***********************************************************/
298  label=gtk_label_new("Step size:");
299  gtk_label_set_text(GTK_LABEL(label),"Step size:");
300  gtk_table_attach_defaults(GTK_TABLE(table),label,1,2,c->k,c->k+1);
301  gtk_widget_show(label);
302 
303  entry=gtk_entry_new();
304 
305  gtk_table_attach_defaults(GTK_TABLE(table),entry,2,3,c->k,c->k+1);
306 
307  gtk_widget_set_size_request(entry,50,31);
308 
309  gtk_widget_set_tooltip_text(entry,"Set the motion step");
310 
311  sprintf(name,"%g",c->step);
312  gtk_entry_set_text(GTK_ENTRY(entry),name);
313  gtk_widget_show(entry);
314 
315  g_signal_connect((gpointer)entry,"changed",
316  G_CALLBACK(on_cuikexplore_step_changed),
317  status);
318 
319  GLADE_HOOKUP_OBJECT(window,entry,"Entry");
320  GLADE_HOOKUP_OBJECT(window,label,"label_entry");
321 
322  /***********************************************************/
323  reset=gtk_button_new();
324  gtk_widget_show(reset);
325 
326  gtk_table_attach_defaults(GTK_TABLE(table),reset,3,4,c->k,c->k+1);
327 
328  gtk_widget_set_size_request(reset,50,31);
329 
330  gtk_widget_set_tooltip_text(reset,"Reset to the initial position");
331 
332  alignment=gtk_alignment_new(0.5,0.5,0,0);
333  gtk_widget_show(alignment);
334  gtk_container_add(GTK_CONTAINER(reset),alignment);
335 
336  hbox=gtk_hbox_new(FALSE,2);
337  gtk_widget_show(hbox);
338  gtk_container_add(GTK_CONTAINER(alignment),hbox);
339 
340  image=gtk_image_new_from_stock("gtk-refresh",GTK_ICON_SIZE_BUTTON);
341  gtk_widget_show(image);
342  gtk_box_pack_start(GTK_BOX(hbox),image,FALSE,FALSE,0);
343 
344  label=gtk_label_new_with_mnemonic(_("reset"));
345  gtk_widget_show(label);
346  gtk_box_pack_start(GTK_BOX(hbox),label,FALSE,FALSE,0);
347 
348  g_signal_connect((gpointer)reset,"clicked",
349  G_CALLBACK(on_cuikexplore_reset),
350  status);
351 
352  GLADE_HOOKUP_OBJECT(window,reset,"reset");
353  GLADE_HOOKUP_OBJECT(window,alignment,"alignment_reset");
354  GLADE_HOOKUP_OBJECT(window,hbox,"hbox_reset");
355  GLADE_HOOKUP_OBJECT(window,image,"image_reset");
356  GLADE_HOOKUP_OBJECT(window,label,"label_reset");
357 
358  /***********************************************************/
359  Quit=gtk_button_new();
360  gtk_widget_show(Quit);
361 
362  gtk_table_attach_defaults(GTK_TABLE(table),Quit,4,5,c->k,c->k+1);
363 
364  gtk_widget_set_size_request(Quit,50,31);
365 
366  gtk_widget_set_tooltip_text(Quit,"Exit cuikexplore");
367 
368  alignment=gtk_alignment_new(0.5,0.5,0,0);
369  gtk_widget_show(alignment);
370  gtk_container_add(GTK_CONTAINER(Quit),alignment);
371 
372  hbox=gtk_hbox_new(FALSE,2);
373  gtk_widget_show(hbox);
374  gtk_container_add(GTK_CONTAINER(alignment),hbox);
375 
376  image=gtk_image_new_from_stock("gtk-quit",GTK_ICON_SIZE_BUTTON);
377  gtk_widget_show(image);
378  gtk_box_pack_start(GTK_BOX(hbox),image,FALSE,FALSE,0);
379 
380  label=gtk_label_new_with_mnemonic(_("Quit"));
381  gtk_widget_show(label);
382  gtk_box_pack_start(GTK_BOX(hbox),label,FALSE,FALSE,0);
383 
384  g_signal_connect((gpointer)Quit,"clicked",
385  G_CALLBACK(on_cuikexplore_quit),
386  status);
387 
388  GLADE_HOOKUP_OBJECT(window,Quit,"Quit");
389  GLADE_HOOKUP_OBJECT(window,alignment,"alignment_quit");
390  GLADE_HOOKUP_OBJECT(window,hbox,"hbox_quit");
391  GLADE_HOOKUP_OBJECT(window,image,"image_quit");
392  GLADE_HOOKUP_OBJECT(window,label,"label_quit");
393 
394  /***********************************************************/
395 
396  return window;
397 }
398 
void on_cuikexplore_down_pressed(GtkButton *button, gpointer user_data)
Callback function for the minus buttons.
#define GET_WORLD(wcs)
Returns the world from an TAtlasBase.
Definition: wcs.h:150
#define FALSE
FALSE.
Definition: boolean.h:30
Headers of the GTK callback functions for cuikexplore.
void GetWorldDOFLabel(unsigned int ndof, char **string, Tworld *w)
Returns a label identifying each degree of freedom.
Definition: world.c:1585
unsigned int k
Definition: cuikexplore.h:29
void Error(const char *s)
General error function.
Definition: error.c:80
void on_cuikexplore_minus_clicked(GtkButton *button, gpointer user_data)
Callback function for the plus buttons.
void on_cuikexplore_down_released(GtkButton *button, gpointer user_data)
Callback function for the plus buttons.
Definition of the cuikexplore control structure.
void on_cuikexplore_reset(GtkButton *button, gpointer user_data)
Callback function for the reset button.
void on_cuikexplore_menu_changed(GtkComboBox *menu, gpointer user_data)
Callback function for the menus.
void on_cuikexplore_plus_clicked(GtkButton *button, gpointer user_data)
Callback function for the plus buttons.
Definition of a local chart on a manifold.
void on_cuikexplore_save(GtkButton *button, gpointer user_data)
Callback function for the save button.
void on_cuikexplore_quit(GtkButton *button, gpointer user_data)
Callback function for the quit button.
TAtlasBase * w
Definition: cuikexplore.h:37
void on_cuikexplore_step_changed(GtkEntry *entry, gpointer user_data)
Callback function for the step entry.
unsigned int * ndx
Definition: cuikexplore.h:30
unsigned int m
Definition: cuikexplore.h:31
Definition of the cuikexplore control structure.
Definition: cuikexplore.h:23
void on_cuikexplore_up_released(GtkButton *button, gpointer user_data)
Callback function for the plus buttons.
void on_cuikexplore_up_pressed(GtkButton *button, gpointer user_data)
Callback function for the plus buttons.
Headers of the GTK interface functions for cuikexplore.
Headers of the GTK support functions for cuikplay.