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->d;j++)
167  {
168  if (c->d2e[j]!=NO_UINT)
169  {
170  GetWorldDOFLabel(j,&string,GET_WORLD(c->w));
171  if (string==NULL)
172  Error("A dof without a name?");
173 
174  /* coupled fixed/joints have no name */
175  gtk_combo_box_append_text(GTK_COMBO_BOX(menu),string);
176  free(string);
177  }
178  }
179  fprintf(stderr,"Setting menu %u to entry %u [%u][%u]**************\n",i,c->d2e[c->ndx[i]],c->ndx[i],i);
180  gtk_combo_box_set_active(GTK_COMBO_BOX(menu),c->d2e[c->ndx[i]]);
181 
182  gtk_widget_show(menu);
183 
184  g_signal_connect((gpointer)menu,"changed",
185  G_CALLBACK(on_cuikexplore_menu_changed),
186  status);
187 
188  GLADE_HOOKUP_OBJECT(window,menu,name);
189 
190  /*--------------------------------------*/
191  plus=gtk_button_new();
192  gtk_widget_show(plus);
193 
194  gtk_table_attach_defaults(GTK_TABLE(table),plus,3,4,i,i+1);
195 
196  gtk_widget_set_size_request(plus,50,31);
197 
198  gtk_widget_set_tooltip_text(plus,"One step forward");
199 
200  sprintf(name,"P%u",i);
201  gtk_widget_set_name(plus,name);
202 
203  alignment=gtk_alignment_new(0.5,0.5,0,0);
204  gtk_widget_show(alignment);
205  gtk_container_add(GTK_CONTAINER(plus),alignment);
206 
207  hbox=gtk_hbox_new(FALSE,2);
208  gtk_widget_show(hbox);
209  gtk_container_add(GTK_CONTAINER(alignment),hbox);
210 
211  //image=gtk_image_new_from_icon_name("gtk-media-next-ltr",GTK_ICON_SIZE_BUTTON);
212  image=gtk_image_new_from_stock("gtk-media-next",GTK_ICON_SIZE_BUTTON);
213  gtk_widget_show(image);
214  gtk_box_pack_start(GTK_BOX(hbox),image,FALSE,FALSE,0);
215 
216  g_signal_connect((gpointer)plus,"clicked",
217  G_CALLBACK (on_cuikexplore_plus_clicked),
218  status);
219 
220  GLADE_HOOKUP_OBJECT(window,plus,name);
221  sprintf(name,"AP%u",i);GLADE_HOOKUP_OBJECT(window,alignment,name);
222  sprintf(name,"BP%u",i);GLADE_HOOKUP_OBJECT(window,hbox,name);
223  sprintf(name,"IP%u",i);GLADE_HOOKUP_OBJECT(window,image,name);
224 
225  /*--------------------------------------*/
226  up=gtk_button_new();
227  gtk_widget_show(up);
228 
229  gtk_table_attach_defaults(GTK_TABLE(table),up,4,5,i,i+1);
230 
231  gtk_widget_set_size_request(up,50,31);
232 
233  gtk_widget_set_tooltip_text(up,"Fast forward (while pressed)");
234 
235  sprintf(name,"U%u",i);
236  gtk_widget_set_name(up,name);
237 
238  alignment=gtk_alignment_new(0.5,0.5,0,0);
239  gtk_widget_show(alignment);
240  gtk_container_add(GTK_CONTAINER(up),alignment);
241 
242  hbox=gtk_hbox_new(FALSE,2);
243  gtk_widget_show(hbox);
244  gtk_container_add(GTK_CONTAINER(alignment),hbox);
245 
246  //image=gtk_image_new_from_icon_name("gtk-media-forward-ltr",GTK_ICON_SIZE_BUTTON);
247  image=gtk_image_new_from_stock("gtk-media-forward",GTK_ICON_SIZE_BUTTON);
248  gtk_widget_show(image);
249  gtk_box_pack_start(GTK_BOX(hbox),image,FALSE,FALSE,0);
250 
251  g_signal_connect((gpointer)up,"pressed",
252  G_CALLBACK (on_cuikexplore_up_pressed),
253  status);
254  g_signal_connect((gpointer)up,"released",
255  G_CALLBACK (on_cuikexplore_up_released),
256  status);
257 
258  GLADE_HOOKUP_OBJECT(window,up,name);
259  sprintf(name,"AU%u",i);GLADE_HOOKUP_OBJECT(window,alignment,name);
260  sprintf(name,"BU%u",i);GLADE_HOOKUP_OBJECT(window,hbox,name);
261  sprintf(name,"IU%u",i);GLADE_HOOKUP_OBJECT(window,image,name);
262  }
263 
264  /***********************************************************/
265 
266  Save=gtk_button_new();
267  gtk_widget_show(Save);
268 
269  gtk_table_attach_defaults(GTK_TABLE(table),Save,0,1,c->k,c->k+1);
270 
271  gtk_widget_set_size_request(Save,50,31);
272 
273  gtk_widget_set_tooltip_text(Save,"Save the current configuration");
274 
275  alignment=gtk_alignment_new(0.5,0.5,0,0);
276  gtk_widget_show(alignment);
277  gtk_container_add(GTK_CONTAINER(Save),alignment);
278 
279  hbox=gtk_hbox_new(FALSE,2);
280  gtk_widget_show(hbox);
281  gtk_container_add(GTK_CONTAINER(alignment),hbox);
282 
283  image=gtk_image_new_from_stock("gtk-save",GTK_ICON_SIZE_BUTTON);
284  gtk_widget_show(image);
285  gtk_box_pack_start(GTK_BOX(hbox),image,FALSE,FALSE,0);
286 
287  label=gtk_label_new_with_mnemonic(_("Save"));
288  gtk_widget_show(label);
289  gtk_box_pack_start(GTK_BOX(hbox),label,FALSE,FALSE,0);
290 
291  g_signal_connect((gpointer)Save,"clicked",
292  G_CALLBACK (on_cuikexplore_save),
293  status);
294 
295  GLADE_HOOKUP_OBJECT(window,Save,"Save");
296  GLADE_HOOKUP_OBJECT(window,alignment,"alignment_save");
297  GLADE_HOOKUP_OBJECT(window,hbox,"hbox_save");
298  GLADE_HOOKUP_OBJECT(window,image,"image_save");
299  GLADE_HOOKUP_OBJECT(window,label,"label_save");
300 
301  /***********************************************************/
302  label=gtk_label_new("Step size:");
303  gtk_label_set_text(GTK_LABEL(label),"Step size:");
304  gtk_table_attach_defaults(GTK_TABLE(table),label,1,2,c->k,c->k+1);
305  gtk_widget_show(label);
306 
307  entry=gtk_entry_new();
308 
309  gtk_table_attach_defaults(GTK_TABLE(table),entry,2,3,c->k,c->k+1);
310 
311  gtk_widget_set_size_request(entry,50,31);
312 
313  gtk_widget_set_tooltip_text(entry,"Set the motion step");
314 
315  sprintf(name,"%g",c->step);
316  gtk_entry_set_text(GTK_ENTRY(entry),name);
317  gtk_widget_show(entry);
318 
319  g_signal_connect((gpointer)entry,"activate",
320  G_CALLBACK(on_cuikexplore_step_changed),
321  status);
322 
323  GLADE_HOOKUP_OBJECT(window,entry,"Entry");
324  GLADE_HOOKUP_OBJECT(window,label,"label_entry");
325 
326  /***********************************************************/
327  reset=gtk_button_new();
328  gtk_widget_show(reset);
329 
330  gtk_table_attach_defaults(GTK_TABLE(table),reset,3,4,c->k,c->k+1);
331 
332  gtk_widget_set_size_request(reset,50,31);
333 
334  gtk_widget_set_tooltip_text(reset,"Reset to the initial position");
335 
336  alignment=gtk_alignment_new(0.5,0.5,0,0);
337  gtk_widget_show(alignment);
338  gtk_container_add(GTK_CONTAINER(reset),alignment);
339 
340  hbox=gtk_hbox_new(FALSE,2);
341  gtk_widget_show(hbox);
342  gtk_container_add(GTK_CONTAINER(alignment),hbox);
343 
344  image=gtk_image_new_from_stock("gtk-refresh",GTK_ICON_SIZE_BUTTON);
345  gtk_widget_show(image);
346  gtk_box_pack_start(GTK_BOX(hbox),image,FALSE,FALSE,0);
347 
348  label=gtk_label_new_with_mnemonic(_("reset"));
349  gtk_widget_show(label);
350  gtk_box_pack_start(GTK_BOX(hbox),label,FALSE,FALSE,0);
351 
352  g_signal_connect((gpointer)reset,"clicked",
353  G_CALLBACK(on_cuikexplore_reset),
354  status);
355 
356  GLADE_HOOKUP_OBJECT(window,reset,"reset");
357  GLADE_HOOKUP_OBJECT(window,alignment,"alignment_reset");
358  GLADE_HOOKUP_OBJECT(window,hbox,"hbox_reset");
359  GLADE_HOOKUP_OBJECT(window,image,"image_reset");
360  GLADE_HOOKUP_OBJECT(window,label,"label_reset");
361 
362  /***********************************************************/
363  Quit=gtk_button_new();
364  gtk_widget_show(Quit);
365 
366  gtk_table_attach_defaults(GTK_TABLE(table),Quit,4,5,c->k,c->k+1);
367 
368  gtk_widget_set_size_request(Quit,50,31);
369 
370  gtk_widget_set_tooltip_text(Quit,"Exit cuikexplore");
371 
372  alignment=gtk_alignment_new(0.5,0.5,0,0);
373  gtk_widget_show(alignment);
374  gtk_container_add(GTK_CONTAINER(Quit),alignment);
375 
376  hbox=gtk_hbox_new(FALSE,2);
377  gtk_widget_show(hbox);
378  gtk_container_add(GTK_CONTAINER(alignment),hbox);
379 
380  image=gtk_image_new_from_stock("gtk-quit",GTK_ICON_SIZE_BUTTON);
381  gtk_widget_show(image);
382  gtk_box_pack_start(GTK_BOX(hbox),image,FALSE,FALSE,0);
383 
384  label=gtk_label_new_with_mnemonic(_("Quit"));
385  gtk_widget_show(label);
386  gtk_box_pack_start(GTK_BOX(hbox),label,FALSE,FALSE,0);
387 
388  g_signal_connect((gpointer)Quit,"clicked",
389  G_CALLBACK(on_cuikexplore_quit),
390  status);
391 
392  GLADE_HOOKUP_OBJECT(window,Quit,"Quit");
393  GLADE_HOOKUP_OBJECT(window,alignment,"alignment_quit");
394  GLADE_HOOKUP_OBJECT(window,hbox,"hbox_quit");
395  GLADE_HOOKUP_OBJECT(window,image,"image_quit");
396  GLADE_HOOKUP_OBJECT(window,label,"label_quit");
397 
398  /***********************************************************/
399 
400  return window;
401 }
402 
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:2036
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.
unsigned int d
Definition: cuikexplore.h:34
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:44
unsigned int * d2e
Definition: cuikexplore.h:33
#define NO_UINT
Used to denote an identifier that has not been initialized.
Definition: defines.h:435
void on_cuikexplore_step_changed(GtkEntry *entry, gpointer user_data)
Callback function for the step entry.
unsigned int * ndx
Definition: cuikexplore.h:30
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.