1 /* AnimationRotation.c */
2 /**********************************************************************************************************
3 Copyright (c) 2002-2013 Abdul-Rahman Allouche. All rights reserved
4
5 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
6 documentation files (the Gabedit), to deal in the Software without restriction, including without limitation
7 the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software,
8 and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
9
10 The above copyright notice and this permission notice shall be included in all copies or substantial portions
11 of the Software.
12
13 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
14 TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
15 THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
16 CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
17 DEALINGS IN THE SOFTWARE.
18 ************************************************************************************************************/
19
20 #include "../../Config.h"
21 #include <stdlib.h>
22 #include "GlobalOrb.h"
23 #include "../Utils/Utils.h"
24 #include "../Utils/Constants.h"
25 #include "../Utils/UtilsInterface.h"
26 #include "../Display/StatusOrb.h"
27 #include "../Display/GLArea.h"
28 #include "../Display/AnimationRotation.h"
29 #include "../Files/FolderChooser.h"
30 #include "../Files/GabeditFolderChooser.h"
31 #include "../Common/Help.h"
32 #include "../Display/Images.h"
33 #include "../Display/PovrayGL.h"
34
35 static GtkWidget *WinDlg = NULL;
36 static GtkWidget *EntryVelocity = NULL;
37 static GtkWidget *EntryNRotation = NULL;
38 static GtkWidget *LabelNRotation = NULL;
39 static GtkWidget *PlayButton = NULL;
40 static GtkWidget *StopButton = NULL;
41 static gboolean play = FALSE;
42 static gdouble velocity = 0.1;
43 static gint nRotation = 10;
44 static GtkWidget *buttonXAxis = NULL;
45 static GtkWidget *buttonYAxis = NULL;
46 static GtkWidget *buttonZAxis = NULL;
47
48 static GtkWidget *buttonCheckFilm = NULL;
49 static GtkWidget *buttonDirFilm = NULL;
50 static GtkWidget* comboListFilm = NULL;
51 static gboolean createFilm = FALSE;
52 static gint numFileFilm = 0;
53 static gchar formatFilm[100] = "BMP";
54
55 typedef enum
56 {
57 XAXIS = 0,
58 YAXIS = 1,
59 ZAXIS = 2
60 } GabEditAxis;
61 GabEditAxis selectedAxis = YAXIS;
62
63 /********************************************************************************/
64 static void animate_rotation();
65 static void stop_animation(GtkWidget *win, gpointer data);
66 static void play_animation(GtkWidget *win, gpointer data);
67 /********************************************************************************/
reset_last_directory(GtkWidget * dirSelector,gpointer data)68 static void reset_last_directory(GtkWidget *dirSelector, gpointer data)
69 {
70 gchar* dirname = gabedit_folder_chooser_get_current_folder(GABEDIT_FOLDER_CHOOSER(dirSelector));
71 gchar* filename = NULL;
72
73 if(dirname && strlen(dirname)>0)
74 {
75 if(dirname[strlen(dirname)-1] != G_DIR_SEPARATOR)
76 filename = g_strdup_printf("%s%sdump.txt",dirname,G_DIR_SEPARATOR_S);
77 else
78 filename = g_strdup_printf("%sdump.txt",dirname);
79 }
80 else
81 {
82 dirname = g_strdup(g_get_home_dir());
83 filename = g_strdup_printf("%s%sdump.txt",dirname,G_DIR_SEPARATOR_S);
84 }
85 if(dirname) g_free(dirname);
86 if(filename)
87 {
88 set_last_directory(filename);
89 g_free(filename);
90 }
91 }
92 /********************************************************************************/
set_directory(GtkWidget * win,gpointer data)93 static void set_directory(GtkWidget *win, gpointer data)
94 {
95 GtkWidget *dirSelector;
96 dirSelector = selctionOfDir(reset_last_directory, _("Set folder"), GABEDIT_TYPEWIN_ORB);
97 gtk_window_set_modal (GTK_WINDOW (dirSelector), TRUE);
98 gtk_window_set_transient_for(GTK_WINDOW(dirSelector),GTK_WINDOW(PrincipalWindow));
99 gtk_window_set_transient_for(GTK_WINDOW(dirSelector),GTK_WINDOW(WinDlg));
100 }
101 /********************************************************************************/
reset_parameters(GtkWidget * win,gpointer data)102 static void reset_parameters(GtkWidget *win, gpointer data)
103 {
104 gdouble velo = atof(gtk_entry_get_text(GTK_ENTRY(EntryVelocity)));
105 gint nRot = atoi(gtk_entry_get_text(GTK_ENTRY(EntryNRotation)));
106 gchar t[BSIZE];
107
108 if(velo<0)
109 {
110 velo = -velo;
111 sprintf(t,"%lf",velo);
112 gtk_entry_set_text(GTK_ENTRY(EntryVelocity),t);
113 }
114 velocity = velo;
115
116 if(nRot==0)
117 {
118 nRot = 10;
119 sprintf(t,"%d",nRot);
120 gtk_entry_set_text(GTK_ENTRY(EntryNRotation),t);
121 }
122 if(nRot<0)
123 {
124 nRot = -nRot;
125 sprintf(t,"%d",nRot);
126 gtk_entry_set_text(GTK_ENTRY(EntryNRotation),t);
127 }
128 nRotation = nRot;
129 if(!play)
130 stop_animation(NULL,NULL);
131
132 }
133 /********************************************************************************/
play_animation(GtkWidget * win,gpointer data)134 static void play_animation(GtkWidget *win, gpointer data)
135 {
136 play = TRUE;
137 gtk_widget_set_sensitive(PlayButton, FALSE);
138 gtk_widget_set_sensitive(StopButton, TRUE);
139 gtk_window_set_modal (GTK_WINDOW (WinDlg), TRUE);
140 animate_rotation();
141
142 }
143 /********************************************************************************/
stop_animation(GtkWidget * win,gpointer data)144 static void stop_animation(GtkWidget *win, gpointer data)
145 {
146 play = FALSE;
147 if(GTK_IS_WIDGET(PlayButton)) gtk_widget_set_sensitive(PlayButton, TRUE);
148
149 if(GTK_IS_WIDGET(StopButton)) gtk_widget_set_sensitive(StopButton, FALSE);
150
151 if(GTK_IS_WIDGET(WinDlg)) gtk_window_set_modal (GTK_WINDOW (WinDlg), FALSE);
152
153 while( gtk_events_pending() )
154 gtk_main_iteration();
155
156 if(this_is_an_object((GtkObject*)GLArea))
157 glarea_rafresh(GLArea);
158 }
159 /********************************************************************************/
destroyAnimationDlg(GtkWidget * win)160 static void destroyAnimationDlg(GtkWidget *win)
161 {
162 createFilm = FALSE;
163 numFileFilm = 0;
164 stop_animation(NULL, NULL);
165 gtk_widget_destroy(WinDlg);
166 WinDlg = NULL;
167 }
168 /********************************************************************************/
get_format_image_from_option()169 static gchar* get_format_image_from_option()
170 {
171 if(strcmp(formatFilm,"BMP")==0) return "bmp";
172 if(strcmp(formatFilm,"PPM")==0) return "ppm";
173 if(strcmp(formatFilm,"PNG")==0) return "png";
174 if(strcmp(formatFilm,"JPEG")==0) return "jpg";
175 if(strcmp(formatFilm,"PNG transparent")==0) return "png";
176 if(strcmp(formatFilm,"Povray")==0) return "pov";
177 return "UNK";
178 }
179 /********************************************************************************/
filmSelected(GtkWidget * widget)180 static void filmSelected(GtkWidget *widget)
181 {
182 if(GTK_IS_WIDGET(buttonCheckFilm)&& GTK_TOGGLE_BUTTON (buttonCheckFilm)->active)
183 {
184 createFilm = TRUE;
185 if(GTK_IS_WIDGET(buttonDirFilm)) gtk_widget_set_sensitive(buttonDirFilm, TRUE);
186 if(GTK_IS_WIDGET(comboListFilm)) gtk_widget_set_sensitive(comboListFilm, TRUE);
187 }
188 else
189 {
190 createFilm = FALSE;
191 if(GTK_IS_WIDGET(buttonDirFilm)) gtk_widget_set_sensitive(buttonDirFilm, FALSE);
192 if(GTK_IS_WIDGET(comboListFilm)) gtk_widget_set_sensitive(comboListFilm, FALSE);
193 }
194 }
195 /********************************************************************************/
showMessageEnd()196 static void showMessageEnd()
197 {
198 gchar* format =get_format_image_from_option();
199 gchar* message = messageAnimatedImage(format);
200 gchar* t = g_strdup_printf(_("\nA series of gab*.%s files was created in \"%s\" directeory.\n\n\n%s") , format, get_last_directory(),message);
201 GtkWidget* winDlg = Message(t,_("Info"),TRUE);
202 g_free(message);
203 gtk_window_set_modal (GTK_WINDOW (winDlg), TRUE);
204 g_free(t);
205 }
206 /********************************************************************************/
unActivateFilm()207 static void unActivateFilm()
208 {
209 createFilm = FALSE;
210 numFileFilm = 0;
211 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonCheckFilm), FALSE);
212 if(GTK_IS_WIDGET(buttonDirFilm)) gtk_widget_set_sensitive(buttonDirFilm, FALSE);
213 if(GTK_IS_WIDGET(comboListFilm)) gtk_widget_set_sensitive(comboListFilm, FALSE);
214 }
215 /********************************************************************************************************/
set_format_film(GtkComboBox * combobox,gpointer d)216 static void set_format_film(GtkComboBox *combobox, gpointer d)
217 {
218 GtkTreeIter iter;
219 gchar* data = NULL;
220 if (gtk_combo_box_get_active_iter (combobox, &iter))
221 {
222 GtkTreeModel* model = gtk_combo_box_get_model(combobox);
223 gtk_tree_model_get (model, &iter, 0, &data, -1);
224 }
225 if(!data) return;
226 sprintf(formatFilm ,"%s",(gchar*)data);
227 }
228 /********************************************************************************************************/
create_list_of_formats()229 static GtkWidget *create_list_of_formats()
230 {
231 GtkTreeIter iter;
232 GtkListStore *store;
233 GtkTreeModel *model;
234 GtkWidget *combobox;
235 GtkCellRenderer *renderer;
236 gint i;
237 gint k;
238 gchar* options[] = {"BMP","PPM", "JPEG", "PNG", "PNG transparent", "Povray"};
239 guint numberOfElements = G_N_ELEMENTS (options);
240
241
242 k = 0;
243 store = gtk_list_store_new (1,G_TYPE_STRING);
244 for(i=0;i<numberOfElements; i++)
245 {
246 gtk_list_store_append (store, &iter);
247 gtk_list_store_set (store, &iter, 0, options[i], -1);
248 if(strcmp(options[i],formatFilm)==0) k = i;
249 }
250
251 model = GTK_TREE_MODEL (store);
252 combobox = gtk_combo_box_new_with_model (model);
253 g_object_unref (model);
254 g_signal_connect (G_OBJECT(combobox), "changed", G_CALLBACK(set_format_film), NULL);
255 renderer = gtk_cell_renderer_text_new ();
256 gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combobox), renderer, TRUE);
257 gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer, "text", 0, NULL);
258 gtk_combo_box_set_active(GTK_COMBO_BOX (combobox), k);
259 return combobox;
260 }
buttonAxisSelected(GtkWidget * widget)261 static void buttonAxisSelected(GtkWidget *widget)
262 {
263 if(GTK_IS_WIDGET(buttonXAxis) && GTK_TOGGLE_BUTTON (buttonXAxis)->active) selectedAxis = XAXIS;
264 if(GTK_IS_WIDGET(buttonYAxis) && GTK_TOGGLE_BUTTON (buttonYAxis)->active) selectedAxis = YAXIS;
265 if(GTK_IS_WIDGET(buttonZAxis) && GTK_TOGGLE_BUTTON (buttonZAxis)->active) selectedAxis = ZAXIS;
266
267 }
268 /********************************************************************************/
addEntrysButtons(GtkWidget * box)269 static void addEntrysButtons(GtkWidget* box)
270 {
271 GtkWidget *Button;
272 GtkWidget *frame;
273 GtkWidget *vboxframe;
274 GtkWidget *table;
275 gchar t[BSIZE];
276 gint i;
277 GtkWidget *separator;
278 GtkWidget* formatBox;
279
280 frame = gtk_frame_new (NULL);
281 gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT);
282 gtk_container_set_border_width (GTK_CONTAINER (frame), 10);
283 gtk_box_pack_start(GTK_BOX(box), frame,TRUE,TRUE,0);
284 gtk_widget_show (frame);
285
286 vboxframe = create_vbox(frame);
287
288 table = gtk_table_new(11,3,FALSE);
289 gtk_box_pack_start(GTK_BOX(vboxframe), table,TRUE,TRUE,0);
290
291 i = 0;
292 buttonXAxis = gtk_radio_button_new_with_label( NULL,_("Rotation about X axis"));
293 gtk_table_attach(GTK_TABLE(table),buttonXAxis,0,3,i,i+1,
294 (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) ,
295 (GtkAttachOptions)(GTK_FILL | GTK_EXPAND),
296 3,3);
297
298 i++;
299 buttonYAxis = gtk_radio_button_new_with_label( gtk_radio_button_get_group (GTK_RADIO_BUTTON (buttonXAxis)), _("Rotation about Y axis "));
300 gtk_table_attach(GTK_TABLE(table),buttonYAxis,0,3,i,i+1,
301 (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) ,
302 (GtkAttachOptions)(GTK_FILL | GTK_EXPAND),
303 3,3);
304 i++;
305 buttonZAxis = gtk_radio_button_new_with_label( gtk_radio_button_get_group (GTK_RADIO_BUTTON (buttonXAxis)), _("Rotation about Z axis "));
306 gtk_table_attach(GTK_TABLE(table),buttonZAxis,0,3,i,i+1,
307 (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) ,
308 (GtkAttachOptions)(GTK_FILL | GTK_EXPAND),
309 3,3);
310 g_signal_connect (G_OBJECT(buttonXAxis), "toggled", G_CALLBACK (buttonAxisSelected), NULL);
311 g_signal_connect (G_OBJECT(buttonYAxis), "toggled", G_CALLBACK (buttonAxisSelected), NULL);
312 g_signal_connect (G_OBJECT(buttonZAxis), "toggled", G_CALLBACK (buttonAxisSelected), NULL);
313 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonYAxis), TRUE);
314
315 i++;
316 separator = gtk_hseparator_new();
317 gtk_table_attach(GTK_TABLE(table),separator,0,3,i,i+1,
318 (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) ,
319 (GtkAttachOptions)(GTK_FILL | GTK_EXPAND),
320 3,3);
321
322
323 i++;
324 add_label_table(table,_(" Time step(s) "),(gushort)i,0);
325 add_label_table(table," : ",(gushort)i,1);
326 EntryVelocity = gtk_entry_new();
327 gtk_table_attach(GTK_TABLE(table),EntryVelocity,2,2+1,i,i+1,
328 (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) ,
329 (GtkAttachOptions)(GTK_FILL | GTK_EXPAND),
330 3,3);
331 gtk_editable_set_editable((GtkEditable*) EntryVelocity,TRUE);
332 sprintf(t,"%lf",velocity);
333 gtk_entry_set_text(GTK_ENTRY(EntryVelocity),t);
334
335 i++;
336 LabelNRotation = add_label_table(table,_(" Number of Rotation by cycle"),(gushort)i,0);
337 add_label_table(table," : ",(gushort)i,1);
338 EntryNRotation = gtk_entry_new();
339 gtk_table_attach(GTK_TABLE(table),EntryNRotation,2,2+1,i,i+1,
340 (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) ,
341 (GtkAttachOptions)(GTK_FILL | GTK_EXPAND),
342 3,3);
343 gtk_editable_set_editable((GtkEditable*) EntryNRotation,TRUE);
344 sprintf(t,"%d",nRotation);
345 gtk_entry_set_text(GTK_ENTRY(EntryNRotation),t);
346
347 i++;
348 separator = gtk_hseparator_new();
349 gtk_table_attach(GTK_TABLE(table),separator,0,3,i,i+1,
350 (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) ,
351 (GtkAttachOptions)(GTK_FILL | GTK_EXPAND),
352 3,3);
353
354 i++;
355 buttonCheckFilm = gtk_check_button_new_with_label (_("Create a film"));
356 createFilm = FALSE;
357 numFileFilm = 0;
358 gtk_table_attach(GTK_TABLE(table),buttonCheckFilm,0,1,i,i+1,
359 (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) ,
360 (GtkAttachOptions)(GTK_FILL | GTK_EXPAND),
361 1,1);
362 g_signal_connect (G_OBJECT(buttonCheckFilm), "toggled", G_CALLBACK (filmSelected), NULL);
363
364 formatBox = create_list_of_formats();
365 gtk_table_attach(GTK_TABLE(table),formatBox,1,1+1,i,i+1,
366 (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) ,
367 (GtkAttachOptions)(GTK_FILL | GTK_EXPAND),
368 1,1);
369
370 buttonDirFilm = create_button(WinDlg,_("Folder"));
371 gtk_table_attach(GTK_TABLE(table),buttonDirFilm,2,2+1,i,i+1,
372 (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) ,
373 (GtkAttachOptions)(GTK_FILL | GTK_EXPAND),
374 1,1);
375 g_signal_connect(G_OBJECT(buttonDirFilm), "clicked",(GCallback)set_directory,NULL);
376 comboListFilm = formatBox;
377
378 if(GTK_IS_WIDGET(buttonDirFilm)) gtk_widget_set_sensitive(buttonDirFilm, FALSE);
379 if(GTK_IS_WIDGET(comboListFilm)) gtk_widget_set_sensitive(comboListFilm, FALSE);
380 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonCheckFilm), FALSE);
381
382
383 i++;
384 separator = gtk_hseparator_new();
385 gtk_table_attach(GTK_TABLE(table),separator,0,3,i,i+1,
386 (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) ,
387 (GtkAttachOptions)(GTK_FILL | GTK_EXPAND),
388 3,3);
389
390
391 table = gtk_table_new(1,2,TRUE);
392 gtk_box_pack_start (GTK_BOX (vboxframe), table, TRUE, TRUE, 0);
393 i=0;
394 Button = create_button(WinDlg,_("Play"));
395 gtk_table_attach(GTK_TABLE(table),Button,0,0+1,i,i+1,
396 (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) ,
397 (GtkAttachOptions)(GTK_FILL | GTK_EXPAND),
398 3,3);
399 PlayButton = Button;
400
401 Button = create_button(WinDlg,_("Stop"));
402 gtk_table_attach(GTK_TABLE(table),Button,1,1+1,i,i+1,
403 (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) ,
404 (GtkAttachOptions)(GTK_FILL | GTK_EXPAND),
405 3,3);
406 StopButton = Button;
407
408 g_signal_connect(G_OBJECT(PlayButton), "clicked",(GCallback)play_animation,NULL);
409 g_signal_connect(G_OBJECT(StopButton), "clicked",(GCallback)stop_animation,NULL);
410 g_signal_connect_swapped (G_OBJECT (EntryVelocity), "activate", (GCallback)reset_parameters, NULL);
411 g_signal_connect_swapped (G_OBJECT (EntryNRotation), "activate", (GCallback)reset_parameters, NULL);
412 }
413 /*****************************************************************************/
createImagesFile()414 static gboolean createImagesFile()
415 {
416 gchar* message = NULL;
417 gchar* t;
418 gchar* format;
419 if(!createFilm)
420 {
421 setTextInProgress(" ");
422 return FALSE;
423 }
424 format =get_format_image_from_option();
425 t = g_strdup_printf(_("The %s%sgab%d.%s file was created"), get_last_directory(),G_DIR_SEPARATOR_S,numFileFilm, format);
426
427 if(!strcmp(formatFilm,"BMP")) message = new_bmp(get_last_directory(), ++numFileFilm);
428 if(!strcmp(formatFilm,"PPM")) message = new_ppm(get_last_directory(), ++numFileFilm);
429 if(!strcmp(formatFilm,"JPEG")) message = new_jpeg(get_last_directory(), ++numFileFilm);
430 if(!strcmp(formatFilm,"PNG")) message = new_png(get_last_directory(), ++numFileFilm);
431 if(!strcmp(formatFilm,"Povray")) message = new_pov(get_last_directory(), ++numFileFilm);
432 if(!strcmp(formatFilm,"PNG transparent")) message = new_png_without_background(get_last_directory(), ++numFileFilm);
433
434 if(message == NULL) setTextInProgress(t);
435 else
436 {
437 GtkWidget* m;
438 createFilm = FALSE;
439 numFileFilm = 0;
440 m = Message(message,_("Error"),TRUE);
441 gtk_window_set_modal (GTK_WINDOW (m), TRUE);
442 }
443 g_free(t);
444 return TRUE;
445 }
446 /********************************************************************************/
animate_rotation()447 static void animate_rotation()
448 {
449
450 gdouble phi = -360.0/nRotation;
451 gint i = 0;
452
453 reset_parameters(NULL, NULL);
454 numFileFilm = 0;
455
456 if(GTK_IS_WIDGET(buttonCheckFilm)) gtk_widget_set_sensitive(buttonCheckFilm, FALSE);
457 if(GTK_IS_WIDGET(comboListFilm)) gtk_widget_set_sensitive(comboListFilm, FALSE);
458 if(GTK_IS_WIDGET(buttonDirFilm)) gtk_widget_set_sensitive(buttonDirFilm, FALSE);
459
460 if(GTK_IS_WIDGET(buttonXAxis)) gtk_widget_set_sensitive(buttonXAxis, FALSE);
461 if(GTK_IS_WIDGET(buttonYAxis)) gtk_widget_set_sensitive(buttonYAxis, FALSE);
462 if(GTK_IS_WIDGET(buttonZAxis)) gtk_widget_set_sensitive(buttonZAxis, FALSE);
463 if(GTK_IS_WIDGET(EntryNRotation)) gtk_widget_set_sensitive(EntryNRotation, FALSE);
464 if(GTK_IS_WIDGET(LabelNRotation)) gtk_widget_set_sensitive(LabelNRotation, FALSE);
465
466 while(play)
467 {
468 rotationAboutAnAxis(GLArea, phi,selectedAxis);
469 while( gtk_events_pending() ) gtk_main_iteration();
470 glarea_rafresh(GLArea);
471 createImagesFile();
472 Waiting(velocity);
473 i++;
474
475 if(i==nRotation)
476 {
477 i = 0;
478 if(numFileFilm>0) showMessageEnd();
479 unActivateFilm();
480 while( gtk_events_pending() ) gtk_main_iteration();
481 }
482
483
484 }
485
486 if(numFileFilm>0) showMessageEnd();
487 unActivateFilm();
488
489 if(GTK_IS_WIDGET(buttonCheckFilm)) gtk_widget_set_sensitive(buttonCheckFilm, TRUE);
490 if(GTK_IS_WIDGET(comboListFilm)) gtk_widget_set_sensitive(comboListFilm, FALSE);
491 if(GTK_IS_WIDGET(buttonDirFilm)) gtk_widget_set_sensitive(buttonDirFilm, FALSE);
492
493 if(GTK_IS_WIDGET(buttonXAxis)) gtk_widget_set_sensitive(buttonXAxis, TRUE);
494 if(GTK_IS_WIDGET(buttonYAxis)) gtk_widget_set_sensitive(buttonYAxis, TRUE);
495 if(GTK_IS_WIDGET(buttonZAxis)) gtk_widget_set_sensitive(buttonZAxis, TRUE);
496 if(GTK_IS_WIDGET(EntryNRotation)) gtk_widget_set_sensitive(EntryNRotation, TRUE);
497 if(GTK_IS_WIDGET(LabelNRotation)) gtk_widget_set_sensitive(LabelNRotation, TRUE);
498 stop_animation(NULL, NULL);
499 }
500 /***********************************************************************/
animationRotationDlg()501 void animationRotationDlg()
502 {
503 GtkWidget *Win;
504 GtkWidget *vbox;
505 GtkWidget *hbox;
506 GtkWidget *parentWindow = PrincipalWindow;
507
508 if(WinDlg) return;
509 if(nCenters <1 )
510 {
511 Message(_("Sorry, the number of atoms can not <1"),_("Error"),TRUE);
512 return;
513 }
514
515 Win= gtk_window_new(GTK_WINDOW_TOPLEVEL);
516 gtk_window_set_position(GTK_WINDOW(Win),GTK_WIN_POS_CENTER);
517 gtk_window_set_transient_for(GTK_WINDOW(Win),GTK_WINDOW(parentWindow));
518 /* gtk_window_set_default_size (GTK_WINDOW(Win),-1,(gint)(ScreenHeight*0.69));*/
519 gtk_window_set_title(GTK_WINDOW(Win),_("Rotation animation"));
520 gtk_window_set_modal (GTK_WINDOW (Win), TRUE);
521
522 WinDlg = Win;
523
524 add_child(PrincipalWindow,Win,destroyAnimationDlg,"Anim. Rot.");
525 g_signal_connect(G_OBJECT(Win),"delete_event",(GCallback)delete_child,NULL);
526
527 vbox = gtk_vbox_new (FALSE, 0);
528 gtk_widget_show (vbox);
529 gtk_container_add (GTK_CONTAINER (Win), vbox);
530 hbox = create_hbox_false(vbox);
531 gtk_widget_realize(Win);
532
533 addEntrysButtons(vbox);
534 gtk_widget_show_all(vbox);
535
536 gtk_widget_show_now(Win);
537
538 /* fit_windows_position(PrincipalWindow, Win);*/
539
540 stop_animation(NULL, NULL);
541 }
542