static gint ci_del( GtkWidget *widget, gpointer data ) { // TODO: add support to splines lib if( GetCurrentCam() && GTK_CLIST(g_pEventsList)->focus_row >= 0 ) { GetCurrentCam()->GetCam()->removeEvent( GTK_CLIST(g_pEventsList)->focus_row ); // Refresh event list RefreshEventList(); } return TRUE; }
static gint ci_pathlist_changed( GtkWidget *widget, gpointer data ) { const char *str = gtk_entry_get_text( GTK_ENTRY(widget) ); if( !str || !GetCurrentCam() ) return TRUE; int i; for( i = 0; i < GetCurrentCam()->GetCam()->numTargets(); i++ ) { if( !strcmp( str, GetCurrentCam()->GetCam()->getActiveTarget( i )->getName() ) ) break; } if( i >= 0 && i < GetCurrentCam()->GetCam()->numTargets() ) { GetCurrentCam()->GetCam()->setActiveTarget( i ); g_iActiveTarget = i; if( g_pPathType ) gtk_label_set_text( g_pPathType, GetCurrentCam()->GetCam()->getActiveTarget(g_iActiveTarget)->typeStr() ); } else { g_iActiveTarget = -1; if( g_pPathType ) gtk_label_set_text( g_pPathType, GetCurrentCam()->GetCam()->getPositionObj()->typeStr() ); } // start edit mode if( g_pCameraInspectorWnd && GTK_WIDGET_VISIBLE( g_pCameraInspectorWnd ) ) DoStartEdit( GetCurrentCam() ); return TRUE; }
void DoPreviewCamera() { if( GetCurrentCam() ) { g_iPreviewRunning = 1; g_FuncTable.m_pfnSysUpdateWindows( W_XY_OVERLAY | W_CAMERA ); } }
static gint ci_expose( GtkWidget *widget, gpointer data ) { // start edit mode DoStartEdit( GetCurrentCam() ); return FALSE; }
static void DoNewCamera( idCameraPosition::positionType type ){ CCamera *cam = AllocCam(); if ( cam ) { char buf[128]; sprintf( buf, "camera%i", cam->GetCamNum() ); cam->GetCam()->startNewCamera( type ); cam->GetCam()->setName( buf ); cam->GetCam()->buildCamera(); sprintf( buf, "Unsaved Camera %i", cam->GetCamNum() ); cam->SetFileName( buf, false ); SetCurrentCam( cam ); RefreshCamListCombo(); // Go to editmode Add gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( g_pEditModeAddRadioButton ), TRUE ); // Show the camera inspector DoCameraInspector(); // Start edit mode (if not initiated by DoCameraInspector) if ( !g_bEditOn ) { DoStartEdit( GetCurrentCam() ); } } else { g_FuncTable.m_pfnMessageBox( (GtkWidget *)g_pRadiantWnd, "No free cameras available.", "Create Camera Error", MB_OK, NULL ); } }
void RefreshCamListCombo( void ) { if( !g_pCamListCombo ) return; GList *combo_list = (GList*)NULL; CCamera *combo_cam = firstCam; if( combo_cam ) { while( combo_cam ) { //combo_list = g_list_append( combo_list, (void *)combo_cam->GetCam()->getName() ); //if( combo_cam->HasBeenSaved() ) { combo_list = g_list_append( combo_list, (void *)combo_cam->GetFileName() ); /*} else { char buf[128]; sprintf( buf, "Unsaved Camera %i", combo_cam->GetCamNum() ); combo_list = g_list_append( combo_list, (void *)buf ); //combo_list = g_list_append( combo_list, (void *)combo_cam->GetCam()->getName() ); // FIXME: this requires camera.dll to create unique names for new cams }*/ combo_cam = combo_cam->GetNext(); } }else { // add one empty string make gtk be quiet combo_list = g_list_append( combo_list, (gpointer)g_cNull ); } gtk_combo_set_popdown_strings( GTK_COMBO( g_pCamListCombo ), combo_list ); g_list_free( combo_list ); // select our current entry in the list if( GetCurrentCam() ) { // stop editing on the current cam //GetCurrentCam()->GetCam()->stopEdit(); // FIXME: this crashed on creating new cameras, why is it here? GList *li = GTK_LIST( GTK_COMBO(g_pCamListCombo)->list)->children; combo_cam = firstCam; while( li && combo_cam ) { if( combo_cam == GetCurrentCam() ) { gtk_list_select_child( GTK_LIST( GTK_COMBO(g_pCamListCombo)->list ), GTK_WIDGET( li->data ) ); break; } li = li->next; combo_cam = combo_cam->GetNext(); } } RefreshPathListCombo(); }
static void RefreshEventList( void ) { int i; char buf[128]; // Clear events list gtk_clist_freeze( GTK_CLIST(g_pEventsList) ); gtk_clist_clear( GTK_CLIST(g_pEventsList) ); if( GetCurrentCam() ) { // Fill events list for( i = 0; i < GetCurrentCam()->GetCam()->numEvents(); i++ ) { char rowbuf[3][128], *row[3]; // FIXME: sort by time? sprintf( rowbuf[0], "%li", GetCurrentCam()->GetCam()->getEvent(i)->getTime() ); row[0] = rowbuf[0]; strncpy( rowbuf[1], GetCurrentCam()->GetCam()->getEvent(i)->typeStr(), sizeof(rowbuf[0]) ); row[1] = rowbuf[1]; strncpy( rowbuf[2], GetCurrentCam()->GetCam()->getEvent(i)->getParam(), sizeof(rowbuf[1]) ); row[2] = rowbuf[2]; gtk_clist_append( GTK_CLIST(g_pEventsList), row ); } // Total duration might have changed sprintf( buf, "%.2f", GetCurrentCam()->GetCam()->getTotalTime() ); gtk_label_set_text( g_pCurrentTime, "0.00" ); gtk_label_set_text( g_pTotalTime, buf ); gtk_adjustment_set_value( g_pTimeLine, 0.f ); g_pTimeLine->upper = ( GetCurrentCam()->GetCam()->getTotalTime() * 1000 ); } gtk_clist_thaw( GTK_CLIST(g_pEventsList) ); }
static gint ci_preview( GtkWidget *widget, gpointer data ) { if( GetCurrentCam() ) { g_iPreviewRunning = 1; g_FuncTable.m_pfnSysUpdateWindows( W_XY_OVERLAY | W_CAMERA ); } return TRUE; }
bool CListener::OnLButtonUp( unsigned int nFlags, double x, double y ) { SetViewType( g_pXYWndWrapper->GetViewType() ); m_bLeftMBPressed = false; oldValid = false; if( g_iEditMode == 0 ) { if( g_iActiveTarget < 0 ) GetCurrentCam()->GetCam()->getPositionObj()->deselectAll(); else GetCurrentCam()->GetCam()->getActiveTarget(g_iActiveTarget)->deselectAll(); g_FuncTable.m_pfnSysUpdateWindows( W_XY_OVERLAY | W_CAMERA ); } return false; }
static void RefreshPathListCombo( void ) { if( !g_pPathListCombo ) return; GList *combo_list = (GList*)NULL; if( GetCurrentCam() ) { combo_list = g_list_append( combo_list, (void *)GetCurrentCam()->GetCam()->getPositionObj()->getName() ); for( int i = 0; i < GetCurrentCam()->GetCam()->numTargets(); i++ ) { combo_list = g_list_append( combo_list, (void *)GetCurrentCam()->GetCam()->getActiveTarget( i )->getName() ); } } else { // add one empty string make gtk be quiet combo_list = g_list_append( combo_list, (gpointer)g_cNull ); } gtk_combo_set_popdown_strings( GTK_COMBO( g_pPathListCombo ), combo_list ); g_list_free( combo_list ); }
void DoUnloadCamera() { if ( !GetCurrentCam() ) { return; } if ( !GetCurrentCam()->HasBeenSaved() ) { char buf[PATH_MAX + 64]; sprintf( buf, "Do you want to save the changes for camera '%s'?", GetCurrentCam()->GetCam()->getName() ); if ( g_FuncTable.m_pfnMessageBox( (GtkWidget *)g_pRadiantWnd, buf, "Warning", MB_YESNO, NULL ) == IDYES ) { DoSaveCamera(); } } else if ( GetCurrentCam()->HasBeenSaved() == 2 ) { char buf[PATH_MAX + 64]; sprintf( buf, "Do you want to save the changes made to camera file '%s'?", GetCurrentCam()->GetFileName() ); if ( g_FuncTable.m_pfnMessageBox( (GtkWidget *)g_pRadiantWnd, buf, "Warning", MB_YESNO, NULL ) == IDYES ) { DoSaveCamera(); } } if ( g_pCurrentEditCam ) { DoStopEdit(); g_pCurrentEditCam = NULL; } FreeCam( GetCurrentCam() ); SetCurrentCam( NULL ); RefreshCamListCombo(); }
bool CListener::OnMouseMove( unsigned int nFlags, double x, double y ) { SetViewType( g_pXYWndWrapper->GetViewType() ); if( m_bLeftMBPressed && oldValid && g_iEditMode == 0 ) { vec3_t click, delta; g_pXYWndWrapper->SnapToGrid( (int)x, (int)y, click ); switch( m_vt ) { case XY: VectorSet( delta, click[0] - old_x, click[1] - old_y, 0 ); old_x = click[0]; old_y = click[1]; break; case XZ: VectorSet( delta, click[0] - old_x, 0, click[2] - old_y ); old_x = click[0]; old_y = click[2]; break; case YZ: VectorSet( delta, 0, click[1] - old_x, click[2] - old_y ); old_x = click[1]; old_y = click[2]; break; } if( g_iActiveTarget < 0 ) GetCurrentCam()->GetCam()->getPositionObj()->updateSelection( delta[0], delta[1], delta[2] ); else GetCurrentCam()->GetCam()->getActiveTarget(g_iActiveTarget)->updateSelection( delta[0], delta[1], delta[2] ); GetCurrentCam()->HasBeenModified(); g_FuncTable.m_pfnSysUpdateWindows( W_XY_OVERLAY | W_CAMERA ); return true; } return false; }
void DoSaveCamera() { char basepath[PATH_MAX]; if ( !GetCurrentCam() ) { return; } if ( GetCurrentCam()->GetFileName()[0] ) { CAMERA_ExtractFilePath( GetCurrentCam()->GetFileName(), basepath ); } else{ strcpy( basepath, g_FuncTable.m_pfnGetGamePath() ); } const gchar *filename = g_FuncTable.m_pfnFileDialog( (void *)g_pRadiantWnd, FALSE, "Save Camera File", basepath, "camera", NULL ); if ( filename ) { char fullpathtofile[PATH_MAX + 8]; Q_realpath( filename, fullpathtofile, PATH_MAX ); // File dialog from windows (and maybe the gtk one from radiant) doesn't handle default extensions properly. // Add extension and check again if file exists if ( strcmp( fullpathtofile + ( strlen( fullpathtofile ) - 7 ), ".camera" ) ) { strcat( fullpathtofile, ".camera" ); if ( FileExists( fullpathtofile ) ) { if ( g_FuncTable.m_pfnMessageBox( (GtkWidget *)g_pRadiantWnd, "File already exists.\nOverwrite?", "Save Camera File", MB_YESNO, NULL ) == IDNO ) { return; } } } // see if this camera file was already loaded CCamera *checkCam = firstCam; while ( checkCam ) { if ( checkCam == GetCurrentCam() ) { checkCam = checkCam->GetNext(); if ( !checkCam ) { // we only have one camera file opened so no need to check further break; } } else if ( !strcmp( fullpathtofile, checkCam->GetFileName() ) ) { char error[PATH_MAX + 64]; sprintf( error, "Camera file \'%s\' is currently loaded by GtkRadiant.\nPlease select a different filename.", fullpathtofile ); g_FuncTable.m_pfnMessageBox( (GtkWidget *)g_pRadiantWnd, error, "Save error", MB_OK, NULL ); return; } checkCam = checkCam->GetNext(); } // FIXME: check for existing directory GetCurrentCam()->GetCam()->save( fullpathtofile ); GetCurrentCam()->SetFileName( fullpathtofile, true ); RefreshCamListCombo(); } }
static gint ci_timeline_changed( GtkAdjustment *adjustment ) { char buf[128]; sprintf( buf, "%.2f", adjustment->value / 1000.f ); gtk_label_set_text( g_pCurrentTime, buf ); // FIXME: this will never work completely perfect. Startcamera calls buildcamera, which sets all events to 'nottriggered'. // 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 // will have no idea where on the track it should be. if( GetCurrentCam() && gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON(g_pTrackCamera) ) ) { float fov; vec3_t origin = { 0.0f, 0.0f, 0.0f }, dir = { 0.0f, 0.0f, 0.0f}, angles; GetCurrentCam()->GetCam()->startCamera( 0 ); GetCurrentCam()->GetCam()->getCameraInfo( (long)(adjustment->value), &origin[0], &dir[0], &fov ); VectorSet( angles, asin (dir[2])*180/3.14159, atan2 (dir[1], dir[0])*180/3.14159, 0 ); g_CameraTable.m_pfnSetCamera( origin, angles ); } return TRUE; }
static gint ci_apply( GtkWidget *widget, gpointer data ) { if( GetCurrentCam() ) { const char *str; char buf[128]; bool build = false; str = gtk_entry_get_text( GTK_ENTRY(g_pCamName) ); if( str ) { GetCurrentCam()->GetCam()->setName( str ); build = true; } str = gtk_entry_get_text( GTK_ENTRY(g_pSecondsEntry) ); if( str ) { GetCurrentCam()->GetCam()->setBaseTime( atof( str ) ); build = true; } if( build ) { GetCurrentCam()->GetCam()->buildCamera(); } sprintf( buf, "%.2f", GetCurrentCam()->GetCam()->getBaseTime() ); gtk_entry_set_text( GTK_ENTRY(g_pSecondsEntry), buf ); sprintf( buf, "%.2f", GetCurrentCam()->GetCam()->getTotalTime() ); gtk_label_set_text( g_pCurrentTime, "0.00" ); gtk_label_set_text( g_pTotalTime, buf ); gtk_adjustment_set_value( g_pTimeLine, 0.f ); g_pTimeLine->upper = GetCurrentCam()->GetCam()->getTotalTime() * 1000; GetCurrentCam()->HasBeenModified(); } return TRUE; }
static gint ci_add( GtkWidget *widget, gpointer data ) { GtkWidget *window, *w, *vbox, *vbox2, *hbox, *frame, *parameters; GtkWidget *eventWidget[EVENT_COUNT]; EMessageBoxReturn ret; int i, loop = 1; GSList *eventTypeRadio = NULL; // char buf[128]; if( !GetCurrentCam() ) return TRUE; // create the window window = gtk_window_new( GTK_WINDOW_TOPLEVEL ); gtk_window_set_title( GTK_WINDOW (window), "Add Event" ); gtk_signal_connect( GTK_OBJECT (window), "delete_event", GTK_SIGNAL_FUNC( dialog_delete_callback ), NULL ); gtk_signal_connect( GTK_OBJECT (window), "destroy", GTK_SIGNAL_FUNC( gtk_widget_destroy ), NULL ); gtk_window_set_transient_for( GTK_WINDOW( window ), GTK_WINDOW( g_pCameraInspectorWnd ) ); g_object_set_data (G_OBJECT (window), "loop", &loop); g_object_set_data (G_OBJECT (window), "ret", &ret); gtk_widget_realize (window); // fill the window vbox = gtk_vbox_new( FALSE, 5 ); gtk_container_add (GTK_CONTAINER (window), vbox); gtk_widget_show( vbox ); // -------------------------- // hbox = gtk_hbox_new( FALSE, 5 ); gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 ); gtk_widget_show( hbox ); frame = gtk_frame_new( "Type" ); gtk_box_pack_start( GTK_BOX( hbox ), frame, TRUE, TRUE, 0 ); gtk_widget_show( frame ); vbox2 = gtk_vbox_new( FALSE, 5 ); gtk_container_add( GTK_CONTAINER( frame ), vbox2 ); gtk_container_set_border_width( GTK_CONTAINER (vbox2), 5 ); gtk_widget_show( vbox2 ); // -------------------------- // for( i = 1; i < EVENT_COUNT; i++ ) { eventWidget[i] = gtk_radio_button_new_with_label( eventTypeRadio, camEventStr[i] ); gtk_box_pack_start( GTK_BOX( vbox2 ), eventWidget[i], FALSE, FALSE, 3 ); gtk_widget_show( eventWidget[i] ); eventTypeRadio = gtk_radio_button_group( GTK_RADIO_BUTTON( eventWidget[i] ) ); if( camEventFlags[i][1] == false ) gtk_widget_set_sensitive (eventWidget[i], FALSE); } // -------------------------- // hbox = gtk_hbox_new( FALSE, 5 ); gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 ); gtk_widget_show( hbox ); w = gtk_label_new( "Parameters:" ); gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 ); gtk_widget_show( w ); parameters = gtk_entry_new(); gtk_box_pack_start( GTK_BOX( hbox ), parameters, TRUE, TRUE, 0 ); gtk_widget_show( parameters ); // -------------------------- // w = gtk_hseparator_new (); gtk_box_pack_start (GTK_BOX (vbox), w, FALSE, FALSE, 2); gtk_widget_show (w); // -------------------------- // hbox = gtk_hbox_new( FALSE, 5 ); gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 ); gtk_widget_show( hbox ); w = gtk_button_new_with_label ("Ok"); gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0); gtk_signal_connect (GTK_OBJECT (w), "clicked", GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (eIDOK)); gtk_widget_show (w); GTK_WIDGET_SET_FLAGS( w, GTK_CAN_DEFAULT ); gtk_widget_grab_default( w ); w = gtk_button_new_with_label ("Cancel"); gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0); gtk_signal_connect (GTK_OBJECT (w), "clicked", GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (eIDCANCEL)); gtk_widget_show (w); ret = eIDCANCEL; // -------------------------- // gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER); gtk_widget_show (window); gtk_grab_add (window); bool dialogError = TRUE; while (dialogError) { loop = 1; while (loop) gtk_main_iteration (); dialogError = FALSE; if( ret == eIDOK ) { const char *str = gtk_entry_get_text( GTK_ENTRY(parameters) ); if( !camEventFlags[i][0] || ( str && str[0] ) ) { int type = 0; // GList *li; for( type = 1; type < EVENT_COUNT; type++ ) { if( gtk_toggle_button_get_active( (GtkToggleButton*)eventWidget[type] ) ) break; } // Add the event GetCurrentCam()->GetCam()->addEvent( static_cast<idCameraEvent::eventType>(type), str, (long)(g_pTimeLine->value) ); // Refresh event list RefreshEventList(); } else { dialogError = TRUE; } } } gtk_grab_remove (window); gtk_widget_destroy (window); return TRUE; }
static gint ci_rename( GtkWidget *widget, gpointer data ) { GtkWidget *window, *w, *vbox, *hbox, *name; EMessageBoxReturn ret; int loop = 1; if( !GetCurrentCam() ) return TRUE; // create the window window = gtk_window_new( GTK_WINDOW_TOPLEVEL ); gtk_window_set_title( GTK_WINDOW (window), "Rename Path" ); gtk_signal_connect( GTK_OBJECT (window), "delete_event", GTK_SIGNAL_FUNC( dialog_delete_callback ), NULL ); gtk_signal_connect( GTK_OBJECT (window), "destroy", GTK_SIGNAL_FUNC( gtk_widget_destroy ), NULL ); gtk_window_set_transient_for( GTK_WINDOW( window ), GTK_WINDOW( g_pCameraInspectorWnd ) ); g_object_set_data (G_OBJECT (window), "loop", &loop); g_object_set_data (G_OBJECT (window), "ret", &ret); gtk_widget_realize ( window ); // fill the window vbox = gtk_vbox_new( FALSE, 5 ); gtk_container_add (GTK_CONTAINER (window), vbox); gtk_widget_show( vbox ); // -------------------------- // hbox = gtk_hbox_new( FALSE, 5 ); gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 ); gtk_widget_show( hbox ); w = gtk_label_new( "Name:" ); gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 ); gtk_widget_show( w ); name = gtk_entry_new(); gtk_box_pack_start( GTK_BOX( hbox ), name, FALSE, FALSE, 0 ); gtk_widget_show( name ); if( g_iActiveTarget < 0 ) gtk_entry_set_text( GTK_ENTRY(name), GetCurrentCam()->GetCam()->getPositionObj()->getName() ); else gtk_entry_set_text( GTK_ENTRY(name), GetCurrentCam()->GetCam()->getActiveTarget(g_iActiveTarget)->getName() ); // -------------------------- // w = gtk_hseparator_new (); gtk_box_pack_start (GTK_BOX (vbox), w, FALSE, FALSE, 2); gtk_widget_show (w); // -------------------------- // hbox = gtk_hbox_new( FALSE, 5 ); gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 ); gtk_widget_show( hbox ); w = gtk_button_new_with_label ("Ok"); gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0); gtk_signal_connect (GTK_OBJECT (w), "clicked", GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (eIDOK)); gtk_widget_show (w); GTK_WIDGET_SET_FLAGS( w, GTK_CAN_DEFAULT ); gtk_widget_grab_default( w ); w = gtk_button_new_with_label ("Cancel"); gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0); gtk_signal_connect (GTK_OBJECT (w), "clicked", GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (eIDCANCEL)); gtk_widget_show (w); ret = eIDCANCEL; // -------------------------- // gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER); gtk_widget_show (window); gtk_grab_add (window); bool dialogError = TRUE; while (dialogError) { loop = 1; while (loop) gtk_main_iteration (); dialogError = FALSE; if( ret == eIDOK ) { const char *str = gtk_entry_get_text( GTK_ENTRY(name) ); if( str && str[0] ) { // Update the path if( g_iActiveTarget < 0 ) GetCurrentCam()->GetCam()->getPositionObj()->setName( str ); else GetCurrentCam()->GetCam()->getActiveTarget(g_iActiveTarget)->setName( str ); GetCurrentCam()->GetCam()->buildCamera(); // Rebuild the listbox RefreshPathListCombo(); } else { dialogError = TRUE; } } } gtk_grab_remove (window); gtk_widget_destroy (window); return TRUE; }
static gint ci_camlist_changed( GtkWidget *widget, gpointer data ) { const char *str = gtk_entry_get_text( GTK_ENTRY(widget) ); CCamera *combo_cam = firstCam; while( str && combo_cam ) { //if( !strcmp( str, combo_cam->GetCam()->getName() ) ) //if( combo_cam->HasBeenSaved() ) { if( !strcmp( str, combo_cam->GetFileName() ) ) break; /*} else { char buf[128]; sprintf( buf, "Unsaved Camera %i", combo_cam->GetCamNum() ); if( !strcmp( str, buf ) ) //if( !strcmp( str, combo_cam->GetCam()->getName() ) ) break; }*/ combo_cam = combo_cam->GetNext(); } SetCurrentCam( combo_cam ); if( g_pCamType ) { if( GetCurrentCam() ) { // Fill in our widgets fields for this camera char buf[128]; // Set Name gtk_entry_set_text( GTK_ENTRY(g_pCamName), GetCurrentCam()->GetCam()->getName() ); // Set type gtk_label_set_text( g_pCamType, GetCurrentCam()->GetCam()->getPositionObj()->typeStr() ); // Set duration sprintf( buf, "%.2f", GetCurrentCam()->GetCam()->getBaseTime() ); gtk_entry_set_text( GTK_ENTRY(g_pSecondsEntry), buf ); sprintf( buf, "%.2f", GetCurrentCam()->GetCam()->getTotalTime() ); gtk_label_set_text( g_pCurrentTime, "0.00" ); gtk_label_set_text( g_pTotalTime, buf ); gtk_adjustment_set_value( g_pTimeLine, 0.f ); g_pTimeLine->upper = GetCurrentCam()->GetCam()->getTotalTime() * 1000; } else { // Set Name gtk_entry_set_text( GTK_ENTRY(g_pCamName), "" ); // Set type gtk_label_set_text( g_pCamType, "" ); // Set duration gtk_entry_set_text( GTK_ENTRY(g_pSecondsEntry), "30.00" ); gtk_label_set_text( g_pCurrentTime, "0.00" ); gtk_label_set_text( g_pTotalTime, "30.00" ); gtk_adjustment_set_value( g_pTimeLine, 0.f ); g_pTimeLine->upper = 30000; } // Refresh event list RefreshEventList(); } RefreshPathListCombo(); // start edit mode g_iActiveTarget = -1; if( g_pCameraInspectorWnd && GTK_WIDGET_VISIBLE( g_pCameraInspectorWnd ) ) DoStartEdit( GetCurrentCam() ); return TRUE; }
static gint ci_add_target( GtkWidget *widget, gpointer data ) { GtkWidget *window, *w, *vbox, *vbox2, *hbox, *frame, *name; GtkWidget *fixed, *interpolated, *spline; EMessageBoxReturn ret; int loop = 1; GSList *targetTypeRadio = NULL; char buf[128]; if( !GetCurrentCam() ) return TRUE; // create the window window = gtk_window_new( GTK_WINDOW_TOPLEVEL ); gtk_window_set_title( GTK_WINDOW (window), "Add Target" ); gtk_signal_connect( GTK_OBJECT (window), "delete_event", GTK_SIGNAL_FUNC( dialog_delete_callback ), NULL ); gtk_signal_connect( GTK_OBJECT (window), "destroy", GTK_SIGNAL_FUNC( gtk_widget_destroy ), NULL ); gtk_window_set_transient_for( GTK_WINDOW( window ), GTK_WINDOW( g_pCameraInspectorWnd ) ); g_object_set_data (G_OBJECT (window), "loop", &loop); g_object_set_data (G_OBJECT (window), "ret", &ret); gtk_widget_realize (window); // fill the window vbox = gtk_vbox_new( FALSE, 5 ); gtk_container_add (GTK_CONTAINER (window), vbox); gtk_widget_show( vbox ); // -------------------------- // hbox = gtk_hbox_new( FALSE, 5 ); gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 ); gtk_widget_show( hbox ); w = gtk_label_new( "Name:" ); gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 ); gtk_widget_show( w ); name = gtk_entry_new(); gtk_box_pack_start( GTK_BOX( hbox ), name, TRUE, TRUE, 0 ); gtk_widget_show( name ); sprintf( buf, "target%i", GetCurrentCam()->GetCam()->numTargets() + 1 ); gtk_entry_set_text( GTK_ENTRY(name), buf ); // -------------------------- // hbox = gtk_hbox_new( FALSE, 5 ); gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 ); gtk_widget_show( hbox ); frame = gtk_frame_new( "Type" ); gtk_box_pack_start( GTK_BOX( hbox ), frame, TRUE, TRUE, 0 ); gtk_widget_show( frame ); vbox2 = gtk_vbox_new( FALSE, 5 ); gtk_container_add( GTK_CONTAINER( frame ), vbox2 ); gtk_container_set_border_width( GTK_CONTAINER (vbox2), 5 ); gtk_widget_show( vbox2 ); // -------------------------- // fixed = gtk_radio_button_new_with_label( targetTypeRadio, "Fixed" ); gtk_box_pack_start( GTK_BOX( vbox2 ), fixed, FALSE, FALSE, 3 ); gtk_widget_show( fixed ); targetTypeRadio = gtk_radio_button_group( GTK_RADIO_BUTTON( fixed ) ); interpolated = gtk_radio_button_new_with_label( targetTypeRadio, "Interpolated" ); gtk_box_pack_start( GTK_BOX( vbox2 ), interpolated, FALSE, FALSE, 3 ); gtk_widget_show( interpolated ); targetTypeRadio = gtk_radio_button_group( GTK_RADIO_BUTTON( interpolated ) ); spline = gtk_radio_button_new_with_label( targetTypeRadio, "Spline" ); gtk_box_pack_start( GTK_BOX( vbox2 ), spline, FALSE, FALSE, 3 ); gtk_widget_show( spline ); targetTypeRadio = gtk_radio_button_group( GTK_RADIO_BUTTON( spline ) ); // -------------------------- // w = gtk_hseparator_new (); gtk_box_pack_start (GTK_BOX (vbox), w, FALSE, FALSE, 2); gtk_widget_show (w); // -------------------------- // hbox = gtk_hbox_new( FALSE, 5 ); gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 ); gtk_widget_show( hbox ); w = gtk_button_new_with_label ("Ok"); gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0); gtk_signal_connect (GTK_OBJECT (w), "clicked", GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (eIDOK)); gtk_widget_show (w); GTK_WIDGET_SET_FLAGS( w, GTK_CAN_DEFAULT ); gtk_widget_grab_default( w ); w = gtk_button_new_with_label ("Cancel"); gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0); gtk_signal_connect (GTK_OBJECT (w), "clicked", GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (eIDCANCEL)); gtk_widget_show (w); ret = eIDCANCEL; // -------------------------- // gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER); gtk_widget_show (window); gtk_grab_add (window); bool dialogError = TRUE; while (dialogError) { loop = 1; while (loop) gtk_main_iteration (); dialogError = FALSE; if( ret == eIDOK ) { const char *str = gtk_entry_get_text( GTK_ENTRY(name) ); if( str && str[0] ) { int type; GList *li; if( gtk_toggle_button_get_active( (GtkToggleButton*)fixed ) ) type = 0; else if( gtk_toggle_button_get_active( (GtkToggleButton*)interpolated ) ) type = 1; else if( gtk_toggle_button_get_active( (GtkToggleButton*)spline ) ) type = 2; // Add the target GetCurrentCam()->GetCam()->addTarget( str, static_cast<idCameraPosition::positionType>(type) ); // Rebuild the listbox RefreshPathListCombo(); // Select the last item in the listbox li = g_list_last( GTK_LIST(GTK_COMBO(g_pPathListCombo)->list)->children ); gtk_list_select_child( GTK_LIST(GTK_COMBO(g_pPathListCombo)->list), GTK_WIDGET (li->data) ); // If this was the first one, refresh the event list if( GetCurrentCam()->GetCam()->numTargets() == 1 ) { RefreshEventList(); } // Go to editmode Add gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(g_pEditModeAddRadioButton), TRUE ); } else { dialogError = TRUE; } } } gtk_grab_remove (window); gtk_widget_destroy (window); return TRUE; }
bool CListener::OnLButtonDown( unsigned int nFlags, double x, double y ) { SetViewType( g_pXYWndWrapper->GetViewType() ); m_bLeftMBPressed = true; oldValid = true; vec3_t org, delta; g_pXYWndWrapper->SnapToGrid( (int)x, (int)y, org ); switch( m_vt ) { case XY: old_x = org[0]; old_y = org[1]; org[2] = 64*1024; VectorSet( delta, 0, 0, -1 ); break; case XZ: old_x = org[0]; old_y = org[2]; org[1] = 64*1024; VectorSet( delta, 0, -1, 0 ); break; case YZ: old_x = org[1]; old_y = org[2]; org[0] = 64*1024; VectorSet( delta, -1, 0, 0 ); break; } if( g_iEditMode == 0 ) { if( g_iActiveTarget < 0 ) GetCurrentCam()->GetCam()->getPositionObj()->selectPointByRay( org[0], org[1], org[2], delta[0], delta[1], delta[2], true ); else GetCurrentCam()->GetCam()->getActiveTarget(g_iActiveTarget)->selectPointByRay( org[0], org[1], org[2], delta[0], delta[1], delta[2], true ); } else if( g_iEditMode == 1 ) { idVec3 *lastcoord; idCameraPosition *camera; if( g_iActiveTarget < 0 ) { camera = GetCurrentCam()->GetCam()->getPositionObj(); } else { camera = GetCurrentCam()->GetCam()->getActiveTarget(g_iActiveTarget); } if( camera->numPoints() ) { lastcoord = camera->getPoint( camera->numPoints() -1 ); switch( m_vt ) { case XY: camera->addPoint( org[0], org[1], lastcoord->z ); break; case XZ: camera->addPoint( org[0], lastcoord->y, org[2] ); break; case YZ: camera->addPoint( lastcoord->x, org[1], org[2] ); break; } } else { switch( m_vt ) { case XY: camera->addPoint( org[0], org[1], 0 ); break; case XZ: camera->addPoint( org[0], 0, org[2] ); break; case YZ: camera->addPoint( 0, org[1], org[2] ); break; } } GetCurrentCam()->HasBeenModified(); } g_FuncTable.m_pfnSysUpdateWindows( W_XY_OVERLAY | W_CAMERA ); return true; //return false; }