cuikmove_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 "cuikmove.h"
23 
24 #include "cuikmove_callbacks.h"
25 #include "cuikmove_interface.h"
26 #include "cuikplay_support.h"
27 
28 GtkWidget *create_window_cuikmove(gpointer status)
29 {
30  GtkWidget *window;
31  GtkWidget *table;
32  GtkWidget *hscale;
33  GtkWidget *Quit;
34  GtkWidget *Save;
35  GtkWidget *alignment;
36  GtkWidget *hbox;
37  GtkWidget *image;
38  GtkWidget *label;
40 
41  c=(TCuikMoveControl *)status;
42  unsigned int i;
43  char name[20];
44  char *string;
45  char *bstring;
46  double stepSize,pageSize;
47  unsigned int w,l,h,sh;
48  GdkScreen *screen;
49 
50  window=gtk_window_new(GTK_WINDOW_TOPLEVEL);
51  w=0;
52  for(i=0;i<c->ndof;i++)
53  {
54  GetWorldDOFLabel(i,&string,c->w);
55  if (string!=NULL)
56  {
57  l=strlen(string);
58  if (l>w) w=l;
59  free(string);
60  }
61  }
62 
63  screen=gtk_window_get_screen(GTK_WINDOW(window));
64  sh=gdk_screen_get_height(screen);
65  if ((35+4)*(1+c->ndof)>sh)
66  h=(unsigned int)(floor((double)sh/(double)(1+c->ndof)))-4;
67  else
68  h=35;
69  gtk_widget_set_size_request(window,250+w*10,(h+4)*(1+c->ndof));
70  gtk_container_border_width (GTK_CONTAINER(window),3);
71  gtk_window_set_title(GTK_WINDOW(window),_("CuikMove"));
72  gtk_window_set_resizable(GTK_WINDOW(window),FALSE);
73 
74  GLADE_HOOKUP_OBJECT_NO_REF(window,window,"window");
75 
76  g_signal_connect((gpointer)window, "destroy",
77  G_CALLBACK(on_cuikmove_quit),
78  status);
79 
80  table=gtk_table_new(c->ndof+1,2,FALSE);
81  gtk_widget_show(table);
82  gtk_container_add(GTK_CONTAINER(window),table);
83 
84  gtk_table_set_row_spacings(GTK_TABLE(table),2);
85  gtk_table_set_col_spacings(GTK_TABLE(table),2);
86 
87  stepSize=1.0/pow(10,(double)c->accuracy);
88 
89  /***********************************************************/
90 
91  for(i=0;i<c->ndof;i++)
92  {
93  GetWorldJointLabel(i,&string,c->w);
94  if (string!=NULL)
95  {
96  label=gtk_label_new(string);
97  NEW(bstring,strlen(string)+20,char);
98  sprintf(bstring,"<b>%s</b>",string);
99  gtk_label_set_markup(GTK_LABEL(label),bstring);
100  gtk_table_attach_defaults(GTK_TABLE(table),label,0,1,i,i+1);
101  gtk_widget_show(label);
102 
103  free(bstring);
104  free(string);
105  }
106 
107  pageSize=0.01*(c->max[i]-c->min[i]);
108  hscale=gtk_hscale_new(GTK_ADJUSTMENT(gtk_adjustment_new(c->dof[i],c->min[i],
109  c->max[i],stepSize,
110  pageSize,10*stepSize)));
111 
112  gtk_widget_show(hscale);
113 
114  gtk_table_attach_defaults(GTK_TABLE(table),hscale,1,2,i,i+1);
115 
116  gtk_widget_set_size_request(hscale,250,h);
117  gtk_scale_set_draw_value(GTK_SCALE(hscale),TRUE);
118  gtk_scale_set_digits(GTK_SCALE(hscale),c->accuracy);
119 
120  sprintf(name,"S%u",i);
121  gtk_widget_set_name(hscale,name);
122 
123  g_signal_connect((gpointer)hscale,"value_changed",
124  G_CALLBACK(on_cuikmove_slider_changed),
125  status);
126 
127  GLADE_HOOKUP_OBJECT(window,hscale,name);
128  }
129 
130  /***********************************************************/
131 
132  Save=gtk_button_new();
133  gtk_widget_show(Save);
134 
135  gtk_table_attach_defaults(GTK_TABLE(table),Save,0,1,c->ndof,c->ndof+1);
136 
137  alignment=gtk_alignment_new(0.5,0.5,0,0);
138  gtk_widget_show(alignment);
139  gtk_container_add(GTK_CONTAINER(Save),alignment);
140 
141  hbox=gtk_hbox_new(FALSE,2);
142  gtk_widget_show(hbox);
143  gtk_container_add(GTK_CONTAINER(alignment),hbox);
144 
145  image=gtk_image_new_from_stock("gtk-save",GTK_ICON_SIZE_BUTTON);
146  gtk_widget_show(image);
147  gtk_box_pack_start(GTK_BOX(hbox),image,FALSE,FALSE,0);
148 
149  label=gtk_label_new_with_mnemonic(_("Save"));
150  gtk_widget_show(label);
151  gtk_box_pack_start(GTK_BOX(hbox),label,FALSE,FALSE,0);
152 
153  g_signal_connect((gpointer)Save,"clicked",
154  G_CALLBACK (on_cuikmove_save),
155  status);
156 
157  GLADE_HOOKUP_OBJECT(window,Save,"Save");
158  GLADE_HOOKUP_OBJECT(window,alignment,"alignment_save");
159  GLADE_HOOKUP_OBJECT(window,hbox,"hbox_save");
160  GLADE_HOOKUP_OBJECT(window,image,"image_save");
161  GLADE_HOOKUP_OBJECT(window,label,"label_save");
162 
163  /***********************************************************/
164  Quit=gtk_button_new();
165  gtk_widget_show(Quit);
166 
167  gtk_table_attach_defaults(GTK_TABLE(table),Quit,1,2,c->ndof,c->ndof+1);
168 
169  gtk_widget_set_size_request(Quit,70,31);
170 
171  alignment=gtk_alignment_new(0.5,0.5,0,0);
172  gtk_widget_show(alignment);
173  gtk_container_add(GTK_CONTAINER(Quit),alignment);
174 
175  hbox=gtk_hbox_new(FALSE,2);
176  gtk_widget_show(hbox);
177  gtk_container_add(GTK_CONTAINER(alignment),hbox);
178 
179  image=gtk_image_new_from_stock("gtk-quit",GTK_ICON_SIZE_BUTTON);
180  gtk_widget_show(image);
181  gtk_box_pack_start(GTK_BOX(hbox),image,FALSE,FALSE,0);
182 
183  label=gtk_label_new_with_mnemonic(_("Quit"));
184  gtk_widget_show(label);
185  gtk_box_pack_start(GTK_BOX(hbox),label,FALSE,FALSE,0);
186 
187  g_signal_connect((gpointer)Quit,"clicked",
188  G_CALLBACK(on_cuikmove_quit),
189  status);
190 
191  GLADE_HOOKUP_OBJECT(window,Quit,"Quit");
192  GLADE_HOOKUP_OBJECT(window,alignment,"alignment_quit");
193  GLADE_HOOKUP_OBJECT(window,hbox,"hbox_quit");
194  GLADE_HOOKUP_OBJECT(window,image,"image_quit");
195  GLADE_HOOKUP_OBJECT(window,label,"label_quit");
196 
197  /***********************************************************/
198 
199  return window;
200 }
201 
#define FALSE
FALSE.
Definition: boolean.h:30
#define NEW(_var, _n, _type)
Allocates memory space.
Definition: defines.h:385
void on_cuikmove_quit(GtkButton *button, gpointer user_data)
Callback function for the quit button.
Definition of the cuikmove control structure.
void GetWorldDOFLabel(unsigned int ndof, char **string, Tworld *w)
Returns a label identifying each degree of freedom.
Definition: world.c:1585
#define TRUE
TRUE.
Definition: boolean.h:21
double * min
Definition: cuikmove.h:28
unsigned int accuracy
Definition: cuikmove.h:26
void on_cuikmove_slider_changed(GtkRange *range, gpointer user_data)
Callback function for the slider bar.
Definition of the cuikmove control structure.
Definition: cuikmove.h:23
Headers of the GTK interface functions for cuikmove.
void GetWorldJointLabel(unsigned int ndof, char **string, Tworld *w)
Returns a label identifying each joint.
Definition: world.c:1575
void on_cuikmove_save(GtkButton *button, gpointer user_data)
Callback function for the save button.
Tworld * w
Definition: cuikmove.h:32
double * dof
Definition: cuikmove.h:30
Headers of the GTK callback functions for cuikmove.
unsigned int ndof
Definition: cuikmove.h:27
double * max
Definition: cuikmove.h:29
Headers of the GTK support functions for cuikplay.