2 Copyright (C) 1999-2007 id Software, Inc. and contributors.
3 For a list of contributors, see the accompanying CONTRIBUTORS file.
5 This file is part of GtkRadiant.
7 GtkRadiant is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version.
12 GtkRadiant is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with GtkRadiant; if not, write to the Free Software
19 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
23 Camera plugin for GtkRadiant
24 Copyright (C) 2002 Splash Damage Ltd.
30 #include <glib/gi18n.h>
32 static GSList *g_pEditTypeRadio = NULL;
33 static GtkWidget *g_pEditModeEditRadioButton = NULL;
34 GtkWidget *g_pEditModeAddRadioButton = NULL;
35 static GtkWidget *g_pSecondsEntry = NULL;
36 static GtkWidget *g_pEventsList = NULL;
37 static GtkLabel *g_pCurrentTime = NULL;
38 static GtkLabel *g_pTotalTime = NULL;
39 static GtkAdjustment *g_pTimeLine = NULL;
40 static GtkWidget *g_pTrackCamera = NULL;
41 static GtkWidget *g_pCamName = NULL;
42 static char *g_cNull = '\0';
44 static gint ci_editmode_edit( GtkWidget *widget, gpointer data ){
50 static gint ci_editmode_add( GtkWidget *widget, gpointer data ){
56 /*static gint ci_delete_selected( GtkWidget *widget, gpointer data )
61 static gint ci_select_all( GtkWidget *widget, gpointer data )
66 static gint ci_new( GtkWidget *widget, gpointer data ){
67 GtkWidget *window, *w, *vbox, *vbox2, *hbox, *frame; //, *name;
68 GtkWidget *fixed, *interpolated, *spline;
70 GSList *targetTypeRadio = NULL;
74 window = gtk_window_new( GTK_WINDOW_TOPLEVEL );
75 gtk_window_set_title( GTK_WINDOW( window ), "New Camera" );
76 gtk_signal_connect( GTK_OBJECT( window ), "delete_event", GTK_SIGNAL_FUNC( dialog_delete_callback ), NULL );
77 gtk_signal_connect( GTK_OBJECT( window ), "destroy", GTK_SIGNAL_FUNC( gtk_widget_destroy ), NULL );
78 gtk_window_set_transient_for( GTK_WINDOW( window ), GTK_WINDOW( g_pCameraInspectorWnd ) );
80 g_object_set_data( G_OBJECT( window ), "loop", &loop );
81 g_object_set_data( G_OBJECT( window ), "ret", &ret );
83 gtk_widget_realize( window );
86 vbox = gtk_vbox_new( FALSE, 5 );
87 gtk_container_add( GTK_CONTAINER( window ), vbox );
88 gtk_widget_show( vbox );
90 // -------------------------- //
92 hbox = gtk_hbox_new( FALSE, 5 );
93 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
94 gtk_widget_show( hbox );
96 frame = gtk_frame_new( _( "Type" ) );
97 gtk_box_pack_start( GTK_BOX( hbox ), frame, TRUE, TRUE, 0 );
98 gtk_widget_show( frame );
100 vbox2 = gtk_vbox_new( FALSE, 5 );
101 gtk_container_add( GTK_CONTAINER( frame ), vbox2 );
102 gtk_container_set_border_width( GTK_CONTAINER( vbox2 ), 5 );
103 gtk_widget_show( vbox2 );
105 // -------------------------- //
107 fixed = gtk_radio_button_new_with_label( targetTypeRadio, "Fixed" );
108 gtk_box_pack_start( GTK_BOX( vbox2 ), fixed, FALSE, FALSE, 3 );
109 gtk_widget_show( fixed );
110 targetTypeRadio = gtk_radio_button_group( GTK_RADIO_BUTTON( fixed ) );
112 interpolated = gtk_radio_button_new_with_label( targetTypeRadio, "Interpolated" );
113 gtk_box_pack_start( GTK_BOX( vbox2 ), interpolated, FALSE, FALSE, 3 );
114 gtk_widget_show( interpolated );
115 targetTypeRadio = gtk_radio_button_group( GTK_RADIO_BUTTON( interpolated ) );
117 spline = gtk_radio_button_new_with_label( targetTypeRadio, "Spline" );
118 gtk_box_pack_start( GTK_BOX( vbox2 ), spline, FALSE, FALSE, 3 );
119 gtk_widget_show( spline );
120 targetTypeRadio = gtk_radio_button_group( GTK_RADIO_BUTTON( spline ) );
122 // -------------------------- //
124 w = gtk_hseparator_new();
125 gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 2 );
126 gtk_widget_show( w );
128 // -------------------------- //
130 hbox = gtk_hbox_new( FALSE, 5 );
131 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
132 gtk_widget_show( hbox );
134 w = gtk_button_new_with_label( "Ok" );
135 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
136 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDOK ) );
137 gtk_widget_show( w );
139 GTK_WIDGET_SET_FLAGS( w, GTK_CAN_DEFAULT );
140 gtk_widget_grab_default( w );
142 w = gtk_button_new_with_label( "Cancel" );
143 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
144 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDCANCEL ) );
145 gtk_widget_show( w );
148 // -------------------------- //
150 gtk_window_set_position( GTK_WINDOW( window ),GTK_WIN_POS_CENTER );
151 gtk_widget_show( window );
152 gtk_grab_add( window );
154 bool dialogError = TRUE;
155 while ( dialogError ) {
158 gtk_main_iteration();
163 if ( gtk_toggle_button_get_active( (GtkToggleButton*)fixed ) ) {
166 else if ( gtk_toggle_button_get_active( (GtkToggleButton*)interpolated ) ) {
167 DoNewInterpolatedCamera();
169 else if ( gtk_toggle_button_get_active( (GtkToggleButton*)spline ) ) {
175 gtk_grab_remove( window );
176 gtk_widget_destroy( window );
181 static gint ci_load( GtkWidget *widget, gpointer data ){
187 static gint ci_save( GtkWidget *widget, gpointer data ){
193 static gint ci_unload( GtkWidget *widget, gpointer data ){
199 static gint ci_apply( GtkWidget *widget, gpointer data ){
200 if ( GetCurrentCam() ) {
205 str = gtk_entry_get_text( GTK_ENTRY( g_pCamName ) );
208 GetCurrentCam()->GetCam()->setName( str );
212 str = gtk_entry_get_text( GTK_ENTRY( g_pSecondsEntry ) );
215 GetCurrentCam()->GetCam()->setBaseTime( atof( str ) );
220 GetCurrentCam()->GetCam()->buildCamera();
223 sprintf( buf, "%.2f", GetCurrentCam()->GetCam()->getBaseTime() );
224 gtk_entry_set_text( GTK_ENTRY( g_pSecondsEntry ), buf );
226 sprintf( buf, "%.2f", GetCurrentCam()->GetCam()->getTotalTime() );
227 gtk_label_set_text( g_pCurrentTime, "0.00" );
228 gtk_label_set_text( g_pTotalTime, buf );
230 gtk_adjustment_set_value( g_pTimeLine, 0.f );
231 g_pTimeLine->upper = GetCurrentCam()->GetCam()->getTotalTime() * 1000;
233 GetCurrentCam()->HasBeenModified();
239 static gint ci_preview( GtkWidget *widget, gpointer data ){
240 if ( GetCurrentCam() ) {
241 g_iPreviewRunning = 1;
242 g_FuncTable.m_pfnSysUpdateWindows( W_XY_OVERLAY | W_CAMERA );
248 static gint ci_expose( GtkWidget *widget, gpointer data ){
250 DoStartEdit( GetCurrentCam() );
255 static gint ci_close( GtkWidget *widget, gpointer data ){
256 gtk_widget_hide( g_pCameraInspectorWnd );
264 static GtkWidget *g_pPathListCombo = NULL;
265 static GtkLabel *g_pPathType = NULL;
267 static void RefreshPathListCombo( void ){
268 if ( !g_pPathListCombo ) {
272 GList *combo_list = (GList*)NULL;
274 if ( GetCurrentCam() ) {
275 combo_list = g_list_append( combo_list, (void *)GetCurrentCam()->GetCam()->getPositionObj()->getName() );
276 for ( int i = 0; i < GetCurrentCam()->GetCam()->numTargets(); i++ ) {
277 combo_list = g_list_append( combo_list, (void *)GetCurrentCam()->GetCam()->getActiveTarget( i )->getName() );
281 // add one empty string make gtk be quiet
282 combo_list = g_list_append( combo_list, (gpointer)g_cNull );
285 gtk_combo_set_popdown_strings( GTK_COMBO( g_pPathListCombo ), combo_list );
286 g_list_free( combo_list );
289 static gint ci_pathlist_changed( GtkWidget *widget, gpointer data ){
290 const char *str = gtk_entry_get_text( GTK_ENTRY( widget ) );
292 if ( !str || !GetCurrentCam() ) {
297 for ( i = 0; i < GetCurrentCam()->GetCam()->numTargets(); i++ ) {
298 if ( !strcmp( str, GetCurrentCam()->GetCam()->getActiveTarget( i )->getName() ) ) {
303 if ( i >= 0 && i < GetCurrentCam()->GetCam()->numTargets() ) {
304 GetCurrentCam()->GetCam()->setActiveTarget( i );
308 gtk_label_set_text( g_pPathType, GetCurrentCam()->GetCam()->getActiveTarget( g_iActiveTarget )->typeStr() );
312 g_iActiveTarget = -1;
314 gtk_label_set_text( g_pPathType, GetCurrentCam()->GetCam()->getPositionObj()->typeStr() );
319 if ( g_pCameraInspectorWnd && GTK_WIDGET_VISIBLE( g_pCameraInspectorWnd ) ) {
320 DoStartEdit( GetCurrentCam() );
326 static void RefreshEventList( void ){
331 gtk_clist_freeze( GTK_CLIST( g_pEventsList ) );
332 gtk_clist_clear( GTK_CLIST( g_pEventsList ) );
334 if ( GetCurrentCam() ) {
336 for ( i = 0; i < GetCurrentCam()->GetCam()->numEvents(); i++ ) {
337 char rowbuf[3][128], *row[3];
338 // FIXME: sort by time?
339 sprintf( rowbuf[0], "%li", GetCurrentCam()->GetCam()->getEvent( i )->getTime() ); row[0] = rowbuf[0];
340 strncpy( rowbuf[1], GetCurrentCam()->GetCam()->getEvent( i )->typeStr(), sizeof( rowbuf[0] ) ); row[1] = rowbuf[1];
341 strncpy( rowbuf[2], GetCurrentCam()->GetCam()->getEvent( i )->getParam(), sizeof( rowbuf[1] ) ); row[2] = rowbuf[2];
342 gtk_clist_append( GTK_CLIST( g_pEventsList ), row );
345 // Total duration might have changed
346 sprintf( buf, "%.2f", GetCurrentCam()->GetCam()->getTotalTime() );
347 gtk_label_set_text( g_pCurrentTime, "0.00" );
348 gtk_label_set_text( g_pTotalTime, buf );
350 gtk_adjustment_set_value( g_pTimeLine, 0.f );
351 g_pTimeLine->upper = ( GetCurrentCam()->GetCam()->getTotalTime() * 1000 );
354 gtk_clist_thaw( GTK_CLIST( g_pEventsList ) );
357 static gint ci_rename( GtkWidget *widget, gpointer data ){
358 GtkWidget *window, *w, *vbox, *hbox, *name;
361 if ( !GetCurrentCam() ) {
366 window = gtk_window_new( GTK_WINDOW_TOPLEVEL );
367 gtk_window_set_title( GTK_WINDOW( window ), "Rename Path" );
368 gtk_signal_connect( GTK_OBJECT( window ), "delete_event", GTK_SIGNAL_FUNC( dialog_delete_callback ), NULL );
369 gtk_signal_connect( GTK_OBJECT( window ), "destroy", GTK_SIGNAL_FUNC( gtk_widget_destroy ), NULL );
370 gtk_window_set_transient_for( GTK_WINDOW( window ), GTK_WINDOW( g_pCameraInspectorWnd ) );
372 g_object_set_data( G_OBJECT( window ), "loop", &loop );
373 g_object_set_data( G_OBJECT( window ), "ret", &ret );
375 gtk_widget_realize( window );
378 vbox = gtk_vbox_new( FALSE, 5 );
379 gtk_container_add( GTK_CONTAINER( window ), vbox );
380 gtk_widget_show( vbox );
382 // -------------------------- //
384 hbox = gtk_hbox_new( FALSE, 5 );
385 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
386 gtk_widget_show( hbox );
388 w = gtk_label_new( "Name:" );
389 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 );
390 gtk_widget_show( w );
392 name = gtk_entry_new();
393 gtk_box_pack_start( GTK_BOX( hbox ), name, FALSE, FALSE, 0 );
394 gtk_widget_show( name );
396 if ( g_iActiveTarget < 0 ) {
397 gtk_entry_set_text( GTK_ENTRY( name ), GetCurrentCam()->GetCam()->getPositionObj()->getName() );
400 gtk_entry_set_text( GTK_ENTRY( name ), GetCurrentCam()->GetCam()->getActiveTarget( g_iActiveTarget )->getName() );
403 // -------------------------- //
405 w = gtk_hseparator_new();
406 gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 2 );
407 gtk_widget_show( w );
409 // -------------------------- //
411 hbox = gtk_hbox_new( FALSE, 5 );
412 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
413 gtk_widget_show( hbox );
415 w = gtk_button_new_with_label( "Ok" );
416 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
417 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDOK ) );
418 gtk_widget_show( w );
420 GTK_WIDGET_SET_FLAGS( w, GTK_CAN_DEFAULT );
421 gtk_widget_grab_default( w );
423 w = gtk_button_new_with_label( "Cancel" );
424 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
425 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDCANCEL ) );
426 gtk_widget_show( w );
429 // -------------------------- //
431 gtk_window_set_position( GTK_WINDOW( window ),GTK_WIN_POS_CENTER );
432 gtk_widget_show( window );
433 gtk_grab_add( window );
435 bool dialogError = TRUE;
436 while ( dialogError ) {
439 gtk_main_iteration();
444 const char *str = gtk_entry_get_text( GTK_ENTRY( name ) );
446 if ( str && str[0] ) {
448 if ( g_iActiveTarget < 0 ) {
449 GetCurrentCam()->GetCam()->getPositionObj()->setName( str );
452 GetCurrentCam()->GetCam()->getActiveTarget( g_iActiveTarget )->setName( str );
455 GetCurrentCam()->GetCam()->buildCamera();
457 // Rebuild the listbox
458 RefreshPathListCombo();
466 gtk_grab_remove( window );
467 gtk_widget_destroy( window );
472 static gint ci_add_target( GtkWidget *widget, gpointer data ){
473 GtkWidget *window, *w, *vbox, *vbox2, *hbox, *frame, *name;
474 GtkWidget *fixed, *interpolated, *spline;
476 GSList *targetTypeRadio = NULL;
479 if ( !GetCurrentCam() ) {
484 window = gtk_window_new( GTK_WINDOW_TOPLEVEL );
485 gtk_window_set_title( GTK_WINDOW( window ), "Add Target" );
486 gtk_signal_connect( GTK_OBJECT( window ), "delete_event", GTK_SIGNAL_FUNC( dialog_delete_callback ), NULL );
487 gtk_signal_connect( GTK_OBJECT( window ), "destroy", GTK_SIGNAL_FUNC( gtk_widget_destroy ), NULL );
488 gtk_window_set_transient_for( GTK_WINDOW( window ), GTK_WINDOW( g_pCameraInspectorWnd ) );
490 g_object_set_data( G_OBJECT( window ), "loop", &loop );
491 g_object_set_data( G_OBJECT( window ), "ret", &ret );
493 gtk_widget_realize( window );
496 vbox = gtk_vbox_new( FALSE, 5 );
497 gtk_container_add( GTK_CONTAINER( window ), vbox );
498 gtk_widget_show( vbox );
500 // -------------------------- //
502 hbox = gtk_hbox_new( FALSE, 5 );
503 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
504 gtk_widget_show( hbox );
506 w = gtk_label_new( "Name:" );
507 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 );
508 gtk_widget_show( w );
510 name = gtk_entry_new();
511 gtk_box_pack_start( GTK_BOX( hbox ), name, TRUE, TRUE, 0 );
512 gtk_widget_show( name );
514 sprintf( buf, "target%i", GetCurrentCam()->GetCam()->numTargets() + 1 );
515 gtk_entry_set_text( GTK_ENTRY( name ), buf );
517 // -------------------------- //
519 hbox = gtk_hbox_new( FALSE, 5 );
520 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
521 gtk_widget_show( hbox );
523 frame = gtk_frame_new( _( "Type" ) );
524 gtk_box_pack_start( GTK_BOX( hbox ), frame, TRUE, TRUE, 0 );
525 gtk_widget_show( frame );
527 vbox2 = gtk_vbox_new( FALSE, 5 );
528 gtk_container_add( GTK_CONTAINER( frame ), vbox2 );
529 gtk_container_set_border_width( GTK_CONTAINER( vbox2 ), 5 );
530 gtk_widget_show( vbox2 );
532 // -------------------------- //
534 fixed = gtk_radio_button_new_with_label( targetTypeRadio, _( "Fixed" ) );
535 gtk_box_pack_start( GTK_BOX( vbox2 ), fixed, FALSE, FALSE, 3 );
536 gtk_widget_show( fixed );
537 targetTypeRadio = gtk_radio_button_group( GTK_RADIO_BUTTON( fixed ) );
539 interpolated = gtk_radio_button_new_with_label( targetTypeRadio, _( "Interpolated" ) );
540 gtk_box_pack_start( GTK_BOX( vbox2 ), interpolated, FALSE, FALSE, 3 );
541 gtk_widget_show( interpolated );
542 targetTypeRadio = gtk_radio_button_group( GTK_RADIO_BUTTON( interpolated ) );
544 spline = gtk_radio_button_new_with_label( targetTypeRadio, _( "Spline" ) );
545 gtk_box_pack_start( GTK_BOX( vbox2 ), spline, FALSE, FALSE, 3 );
546 gtk_widget_show( spline );
547 targetTypeRadio = gtk_radio_button_group( GTK_RADIO_BUTTON( spline ) );
549 // -------------------------- //
551 w = gtk_hseparator_new();
552 gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 2 );
553 gtk_widget_show( w );
555 // -------------------------- //
557 hbox = gtk_hbox_new( FALSE, 5 );
558 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
559 gtk_widget_show( hbox );
561 w = gtk_button_new_with_label( _( "Ok" ) );
562 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
563 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDOK ) );
564 gtk_widget_show( w );
566 GTK_WIDGET_SET_FLAGS( w, GTK_CAN_DEFAULT );
567 gtk_widget_grab_default( w );
569 w = gtk_button_new_with_label( _( "Cancel" ) );
570 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
571 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDCANCEL ) );
572 gtk_widget_show( w );
575 // -------------------------- //
577 gtk_window_set_position( GTK_WINDOW( window ),GTK_WIN_POS_CENTER );
578 gtk_widget_show( window );
579 gtk_grab_add( window );
581 bool dialogError = TRUE;
582 while ( dialogError ) {
585 gtk_main_iteration();
590 const char *str = gtk_entry_get_text( GTK_ENTRY( name ) );
592 if ( str && str[0] ) {
596 if ( gtk_toggle_button_get_active( (GtkToggleButton*)fixed ) ) {
599 else if ( gtk_toggle_button_get_active( (GtkToggleButton*)interpolated ) ) {
602 else if ( gtk_toggle_button_get_active( (GtkToggleButton*)spline ) ) {
607 GetCurrentCam()->GetCam()->addTarget( str, static_cast<idCameraPosition::positionType>( type ) );
609 // Rebuild the listbox
610 RefreshPathListCombo();
612 // Select the last item in the listbox
613 li = g_list_last( GTK_LIST( GTK_COMBO( g_pPathListCombo )->list )->children );
614 gtk_list_select_child( GTK_LIST( GTK_COMBO( g_pPathListCombo )->list ), GTK_WIDGET( li->data ) );
616 // If this was the first one, refresh the event list
617 if ( GetCurrentCam()->GetCam()->numTargets() == 1 ) {
621 // Go to editmode Add
622 gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( g_pEditModeAddRadioButton ), TRUE );
631 gtk_grab_remove( window );
632 gtk_widget_destroy( window );
637 static GtkWidget *g_pCamListCombo = NULL;
638 static GtkLabel *g_pCamType = NULL;
640 void RefreshCamListCombo( void ){
641 if ( !g_pCamListCombo ) {
645 GList *combo_list = (GList*)NULL;
646 CCamera *combo_cam = firstCam;
648 while ( combo_cam ) {
649 //combo_list = g_list_append( combo_list, (void *)combo_cam->GetCam()->getName() );
650 //if( combo_cam->HasBeenSaved() ) {
651 combo_list = g_list_append( combo_list, (void *)combo_cam->GetFileName() );
654 sprintf( buf, "Unsaved Camera %i", combo_cam->GetCamNum() );
655 combo_list = g_list_append( combo_list, (void *)buf );
657 //combo_list = g_list_append( combo_list, (void *)combo_cam->GetCam()->getName() ); // FIXME: this requires camera.dll to create unique names for new cams
659 combo_cam = combo_cam->GetNext();
663 // add one empty string make gtk be quiet
664 combo_list = g_list_append( combo_list, (gpointer)g_cNull );
666 gtk_combo_set_popdown_strings( GTK_COMBO( g_pCamListCombo ), combo_list );
667 g_list_free( combo_list );
669 // select our current entry in the list
670 if ( GetCurrentCam() ) {
671 // stop editing on the current cam
672 //GetCurrentCam()->GetCam()->stopEdit(); // FIXME: this crashed on creating new cameras, why is it here?
674 GList *li = GTK_LIST( GTK_COMBO( g_pCamListCombo )->list )->children;
675 combo_cam = firstCam;
676 while ( li && combo_cam ) {
677 if ( combo_cam == GetCurrentCam() ) {
678 gtk_list_select_child( GTK_LIST( GTK_COMBO( g_pCamListCombo )->list ), GTK_WIDGET( li->data ) );
682 combo_cam = combo_cam->GetNext();
686 RefreshPathListCombo();
689 static gint ci_camlist_changed( GtkWidget *widget, gpointer data ){
690 const char *str = gtk_entry_get_text( GTK_ENTRY( widget ) );
692 CCamera *combo_cam = firstCam;
693 while ( str && combo_cam ) {
694 //if( !strcmp( str, combo_cam->GetCam()->getName() ) )
695 //if( combo_cam->HasBeenSaved() ) {
696 if ( !strcmp( str, combo_cam->GetFileName() ) ) {
701 sprintf( buf, "Unsaved Camera %i", combo_cam->GetCamNum() );
702 if( !strcmp( str, buf ) )
703 //if( !strcmp( str, combo_cam->GetCam()->getName() ) )
707 combo_cam = combo_cam->GetNext();
710 SetCurrentCam( combo_cam );
713 if ( GetCurrentCam() ) {
714 // Fill in our widgets fields for this camera
718 gtk_entry_set_text( GTK_ENTRY( g_pCamName ), GetCurrentCam()->GetCam()->getName() );
721 gtk_label_set_text( g_pCamType, GetCurrentCam()->GetCam()->getPositionObj()->typeStr() );
724 sprintf( buf, "%.2f", GetCurrentCam()->GetCam()->getBaseTime() );
725 gtk_entry_set_text( GTK_ENTRY( g_pSecondsEntry ), buf );
727 sprintf( buf, "%.2f", GetCurrentCam()->GetCam()->getTotalTime() );
728 gtk_label_set_text( g_pCurrentTime, "0.00" );
729 gtk_label_set_text( g_pTotalTime, buf );
731 gtk_adjustment_set_value( g_pTimeLine, 0.f );
732 g_pTimeLine->upper = GetCurrentCam()->GetCam()->getTotalTime() * 1000;
736 gtk_entry_set_text( GTK_ENTRY( g_pCamName ), "" );
739 gtk_label_set_text( g_pCamType, "" );
742 gtk_entry_set_text( GTK_ENTRY( g_pSecondsEntry ), "30.00" );
744 gtk_label_set_text( g_pCurrentTime, "0.00" );
745 gtk_label_set_text( g_pTotalTime, "30.00" );
747 gtk_adjustment_set_value( g_pTimeLine, 0.f );
748 g_pTimeLine->upper = 30000;
751 // Refresh event list
755 RefreshPathListCombo();
758 g_iActiveTarget = -1;
759 if ( g_pCameraInspectorWnd && GTK_WIDGET_VISIBLE( g_pCameraInspectorWnd ) ) {
760 DoStartEdit( GetCurrentCam() );
771 EVENT_TARGET, // char(name)
773 EVENT_FOV, // int(time), int(targetfov)
778 EVENT_FADEOUT, // int(time)
779 EVENT_FADEIN, // int(time)
784 // { requires parameters, enabled }
785 const bool camEventFlags[][2] = {
802 const char *camEventStr[] = {
807 N_( "Change Target <string:name>" ),
809 N_( "FOV <int:duration> <int:targetfov>" ),
813 N_( "Change to Camera <string:camera> (or <int:cameranum> <string:camera>" ),
814 N_( "Fade Out <int:duration>" ),
815 N_( "Fade In <int:duration>" ),
819 static gint ci_add( GtkWidget *widget, gpointer data ){
820 GtkWidget *window, *w, *vbox, *vbox2, *hbox, *frame, *parameters;
821 GtkWidget *eventWidget[EVENT_COUNT];
822 int i, ret, loop = 1;
823 GSList *eventTypeRadio = NULL;
826 if ( !GetCurrentCam() ) {
831 window = gtk_window_new( GTK_WINDOW_TOPLEVEL );
832 gtk_window_set_title( GTK_WINDOW( window ), _( "Add Event" ) );
833 gtk_signal_connect( GTK_OBJECT( window ), "delete_event", GTK_SIGNAL_FUNC( dialog_delete_callback ), NULL );
834 gtk_signal_connect( GTK_OBJECT( window ), "destroy", GTK_SIGNAL_FUNC( gtk_widget_destroy ), NULL );
835 gtk_window_set_transient_for( GTK_WINDOW( window ), GTK_WINDOW( g_pCameraInspectorWnd ) );
837 g_object_set_data( G_OBJECT( window ), "loop", &loop );
838 g_object_set_data( G_OBJECT( window ), "ret", &ret );
840 gtk_widget_realize( window );
843 vbox = gtk_vbox_new( FALSE, 5 );
844 gtk_container_add( GTK_CONTAINER( window ), vbox );
845 gtk_widget_show( vbox );
847 // -------------------------- //
849 hbox = gtk_hbox_new( FALSE, 5 );
850 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
851 gtk_widget_show( hbox );
853 frame = gtk_frame_new( _( "Type" ) );
854 gtk_box_pack_start( GTK_BOX( hbox ), frame, TRUE, TRUE, 0 );
855 gtk_widget_show( frame );
857 vbox2 = gtk_vbox_new( FALSE, 5 );
858 gtk_container_add( GTK_CONTAINER( frame ), vbox2 );
859 gtk_container_set_border_width( GTK_CONTAINER( vbox2 ), 5 );
860 gtk_widget_show( vbox2 );
862 // -------------------------- //
864 for ( i = 1; i < EVENT_COUNT; i++ ) {
865 eventWidget[i] = gtk_radio_button_new_with_label( eventTypeRadio, camEventStr[i] );
866 gtk_box_pack_start( GTK_BOX( vbox2 ), eventWidget[i], FALSE, FALSE, 3 );
867 gtk_widget_show( eventWidget[i] );
868 eventTypeRadio = gtk_radio_button_group( GTK_RADIO_BUTTON( eventWidget[i] ) );
869 if ( camEventFlags[i][1] == false ) {
870 gtk_widget_set_sensitive( eventWidget[i], FALSE );
874 // -------------------------- //
876 hbox = gtk_hbox_new( FALSE, 5 );
877 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
878 gtk_widget_show( hbox );
880 w = gtk_label_new( _( "Parameters:" ) );
881 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 );
882 gtk_widget_show( w );
884 parameters = gtk_entry_new();
885 gtk_box_pack_start( GTK_BOX( hbox ), parameters, TRUE, TRUE, 0 );
886 gtk_widget_show( parameters );
888 // -------------------------- //
890 w = gtk_hseparator_new();
891 gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 2 );
892 gtk_widget_show( w );
894 // -------------------------- //
896 hbox = gtk_hbox_new( FALSE, 5 );
897 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
898 gtk_widget_show( hbox );
900 w = gtk_button_new_with_label( _( "Ok" ) );
901 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
902 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDOK ) );
903 gtk_widget_show( w );
905 GTK_WIDGET_SET_FLAGS( w, GTK_CAN_DEFAULT );
906 gtk_widget_grab_default( w );
908 w = gtk_button_new_with_label( _( "Cancel" ) );
909 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
910 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDCANCEL ) );
911 gtk_widget_show( w );
914 // -------------------------- //
916 gtk_window_set_position( GTK_WINDOW( window ),GTK_WIN_POS_CENTER );
917 gtk_widget_show( window );
918 gtk_grab_add( window );
920 bool dialogError = TRUE;
921 while ( dialogError ) {
924 gtk_main_iteration();
929 const char *str = gtk_entry_get_text( GTK_ENTRY( parameters ) );
931 if ( !camEventFlags[i][0] || ( str && str[0] ) ) {
935 for ( type = 1; type < EVENT_COUNT; type++ ) {
936 if ( gtk_toggle_button_get_active( (GtkToggleButton*)eventWidget[type] ) ) {
942 GetCurrentCam()->GetCam()->addEvent( static_cast<idCameraEvent::eventType>( type ), str, (long)( g_pTimeLine->value ) );
944 // Refresh event list
953 gtk_grab_remove( window );
954 gtk_widget_destroy( window );
959 static gint ci_del( GtkWidget *widget, gpointer data ){
960 // TODO: add support to splines lib
961 if ( GetCurrentCam() && GTK_CLIST( g_pEventsList )->focus_row >= 0 ) {
962 GetCurrentCam()->GetCam()->removeEvent( GTK_CLIST( g_pEventsList )->focus_row );
963 // Refresh event list
970 static gint ci_timeline_changed( GtkAdjustment *adjustment ){
973 sprintf( buf, "%.2f", adjustment->value / 1000.f );
974 gtk_label_set_text( g_pCurrentTime, buf );
976 // FIXME: this will never work completely perfect. Startcamera calls buildcamera, which sets all events to 'nottriggered'.
977 // 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
978 // will have no idea where on the track it should be.
979 if ( GetCurrentCam() && gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( g_pTrackCamera ) ) ) {
981 vec3_t origin = { 0.0f, 0.0f, 0.0f }, dir = { 0.0f, 0.0f, 0.0f}, angles;
983 GetCurrentCam()->GetCam()->startCamera( 0 );
985 GetCurrentCam()->GetCam()->getCameraInfo( (long)( adjustment->value ), &origin[0], &dir[0], &fov );
986 VectorSet( angles, asin( dir[2] ) * 180 / 3.14159, atan2( dir[1], dir[0] ) * 180 / 3.14159, 0 );
987 g_CameraTable.m_pfnSetCamera( origin, angles );
993 GtkWidget *CreateCameraInspectorDialog( void ){
994 GtkWidget *window, *w, *vbox, *hbox, *table, *frame;
997 window = gtk_window_new( GTK_WINDOW_TOPLEVEL );
998 gtk_window_set_title( GTK_WINDOW( window ), _( "Camera Inspector" ) );
999 gtk_signal_connect( GTK_OBJECT( window ), "delete_event", GTK_SIGNAL_FUNC( ci_close ), NULL );
1000 gtk_signal_connect( GTK_OBJECT( window ), "expose_event", GTK_SIGNAL_FUNC( ci_expose ), NULL );
1001 // gtk_signal_connect( GTK_OBJECT (window), "destroy", GTK_SIGNAL_FUNC( gtk_widget_destroy ), NULL );
1002 gtk_window_set_transient_for( GTK_WINDOW( window ), GTK_WINDOW( g_pRadiantWnd ) );
1004 // don't use show, as you don't want to have it displayed on startup ;-)
1005 gtk_widget_realize( window );
1010 // -------------------------- //
1012 table = gtk_table_new( 3, 2, FALSE );
1013 gtk_widget_show( table );
1014 gtk_container_add( GTK_CONTAINER( window ), table );
1015 gtk_container_set_border_width( GTK_CONTAINER( table ), 5 );
1016 gtk_table_set_row_spacings( GTK_TABLE( table ), 5 );
1017 gtk_table_set_col_spacings( GTK_TABLE( table ), 5 );
1019 // the properties column
1020 // -------------------------- //
1022 vbox = gtk_vbox_new( FALSE, 5 );
1023 gtk_widget_show( vbox );
1024 gtk_table_attach( GTK_TABLE( table ), vbox, 0, 1, 0, 1,
1025 (GtkAttachOptions) ( GTK_EXPAND | GTK_FILL ),
1026 (GtkAttachOptions) ( GTK_FILL ), 0, 0 );
1028 // -------------------------- //
1030 hbox = gtk_hbox_new( FALSE, 5 );
1031 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
1032 gtk_widget_show( hbox );
1034 w = gtk_label_new( _( "File:" ) );
1035 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 );
1036 gtk_widget_show( w );
1038 g_pCamListCombo = gtk_combo_new();
1039 gtk_box_pack_start( GTK_BOX( hbox ), g_pCamListCombo, TRUE, TRUE, 0 );
1040 gtk_widget_show( g_pCamListCombo );
1042 // -------------------------- //
1044 hbox = gtk_hbox_new( FALSE, 5 );
1045 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
1046 gtk_widget_show( hbox );
1048 w = gtk_label_new( _( "Name:" ) );
1049 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 );
1050 gtk_widget_show( w );
1052 g_pCamName = gtk_entry_new();
1053 gtk_box_pack_start( GTK_BOX( hbox ), g_pCamName, FALSE, FALSE, 0 );
1054 gtk_widget_show( g_pCamName );
1056 w = gtk_label_new( _( "Type:" ) );
1057 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 );
1058 gtk_widget_show( w );
1060 w = gtk_label_new( "" );
1061 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 );
1062 gtk_widget_show( w );
1063 g_pCamType = GTK_LABEL( w );
1065 RefreshCamListCombo();
1067 gtk_entry_set_editable( GTK_ENTRY( GTK_COMBO( g_pCamListCombo )->entry ), FALSE );
1068 gtk_signal_connect( GTK_OBJECT( GTK_COMBO( g_pCamListCombo )->entry ), "changed", GTK_SIGNAL_FUNC( ci_camlist_changed ), NULL );
1070 // -------------------------- //
1072 frame = gtk_frame_new( _( "Path and Target editing" ) );
1073 gtk_widget_show( frame );
1074 gtk_table_attach( GTK_TABLE( table ), frame, 0, 1, 1, 2,
1075 (GtkAttachOptions) ( GTK_EXPAND | GTK_FILL ),
1076 (GtkAttachOptions) ( GTK_FILL ), 0, 0 );
1078 vbox = gtk_vbox_new( FALSE, 5 );
1079 gtk_container_add( GTK_CONTAINER( frame ), vbox );
1080 gtk_container_set_border_width( GTK_CONTAINER( vbox ), 5 );
1081 gtk_widget_show( vbox );
1083 // -------------------------- //
1085 hbox = gtk_hbox_new( FALSE, 5 );
1086 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
1087 gtk_widget_show( hbox );
1089 w = gtk_label_new( _( "Edit:" ) );
1090 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 );
1091 gtk_widget_show( w );
1093 g_pPathListCombo = gtk_combo_new();
1094 gtk_box_pack_start( GTK_BOX( hbox ), g_pPathListCombo, TRUE, TRUE, 0 );
1095 gtk_widget_show( g_pPathListCombo );
1097 RefreshPathListCombo();
1099 gtk_entry_set_editable( GTK_ENTRY( GTK_COMBO( g_pPathListCombo )->entry ), FALSE );
1100 gtk_signal_connect( GTK_OBJECT( GTK_COMBO( g_pPathListCombo )->entry ), "changed", GTK_SIGNAL_FUNC( ci_pathlist_changed ), NULL );
1102 // -------------------------- //
1104 hbox = gtk_hbox_new( FALSE, 5 );
1105 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
1106 gtk_widget_show( hbox );
1108 g_pEditModeEditRadioButton = gtk_radio_button_new_with_label( g_pEditTypeRadio, _( "Edit Points" ) );
1109 gtk_box_pack_start( GTK_BOX( hbox ), g_pEditModeEditRadioButton, FALSE, FALSE, 3 );
1110 gtk_widget_show( g_pEditModeEditRadioButton );
1111 g_pEditTypeRadio = gtk_radio_button_group( GTK_RADIO_BUTTON( g_pEditModeEditRadioButton ) );
1113 gtk_signal_connect( GTK_OBJECT( g_pEditModeEditRadioButton ), "clicked", GTK_SIGNAL_FUNC( ci_editmode_edit ), NULL );
1115 g_pEditModeAddRadioButton = gtk_radio_button_new_with_label( g_pEditTypeRadio, _( "Add Points" ) );
1116 gtk_box_pack_start( GTK_BOX( hbox ), g_pEditModeAddRadioButton, FALSE, FALSE, 3 );
1117 gtk_widget_show( g_pEditModeAddRadioButton );
1118 g_pEditTypeRadio = gtk_radio_button_group( GTK_RADIO_BUTTON( g_pEditModeAddRadioButton ) );
1120 gtk_signal_connect( GTK_OBJECT( g_pEditModeAddRadioButton ), "clicked", GTK_SIGNAL_FUNC( ci_editmode_add ), NULL );
1122 // see if we should use a different default
1123 if ( g_iEditMode == 1 ) {
1124 // Go to editmode Add
1125 gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( g_pEditModeAddRadioButton ), TRUE );
1128 w = gtk_label_new( _( "Type:" ) );
1129 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 );
1130 gtk_widget_show( w );
1132 w = gtk_label_new( "" );
1133 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 );
1134 gtk_widget_show( w );
1135 g_pPathType = GTK_LABEL( w );
1137 // -------------------------- //
1139 hbox = gtk_hbox_new( FALSE, 5 );
1140 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
1141 gtk_widget_show( hbox );
1143 w = gtk_button_new_with_label( _( "Rename..." ) );
1144 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, TRUE, 0 );
1145 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( ci_rename ), NULL );
1146 gtk_widget_show( w );
1148 w = gtk_button_new_with_label( _( "Add Target..." ) );
1149 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, TRUE, 0 );
1150 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( ci_add_target ), NULL );
1151 gtk_widget_show( w );
1153 // not available in splines library
1154 /*w = gtk_button_new_with_label( "Delete Selected" );
1155 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, TRUE, 0);
1156 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( ci_delete_selected ), NULL );
1157 gtk_widget_show( w );
1159 w = gtk_button_new_with_label( "Select All" );
1160 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, TRUE, 0);
1161 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( ci_select_all ), NULL );
1162 gtk_widget_show( w );*/
1164 // -------------------------- //
1166 frame = gtk_frame_new( _( "Time" ) );
1167 gtk_widget_show( frame );
1168 gtk_table_attach( GTK_TABLE( table ), frame, 0, 1, 2, 3,
1169 (GtkAttachOptions) ( GTK_EXPAND | GTK_FILL ),
1170 (GtkAttachOptions) ( GTK_FILL ), 0, 0 );
1172 vbox = gtk_vbox_new( FALSE, 5 );
1173 gtk_container_add( GTK_CONTAINER( frame ), vbox );
1174 gtk_container_set_border_width( GTK_CONTAINER( vbox ), 5 );
1175 gtk_widget_show( vbox );
1177 // -------------------------- //
1179 hbox = gtk_hbox_new( FALSE, 5 );
1180 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
1181 gtk_widget_show( hbox );
1183 w = gtk_label_new( _( "Length (seconds):" ) );
1184 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 );
1185 gtk_widget_show( w );
1187 g_pSecondsEntry = gtk_entry_new();
1188 gtk_box_pack_start( GTK_BOX( hbox ), g_pSecondsEntry, FALSE, FALSE, 0 );
1189 gtk_widget_show( g_pSecondsEntry );
1191 // -------------------------- //
1193 hbox = gtk_hbox_new( FALSE, 5 );
1194 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
1195 gtk_widget_show( hbox );
1197 w = gtk_label_new( _( "Current Time:" ) );
1198 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 );
1199 gtk_widget_show( w );
1201 w = gtk_label_new( _( "0.00" ) );
1202 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 );
1203 gtk_widget_show( w );
1204 g_pCurrentTime = GTK_LABEL( w );
1206 w = gtk_label_new( _( " of " ) );
1207 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 );
1208 gtk_widget_show( w );
1210 w = gtk_label_new( _( "0.00" ) );
1211 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 );
1212 gtk_widget_show( w );
1213 g_pTotalTime = GTK_LABEL( w );
1215 // -------------------------- //
1217 hbox = gtk_hbox_new( FALSE, 5 );
1218 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
1219 gtk_widget_show( hbox );
1221 g_pTimeLine = GTK_ADJUSTMENT( gtk_adjustment_new( 0, 0, 30000, 100, 250, 0 ) );
1222 gtk_signal_connect( GTK_OBJECT( g_pTimeLine ), "value_changed", GTK_SIGNAL_FUNC( ci_timeline_changed ), NULL );
1223 w = gtk_hscale_new( g_pTimeLine );
1224 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
1225 gtk_widget_show( w );
1226 gtk_scale_set_draw_value( GTK_SCALE( w ), FALSE );
1228 // -------------------------- //
1230 hbox = gtk_hbox_new( FALSE, 5 );
1231 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
1232 gtk_widget_show( hbox );
1234 g_pTrackCamera = gtk_check_button_new_with_label( _( "Track Camera" ) );
1235 gtk_box_pack_start( GTK_BOX( hbox ), g_pTrackCamera, FALSE, FALSE, 0 );
1236 gtk_widget_show( g_pTrackCamera );
1238 // -------------------------- //
1240 hbox = gtk_hbox_new( FALSE, 5 );
1241 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
1242 gtk_widget_show( hbox );
1244 w = gtk_label_new( _( "Events:" ) );
1245 gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 );
1246 gtk_widget_show( w );
1248 // -------------------------- //
1250 hbox = gtk_hbox_new( FALSE, 5 );
1251 gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
1252 gtk_widget_show( hbox );
1254 w = gtk_scrolled_window_new( NULL, NULL );
1255 gtk_widget_set_usize( w, 0, 150 );
1256 gtk_scrolled_window_set_policy( GTK_SCROLLED_WINDOW( w ), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC );
1257 gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
1258 gtk_widget_show( w );
1260 g_pEventsList = gtk_clist_new( 3 );
1261 gtk_container_add( GTK_CONTAINER( w ), g_pEventsList );
1262 //gtk_signal_connect( GTK_OBJECT(g_pEventsList), "select_row", GTK_SIGNAL_FUNC (proplist_select_row), NULL);
1263 gtk_clist_set_selection_mode( GTK_CLIST( g_pEventsList ), GTK_SELECTION_BROWSE );
1264 gtk_clist_column_titles_hide( GTK_CLIST( g_pEventsList ) );
1265 gtk_clist_set_column_auto_resize( GTK_CLIST( g_pEventsList ), 0, TRUE );
1266 gtk_clist_set_column_auto_resize( GTK_CLIST( g_pEventsList ), 1, TRUE );
1267 gtk_clist_set_column_auto_resize( GTK_CLIST( g_pEventsList ), 2, TRUE );
1268 gtk_widget_show( g_pEventsList );
1270 vbox = gtk_vbox_new( FALSE, 5 );
1271 gtk_box_pack_start( GTK_BOX( hbox ), vbox, FALSE, FALSE, 0 );
1272 gtk_widget_show( vbox );
1274 w = gtk_button_new_with_label( _( "Add..." ) );
1275 gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0 );
1276 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( ci_add ), NULL );
1277 gtk_widget_show( w );
1279 w = gtk_button_new_with_label( _( "Del" ) );
1280 gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0 );
1281 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( ci_del ), NULL );
1282 gtk_widget_show( w );
1284 // -------------------------- //
1285 // the buttons column
1286 // -------------------------- //
1288 vbox = gtk_vbox_new( FALSE, 5 );
1289 gtk_widget_show( vbox );
1290 gtk_table_attach( GTK_TABLE( table ), vbox, 1, 2, 0, 1,
1291 (GtkAttachOptions) ( GTK_FILL ),
1292 (GtkAttachOptions) ( GTK_FILL ), 0, 0 );
1294 w = gtk_button_new_with_label( _( "New..." ) );
1295 gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0 );
1296 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( ci_new ), NULL );
1297 gtk_widget_show( w );
1299 w = gtk_button_new_with_label( _( "Load..." ) );
1300 gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0 );
1301 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( ci_load ), NULL );
1302 gtk_widget_show( w );
1304 // -------------------------- //
1306 vbox = gtk_vbox_new( FALSE, 5 );
1307 gtk_widget_show( vbox );
1308 gtk_table_attach( GTK_TABLE( table ), vbox, 1, 2, 1, 2,
1309 (GtkAttachOptions) ( GTK_FILL ),
1310 (GtkAttachOptions) ( GTK_FILL ), 0, 0 );
1312 w = gtk_button_new_with_label( _( "Save..." ) );
1313 gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0 );
1314 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( ci_save ), NULL );
1315 gtk_widget_show( w );
1317 w = gtk_button_new_with_label( _( "Unload" ) );
1318 gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0 );
1319 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( ci_unload ), NULL );
1320 gtk_widget_show( w );
1322 hbox = gtk_hbox_new( FALSE, 5 );
1323 gtk_box_pack_start( GTK_BOX( vbox ), hbox, TRUE, TRUE, 0 );
1324 gtk_widget_show( hbox );
1326 w = gtk_button_new_with_label( _( "Apply" ) );
1327 gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0 );
1328 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( ci_apply ), NULL );
1329 gtk_widget_show( w );
1331 w = gtk_button_new_with_label( _( "Preview" ) );
1332 gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0 );
1333 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( ci_preview ), NULL );
1334 gtk_widget_show( w );
1336 // -------------------------- //
1338 vbox = gtk_vbox_new( FALSE, 5 );
1339 gtk_widget_show( vbox );
1340 gtk_table_attach( GTK_TABLE( table ), vbox, 1, 2, 2, 3,
1341 (GtkAttachOptions) ( GTK_FILL ),
1342 (GtkAttachOptions) ( GTK_FILL ), 0, 0 );
1344 hbox = gtk_hbox_new( FALSE, 5 );
1345 gtk_box_pack_start( GTK_BOX( vbox ), hbox, TRUE, TRUE, 0 );
1346 gtk_widget_show( hbox );
1348 w = gtk_button_new_with_label( _( "Close" ) );
1349 gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0 );
1350 gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( ci_close ), NULL );
1351 GTK_WIDGET_SET_FLAGS( w, GTK_CAN_DEFAULT );
1352 gtk_widget_grab_default( w );
1353 gtk_widget_show( w );
1355 // -------------------------- //