2 Copyright (C) 1999-2007 id Software, Inc. and contributors.
\r
3 For a list of contributors, see the accompanying CONTRIBUTORS file.
\r
5 This file is part of GtkRadiant.
\r
7 GtkRadiant is free software; you can redistribute it and/or modify
\r
8 it under the terms of the GNU General Public License as published by
\r
9 the Free Software Foundation; either version 2 of the License, or
\r
10 (at your option) any later version.
\r
12 GtkRadiant is distributed in the hope that it will be useful,
\r
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
\r
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
\r
15 GNU General Public License for more details.
\r
17 You should have received a copy of the GNU General Public License
\r
18 along with GtkRadiant; if not, write to the Free Software
\r
19 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
\r
23 Camera plugin for GtkRadiant
\r
24 Copyright (C) 2002 Splash Damage Ltd.
\r
29 static GSList *g_pEditTypeRadio = NULL;
\r
30 static GtkWidget *g_pEditModeEditRadioButton = NULL;
\r
31 GtkWidget *g_pEditModeAddRadioButton = NULL;
\r
32 static GtkWidget *g_pSecondsEntry = NULL;
\r
33 static GtkWidget *g_pEventsList = NULL;
\r
34 static GtkLabel *g_pCurrentTime = NULL;
\r
35 static GtkLabel *g_pTotalTime = NULL;
\r
36 static GtkAdjustment *g_pTimeLine = NULL;
\r
37 static GtkWidget *g_pTrackCamera = NULL;
\r
38 static GtkWidget *g_pCamName = NULL;
\r
39 static char *g_cNull = '\0';
\r
41 static gint ci_editmode_edit( GtkWidget *widget, gpointer data )
\r
48 static gint ci_editmode_add( GtkWidget *widget, gpointer data )
\r
55 /*static gint ci_delete_selected( GtkWidget *widget, gpointer data )
\r
60 static gint ci_select_all( GtkWidget *widget, gpointer data )
\r
65 static gint ci_new( GtkWidget *widget, gpointer data )
\r
67 GtkWidget *window, *w, *vbox, *vbox2, *hbox, *frame; //, *name;
\r
68 GtkWidget *fixed, *interpolated, *spline;
\r
70 GSList *targetTypeRadio = NULL;
\r
73 // create the window
\r
74 window = gtk_window_new( GTK_WINDOW_TOPLEVEL );
\r
75 gtk_window_set_title( GTK_WINDOW (window), "New Camera" );
\r
76 gtk_signal_connect( GTK_OBJECT (window), "delete_event", GTK_SIGNAL_FUNC( dialog_delete_callback ), NULL );
\r
77 gtk_signal_connect( GTK_OBJECT (window), "destroy", GTK_SIGNAL_FUNC( gtk_widget_destroy ), NULL );
\r
78 gtk_window_set_transient_for( GTK_WINDOW( window ), GTK_WINDOW( g_pCameraInspectorWnd ) );
\r
80 g_object_set_data (G_OBJECT (window), "loop", &loop);
\r
81 g_object_set_data (G_OBJECT (window), "ret", &ret);
\r
83 gtk_widget_realize (window);
\r
86 vbox = gtk_vbox_new( FALSE, 5 );
\r
87 gtk_container_add (GTK_CONTAINER (window), vbox);
\r
88 gtk_widget_show( vbox );
\r
90 // -------------------------- //
\r
92 hbox = gtk_hbox_new( FALSE, 5 );
\r
93 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
\r
94 gtk_widget_show( hbox );
\r
96 frame = gtk_frame_new( "Type" );
\r
97 gtk_box_pack_start( GTK_BOX( hbox ), frame, TRUE, TRUE, 0 );
\r
98 gtk_widget_show( frame );
\r
100 vbox2 = gtk_vbox_new( FALSE, 5 );
\r
101 gtk_container_add( GTK_CONTAINER( frame ), vbox2 );
\r
102 gtk_container_set_border_width( GTK_CONTAINER (vbox2), 5 );
\r
103 gtk_widget_show( vbox2 );
\r
105 // -------------------------- //
\r
107 fixed = gtk_radio_button_new_with_label( targetTypeRadio, "Fixed" );
\r
108 gtk_box_pack_start( GTK_BOX( vbox2 ), fixed, FALSE, FALSE, 3 );
\r
109 gtk_widget_show( fixed );
\r
110 targetTypeRadio = gtk_radio_button_group( GTK_RADIO_BUTTON( fixed ) );
\r
112 interpolated = gtk_radio_button_new_with_label( targetTypeRadio, "Interpolated" );
\r
113 gtk_box_pack_start( GTK_BOX( vbox2 ), interpolated, FALSE, FALSE, 3 );
\r
114 gtk_widget_show( interpolated );
\r
115 targetTypeRadio = gtk_radio_button_group( GTK_RADIO_BUTTON( interpolated ) );
\r
117 spline = gtk_radio_button_new_with_label( targetTypeRadio, "Spline" );
\r
118 gtk_box_pack_start( GTK_BOX( vbox2 ), spline, FALSE, FALSE, 3 );
\r
119 gtk_widget_show( spline );
\r
120 targetTypeRadio = gtk_radio_button_group( GTK_RADIO_BUTTON( spline ) );
\r
122 // -------------------------- //
\r
124 w = gtk_hseparator_new ();
\r
125 gtk_box_pack_start (GTK_BOX (vbox), w, FALSE, FALSE, 2);
\r
126 gtk_widget_show (w);
\r
128 // -------------------------- //
\r
130 hbox = gtk_hbox_new( FALSE, 5 );
\r
131 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
\r
132 gtk_widget_show( hbox );
\r
134 w = gtk_button_new_with_label ("Ok");
\r
135 gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0);
\r
136 gtk_signal_connect (GTK_OBJECT (w), "clicked", GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (IDOK));
\r
137 gtk_widget_show (w);
\r
139 GTK_WIDGET_SET_FLAGS( w, GTK_CAN_DEFAULT );
\r
140 gtk_widget_grab_default( w );
\r
142 w = gtk_button_new_with_label ("Cancel");
\r
143 gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0);
\r
144 gtk_signal_connect (GTK_OBJECT (w), "clicked", GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (IDCANCEL));
\r
145 gtk_widget_show (w);
\r
148 // -------------------------- //
\r
150 gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);
\r
151 gtk_widget_show (window);
\r
152 gtk_grab_add (window);
\r
154 bool dialogError = TRUE;
\r
155 while (dialogError) {
\r
158 gtk_main_iteration ();
\r
160 dialogError = FALSE;
\r
162 if( ret == IDOK ) {
\r
163 if( gtk_toggle_button_get_active( (GtkToggleButton*)fixed ) )
\r
164 DoNewFixedCamera();
\r
165 else if( gtk_toggle_button_get_active( (GtkToggleButton*)interpolated ) )
\r
166 DoNewInterpolatedCamera();
\r
167 else if( gtk_toggle_button_get_active( (GtkToggleButton*)spline ) )
\r
168 DoNewSplineCamera();
\r
172 gtk_grab_remove (window);
\r
173 gtk_widget_destroy (window);
\r
178 static gint ci_load( GtkWidget *widget, gpointer data )
\r
185 static gint ci_save( GtkWidget *widget, gpointer data )
\r
192 static gint ci_unload( GtkWidget *widget, gpointer data )
\r
199 static gint ci_apply( GtkWidget *widget, gpointer data )
\r
201 if( GetCurrentCam() ) {
\r
204 bool build = false;
\r
206 str = gtk_entry_get_text( GTK_ENTRY(g_pCamName) );
\r
209 GetCurrentCam()->GetCam()->setName( str );
\r
213 str = gtk_entry_get_text( GTK_ENTRY(g_pSecondsEntry) );
\r
216 GetCurrentCam()->GetCam()->setBaseTime( atof( str ) );
\r
221 GetCurrentCam()->GetCam()->buildCamera();
\r
224 sprintf( buf, "%.2f", GetCurrentCam()->GetCam()->getBaseTime() );
\r
225 gtk_entry_set_text( GTK_ENTRY(g_pSecondsEntry), buf );
\r
227 sprintf( buf, "%.2f", GetCurrentCam()->GetCam()->getTotalTime() );
\r
228 gtk_label_set_text( g_pCurrentTime, "0.00" );
\r
229 gtk_label_set_text( g_pTotalTime, buf );
\r
231 gtk_adjustment_set_value( g_pTimeLine, 0.f );
\r
232 g_pTimeLine->upper = GetCurrentCam()->GetCam()->getTotalTime() * 1000;
\r
234 GetCurrentCam()->HasBeenModified();
\r
240 static gint ci_preview( GtkWidget *widget, gpointer data )
\r
242 if( GetCurrentCam() ) {
\r
243 g_iPreviewRunning = 1;
\r
244 g_FuncTable.m_pfnSysUpdateWindows( W_XY_OVERLAY | W_CAMERA );
\r
250 static gint ci_expose( GtkWidget *widget, gpointer data )
\r
253 DoStartEdit( GetCurrentCam() );
\r
258 static gint ci_close( GtkWidget *widget, gpointer data )
\r
260 gtk_widget_hide( g_pCameraInspectorWnd );
\r
268 static GtkWidget *g_pPathListCombo = NULL;
\r
269 static GtkLabel *g_pPathType = NULL;
\r
271 static void RefreshPathListCombo( void )
\r
273 if( !g_pPathListCombo )
\r
276 GList *combo_list = (GList*)NULL;
\r
278 if( GetCurrentCam() ) {
\r
279 combo_list = g_list_append( combo_list, (void *)GetCurrentCam()->GetCam()->getPositionObj()->getName() );
\r
280 for( int i = 0; i < GetCurrentCam()->GetCam()->numTargets(); i++ ) {
\r
281 combo_list = g_list_append( combo_list, (void *)GetCurrentCam()->GetCam()->getActiveTarget( i )->getName() );
\r
284 // add one empty string make gtk be quiet
\r
285 combo_list = g_list_append( combo_list, (gpointer)g_cNull );
\r
288 gtk_combo_set_popdown_strings( GTK_COMBO( g_pPathListCombo ), combo_list );
\r
289 g_list_free( combo_list );
\r
292 static gint ci_pathlist_changed( GtkWidget *widget, gpointer data )
\r
294 const char *str = gtk_entry_get_text( GTK_ENTRY(widget) );
\r
296 if( !str || !GetCurrentCam() )
\r
300 for( i = 0; i < GetCurrentCam()->GetCam()->numTargets(); i++ ) {
\r
301 if( !strcmp( str, GetCurrentCam()->GetCam()->getActiveTarget( i )->getName() ) )
\r
305 if( i >= 0 && i < GetCurrentCam()->GetCam()->numTargets() ) {
\r
306 GetCurrentCam()->GetCam()->setActiveTarget( i );
\r
308 g_iActiveTarget = i;
\r
310 gtk_label_set_text( g_pPathType, GetCurrentCam()->GetCam()->getActiveTarget(g_iActiveTarget)->typeStr() );
\r
312 g_iActiveTarget = -1;
\r
314 gtk_label_set_text( g_pPathType, GetCurrentCam()->GetCam()->getPositionObj()->typeStr() );
\r
318 if( g_pCameraInspectorWnd && GTK_WIDGET_VISIBLE( g_pCameraInspectorWnd ) )
\r
319 DoStartEdit( GetCurrentCam() );
\r
324 static void RefreshEventList( void )
\r
329 // Clear events list
\r
330 gtk_clist_freeze( GTK_CLIST(g_pEventsList) );
\r
331 gtk_clist_clear( GTK_CLIST(g_pEventsList) );
\r
333 if( GetCurrentCam() ) {
\r
334 // Fill events list
\r
335 for( i = 0; i < GetCurrentCam()->GetCam()->numEvents(); i++ ) {
\r
336 char rowbuf[3][128], *row[3];
\r
337 // FIXME: sort by time?
\r
338 sprintf( rowbuf[0], "%li", GetCurrentCam()->GetCam()->getEvent(i)->getTime() ); row[0] = rowbuf[0];
\r
339 strncpy( rowbuf[1], GetCurrentCam()->GetCam()->getEvent(i)->typeStr(), sizeof(rowbuf[0]) ); row[1] = rowbuf[1];
\r
340 strncpy( rowbuf[2], GetCurrentCam()->GetCam()->getEvent(i)->getParam(), sizeof(rowbuf[1]) ); row[2] = rowbuf[2];
\r
341 gtk_clist_append( GTK_CLIST(g_pEventsList), row );
\r
344 // Total duration might have changed
\r
345 sprintf( buf, "%.2f", GetCurrentCam()->GetCam()->getTotalTime() );
\r
346 gtk_label_set_text( g_pCurrentTime, "0.00" );
\r
347 gtk_label_set_text( g_pTotalTime, buf );
\r
349 gtk_adjustment_set_value( g_pTimeLine, 0.f );
\r
350 g_pTimeLine->upper = ( GetCurrentCam()->GetCam()->getTotalTime() * 1000 );
\r
353 gtk_clist_thaw( GTK_CLIST(g_pEventsList) );
\r
356 static gint ci_rename( GtkWidget *widget, gpointer data )
\r
358 GtkWidget *window, *w, *vbox, *hbox, *name;
\r
361 if( !GetCurrentCam() )
\r
364 // create the window
\r
365 window = gtk_window_new( GTK_WINDOW_TOPLEVEL );
\r
366 gtk_window_set_title( GTK_WINDOW (window), "Rename Path" );
\r
367 gtk_signal_connect( GTK_OBJECT (window), "delete_event", GTK_SIGNAL_FUNC( dialog_delete_callback ), NULL );
\r
368 gtk_signal_connect( GTK_OBJECT (window), "destroy", GTK_SIGNAL_FUNC( gtk_widget_destroy ), NULL );
\r
369 gtk_window_set_transient_for( GTK_WINDOW( window ), GTK_WINDOW( g_pCameraInspectorWnd ) );
\r
371 g_object_set_data (G_OBJECT (window), "loop", &loop);
\r
372 g_object_set_data (G_OBJECT (window), "ret", &ret);
\r
374 gtk_widget_realize ( window );
\r
377 vbox = gtk_vbox_new( FALSE, 5 );
\r
378 gtk_container_add (GTK_CONTAINER (window), vbox);
\r
379 gtk_widget_show( vbox );
\r
381 // -------------------------- //
\r
383 hbox = gtk_hbox_new( FALSE, 5 );
\r
384 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
\r
385 gtk_widget_show( hbox );
\r
387 w = gtk_label_new( "Name:" );
\r
388 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 );
\r
389 gtk_widget_show( w );
\r
391 name = gtk_entry_new();
\r
392 gtk_box_pack_start( GTK_BOX( hbox ), name, FALSE, FALSE, 0 );
\r
393 gtk_widget_show( name );
\r
395 if( g_iActiveTarget < 0 )
\r
396 gtk_entry_set_text( GTK_ENTRY(name), GetCurrentCam()->GetCam()->getPositionObj()->getName() );
\r
398 gtk_entry_set_text( GTK_ENTRY(name), GetCurrentCam()->GetCam()->getActiveTarget(g_iActiveTarget)->getName() );
\r
400 // -------------------------- //
\r
402 w = gtk_hseparator_new ();
\r
403 gtk_box_pack_start (GTK_BOX (vbox), w, FALSE, FALSE, 2);
\r
404 gtk_widget_show (w);
\r
406 // -------------------------- //
\r
408 hbox = gtk_hbox_new( FALSE, 5 );
\r
409 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
\r
410 gtk_widget_show( hbox );
\r
412 w = gtk_button_new_with_label ("Ok");
\r
413 gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0);
\r
414 gtk_signal_connect (GTK_OBJECT (w), "clicked", GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (IDOK));
\r
415 gtk_widget_show (w);
\r
417 GTK_WIDGET_SET_FLAGS( w, GTK_CAN_DEFAULT );
\r
418 gtk_widget_grab_default( w );
\r
420 w = gtk_button_new_with_label ("Cancel");
\r
421 gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0);
\r
422 gtk_signal_connect (GTK_OBJECT (w), "clicked", GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (IDCANCEL));
\r
423 gtk_widget_show (w);
\r
426 // -------------------------- //
\r
428 gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);
\r
429 gtk_widget_show (window);
\r
430 gtk_grab_add (window);
\r
432 bool dialogError = TRUE;
\r
433 while (dialogError) {
\r
436 gtk_main_iteration ();
\r
438 dialogError = FALSE;
\r
440 if( ret == IDOK ) {
\r
441 const char *str = gtk_entry_get_text( GTK_ENTRY(name) );
\r
443 if( str && str[0] ) {
\r
445 if( g_iActiveTarget < 0 )
\r
446 GetCurrentCam()->GetCam()->getPositionObj()->setName( str );
\r
448 GetCurrentCam()->GetCam()->getActiveTarget(g_iActiveTarget)->setName( str );
\r
450 GetCurrentCam()->GetCam()->buildCamera();
\r
452 // Rebuild the listbox
\r
453 RefreshPathListCombo();
\r
455 dialogError = TRUE;
\r
460 gtk_grab_remove (window);
\r
461 gtk_widget_destroy (window);
\r
466 static gint ci_add_target( GtkWidget *widget, gpointer data )
\r
468 GtkWidget *window, *w, *vbox, *vbox2, *hbox, *frame, *name;
\r
469 GtkWidget *fixed, *interpolated, *spline;
\r
471 GSList *targetTypeRadio = NULL;
\r
474 if( !GetCurrentCam() )
\r
477 // create the window
\r
478 window = gtk_window_new( GTK_WINDOW_TOPLEVEL );
\r
479 gtk_window_set_title( GTK_WINDOW (window), "Add Target" );
\r
480 gtk_signal_connect( GTK_OBJECT (window), "delete_event", GTK_SIGNAL_FUNC( dialog_delete_callback ), NULL );
\r
481 gtk_signal_connect( GTK_OBJECT (window), "destroy", GTK_SIGNAL_FUNC( gtk_widget_destroy ), NULL );
\r
482 gtk_window_set_transient_for( GTK_WINDOW( window ), GTK_WINDOW( g_pCameraInspectorWnd ) );
\r
484 g_object_set_data (G_OBJECT (window), "loop", &loop);
\r
485 g_object_set_data (G_OBJECT (window), "ret", &ret);
\r
487 gtk_widget_realize (window);
\r
490 vbox = gtk_vbox_new( FALSE, 5 );
\r
491 gtk_container_add (GTK_CONTAINER (window), vbox);
\r
492 gtk_widget_show( vbox );
\r
494 // -------------------------- //
\r
496 hbox = gtk_hbox_new( FALSE, 5 );
\r
497 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
\r
498 gtk_widget_show( hbox );
\r
500 w = gtk_label_new( "Name:" );
\r
501 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 );
\r
502 gtk_widget_show( w );
\r
504 name = gtk_entry_new();
\r
505 gtk_box_pack_start( GTK_BOX( hbox ), name, TRUE, TRUE, 0 );
\r
506 gtk_widget_show( name );
\r
508 sprintf( buf, "target%i", GetCurrentCam()->GetCam()->numTargets() + 1 );
\r
509 gtk_entry_set_text( GTK_ENTRY(name), buf );
\r
511 // -------------------------- //
\r
513 hbox = gtk_hbox_new( FALSE, 5 );
\r
514 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
\r
515 gtk_widget_show( hbox );
\r
517 frame = gtk_frame_new( "Type" );
\r
518 gtk_box_pack_start( GTK_BOX( hbox ), frame, TRUE, TRUE, 0 );
\r
519 gtk_widget_show( frame );
\r
521 vbox2 = gtk_vbox_new( FALSE, 5 );
\r
522 gtk_container_add( GTK_CONTAINER( frame ), vbox2 );
\r
523 gtk_container_set_border_width( GTK_CONTAINER (vbox2), 5 );
\r
524 gtk_widget_show( vbox2 );
\r
526 // -------------------------- //
\r
528 fixed = gtk_radio_button_new_with_label( targetTypeRadio, "Fixed" );
\r
529 gtk_box_pack_start( GTK_BOX( vbox2 ), fixed, FALSE, FALSE, 3 );
\r
530 gtk_widget_show( fixed );
\r
531 targetTypeRadio = gtk_radio_button_group( GTK_RADIO_BUTTON( fixed ) );
\r
533 interpolated = gtk_radio_button_new_with_label( targetTypeRadio, "Interpolated" );
\r
534 gtk_box_pack_start( GTK_BOX( vbox2 ), interpolated, FALSE, FALSE, 3 );
\r
535 gtk_widget_show( interpolated );
\r
536 targetTypeRadio = gtk_radio_button_group( GTK_RADIO_BUTTON( interpolated ) );
\r
538 spline = gtk_radio_button_new_with_label( targetTypeRadio, "Spline" );
\r
539 gtk_box_pack_start( GTK_BOX( vbox2 ), spline, FALSE, FALSE, 3 );
\r
540 gtk_widget_show( spline );
\r
541 targetTypeRadio = gtk_radio_button_group( GTK_RADIO_BUTTON( spline ) );
\r
543 // -------------------------- //
\r
545 w = gtk_hseparator_new ();
\r
546 gtk_box_pack_start (GTK_BOX (vbox), w, FALSE, FALSE, 2);
\r
547 gtk_widget_show (w);
\r
549 // -------------------------- //
\r
551 hbox = gtk_hbox_new( FALSE, 5 );
\r
552 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
\r
553 gtk_widget_show( hbox );
\r
555 w = gtk_button_new_with_label ("Ok");
\r
556 gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0);
\r
557 gtk_signal_connect (GTK_OBJECT (w), "clicked", GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (IDOK));
\r
558 gtk_widget_show (w);
\r
560 GTK_WIDGET_SET_FLAGS( w, GTK_CAN_DEFAULT );
\r
561 gtk_widget_grab_default( w );
\r
563 w = gtk_button_new_with_label ("Cancel");
\r
564 gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0);
\r
565 gtk_signal_connect (GTK_OBJECT (w), "clicked", GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (IDCANCEL));
\r
566 gtk_widget_show (w);
\r
569 // -------------------------- //
\r
571 gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);
\r
572 gtk_widget_show (window);
\r
573 gtk_grab_add (window);
\r
575 bool dialogError = TRUE;
\r
576 while (dialogError) {
\r
579 gtk_main_iteration ();
\r
581 dialogError = FALSE;
\r
583 if( ret == IDOK ) {
\r
584 const char *str = gtk_entry_get_text( GTK_ENTRY(name) );
\r
586 if( str && str[0] ) {
\r
590 if( gtk_toggle_button_get_active( (GtkToggleButton*)fixed ) )
\r
592 else if( gtk_toggle_button_get_active( (GtkToggleButton*)interpolated ) )
\r
594 else if( gtk_toggle_button_get_active( (GtkToggleButton*)spline ) )
\r
598 GetCurrentCam()->GetCam()->addTarget( str, static_cast<idCameraPosition::positionType>(type) );
\r
600 // Rebuild the listbox
\r
601 RefreshPathListCombo();
\r
603 // Select the last item in the listbox
\r
604 li = g_list_last( GTK_LIST(GTK_COMBO(g_pPathListCombo)->list)->children );
\r
605 gtk_list_select_child( GTK_LIST(GTK_COMBO(g_pPathListCombo)->list), GTK_WIDGET (li->data) );
\r
607 // If this was the first one, refresh the event list
\r
608 if( GetCurrentCam()->GetCam()->numTargets() == 1 ) {
\r
609 RefreshEventList();
\r
612 // Go to editmode Add
\r
613 gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(g_pEditModeAddRadioButton), TRUE );
\r
616 dialogError = TRUE;
\r
621 gtk_grab_remove (window);
\r
622 gtk_widget_destroy (window);
\r
627 static GtkWidget *g_pCamListCombo = NULL;
\r
628 static GtkLabel *g_pCamType = NULL;
\r
630 void RefreshCamListCombo( void )
\r
632 if( !g_pCamListCombo )
\r
635 GList *combo_list = (GList*)NULL;
\r
636 CCamera *combo_cam = firstCam;
\r
638 while( combo_cam ) {
\r
639 //combo_list = g_list_append( combo_list, (void *)combo_cam->GetCam()->getName() );
\r
640 //if( combo_cam->HasBeenSaved() ) {
\r
641 combo_list = g_list_append( combo_list, (void *)combo_cam->GetFileName() );
\r
644 sprintf( buf, "Unsaved Camera %i", combo_cam->GetCamNum() );
\r
645 combo_list = g_list_append( combo_list, (void *)buf );
\r
647 //combo_list = g_list_append( combo_list, (void *)combo_cam->GetCam()->getName() ); // FIXME: this requires camera.dll to create unique names for new cams
\r
649 combo_cam = combo_cam->GetNext();
\r
652 // add one empty string make gtk be quiet
\r
653 combo_list = g_list_append( combo_list, (gpointer)g_cNull );
\r
655 gtk_combo_set_popdown_strings( GTK_COMBO( g_pCamListCombo ), combo_list );
\r
656 g_list_free( combo_list );
\r
658 // select our current entry in the list
\r
659 if( GetCurrentCam() ) {
\r
660 // stop editing on the current cam
\r
661 //GetCurrentCam()->GetCam()->stopEdit(); // FIXME: this crashed on creating new cameras, why is it here?
\r
663 GList *li = GTK_LIST( GTK_COMBO(g_pCamListCombo)->list)->children;
\r
664 combo_cam = firstCam;
\r
665 while( li && combo_cam ) {
\r
666 if( combo_cam == GetCurrentCam() ) {
\r
667 gtk_list_select_child( GTK_LIST( GTK_COMBO(g_pCamListCombo)->list ), GTK_WIDGET( li->data ) );
\r
671 combo_cam = combo_cam->GetNext();
\r
675 RefreshPathListCombo();
\r
678 static gint ci_camlist_changed( GtkWidget *widget, gpointer data )
\r
680 const char *str = gtk_entry_get_text( GTK_ENTRY(widget) );
\r
682 CCamera *combo_cam = firstCam;
\r
683 while( str && combo_cam ) {
\r
684 //if( !strcmp( str, combo_cam->GetCam()->getName() ) )
\r
685 //if( combo_cam->HasBeenSaved() ) {
\r
686 if( !strcmp( str, combo_cam->GetFileName() ) )
\r
690 sprintf( buf, "Unsaved Camera %i", combo_cam->GetCamNum() );
\r
691 if( !strcmp( str, buf ) )
\r
692 //if( !strcmp( str, combo_cam->GetCam()->getName() ) )
\r
696 combo_cam = combo_cam->GetNext();
\r
699 SetCurrentCam( combo_cam );
\r
702 if( GetCurrentCam() ) {
\r
703 // Fill in our widgets fields for this camera
\r
707 gtk_entry_set_text( GTK_ENTRY(g_pCamName), GetCurrentCam()->GetCam()->getName() );
\r
710 gtk_label_set_text( g_pCamType, GetCurrentCam()->GetCam()->getPositionObj()->typeStr() );
\r
713 sprintf( buf, "%.2f", GetCurrentCam()->GetCam()->getBaseTime() );
\r
714 gtk_entry_set_text( GTK_ENTRY(g_pSecondsEntry), buf );
\r
716 sprintf( buf, "%.2f", GetCurrentCam()->GetCam()->getTotalTime() );
\r
717 gtk_label_set_text( g_pCurrentTime, "0.00" );
\r
718 gtk_label_set_text( g_pTotalTime, buf );
\r
720 gtk_adjustment_set_value( g_pTimeLine, 0.f );
\r
721 g_pTimeLine->upper = GetCurrentCam()->GetCam()->getTotalTime() * 1000;
\r
724 gtk_entry_set_text( GTK_ENTRY(g_pCamName), "" );
\r
727 gtk_label_set_text( g_pCamType, "" );
\r
730 gtk_entry_set_text( GTK_ENTRY(g_pSecondsEntry), "30.00" );
\r
732 gtk_label_set_text( g_pCurrentTime, "0.00" );
\r
733 gtk_label_set_text( g_pTotalTime, "30.00" );
\r
735 gtk_adjustment_set_value( g_pTimeLine, 0.f );
\r
736 g_pTimeLine->upper = 30000;
\r
739 // Refresh event list
\r
740 RefreshEventList();
\r
743 RefreshPathListCombo();
\r
746 g_iActiveTarget = -1;
\r
747 if( g_pCameraInspectorWnd && GTK_WIDGET_VISIBLE( g_pCameraInspectorWnd ) )
\r
748 DoStartEdit( GetCurrentCam() );
\r
753 enum camEventType {
\r
756 EVENT_TARGETWAIT, //
\r
758 EVENT_TARGET, // char(name)
\r
759 EVENT_SNAPTARGET, //
\r
760 EVENT_FOV, // int(time), int(targetfov)
\r
765 EVENT_FADEOUT, // int(time)
\r
766 EVENT_FADEIN, // int(time)
\r
771 // { requires parameters, enabled }
\r
772 const bool camEventFlags[][2] = {
\r
789 const char *camEventStr[] = {
\r
794 "Change Target <string:name>",
\r
796 "FOV <int:duration> <int:targetfov>",
\r
800 "Change to Camera <string:camera> (or <int:cameranum> <string:camera>",
\r
801 "Fade Out <int:duration>",
\r
802 "Fade In <int:duration>",
\r
806 static gint ci_add( GtkWidget *widget, gpointer data )
\r
808 GtkWidget *window, *w, *vbox, *vbox2, *hbox, *frame, *parameters;
\r
809 GtkWidget *eventWidget[EVENT_COUNT];
\r
810 int i, ret, loop = 1;
\r
811 GSList *eventTypeRadio = NULL;
\r
814 if( !GetCurrentCam() )
\r
817 // create the window
\r
818 window = gtk_window_new( GTK_WINDOW_TOPLEVEL );
\r
819 gtk_window_set_title( GTK_WINDOW (window), "Add Event" );
\r
820 gtk_signal_connect( GTK_OBJECT (window), "delete_event", GTK_SIGNAL_FUNC( dialog_delete_callback ), NULL );
\r
821 gtk_signal_connect( GTK_OBJECT (window), "destroy", GTK_SIGNAL_FUNC( gtk_widget_destroy ), NULL );
\r
822 gtk_window_set_transient_for( GTK_WINDOW( window ), GTK_WINDOW( g_pCameraInspectorWnd ) );
\r
824 g_object_set_data (G_OBJECT (window), "loop", &loop);
\r
825 g_object_set_data (G_OBJECT (window), "ret", &ret);
\r
827 gtk_widget_realize (window);
\r
830 vbox = gtk_vbox_new( FALSE, 5 );
\r
831 gtk_container_add (GTK_CONTAINER (window), vbox);
\r
832 gtk_widget_show( vbox );
\r
834 // -------------------------- //
\r
836 hbox = gtk_hbox_new( FALSE, 5 );
\r
837 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
\r
838 gtk_widget_show( hbox );
\r
840 frame = gtk_frame_new( "Type" );
\r
841 gtk_box_pack_start( GTK_BOX( hbox ), frame, TRUE, TRUE, 0 );
\r
842 gtk_widget_show( frame );
\r
844 vbox2 = gtk_vbox_new( FALSE, 5 );
\r
845 gtk_container_add( GTK_CONTAINER( frame ), vbox2 );
\r
846 gtk_container_set_border_width( GTK_CONTAINER (vbox2), 5 );
\r
847 gtk_widget_show( vbox2 );
\r
849 // -------------------------- //
\r
851 for( i = 1; i < EVENT_COUNT; i++ ) {
\r
852 eventWidget[i] = gtk_radio_button_new_with_label( eventTypeRadio, camEventStr[i] );
\r
853 gtk_box_pack_start( GTK_BOX( vbox2 ), eventWidget[i], FALSE, FALSE, 3 );
\r
854 gtk_widget_show( eventWidget[i] );
\r
855 eventTypeRadio = gtk_radio_button_group( GTK_RADIO_BUTTON( eventWidget[i] ) );
\r
856 if( camEventFlags[i][1] == false )
\r
857 gtk_widget_set_sensitive (eventWidget[i], FALSE);
\r
860 // -------------------------- //
\r
862 hbox = gtk_hbox_new( FALSE, 5 );
\r
863 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
\r
864 gtk_widget_show( hbox );
\r
866 w = gtk_label_new( "Parameters:" );
\r
867 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 );
\r
868 gtk_widget_show( w );
\r
870 parameters = gtk_entry_new();
\r
871 gtk_box_pack_start( GTK_BOX( hbox ), parameters, TRUE, TRUE, 0 );
\r
872 gtk_widget_show( parameters );
\r
874 // -------------------------- //
\r
876 w = gtk_hseparator_new ();
\r
877 gtk_box_pack_start (GTK_BOX (vbox), w, FALSE, FALSE, 2);
\r
878 gtk_widget_show (w);
\r
880 // -------------------------- //
\r
882 hbox = gtk_hbox_new( FALSE, 5 );
\r
883 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
\r
884 gtk_widget_show( hbox );
\r
886 w = gtk_button_new_with_label ("Ok");
\r
887 gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0);
\r
888 gtk_signal_connect (GTK_OBJECT (w), "clicked", GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (IDOK));
\r
889 gtk_widget_show (w);
\r
891 GTK_WIDGET_SET_FLAGS( w, GTK_CAN_DEFAULT );
\r
892 gtk_widget_grab_default( w );
\r
894 w = gtk_button_new_with_label ("Cancel");
\r
895 gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0);
\r
896 gtk_signal_connect (GTK_OBJECT (w), "clicked", GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (IDCANCEL));
\r
897 gtk_widget_show (w);
\r
900 // -------------------------- //
\r
902 gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);
\r
903 gtk_widget_show (window);
\r
904 gtk_grab_add (window);
\r
906 bool dialogError = TRUE;
\r
907 while (dialogError) {
\r
910 gtk_main_iteration ();
\r
912 dialogError = FALSE;
\r
914 if( ret == IDOK ) {
\r
915 const char *str = gtk_entry_get_text( GTK_ENTRY(parameters) );
\r
917 if( !camEventFlags[i][0] || ( str && str[0] ) ) {
\r
921 for( type = 1; type < EVENT_COUNT; type++ ) {
\r
922 if( gtk_toggle_button_get_active( (GtkToggleButton*)eventWidget[type] ) )
\r
927 GetCurrentCam()->GetCam()->addEvent( static_cast<idCameraEvent::eventType>(type), str, (long)(g_pTimeLine->value) );
\r
929 // Refresh event list
\r
930 RefreshEventList();
\r
932 dialogError = TRUE;
\r
937 gtk_grab_remove (window);
\r
938 gtk_widget_destroy (window);
\r
943 static gint ci_del( GtkWidget *widget, gpointer data )
\r
945 // TODO: add support to splines lib
\r
946 if( GetCurrentCam() && GTK_CLIST(g_pEventsList)->focus_row >= 0 ) {
\r
947 GetCurrentCam()->GetCam()->removeEvent( GTK_CLIST(g_pEventsList)->focus_row );
\r
948 // Refresh event list
\r
949 RefreshEventList();
\r
955 static gint ci_timeline_changed( GtkAdjustment *adjustment )
\r
959 sprintf( buf, "%.2f", adjustment->value / 1000.f );
\r
960 gtk_label_set_text( g_pCurrentTime, buf );
\r
962 // FIXME: this will never work completely perfect. Startcamera calls buildcamera, which sets all events to 'nottriggered'.
\r
963 // So if you have a wait at the end of the path, this will go to nontriggered immediately when you go over it and the camera
\r
964 // will have no idea where on the track it should be.
\r
965 if( GetCurrentCam() && gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON(g_pTrackCamera) ) ) {
\r
967 vec3_t origin = { 0.0f, 0.0f, 0.0f }, dir = { 0.0f, 0.0f, 0.0f}, angles;
\r
969 GetCurrentCam()->GetCam()->startCamera( 0 );
\r
971 GetCurrentCam()->GetCam()->getCameraInfo( (long)(adjustment->value), &origin[0], &dir[0], &fov );
\r
972 VectorSet( angles, asin (dir[2])*180/3.14159, atan2 (dir[1], dir[0])*180/3.14159, 0 );
\r
973 g_CameraTable.m_pfnSetCamera( origin, angles );
\r
979 GtkWidget *CreateCameraInspectorDialog( void )
\r
981 GtkWidget *window, *w, *vbox, *hbox, *table, *frame;
\r
983 // create the window
\r
984 window = gtk_window_new( GTK_WINDOW_TOPLEVEL );
\r
985 gtk_window_set_title( GTK_WINDOW (window), "Camera Inspector" );
\r
986 gtk_signal_connect( GTK_OBJECT (window), "delete_event", GTK_SIGNAL_FUNC( ci_close ), NULL );
\r
987 gtk_signal_connect( GTK_OBJECT (window), "expose_event", GTK_SIGNAL_FUNC( ci_expose ), NULL );
\r
988 // gtk_signal_connect( GTK_OBJECT (window), "destroy", GTK_SIGNAL_FUNC( gtk_widget_destroy ), NULL );
\r
989 gtk_window_set_transient_for( GTK_WINDOW( window ), GTK_WINDOW( g_pRadiantWnd ) );
\r
991 // don't use show, as you don't want to have it displayed on startup ;-)
\r
992 gtk_widget_realize( window );
\r
997 // -------------------------- //
\r
999 table = gtk_table_new( 3, 2, FALSE );
\r
1000 gtk_widget_show( table );
\r
1001 gtk_container_add( GTK_CONTAINER( window ), table );
\r
1002 gtk_container_set_border_width( GTK_CONTAINER( table ), 5 );
\r
1003 gtk_table_set_row_spacings( GTK_TABLE( table ), 5 );
\r
1004 gtk_table_set_col_spacings( GTK_TABLE( table ), 5 );
\r
1006 // the properties column
\r
1007 // -------------------------- //
\r
1009 vbox = gtk_vbox_new( FALSE, 5 );
\r
1010 gtk_widget_show( vbox );
\r
1011 gtk_table_attach( GTK_TABLE( table ), vbox, 0, 1, 0, 1,
\r
1012 (GtkAttachOptions) (GTK_EXPAND|GTK_FILL),
\r
1013 (GtkAttachOptions) (GTK_FILL), 0, 0 );
\r
1015 // -------------------------- //
\r
1017 hbox = gtk_hbox_new( FALSE, 5 );
\r
1018 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
\r
1019 gtk_widget_show( hbox );
\r
1021 w = gtk_label_new( "File:" );
\r
1022 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 );
\r
1023 gtk_widget_show( w );
\r
1025 g_pCamListCombo = gtk_combo_new();
\r
1026 gtk_box_pack_start (GTK_BOX( hbox ), g_pCamListCombo, TRUE, TRUE, 0);
\r
1027 gtk_widget_show( g_pCamListCombo );
\r
1029 // -------------------------- //
\r
1031 hbox = gtk_hbox_new( FALSE, 5 );
\r
1032 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
\r
1033 gtk_widget_show( hbox );
\r
1035 w = gtk_label_new( "Name:" );
\r
1036 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 );
\r
1037 gtk_widget_show( w );
\r
1039 g_pCamName = gtk_entry_new();
\r
1040 gtk_box_pack_start( GTK_BOX( hbox ), g_pCamName, FALSE, FALSE, 0 );
\r
1041 gtk_widget_show( g_pCamName );
\r
1043 w = gtk_label_new( "Type: " );
\r
1044 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 );
\r
1045 gtk_widget_show( w );
\r
1047 w = gtk_label_new( "" );
\r
1048 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 );
\r
1049 gtk_widget_show( w );
\r
1050 g_pCamType = GTK_LABEL( w );
\r
1052 RefreshCamListCombo();
\r
1054 gtk_entry_set_editable( GTK_ENTRY( GTK_COMBO(g_pCamListCombo)->entry ), FALSE );
\r
1055 gtk_signal_connect( GTK_OBJECT(GTK_COMBO(g_pCamListCombo)->entry), "changed", GTK_SIGNAL_FUNC( ci_camlist_changed ), NULL );
\r
1057 // -------------------------- //
\r
1059 frame = gtk_frame_new( "Path and Target editing" );
\r
1060 gtk_widget_show( frame );
\r
1061 gtk_table_attach( GTK_TABLE( table ), frame, 0, 1, 1, 2,
\r
1062 (GtkAttachOptions) (GTK_EXPAND|GTK_FILL),
\r
1063 (GtkAttachOptions) (GTK_FILL), 0, 0 );
\r
1065 vbox = gtk_vbox_new( FALSE, 5 );
\r
1066 gtk_container_add( GTK_CONTAINER( frame ), vbox );
\r
1067 gtk_container_set_border_width( GTK_CONTAINER (vbox), 5 );
\r
1068 gtk_widget_show( vbox );
\r
1070 // -------------------------- //
\r
1072 hbox = gtk_hbox_new( FALSE, 5 );
\r
1073 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
\r
1074 gtk_widget_show( hbox );
\r
1076 w = gtk_label_new( "Edit:" );
\r
1077 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 );
\r
1078 gtk_widget_show( w );
\r
1080 g_pPathListCombo = gtk_combo_new();
\r
1081 gtk_box_pack_start (GTK_BOX( hbox ), g_pPathListCombo, TRUE, TRUE, 0);
\r
1082 gtk_widget_show( g_pPathListCombo );
\r
1084 RefreshPathListCombo();
\r
1086 gtk_entry_set_editable( GTK_ENTRY( GTK_COMBO(g_pPathListCombo)->entry ), FALSE );
\r
1087 gtk_signal_connect( GTK_OBJECT(GTK_COMBO(g_pPathListCombo)->entry), "changed", GTK_SIGNAL_FUNC( ci_pathlist_changed ), NULL );
\r
1089 // -------------------------- //
\r
1091 hbox = gtk_hbox_new( FALSE, 5 );
\r
1092 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
\r
1093 gtk_widget_show( hbox );
\r
1095 g_pEditModeEditRadioButton = gtk_radio_button_new_with_label( g_pEditTypeRadio, "Edit Points" );
\r
1096 gtk_box_pack_start( GTK_BOX( hbox ), g_pEditModeEditRadioButton, FALSE, FALSE, 3 );
\r
1097 gtk_widget_show( g_pEditModeEditRadioButton );
\r
1098 g_pEditTypeRadio = gtk_radio_button_group( GTK_RADIO_BUTTON( g_pEditModeEditRadioButton ) );
\r
1100 gtk_signal_connect( GTK_OBJECT( g_pEditModeEditRadioButton ), "clicked", GTK_SIGNAL_FUNC( ci_editmode_edit ), NULL );
\r
1102 g_pEditModeAddRadioButton = gtk_radio_button_new_with_label( g_pEditTypeRadio, "Add Points" );
\r
1103 gtk_box_pack_start( GTK_BOX( hbox ), g_pEditModeAddRadioButton, FALSE, FALSE, 3 );
\r
1104 gtk_widget_show( g_pEditModeAddRadioButton );
\r
1105 g_pEditTypeRadio = gtk_radio_button_group( GTK_RADIO_BUTTON( g_pEditModeAddRadioButton ) );
\r
1107 gtk_signal_connect( GTK_OBJECT( g_pEditModeAddRadioButton ), "clicked", GTK_SIGNAL_FUNC( ci_editmode_add ), NULL );
\r
1109 // see if we should use a different default
\r
1110 if( g_iEditMode == 1 ) {
\r
1111 // Go to editmode Add
\r
1112 gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(g_pEditModeAddRadioButton), TRUE );
\r
1115 w = gtk_label_new( "Type: " );
\r
1116 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 );
\r
1117 gtk_widget_show( w );
\r
1119 w = gtk_label_new( "" );
\r
1120 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 );
\r
1121 gtk_widget_show( w );
\r
1122 g_pPathType = GTK_LABEL( w );
\r
1124 // -------------------------- //
\r
1126 hbox = gtk_hbox_new( FALSE, 5 );
\r
1127 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
\r
1128 gtk_widget_show( hbox );
\r
1130 w = gtk_button_new_with_label( "Rename..." );
\r
1131 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, TRUE, 0);
\r
1132 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( ci_rename ), NULL );
\r
1133 gtk_widget_show( w );
\r
1135 w = gtk_button_new_with_label( "Add Target..." );
\r
1136 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, TRUE, 0);
\r
1137 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( ci_add_target ), NULL );
\r
1138 gtk_widget_show( w );
\r
1140 // not available in splines library
\r
1141 /*w = gtk_button_new_with_label( "Delete Selected" );
\r
1142 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, TRUE, 0);
\r
1143 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( ci_delete_selected ), NULL );
\r
1144 gtk_widget_show( w );
\r
1146 w = gtk_button_new_with_label( "Select All" );
\r
1147 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, TRUE, 0);
\r
1148 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( ci_select_all ), NULL );
\r
1149 gtk_widget_show( w );*/
\r
1151 // -------------------------- //
\r
1153 frame = gtk_frame_new( "Time" );
\r
1154 gtk_widget_show( frame );
\r
1155 gtk_table_attach( GTK_TABLE( table ), frame, 0, 1, 2, 3,
\r
1156 (GtkAttachOptions) (GTK_EXPAND|GTK_FILL),
\r
1157 (GtkAttachOptions) (GTK_FILL), 0, 0 );
\r
1159 vbox = gtk_vbox_new( FALSE, 5 );
\r
1160 gtk_container_add( GTK_CONTAINER( frame ), vbox );
\r
1161 gtk_container_set_border_width( GTK_CONTAINER (vbox), 5 );
\r
1162 gtk_widget_show( vbox );
\r
1164 // -------------------------- //
\r
1166 hbox = gtk_hbox_new( FALSE, 5 );
\r
1167 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
\r
1168 gtk_widget_show( hbox );
\r
1170 w = gtk_label_new( "Length (seconds):" );
\r
1171 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 );
\r
1172 gtk_widget_show( w );
\r
1174 g_pSecondsEntry = gtk_entry_new();
\r
1175 gtk_box_pack_start( GTK_BOX( hbox ), g_pSecondsEntry, FALSE, FALSE, 0 );
\r
1176 gtk_widget_show( g_pSecondsEntry );
\r
1178 // -------------------------- //
\r
1180 hbox = gtk_hbox_new( FALSE, 5 );
\r
1181 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
\r
1182 gtk_widget_show( hbox );
\r
1184 w = gtk_label_new( "Current Time: " );
\r
1185 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 );
\r
1186 gtk_widget_show( w );
\r
1188 w = gtk_label_new( "0.00" );
\r
1189 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 );
\r
1190 gtk_widget_show( w );
\r
1191 g_pCurrentTime = GTK_LABEL( w );
\r
1193 w = gtk_label_new( " of " );
\r
1194 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 );
\r
1195 gtk_widget_show( w );
\r
1197 w = gtk_label_new( "0.00" );
\r
1198 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 );
\r
1199 gtk_widget_show( w );
\r
1200 g_pTotalTime = GTK_LABEL( w );
\r
1202 // -------------------------- //
\r
1204 hbox = gtk_hbox_new( FALSE, 5 );
\r
1205 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
\r
1206 gtk_widget_show( hbox );
\r
1208 g_pTimeLine = GTK_ADJUSTMENT( gtk_adjustment_new( 0, 0, 30000, 100, 250, 0 ) );
\r
1209 gtk_signal_connect( GTK_OBJECT(g_pTimeLine), "value_changed", GTK_SIGNAL_FUNC( ci_timeline_changed ), NULL );
\r
1210 w = gtk_hscale_new( g_pTimeLine );
\r
1211 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
\r
1212 gtk_widget_show( w );
\r
1213 gtk_scale_set_draw_value( GTK_SCALE( w ), FALSE );
\r
1215 // -------------------------- //
\r
1217 hbox = gtk_hbox_new( FALSE, 5 );
\r
1218 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
\r
1219 gtk_widget_show( hbox );
\r
1221 g_pTrackCamera = gtk_check_button_new_with_label( "Track Camera" );
\r
1222 gtk_box_pack_start( GTK_BOX( hbox ), g_pTrackCamera, FALSE, FALSE, 0 );
\r
1223 gtk_widget_show( g_pTrackCamera );
\r
1225 // -------------------------- //
\r
1227 hbox = gtk_hbox_new( FALSE, 5 );
\r
1228 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
\r
1229 gtk_widget_show( hbox );
\r
1231 w = gtk_label_new( "Events:" );
\r
1232 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 );
\r
1233 gtk_widget_show( w );
\r
1235 // -------------------------- //
\r
1237 hbox = gtk_hbox_new( FALSE, 5 );
\r
1238 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
\r
1239 gtk_widget_show( hbox );
\r
1241 w = gtk_scrolled_window_new( NULL, NULL );
\r
1242 gtk_widget_set_usize( w, 0, 150 );
\r
1243 gtk_scrolled_window_set_policy( GTK_SCROLLED_WINDOW( w ), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC );
\r
1244 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
\r
1245 gtk_widget_show( w );
\r
1247 g_pEventsList = gtk_clist_new( 3 );
\r
1248 gtk_container_add( GTK_CONTAINER(w), g_pEventsList);
\r
1249 //gtk_signal_connect( GTK_OBJECT(g_pEventsList), "select_row", GTK_SIGNAL_FUNC (proplist_select_row), NULL);
\r
1250 gtk_clist_set_selection_mode( GTK_CLIST(g_pEventsList), GTK_SELECTION_BROWSE );
\r
1251 gtk_clist_column_titles_hide( GTK_CLIST(g_pEventsList) );
\r
1252 gtk_clist_set_column_auto_resize( GTK_CLIST(g_pEventsList), 0, TRUE );
\r
1253 gtk_clist_set_column_auto_resize( GTK_CLIST(g_pEventsList), 1, TRUE );
\r
1254 gtk_clist_set_column_auto_resize( GTK_CLIST(g_pEventsList), 2, TRUE );
\r
1255 gtk_widget_show( g_pEventsList );
\r
1257 vbox = gtk_vbox_new( FALSE, 5 );
\r
1258 gtk_box_pack_start( GTK_BOX( hbox ), vbox, FALSE, FALSE, 0 );
\r
1259 gtk_widget_show( vbox );
\r
1261 w = gtk_button_new_with_label( "Add..." );
\r
1262 gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0);
\r
1263 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( ci_add ), NULL );
\r
1264 gtk_widget_show( w );
\r
1266 w = gtk_button_new_with_label( "Del" );
\r
1267 gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0);
\r
1268 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( ci_del ), NULL );
\r
1269 gtk_widget_show( w );
\r
1271 // -------------------------- //
\r
1279 // the buttons column
\r
1280 // -------------------------- //
\r
1282 vbox = gtk_vbox_new( FALSE, 5 );
\r
1283 gtk_widget_show( vbox );
\r
1284 gtk_table_attach( GTK_TABLE( table ), vbox, 1, 2, 0, 1,
\r
1285 (GtkAttachOptions) (GTK_FILL),
\r
1286 (GtkAttachOptions) (GTK_FILL), 0, 0 );
\r
1288 w = gtk_button_new_with_label( "New..." );
\r
1289 gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0);
\r
1290 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( ci_new ), NULL );
\r
1291 gtk_widget_show( w );
\r
1293 w = gtk_button_new_with_label( "Load..." );
\r
1294 gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0);
\r
1295 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( ci_load ), NULL );
\r
1296 gtk_widget_show( w );
\r
1298 // -------------------------- //
\r
1300 vbox = gtk_vbox_new( FALSE, 5 );
\r
1301 gtk_widget_show( vbox );
\r
1302 gtk_table_attach( GTK_TABLE( table ), vbox, 1, 2, 1, 2,
\r
1303 (GtkAttachOptions) (GTK_FILL),
\r
1304 (GtkAttachOptions) (GTK_FILL), 0, 0 );
\r
1306 w = gtk_button_new_with_label( "Save..." );
\r
1307 gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0);
\r
1308 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( ci_save ), NULL );
\r
1309 gtk_widget_show( w );
\r
1311 w = gtk_button_new_with_label( "Unload" );
\r
1312 gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0);
\r
1313 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( ci_unload ), NULL );
\r
1314 gtk_widget_show( w );
\r
1316 hbox = gtk_hbox_new( FALSE, 5 );
\r
1317 gtk_box_pack_start( GTK_BOX( vbox ), hbox, TRUE, TRUE, 0 );
\r
1318 gtk_widget_show( hbox );
\r
1320 w = gtk_button_new_with_label( "Apply" );
\r
1321 gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0);
\r
1322 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( ci_apply ), NULL );
\r
1323 gtk_widget_show( w );
\r
1325 w = gtk_button_new_with_label( "Preview" );
\r
1326 gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0);
\r
1327 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( ci_preview ), NULL );
\r
1328 gtk_widget_show( w );
\r
1330 // -------------------------- //
\r
1332 vbox = gtk_vbox_new( FALSE, 5 );
\r
1333 gtk_widget_show( vbox );
\r
1334 gtk_table_attach( GTK_TABLE( table ), vbox, 1, 2, 2, 3,
\r
1335 (GtkAttachOptions) (GTK_FILL),
\r
1336 (GtkAttachOptions) (GTK_FILL), 0, 0 );
\r
1338 hbox = gtk_hbox_new( FALSE, 5 );
\r
1339 gtk_box_pack_start( GTK_BOX( vbox ), hbox, TRUE, TRUE, 0 );
\r
1340 gtk_widget_show( hbox );
\r
1342 w = gtk_button_new_with_label( "Close" );
\r
1343 gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0);
\r
1344 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( ci_close ), NULL );
\r
1345 GTK_WIDGET_SET_FLAGS( w, GTK_CAN_DEFAULT );
\r
1346 gtk_widget_grab_default( w );
\r
1347 gtk_widget_show( w );
\r
1349 // -------------------------- //
\r