コード例 #1
0
ファイル: dialogs.cpp プロジェクト: ChunHungLiu/GtkRadiant
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;
}
コード例 #2
0
ファイル: dialogs.cpp プロジェクト: ChunHungLiu/GtkRadiant
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;
}
コード例 #3
0
void DoPreviewCamera()
{
	if( GetCurrentCam() ) {
		g_iPreviewRunning = 1;
		g_FuncTable.m_pfnSysUpdateWindows( W_XY_OVERLAY | W_CAMERA );
	}
}
コード例 #4
0
ファイル: dialogs.cpp プロジェクト: ChunHungLiu/GtkRadiant
static gint ci_expose( GtkWidget *widget, gpointer data )
{
  // start edit mode
  DoStartEdit( GetCurrentCam() );

  return FALSE;
}
コード例 #5
0
ファイル: funchandlers.cpp プロジェクト: TTimo/GtkRadiant
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 );
	}
}
コード例 #6
0
ファイル: dialogs.cpp プロジェクト: ChunHungLiu/GtkRadiant
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();
}
コード例 #7
0
ファイル: dialogs.cpp プロジェクト: ChunHungLiu/GtkRadiant
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) );
}
コード例 #8
0
ファイル: dialogs.cpp プロジェクト: ChunHungLiu/GtkRadiant
static gint ci_preview( GtkWidget *widget, gpointer data )
{
	if( GetCurrentCam() ) {
		g_iPreviewRunning = 1;
		g_FuncTable.m_pfnSysUpdateWindows( W_XY_OVERLAY | W_CAMERA );
	}

  return TRUE;
}
コード例 #9
0
ファイル: listener.cpp プロジェクト: ChunHungLiu/GtkRadiant
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;
}
コード例 #10
0
ファイル: dialogs.cpp プロジェクト: ChunHungLiu/GtkRadiant
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 );
}
コード例 #11
0
ファイル: funchandlers.cpp プロジェクト: TTimo/GtkRadiant
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();
}
コード例 #12
0
ファイル: listener.cpp プロジェクト: ChunHungLiu/GtkRadiant
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;
}
コード例 #13
0
ファイル: funchandlers.cpp プロジェクト: TTimo/GtkRadiant
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();
	}
}
コード例 #14
0
ファイル: dialogs.cpp プロジェクト: ChunHungLiu/GtkRadiant
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;
}
コード例 #15
0
ファイル: dialogs.cpp プロジェクト: ChunHungLiu/GtkRadiant
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;
}
コード例 #16
0
ファイル: dialogs.cpp プロジェクト: ChunHungLiu/GtkRadiant
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;
}
コード例 #17
0
ファイル: dialogs.cpp プロジェクト: ChunHungLiu/GtkRadiant
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;
}
コード例 #18
0
ファイル: dialogs.cpp プロジェクト: ChunHungLiu/GtkRadiant
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;
}
コード例 #19
0
ファイル: dialogs.cpp プロジェクト: ChunHungLiu/GtkRadiant
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;
}
コード例 #20
0
ファイル: listener.cpp プロジェクト: ChunHungLiu/GtkRadiant
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;
}