コード例 #1
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 );
	}
}
コード例 #2
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();
}
コード例 #3
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();
	}
}
コード例 #4
0
ファイル: funchandlers.cpp プロジェクト: TTimo/GtkRadiant
void DoLoadCamera(){
	char basepath[PATH_MAX];

	if ( firstCam && firstCam->HasBeenSaved() ) {
		CAMERA_ExtractFilePath( firstCam->GetFileName(), basepath );
	}
	else{
		strcpy( basepath, g_FuncTable.m_pfnGetGamePath() );
	}

	const gchar *filename = g_FuncTable.m_pfnFileDialog( (GtkWidget *)g_pRadiantWnd, TRUE, "Open Camera File", basepath, "camera", NULL );

	if ( filename ) {
		CCamera *cam = AllocCam();
		char fullpathtofile[PATH_MAX];

		if ( cam ) {
			Q_realpath( filename, fullpathtofile, PATH_MAX );

			// see if this camera file was already loaded
			CCamera *checkCam = firstCam->GetNext(); // not the first one as we just allocated it
			while ( checkCam ) {
				if ( !strcmp( fullpathtofile, checkCam->GetFileName() ) ) {
					char error[PATH_MAX + 64];
					FreeCam( cam );
					sprintf( error, "Camera file \'%s\' is already loaded", fullpathtofile );
					g_FuncTable.m_pfnMessageBox( (GtkWidget *)g_pRadiantWnd, error, "Load error", MB_OK, NULL );
					//g_free( filename );
					return;
				}
				checkCam = checkCam->GetNext();
			}

			if ( loadCamera( cam->GetCamNum(), fullpathtofile ) ) {
				cam->GetCam()->buildCamera();
				cam->SetFileName( filename, true );
				SetCurrentCam( cam );
				RefreshCamListCombo();
				g_FuncTable.m_pfnSysUpdateWindows( W_XY_OVERLAY | W_CAMERA );
			}
			else {
				char error[PATH_MAX + 64];
				FreeCam( cam );
				sprintf( error, "An error occured during the loading of \'%s\'", fullpathtofile );
				g_FuncTable.m_pfnMessageBox( (GtkWidget *)g_pRadiantWnd, error, "Load error", MB_OK, NULL );
			}

			//g_free( filename );
		}
		else {
			g_FuncTable.m_pfnMessageBox( (GtkWidget *)g_pRadiantWnd, "No free camera slots available", "Load error", MB_OK, NULL );
		}
	}
}
コード例 #5
0
ファイル: dialogs.cpp プロジェクト: ChunHungLiu/GtkRadiant
GtkWidget *CreateCameraInspectorDialog( void )
{
  GtkWidget	*window, *w, *vbox, *hbox, *table, *frame;

  // create the window
  window = gtk_window_new( GTK_WINDOW_TOPLEVEL );
	gtk_window_set_title( GTK_WINDOW (window), "Camera Inspector" );
  gtk_signal_connect( GTK_OBJECT (window), "delete_event", GTK_SIGNAL_FUNC( ci_close ), NULL );
  gtk_signal_connect( GTK_OBJECT (window), "expose_event", GTK_SIGNAL_FUNC( ci_expose ), 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_pRadiantWnd ) );

  // don't use show, as you don't want to have it displayed on startup ;-)
  gtk_widget_realize( window );

  // fill the window

  // the table
  // -------------------------- //

  table = gtk_table_new( 3, 2, FALSE );
  gtk_widget_show( table );
  gtk_container_add( GTK_CONTAINER( window ), table );
  gtk_container_set_border_width( GTK_CONTAINER( table ), 5 );
  gtk_table_set_row_spacings( GTK_TABLE( table ), 5 );
  gtk_table_set_col_spacings( GTK_TABLE( table ), 5 );

  // the properties column
	// -------------------------- //

	vbox = gtk_vbox_new( FALSE, 5 );
	gtk_widget_show( vbox );
  gtk_table_attach( GTK_TABLE( table ), vbox, 0, 1, 0, 1,
                    (GtkAttachOptions) (GTK_EXPAND|GTK_FILL),
                    (GtkAttachOptions) (GTK_FILL), 0, 0 );

  // -------------------------- //

	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( "File:" );
	gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 );
	gtk_widget_show( w );

  g_pCamListCombo = gtk_combo_new();
  gtk_box_pack_start (GTK_BOX( hbox ), g_pCamListCombo, TRUE, TRUE, 0);
  gtk_widget_show( g_pCamListCombo );

  // -------------------------- //

	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 );

  g_pCamName = gtk_entry_new();
  gtk_box_pack_start( GTK_BOX( hbox ), g_pCamName, FALSE, FALSE, 0 );
  gtk_widget_show( g_pCamName );	

  w = gtk_label_new( "Type: " );
	gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 );
	gtk_widget_show( w );

  w = gtk_label_new( "" );
  gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 );
  gtk_widget_show( w );
	g_pCamType = GTK_LABEL( w );

  RefreshCamListCombo();

  gtk_entry_set_editable( GTK_ENTRY( GTK_COMBO(g_pCamListCombo)->entry ), FALSE );
  gtk_signal_connect( GTK_OBJECT(GTK_COMBO(g_pCamListCombo)->entry), "changed", GTK_SIGNAL_FUNC( ci_camlist_changed ), NULL );

  // -------------------------- //

  frame = gtk_frame_new( "Path and Target editing" );
  gtk_widget_show( frame );
  gtk_table_attach( GTK_TABLE( table ), frame, 0, 1, 1, 2,
                    (GtkAttachOptions) (GTK_EXPAND|GTK_FILL),
                    (GtkAttachOptions) (GTK_FILL), 0, 0 );

	vbox = gtk_vbox_new( FALSE, 5 );
	gtk_container_add( GTK_CONTAINER( frame ), vbox );
  gtk_container_set_border_width( GTK_CONTAINER (vbox), 5 );
	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( "Edit:" );
	gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 );
	gtk_widget_show( w );

  g_pPathListCombo = gtk_combo_new();
  gtk_box_pack_start (GTK_BOX( hbox ), g_pPathListCombo, TRUE, TRUE, 0);
  gtk_widget_show( g_pPathListCombo );

  RefreshPathListCombo();

	gtk_entry_set_editable( GTK_ENTRY( GTK_COMBO(g_pPathListCombo)->entry ), FALSE );
  gtk_signal_connect( GTK_OBJECT(GTK_COMBO(g_pPathListCombo)->entry), "changed", GTK_SIGNAL_FUNC( ci_pathlist_changed ), NULL );

  // -------------------------- //

  hbox = gtk_hbox_new( FALSE, 5 );
	gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
	gtk_widget_show( hbox );

	g_pEditModeEditRadioButton = gtk_radio_button_new_with_label( g_pEditTypeRadio, "Edit Points" );
	gtk_box_pack_start( GTK_BOX( hbox ), g_pEditModeEditRadioButton, FALSE, FALSE, 3 );
  gtk_widget_show( g_pEditModeEditRadioButton );
  g_pEditTypeRadio = gtk_radio_button_group( GTK_RADIO_BUTTON( g_pEditModeEditRadioButton ) );

	gtk_signal_connect( GTK_OBJECT( g_pEditModeEditRadioButton ), "clicked", GTK_SIGNAL_FUNC( ci_editmode_edit ), NULL );

	g_pEditModeAddRadioButton = gtk_radio_button_new_with_label( g_pEditTypeRadio, "Add Points" );
	gtk_box_pack_start( GTK_BOX( hbox ), g_pEditModeAddRadioButton, FALSE, FALSE, 3 );
  gtk_widget_show( g_pEditModeAddRadioButton );
  g_pEditTypeRadio = gtk_radio_button_group( GTK_RADIO_BUTTON( g_pEditModeAddRadioButton ) );

	gtk_signal_connect( GTK_OBJECT( g_pEditModeAddRadioButton ), "clicked", GTK_SIGNAL_FUNC( ci_editmode_add ), NULL );

	// see if we should use a different default
	if( g_iEditMode == 1 ) {
		// Go to editmode Add
		gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(g_pEditModeAddRadioButton), TRUE );
	}

  w = gtk_label_new( "Type: " );
	gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 );
	gtk_widget_show( w );

  w = gtk_label_new( "" );
  gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 );
  gtk_widget_show( w );
	g_pPathType = GTK_LABEL( 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( "Rename..." );
	gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, TRUE, 0);
	gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( ci_rename ), NULL );
	gtk_widget_show( w );

	w = gtk_button_new_with_label( "Add Target..." );
	gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, TRUE, 0);
	gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( ci_add_target ), NULL );
	gtk_widget_show( w );

	// not available in splines library
	/*w = gtk_button_new_with_label( "Delete Selected" );
	gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, TRUE, 0);
	gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( ci_delete_selected ), NULL );
	gtk_widget_show( w );

	w = gtk_button_new_with_label( "Select All" );
	gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, TRUE, 0);
	gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( ci_select_all ), NULL );
	gtk_widget_show( w );*/

  // -------------------------- //

  frame = gtk_frame_new( "Time" );
  gtk_widget_show( frame );
  gtk_table_attach( GTK_TABLE( table ), frame, 0, 1, 2, 3,
                    (GtkAttachOptions) (GTK_EXPAND|GTK_FILL),
                    (GtkAttachOptions) (GTK_FILL), 0, 0 );

	vbox = gtk_vbox_new( FALSE, 5 );
	gtk_container_add( GTK_CONTAINER( frame ), vbox );
  gtk_container_set_border_width( GTK_CONTAINER (vbox), 5 );
	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( "Length (seconds):" );
	gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 );
	gtk_widget_show( w );

  g_pSecondsEntry = gtk_entry_new();
  gtk_box_pack_start( GTK_BOX( hbox ), g_pSecondsEntry, FALSE, FALSE, 0 );
  gtk_widget_show( g_pSecondsEntry );

  // -------------------------- //

  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( "Current Time: " );
	gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 );
	gtk_widget_show( w );

  w = gtk_label_new( "0.00" );
  gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 );
  gtk_widget_show( w );
	g_pCurrentTime = GTK_LABEL( w );

  w = gtk_label_new( " of " );
	gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 );
	gtk_widget_show( w );

  w = gtk_label_new( "0.00" );
  gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 );
  gtk_widget_show( w );
	g_pTotalTime = GTK_LABEL( w );

  // -------------------------- //

  hbox = gtk_hbox_new( FALSE, 5 );
	gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
	gtk_widget_show( hbox );

	g_pTimeLine = GTK_ADJUSTMENT( gtk_adjustment_new( 0, 0, 30000, 100, 250, 0 ) );
	gtk_signal_connect( GTK_OBJECT(g_pTimeLine), "value_changed", GTK_SIGNAL_FUNC( ci_timeline_changed ), NULL );
  w = gtk_hscale_new( g_pTimeLine );
  gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
  gtk_widget_show( w );
  gtk_scale_set_draw_value( GTK_SCALE( w ), FALSE );

  // -------------------------- //

  hbox = gtk_hbox_new( FALSE, 5 );
	gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
	gtk_widget_show( hbox );

  g_pTrackCamera = gtk_check_button_new_with_label( "Track Camera" );
  gtk_box_pack_start( GTK_BOX( hbox ), g_pTrackCamera, FALSE, FALSE, 0 );
  gtk_widget_show( g_pTrackCamera );

  // -------------------------- //

  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( "Events:" );
	gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 );
	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_scrolled_window_new( NULL, NULL );
  gtk_widget_set_usize( w, 0, 150 );
  gtk_scrolled_window_set_policy( GTK_SCROLLED_WINDOW( w ), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC );
  gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
  gtk_widget_show( w );

  g_pEventsList = gtk_clist_new( 3 );
  gtk_container_add( GTK_CONTAINER(w), g_pEventsList);
  //gtk_signal_connect( GTK_OBJECT(g_pEventsList), "select_row", GTK_SIGNAL_FUNC (proplist_select_row), NULL);
  gtk_clist_set_selection_mode( GTK_CLIST(g_pEventsList), GTK_SELECTION_BROWSE );
  gtk_clist_column_titles_hide( GTK_CLIST(g_pEventsList) );
  gtk_clist_set_column_auto_resize( GTK_CLIST(g_pEventsList), 0, TRUE );
  gtk_clist_set_column_auto_resize( GTK_CLIST(g_pEventsList), 1, TRUE );
	gtk_clist_set_column_auto_resize( GTK_CLIST(g_pEventsList), 2, TRUE );
	gtk_widget_show( g_pEventsList );

  vbox = gtk_vbox_new( FALSE, 5 );
	gtk_box_pack_start( GTK_BOX( hbox ), vbox, FALSE, FALSE, 0 );
	gtk_widget_show( vbox );

	w = gtk_button_new_with_label( "Add..." );
	gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0);
	gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( ci_add ), NULL );
	gtk_widget_show( w );

	w = gtk_button_new_with_label( "Del" );
	gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0);
	gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( ci_del ), NULL );
	gtk_widget_show( w );

  // -------------------------- //

  /*/
   |
   |
   |
  */

  // the buttons column
  // -------------------------- //

  vbox = gtk_vbox_new( FALSE, 5 );
	gtk_widget_show( vbox );
  gtk_table_attach( GTK_TABLE( table ), vbox, 1, 2, 0, 1,
                    (GtkAttachOptions) (GTK_FILL),
                    (GtkAttachOptions) (GTK_FILL), 0, 0 );

	w = gtk_button_new_with_label( "New..." );
	gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0);
	gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( ci_new ), NULL );
	gtk_widget_show( w );

	w = gtk_button_new_with_label( "Load..." );
	gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0);
	gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( ci_load ), NULL );
	gtk_widget_show( w );

  // -------------------------- //

  vbox = gtk_vbox_new( FALSE, 5 );
	gtk_widget_show( vbox );
  gtk_table_attach( GTK_TABLE( table ), vbox, 1, 2, 1, 2,
                    (GtkAttachOptions) (GTK_FILL),
                    (GtkAttachOptions) (GTK_FILL), 0, 0 );

	w = gtk_button_new_with_label( "Save..." );
	gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0);
	gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( ci_save ), NULL );
	gtk_widget_show( w );

	w = gtk_button_new_with_label( "Unload" );
	gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0);
	gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( ci_unload ), NULL );
	gtk_widget_show( w );
  
  hbox = gtk_hbox_new( FALSE, 5 );
	gtk_box_pack_start( GTK_BOX( vbox ), hbox, TRUE, TRUE, 0 );
	gtk_widget_show( hbox );

  w = gtk_button_new_with_label( "Apply" );
	gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0);
	gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( ci_apply ), NULL );
	gtk_widget_show( w );

	w = gtk_button_new_with_label( "Preview" );
	gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0);
	gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( ci_preview ), NULL );
	gtk_widget_show( w );

  // -------------------------- //

 	vbox = gtk_vbox_new( FALSE, 5 );
	gtk_widget_show( vbox );
  gtk_table_attach( GTK_TABLE( table ), vbox, 1, 2, 2, 3,
                    (GtkAttachOptions) (GTK_FILL),
                    (GtkAttachOptions) (GTK_FILL), 0, 0 );

	hbox = gtk_hbox_new( FALSE, 5 );
	gtk_box_pack_start( GTK_BOX( vbox ), hbox, TRUE, TRUE, 0 );
	gtk_widget_show( hbox );

	w = gtk_button_new_with_label( "Close" );
	gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0);
	gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( ci_close ), NULL );
	GTK_WIDGET_SET_FLAGS( w, GTK_CAN_DEFAULT );
	gtk_widget_grab_default( w );
	gtk_widget_show( w );

  // -------------------------- //

  return window;
}