]> de.git.xonotic.org Git - xonotic/netradiant.git/blobdiff - contrib/gtkgensurf/gendlgs.cpp
reformat code! now the code is only ugly on the *inside*
[xonotic/netradiant.git] / contrib / gtkgensurf / gendlgs.cpp
index e64a6598b5fc68c5bc63cb8dd8d8d9019dd82a22..0c3b7b42f6a18d717422597dce8d9d323cb3ac13 100644 (file)
 #define TEXTURE_TAB   4
 //#define BUFF_SIZE    32768
 
-#define ENABLE_WIDGET( name,enable ) \
-       gtk_widget_set_sensitive( g_object_get_data( G_OBJECT( g_pWnd , ( name ) ) ), ( enable ) )
-#define CHECK_WIDGET( name,check ) \
-       gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( g_object_get_data( G_OBJECT( g_pWnd ), name ) ), check )
+#define ENABLE_WIDGET(name, enable) \
+    gtk_widget_set_sensitive( g_object_get_data( G_OBJECT( g_pWnd , ( name ) ) ), ( enable ) )
+#define CHECK_WIDGET(name, check) \
+    gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( g_object_get_data( G_OBJECT( g_pWnd ), name ) ), check )
 
 static GtkWidget *game_radios[NUMGAMES];
 static GtkWidget *wave_radios[5];
@@ -45,7 +45,8 @@ static int WasDetail;
 static GtkTooltips *tooltips;
 static int FirstPassComplete = 0;
 
-void About( GtkWidget *parent ){
+void About(GtkWidget *parent)
+{
 /*
    char *icon_xpm[] = {
    "32 32 4 1",
@@ -87,336 +88,332 @@ void About( GtkWidget *parent ){
    "................................"
    };
  */
-       // leo: I'm too lazy to create a nice about box
-       // ^Fishman - I am lazy too :P.
-       g_FuncTable.m_pfnMessageBox( parent, "GtkGenSurf 1.05\n\n"
-                                                                                "Original version\n"
-                                                                                "David Hyde (rascal@vicksburg.com)\n\n"
-                                                                                "Porting\n"
-                                                                                "Leonardo Zide (leo@lokigames.com)\n\n"
-                                                                                "Enhancements\n"
-                                                                                "Pablo Zurita (pablo@qeradiant.com)\n"
-                                                                                "Hydra (hydra@hydras-world.com)",
-                                                                "About GtkGenSurf", eMB_OK );
+    // leo: I'm too lazy to create a nice about box
+    // ^Fishman - I am lazy too :P.
+    g_FuncTable.m_pfnMessageBox(parent, "GtkGenSurf 1.05\n\n"
+                                        "Original version\n"
+                                        "David Hyde (rascal@vicksburg.com)\n\n"
+                                        "Porting\n"
+                                        "Leonardo Zide (leo@lokigames.com)\n\n"
+                                        "Enhancements\n"
+                                        "Pablo Zurita (pablo@qeradiant.com)\n"
+                                        "Hydra (hydra@hydras-world.com)",
+                                "About GtkGenSurf", eMB_OK);
 }
 
 // =============================================================================
 // main dialog
 
-static void SetupControls(){
-       switch ( current_tab )
-       {
-       case GENERAL_TAB:
-               break;
-
-       case EXTENTS_TAB:
-               if ( Game != QUAKE3 ) {
-                       gtk_widget_hide( g_object_get_data( G_OBJECT( g_pWnd , "use_patches" ) ) );
-                       ENABLE_WIDGET( "use_patches", FALSE );
-               }
-               else
-               {
-                       gtk_widget_show( g_object_get_data( G_OBJECT( g_pWnd , "use_patches" ) ) );
-                       ENABLE_WIDGET( "use_patches", TRUE );
-               }
-
-               if ( Game == QUAKE3 && UsePatches != 0 ) {
-                       ENABLE_WIDGET( "decimate", FALSE );
-               }
-               gtk_label_set_text( GTK_LABEL( g_object_get_data( G_OBJECT( g_pWnd ), "snap_text" ) ), "Snap to grid:" ); // ^Fishman - Snap to grid.
-               break;
-
-       case BITMAP_TAB:
-               if ( WaveType != WAVE_BITMAP ) {
-                       ENABLE_WIDGET( "bmp_file", FALSE );
-                       ENABLE_WIDGET( "bmp_file_browse", FALSE );
-                       ENABLE_WIDGET( "bmp_black", FALSE );
-                       ENABLE_WIDGET( "bmp_white", FALSE );
-                       ENABLE_WIDGET( "bmp_text1", FALSE );
-                       ENABLE_WIDGET( "bmp_text2", FALSE );
-                       ENABLE_WIDGET( "bmp_text3", FALSE );
-                       ENABLE_WIDGET( "bmp_reload", FALSE );
-                       gtk_label_set_text( GTK_LABEL( g_object_get_data( G_OBJECT( g_pWnd ), "bmp_note" ) ),
-                                                               "These options are disabled unless \"From Bitmap\"\n"
-                                                               "is selected as the Waveform on the General tab." );
-               }
-               else
-               {
-                       ENABLE_WIDGET( "bmp_file", TRUE );
-                       ENABLE_WIDGET( "bmp_file_browse", TRUE );
-                       ENABLE_WIDGET( "bmp_black", TRUE );
-                       ENABLE_WIDGET( "bmp_white", TRUE );
-                       ENABLE_WIDGET( "bmp_text1", TRUE );
-                       ENABLE_WIDGET( "bmp_text2", TRUE );
-                       ENABLE_WIDGET( "bmp_text3", TRUE );
-                       ENABLE_WIDGET( "bmp_reload", strlen( gbmp.name ) != 0 );
-                       gtk_label_set_text( GTK_LABEL( g_object_get_data( G_OBJECT( g_pWnd ), "bmp_note" ) ),
-                                                               "GenSurf works only with 8-bit bitmaps. Color indices are\n"
-                                                               "mapped to values for each vertex. Generally, gray scale\n"
-                                                               "images are stored with black as color 0, white as color 255." );
-               }
-               break;
-
-       case FIXPOINTS_TAB:
-               ENABLE_WIDGET( "fix_value", ( NumVerticesSelected != 0 ) );
-               ENABLE_WIDGET( "fix_value_text", ( NumVerticesSelected != 0 ) );
-               ENABLE_WIDGET( "fix_free", ( NumVerticesSelected != 0 ) );
-               ENABLE_WIDGET( "fix_range", ( ( NumVerticesSelected != 0 ) && ( WaveType != WAVE_ROUGH_ONLY ) ) );
-               ENABLE_WIDGET( "fix_range_text", ( ( NumVerticesSelected != 0 ) && ( WaveType != WAVE_ROUGH_ONLY ) ) );
-               ENABLE_WIDGET( "fix_rate", ( ( NumVerticesSelected != 0 ) && ( WaveType != WAVE_ROUGH_ONLY ) ) );
-               ENABLE_WIDGET( "fix_rate_text", ( ( NumVerticesSelected != 0 ) && ( WaveType != WAVE_ROUGH_ONLY ) ) );
-               break;
-
-       case TEXTURE_TAB:
-               ENABLE_WIDGET( "texture2", ( UsePatches == 0 ) );
-               ENABLE_WIDGET( "texture3", ( UsePatches == 0 ) );
-               ENABLE_WIDGET( "tex_slant", ( UsePatches == 0 ) );
-               ENABLE_WIDGET( "detail", ( UsePatches == 0 ) );
-               if ( Game != QUAKE3 ) {
-                       ENABLE_WIDGET( "terrain_ent", FALSE ); // ^Fishman - Adds terrain key to func_group.
-                       ENABLE_WIDGET( "hint", ( UsePatches == 0 ) );
-               }
-               break;
-       }
-
-       switch ( WaveType )
-       {
-       case WAVE_HCYLINDER:
-       case WAVE_VCYLINDER:
-               ENABLE_WIDGET( "amplitude", TRUE );
-               ENABLE_WIDGET( "wavelength", TRUE );
-               ENABLE_WIDGET( "z00", TRUE );
-               ENABLE_WIDGET( "z01", TRUE );
-               ENABLE_WIDGET( "z10", TRUE );
-               ENABLE_WIDGET( "z11", TRUE );
-               ENABLE_WIDGET( "linearborder", TRUE );
-               ENABLE_WIDGET( "go", TRUE );
-               break;
-       case WAVE_BITMAP:
-               ENABLE_WIDGET( "amplitude", FALSE );
-               ENABLE_WIDGET( "wavelength", FALSE );
-               ENABLE_WIDGET( "z00", FALSE );
-               ENABLE_WIDGET( "z01", FALSE );
-               ENABLE_WIDGET( "z10", FALSE );
-               ENABLE_WIDGET( "z11", FALSE );
-               ENABLE_WIDGET( "linearborder", FALSE );
-               ENABLE_WIDGET( "go", ( gbmp.colors != NULL ? TRUE : FALSE ) );
-               break;
-       case WAVE_ROUGH_ONLY:
-               ENABLE_WIDGET( "amplitude", FALSE );
-               ENABLE_WIDGET( "wavelength", FALSE );
-               ENABLE_WIDGET( "z00", TRUE );
-               ENABLE_WIDGET( "z01", TRUE );
-               ENABLE_WIDGET( "z10", TRUE );
-               ENABLE_WIDGET( "z11", TRUE );
-               ENABLE_WIDGET( "linearborder", TRUE );
-               ENABLE_WIDGET( "go", TRUE );
-               break;
-       default:
-               ENABLE_WIDGET( "amplitude", TRUE );
-               ENABLE_WIDGET( "wavelength", TRUE );
-               ENABLE_WIDGET( "z00", TRUE );
-               ENABLE_WIDGET( "z01", TRUE );
-               ENABLE_WIDGET( "z10", TRUE );
-               ENABLE_WIDGET( "z11", TRUE );
-               ENABLE_WIDGET( "linearborder", TRUE );
-               ENABLE_WIDGET( "go", TRUE );
-       }
-
-       switch ( Plane )
-       {
-       case PLANE_XZ0:
-       case PLANE_XZ1:
-               gtk_label_set_text( GTK_LABEL( g_object_get_data( G_OBJECT( g_pWnd ), "hmin_text" ) ), "X:" );
-               gtk_label_set_text( GTK_LABEL( g_object_get_data( G_OBJECT( g_pWnd ), "hmax_text" ) ), "X:" );
-               gtk_label_set_text( GTK_LABEL( g_object_get_data( G_OBJECT( g_pWnd ), "vmin_text" ) ), "Z:" );
-               gtk_label_set_text( GTK_LABEL( g_object_get_data( G_OBJECT( g_pWnd ), "vmax_text" ) ), "Z:" );
-               gtk_label_set_text( GTK_LABEL( g_object_get_data( G_OBJECT( g_pWnd ), "nh_text" ) ), "X:" );
-               gtk_label_set_text( GTK_LABEL( g_object_get_data( G_OBJECT( g_pWnd ), "nv_text" ) ), "Z:" );
-               break;
-       case PLANE_YZ0:
-       case PLANE_YZ1:
-               gtk_label_set_text( GTK_LABEL( g_object_get_data( G_OBJECT( g_pWnd ), "hmin_text" ) ), "Y:" );
-               gtk_label_set_text( GTK_LABEL( g_object_get_data( G_OBJECT( g_pWnd ), "hmax_text" ) ), "Y:" );
-               gtk_label_set_text( GTK_LABEL( g_object_get_data( G_OBJECT( g_pWnd ), "vmin_text" ) ), "Z:" );
-               gtk_label_set_text( GTK_LABEL( g_object_get_data( G_OBJECT( g_pWnd ), "vmax_text" ) ), "Z:" );
-               gtk_label_set_text( GTK_LABEL( g_object_get_data( G_OBJECT( g_pWnd ), "nh_text" ) ), "Y:" );
-               gtk_label_set_text( GTK_LABEL( g_object_get_data( G_OBJECT( g_pWnd ), "nv_text" ) ), "Z:" );
-               break;
-       default:
-               gtk_label_set_text( GTK_LABEL( g_object_get_data( G_OBJECT( g_pWnd ), "hmin_text" ) ), "X:" );
-               gtk_label_set_text( GTK_LABEL( g_object_get_data( G_OBJECT( g_pWnd ), "hmax_text" ) ), "X:" );
-               gtk_label_set_text( GTK_LABEL( g_object_get_data( G_OBJECT( g_pWnd ), "vmin_text" ) ), "Y:" );
-               gtk_label_set_text( GTK_LABEL( g_object_get_data( G_OBJECT( g_pWnd ), "vmax_text" ) ), "Y:" );
-               gtk_label_set_text( GTK_LABEL( g_object_get_data( G_OBJECT( g_pWnd ), "nh_text" ) ), "X:" );
-               gtk_label_set_text( GTK_LABEL( g_object_get_data( G_OBJECT( g_pWnd ), "nv_text" ) ), "Y:" );
-               break;
-       }
+static void SetupControls()
+{
+    switch (current_tab) {
+        case GENERAL_TAB:
+            break;
+
+        case EXTENTS_TAB:
+            if (Game != QUAKE3) {
+                gtk_widget_hide(g_object_get_data(G_OBJECT(g_pWnd, "use_patches")));
+                ENABLE_WIDGET("use_patches", FALSE);
+            } else {
+                gtk_widget_show(g_object_get_data(G_OBJECT(g_pWnd, "use_patches")));
+                ENABLE_WIDGET("use_patches", TRUE);
+            }
+
+            if (Game == QUAKE3 && UsePatches != 0) {
+                ENABLE_WIDGET("decimate", FALSE);
+            }
+            gtk_label_set_text(GTK_LABEL(g_object_get_data(G_OBJECT(g_pWnd), "snap_text")),
+                               "Snap to grid:"); // ^Fishman - Snap to grid.
+            break;
+
+        case BITMAP_TAB:
+            if (WaveType != WAVE_BITMAP) {
+                ENABLE_WIDGET("bmp_file", FALSE);
+                ENABLE_WIDGET("bmp_file_browse", FALSE);
+                ENABLE_WIDGET("bmp_black", FALSE);
+                ENABLE_WIDGET("bmp_white", FALSE);
+                ENABLE_WIDGET("bmp_text1", FALSE);
+                ENABLE_WIDGET("bmp_text2", FALSE);
+                ENABLE_WIDGET("bmp_text3", FALSE);
+                ENABLE_WIDGET("bmp_reload", FALSE);
+                gtk_label_set_text(GTK_LABEL(g_object_get_data(G_OBJECT(g_pWnd), "bmp_note")),
+                                   "These options are disabled unless \"From Bitmap\"\n"
+                                           "is selected as the Waveform on the General tab.");
+            } else {
+                ENABLE_WIDGET("bmp_file", TRUE);
+                ENABLE_WIDGET("bmp_file_browse", TRUE);
+                ENABLE_WIDGET("bmp_black", TRUE);
+                ENABLE_WIDGET("bmp_white", TRUE);
+                ENABLE_WIDGET("bmp_text1", TRUE);
+                ENABLE_WIDGET("bmp_text2", TRUE);
+                ENABLE_WIDGET("bmp_text3", TRUE);
+                ENABLE_WIDGET("bmp_reload", strlen(gbmp.name) != 0);
+                gtk_label_set_text(GTK_LABEL(g_object_get_data(G_OBJECT(g_pWnd), "bmp_note")),
+                                   "GenSurf works only with 8-bit bitmaps. Color indices are\n"
+                                           "mapped to values for each vertex. Generally, gray scale\n"
+                                           "images are stored with black as color 0, white as color 255.");
+            }
+            break;
+
+        case FIXPOINTS_TAB:
+            ENABLE_WIDGET("fix_value", (NumVerticesSelected != 0));
+            ENABLE_WIDGET("fix_value_text", (NumVerticesSelected != 0));
+            ENABLE_WIDGET("fix_free", (NumVerticesSelected != 0));
+            ENABLE_WIDGET("fix_range", ((NumVerticesSelected != 0) && (WaveType != WAVE_ROUGH_ONLY)));
+            ENABLE_WIDGET("fix_range_text", ((NumVerticesSelected != 0) && (WaveType != WAVE_ROUGH_ONLY)));
+            ENABLE_WIDGET("fix_rate", ((NumVerticesSelected != 0) && (WaveType != WAVE_ROUGH_ONLY)));
+            ENABLE_WIDGET("fix_rate_text", ((NumVerticesSelected != 0) && (WaveType != WAVE_ROUGH_ONLY)));
+            break;
+
+        case TEXTURE_TAB:
+            ENABLE_WIDGET("texture2", (UsePatches == 0));
+            ENABLE_WIDGET("texture3", (UsePatches == 0));
+            ENABLE_WIDGET("tex_slant", (UsePatches == 0));
+            ENABLE_WIDGET("detail", (UsePatches == 0));
+            if (Game != QUAKE3) {
+                ENABLE_WIDGET("terrain_ent", FALSE); // ^Fishman - Adds terrain key to func_group.
+                ENABLE_WIDGET("hint", (UsePatches == 0));
+            }
+            break;
+    }
+
+    switch (WaveType) {
+        case WAVE_HCYLINDER:
+        case WAVE_VCYLINDER:
+            ENABLE_WIDGET("amplitude", TRUE);
+            ENABLE_WIDGET("wavelength", TRUE);
+            ENABLE_WIDGET("z00", TRUE);
+            ENABLE_WIDGET("z01", TRUE);
+            ENABLE_WIDGET("z10", TRUE);
+            ENABLE_WIDGET("z11", TRUE);
+            ENABLE_WIDGET("linearborder", TRUE);
+            ENABLE_WIDGET("go", TRUE);
+            break;
+        case WAVE_BITMAP:
+            ENABLE_WIDGET("amplitude", FALSE);
+            ENABLE_WIDGET("wavelength", FALSE);
+            ENABLE_WIDGET("z00", FALSE);
+            ENABLE_WIDGET("z01", FALSE);
+            ENABLE_WIDGET("z10", FALSE);
+            ENABLE_WIDGET("z11", FALSE);
+            ENABLE_WIDGET("linearborder", FALSE);
+            ENABLE_WIDGET("go", (gbmp.colors != NULL ? TRUE : FALSE));
+            break;
+        case WAVE_ROUGH_ONLY:
+            ENABLE_WIDGET("amplitude", FALSE);
+            ENABLE_WIDGET("wavelength", FALSE);
+            ENABLE_WIDGET("z00", TRUE);
+            ENABLE_WIDGET("z01", TRUE);
+            ENABLE_WIDGET("z10", TRUE);
+            ENABLE_WIDGET("z11", TRUE);
+            ENABLE_WIDGET("linearborder", TRUE);
+            ENABLE_WIDGET("go", TRUE);
+            break;
+        default:
+            ENABLE_WIDGET("amplitude", TRUE);
+            ENABLE_WIDGET("wavelength", TRUE);
+            ENABLE_WIDGET("z00", TRUE);
+            ENABLE_WIDGET("z01", TRUE);
+            ENABLE_WIDGET("z10", TRUE);
+            ENABLE_WIDGET("z11", TRUE);
+            ENABLE_WIDGET("linearborder", TRUE);
+            ENABLE_WIDGET("go", TRUE);
+    }
+
+    switch (Plane) {
+        case PLANE_XZ0:
+        case PLANE_XZ1:
+            gtk_label_set_text(GTK_LABEL(g_object_get_data(G_OBJECT(g_pWnd), "hmin_text")), "X:");
+            gtk_label_set_text(GTK_LABEL(g_object_get_data(G_OBJECT(g_pWnd), "hmax_text")), "X:");
+            gtk_label_set_text(GTK_LABEL(g_object_get_data(G_OBJECT(g_pWnd), "vmin_text")), "Z:");
+            gtk_label_set_text(GTK_LABEL(g_object_get_data(G_OBJECT(g_pWnd), "vmax_text")), "Z:");
+            gtk_label_set_text(GTK_LABEL(g_object_get_data(G_OBJECT(g_pWnd), "nh_text")), "X:");
+            gtk_label_set_text(GTK_LABEL(g_object_get_data(G_OBJECT(g_pWnd), "nv_text")), "Z:");
+            break;
+        case PLANE_YZ0:
+        case PLANE_YZ1:
+            gtk_label_set_text(GTK_LABEL(g_object_get_data(G_OBJECT(g_pWnd), "hmin_text")), "Y:");
+            gtk_label_set_text(GTK_LABEL(g_object_get_data(G_OBJECT(g_pWnd), "hmax_text")), "Y:");
+            gtk_label_set_text(GTK_LABEL(g_object_get_data(G_OBJECT(g_pWnd), "vmin_text")), "Z:");
+            gtk_label_set_text(GTK_LABEL(g_object_get_data(G_OBJECT(g_pWnd), "vmax_text")), "Z:");
+            gtk_label_set_text(GTK_LABEL(g_object_get_data(G_OBJECT(g_pWnd), "nh_text")), "Y:");
+            gtk_label_set_text(GTK_LABEL(g_object_get_data(G_OBJECT(g_pWnd), "nv_text")), "Z:");
+            break;
+        default:
+            gtk_label_set_text(GTK_LABEL(g_object_get_data(G_OBJECT(g_pWnd), "hmin_text")), "X:");
+            gtk_label_set_text(GTK_LABEL(g_object_get_data(G_OBJECT(g_pWnd), "hmax_text")), "X:");
+            gtk_label_set_text(GTK_LABEL(g_object_get_data(G_OBJECT(g_pWnd), "vmin_text")), "Y:");
+            gtk_label_set_text(GTK_LABEL(g_object_get_data(G_OBJECT(g_pWnd), "vmax_text")), "Y:");
+            gtk_label_set_text(GTK_LABEL(g_object_get_data(G_OBJECT(g_pWnd), "nh_text")), "X:");
+            gtk_label_set_text(GTK_LABEL(g_object_get_data(G_OBJECT(g_pWnd), "nv_text")), "Y:");
+            break;
+    }
 }
 
 // SetDlgValues fills in text boxes and initializes other input controls
-static void SetDlgValues( int tab ){
-       char Text[256];
-       char RForm[16] = "%.5g";
-       int i;
-
-       switch ( tab )
-       {
-       case GENERAL_TAB:
-               // Hell if I know why, but in the release build the 2nd pass thru the
-               // set_sensitive loop for game_radios crashes. No need to do this more
-               // than once anyhow.
-               if ( !FirstPassComplete ) {
-                       for ( i = 0; i < NUMGAMES; i++ )
-                               gtk_widget_set_sensitive( game_radios[i], ( i == Game ? TRUE : FALSE ) );
-                       for ( i = 0; i < 6; i++ )
-                               gtk_widget_set_sensitive( plane_radios[i], ( i == Plane ? TRUE : FALSE ) );
-               }
-               gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( game_radios[Game] ), TRUE );
-               gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( plane_radios[Plane] ), TRUE );
-               gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( wave_radios[WaveType] ), TRUE );
-               gtk_spin_button_set_value( GTK_SPIN_BUTTON( g_object_get_data( G_OBJECT( g_pWnd ), "random" ) ),
-                                                                  RandomSeed );
-               sprintf( Text, RForm, WaveLength );
-               gtk_entry_set_text( GTK_ENTRY( g_object_get_data( G_OBJECT( g_pWnd ), "wavelength" ) ), Text );
-               sprintf( Text, RForm, Amplitude );
-               gtk_entry_set_text( GTK_ENTRY( g_object_get_data( G_OBJECT( g_pWnd ), "amplitude" ) ), Text );
-               sprintf( Text, RForm, Roughness );
-               gtk_entry_set_text( GTK_ENTRY( g_object_get_data( G_OBJECT( g_pWnd ), "roughness" ) ), Text );
-               gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( g_object_get_data
-                                                                                                                        ( G_OBJECT( g_pWnd ), "main_antialiasing" ) ), Antialiasing );
-               break;
-
-       case EXTENTS_TAB:
-               sprintf( Text,RForm,Hll );
-               gtk_entry_set_text( GTK_ENTRY( g_object_get_data( G_OBJECT( g_pWnd ), "hmin" ) ), Text );
-               sprintf( Text,RForm,Vll );
-               gtk_entry_set_text( GTK_ENTRY( g_object_get_data( G_OBJECT( g_pWnd ), "vmin" ) ), Text );
-               sprintf( Text,RForm,Hur );
-               gtk_entry_set_text( GTK_ENTRY( g_object_get_data( G_OBJECT( g_pWnd ), "hmax" ) ), Text );
-               sprintf( Text,RForm,Vur );
-               gtk_entry_set_text( GTK_ENTRY( g_object_get_data( G_OBJECT( g_pWnd ), "vmax" ) ), Text );
-               sprintf( Text,RForm,Z00 );
-               gtk_entry_set_text( GTK_ENTRY( g_object_get_data( G_OBJECT( g_pWnd ), "z00" ) ), Text );
-               sprintf( Text,RForm,Z01 );
-               gtk_entry_set_text( GTK_ENTRY( g_object_get_data( G_OBJECT( g_pWnd ), "z01" ) ), Text );
-               sprintf( Text,RForm,Z10 );
-               gtk_entry_set_text( GTK_ENTRY( g_object_get_data( G_OBJECT( g_pWnd ), "z10" ) ), Text );
-               sprintf( Text,RForm,Z11 );
-               gtk_entry_set_text( GTK_ENTRY( g_object_get_data( G_OBJECT( g_pWnd ), "z11" ) ), Text );
-               gtk_spin_button_set_value( GTK_SPIN_BUTTON( g_object_get_data( G_OBJECT( g_pWnd ), "nh" ) ), NH );
-               gtk_spin_button_set_value( GTK_SPIN_BUTTON( g_object_get_data( G_OBJECT( g_pWnd ), "nv" ) ), NV );
-               gtk_spin_button_set_value( GTK_SPIN_BUTTON( g_object_get_data( G_OBJECT( g_pWnd ), "sp" ) ), SP ); // ^Fishman - Snap to grid.
-
-               gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( g_object_get_data
-                                                                                                                        ( G_OBJECT( g_pWnd ), "linearborder" ) ), FixBorders );
-               gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( g_object_get_data
-                                                                                                                        ( G_OBJECT( g_pWnd ), "use_patches" ) ), UsePatches );
-               gtk_adjustment_set_value( GTK_ADJUSTMENT( g_object_get_data( G_OBJECT( g_pWnd ), "decimate_adj" ) ),
-                                                                 Decimate );
-
-               if ( Game == QUAKE3 && UsePatches ) {
-                       gtk_widget_set_sensitive( g_object_get_data( G_OBJECT( g_pWnd , "decimate" ) ), FALSE );
-
-                       if ( NH % 2 ) {
-                               NH++;
-                               if ( NH > MAX_ROWS ) {
-                                       NH -= 2;
-                               }
-                               SetDlgValues( current_tab );
-                       }
-
-                       if ( NV % 2 ) {
-                               NV++;
-                               if ( NV > MAX_ROWS ) {
-                                       NV -= 2;
-                               }
-                               SetDlgValues( current_tab );
-                       }
-                       if ( NH % 2 ) {
-                               NH++;
-                       }
-                       if ( NH < 2 ) {
-                               NH = 2;
-                       }
-                       if ( NH > MAX_ROWS ) {
-                               NH = MAX_ROWS;
-                       }
-                       if ( NV % 2 ) {
-                               NV++;
-                       }
-                       if ( NV < 2 ) {
-                               NV = 2;
-                       }
-                       if ( NV > MAX_ROWS ) {
-                               NV = MAX_ROWS;
-                       }
-
-                       gpointer spin = g_object_get_data( G_OBJECT( g_pWnd ), "nh" );
-                       GtkAdjustment *adj = gtk_spin_button_get_adjustment( GTK_SPIN_BUTTON( spin ) );
-                       adj->lower = 2;
-                       gtk_adjustment_changed( adj );
-                       spin = g_object_get_data( G_OBJECT( g_pWnd ), "nv" );
-                       adj = gtk_spin_button_get_adjustment( GTK_SPIN_BUTTON( spin ) );
-                       adj->lower = 2;
-                       gtk_adjustment_changed( adj );
-               }
-               else
-               {
-                       gtk_widget_set_sensitive( g_object_get_data( G_OBJECT( g_pWnd , "decimate" ) ), TRUE );
-
-                       gpointer spin = g_object_get_data( G_OBJECT( g_pWnd ), "nh" );
-                       GtkAdjustment *adj = gtk_spin_button_get_adjustment( GTK_SPIN_BUTTON( spin ) );
-                       adj->lower = 1;
-                       gtk_adjustment_changed( adj );
-                       spin = g_object_get_data( G_OBJECT( g_pWnd ), "nv" );
-                       adj = gtk_spin_button_get_adjustment( GTK_SPIN_BUTTON( spin ) );
-                       adj->lower = 1;
-                       gtk_adjustment_changed( adj );
-               }
-
-               gtk_spin_button_set_value( GTK_SPIN_BUTTON( g_object_get_data( G_OBJECT( g_pWnd ), "nh" ) ), NH );
-               gtk_spin_button_set_value( GTK_SPIN_BUTTON( g_object_get_data( G_OBJECT( g_pWnd ), "nv" ) ), NV );
-
-               break;
-
-       case BITMAP_TAB:
-               gtk_entry_set_text( GTK_ENTRY( g_object_get_data( G_OBJECT( g_pWnd ), "bmp_file" ) ), gbmp.name );
-               sprintf( Text,"%g",gbmp.black_value );
-               gtk_entry_set_text( GTK_ENTRY( g_object_get_data( G_OBJECT( g_pWnd ), "bmp_black" ) ), Text );
-               sprintf( Text,"%g",gbmp.white_value );
-               gtk_entry_set_text( GTK_ENTRY( g_object_get_data( G_OBJECT( g_pWnd ), "bmp_white" ) ), Text );
-               break;
-
-       case FIXPOINTS_TAB:
-               break;
-
-       case TEXTURE_TAB:
-               gtk_entry_set_text( GTK_ENTRY( g_object_get_data( G_OBJECT( g_pWnd ), "texture1" ) ), Texture[Game][0] );
-               gtk_entry_set_text( GTK_ENTRY( g_object_get_data( G_OBJECT( g_pWnd ), "texture2" ) ), Texture[Game][1] );
-               gtk_entry_set_text( GTK_ENTRY( g_object_get_data( G_OBJECT( g_pWnd ), "texture3" ) ), Texture[Game][2] );
-               gtk_spin_button_set_value( GTK_SPIN_BUTTON( g_object_get_data( G_OBJECT( g_pWnd ), "tex_slant" ) ),
-                                                                  SlantAngle );
-               sprintf( Text,RForm,TexOffset[0] );
-               gtk_entry_set_text( GTK_ENTRY( g_object_get_data( G_OBJECT( g_pWnd ), "texoffsetx" ) ), Text );
-               sprintf( Text,RForm,TexOffset[1] );
-               gtk_entry_set_text( GTK_ENTRY( g_object_get_data( G_OBJECT( g_pWnd ), "texoffsety" ) ), Text );
-               sprintf( Text,RForm,TexScale[0] );
-               gtk_entry_set_text( GTK_ENTRY( g_object_get_data( G_OBJECT( g_pWnd ), "texscalex" ) ), Text );
-               sprintf( Text,RForm,TexScale[1] );
-               gtk_entry_set_text( GTK_ENTRY( g_object_get_data( G_OBJECT( g_pWnd ), "texscaley" ) ), Text );
-               CHECK_WIDGET( "detail", UseDetail );
-
-               if ( Game == QUAKE3 ) {
-                       ENABLE_WIDGET( "hint", FALSE );
-                       AddHints = 0;
-               }
-               else{
-                       ENABLE_WIDGET( "hint", TRUE );
-               }
-               CHECK_WIDGET( "hint", AddHints );
-
-               /*
+static void SetDlgValues(int tab)
+{
+    char Text[256];
+    char RForm[16] = "%.5g";
+    int i;
+
+    switch (tab) {
+        case GENERAL_TAB:
+            // Hell if I know why, but in the release build the 2nd pass thru the
+            // set_sensitive loop for game_radios crashes. No need to do this more
+            // than once anyhow.
+            if (!FirstPassComplete) {
+                for (i = 0; i < NUMGAMES; i++) {
+                    gtk_widget_set_sensitive(game_radios[i], (i == Game ? TRUE : FALSE));
+                }
+                for (i = 0; i < 6; i++) {
+                    gtk_widget_set_sensitive(plane_radios[i], (i == Plane ? TRUE : FALSE));
+                }
+            }
+            gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(game_radios[Game]), TRUE);
+            gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(plane_radios[Plane]), TRUE);
+            gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(wave_radios[WaveType]), TRUE);
+            gtk_spin_button_set_value(GTK_SPIN_BUTTON(g_object_get_data(G_OBJECT(g_pWnd), "random")),
+                                      RandomSeed);
+            sprintf(Text, RForm, WaveLength);
+            gtk_entry_set_text(GTK_ENTRY(g_object_get_data(G_OBJECT(g_pWnd), "wavelength")), Text);
+            sprintf(Text, RForm, Amplitude);
+            gtk_entry_set_text(GTK_ENTRY(g_object_get_data(G_OBJECT(g_pWnd), "amplitude")), Text);
+            sprintf(Text, RForm, Roughness);
+            gtk_entry_set_text(GTK_ENTRY(g_object_get_data(G_OBJECT(g_pWnd), "roughness")), Text);
+            gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(g_object_get_data
+                                                                   (G_OBJECT(g_pWnd), "main_antialiasing")),
+                                         Antialiasing);
+            break;
+
+        case EXTENTS_TAB:
+            sprintf(Text, RForm, Hll);
+            gtk_entry_set_text(GTK_ENTRY(g_object_get_data(G_OBJECT(g_pWnd), "hmin")), Text);
+            sprintf(Text, RForm, Vll);
+            gtk_entry_set_text(GTK_ENTRY(g_object_get_data(G_OBJECT(g_pWnd), "vmin")), Text);
+            sprintf(Text, RForm, Hur);
+            gtk_entry_set_text(GTK_ENTRY(g_object_get_data(G_OBJECT(g_pWnd), "hmax")), Text);
+            sprintf(Text, RForm, Vur);
+            gtk_entry_set_text(GTK_ENTRY(g_object_get_data(G_OBJECT(g_pWnd), "vmax")), Text);
+            sprintf(Text, RForm, Z00);
+            gtk_entry_set_text(GTK_ENTRY(g_object_get_data(G_OBJECT(g_pWnd), "z00")), Text);
+            sprintf(Text, RForm, Z01);
+            gtk_entry_set_text(GTK_ENTRY(g_object_get_data(G_OBJECT(g_pWnd), "z01")), Text);
+            sprintf(Text, RForm, Z10);
+            gtk_entry_set_text(GTK_ENTRY(g_object_get_data(G_OBJECT(g_pWnd), "z10")), Text);
+            sprintf(Text, RForm, Z11);
+            gtk_entry_set_text(GTK_ENTRY(g_object_get_data(G_OBJECT(g_pWnd), "z11")), Text);
+            gtk_spin_button_set_value(GTK_SPIN_BUTTON(g_object_get_data(G_OBJECT(g_pWnd), "nh")), NH);
+            gtk_spin_button_set_value(GTK_SPIN_BUTTON(g_object_get_data(G_OBJECT(g_pWnd), "nv")), NV);
+            gtk_spin_button_set_value(GTK_SPIN_BUTTON(g_object_get_data(G_OBJECT(g_pWnd), "sp")),
+                                      SP); // ^Fishman - Snap to grid.
+
+            gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(g_object_get_data
+                                                                   (G_OBJECT(g_pWnd), "linearborder")), FixBorders);
+            gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(g_object_get_data
+                                                                   (G_OBJECT(g_pWnd), "use_patches")), UsePatches);
+            gtk_adjustment_set_value(GTK_ADJUSTMENT(g_object_get_data(G_OBJECT(g_pWnd), "decimate_adj")),
+                                     Decimate);
+
+            if (Game == QUAKE3 && UsePatches) {
+                gtk_widget_set_sensitive(g_object_get_data(G_OBJECT(g_pWnd, "decimate")), FALSE);
+
+                if (NH % 2) {
+                    NH++;
+                    if (NH > MAX_ROWS) {
+                        NH -= 2;
+                    }
+                    SetDlgValues(current_tab);
+                }
+
+                if (NV % 2) {
+                    NV++;
+                    if (NV > MAX_ROWS) {
+                        NV -= 2;
+                    }
+                    SetDlgValues(current_tab);
+                }
+                if (NH % 2) {
+                    NH++;
+                }
+                if (NH < 2) {
+                    NH = 2;
+                }
+                if (NH > MAX_ROWS) {
+                    NH = MAX_ROWS;
+                }
+                if (NV % 2) {
+                    NV++;
+                }
+                if (NV < 2) {
+                    NV = 2;
+                }
+                if (NV > MAX_ROWS) {
+                    NV = MAX_ROWS;
+                }
+
+                gpointer spin = g_object_get_data(G_OBJECT(g_pWnd), "nh");
+                GtkAdjustment *adj = gtk_spin_button_get_adjustment(GTK_SPIN_BUTTON(spin));
+                adj->lower = 2;
+                gtk_adjustment_changed(adj);
+                spin = g_object_get_data(G_OBJECT(g_pWnd), "nv");
+                adj = gtk_spin_button_get_adjustment(GTK_SPIN_BUTTON(spin));
+                adj->lower = 2;
+                gtk_adjustment_changed(adj);
+            } else {
+                gtk_widget_set_sensitive(g_object_get_data(G_OBJECT(g_pWnd, "decimate")), TRUE);
+
+                gpointer spin = g_object_get_data(G_OBJECT(g_pWnd), "nh");
+                GtkAdjustment *adj = gtk_spin_button_get_adjustment(GTK_SPIN_BUTTON(spin));
+                adj->lower = 1;
+                gtk_adjustment_changed(adj);
+                spin = g_object_get_data(G_OBJECT(g_pWnd), "nv");
+                adj = gtk_spin_button_get_adjustment(GTK_SPIN_BUTTON(spin));
+                adj->lower = 1;
+                gtk_adjustment_changed(adj);
+            }
+
+            gtk_spin_button_set_value(GTK_SPIN_BUTTON(g_object_get_data(G_OBJECT(g_pWnd), "nh")), NH);
+            gtk_spin_button_set_value(GTK_SPIN_BUTTON(g_object_get_data(G_OBJECT(g_pWnd), "nv")), NV);
+
+            break;
+
+        case BITMAP_TAB:
+            gtk_entry_set_text(GTK_ENTRY(g_object_get_data(G_OBJECT(g_pWnd), "bmp_file")), gbmp.name);
+            sprintf(Text, "%g", gbmp.black_value);
+            gtk_entry_set_text(GTK_ENTRY(g_object_get_data(G_OBJECT(g_pWnd), "bmp_black")), Text);
+            sprintf(Text, "%g", gbmp.white_value);
+            gtk_entry_set_text(GTK_ENTRY(g_object_get_data(G_OBJECT(g_pWnd), "bmp_white")), Text);
+            break;
+
+        case FIXPOINTS_TAB:
+            break;
+
+        case TEXTURE_TAB:
+            gtk_entry_set_text(GTK_ENTRY(g_object_get_data(G_OBJECT(g_pWnd), "texture1")), Texture[Game][0]);
+            gtk_entry_set_text(GTK_ENTRY(g_object_get_data(G_OBJECT(g_pWnd), "texture2")), Texture[Game][1]);
+            gtk_entry_set_text(GTK_ENTRY(g_object_get_data(G_OBJECT(g_pWnd), "texture3")), Texture[Game][2]);
+            gtk_spin_button_set_value(GTK_SPIN_BUTTON(g_object_get_data(G_OBJECT(g_pWnd), "tex_slant")),
+                                      SlantAngle);
+            sprintf(Text, RForm, TexOffset[0]);
+            gtk_entry_set_text(GTK_ENTRY(g_object_get_data(G_OBJECT(g_pWnd), "texoffsetx")), Text);
+            sprintf(Text, RForm, TexOffset[1]);
+            gtk_entry_set_text(GTK_ENTRY(g_object_get_data(G_OBJECT(g_pWnd), "texoffsety")), Text);
+            sprintf(Text, RForm, TexScale[0]);
+            gtk_entry_set_text(GTK_ENTRY(g_object_get_data(G_OBJECT(g_pWnd), "texscalex")), Text);
+            sprintf(Text, RForm, TexScale[1]);
+            gtk_entry_set_text(GTK_ENTRY(g_object_get_data(G_OBJECT(g_pWnd), "texscaley")), Text);
+            CHECK_WIDGET("detail", UseDetail);
+
+            if (Game == QUAKE3) {
+                ENABLE_WIDGET("hint", FALSE);
+                AddHints = 0;
+            } else {
+                ENABLE_WIDGET("hint", TRUE);
+            }
+            CHECK_WIDGET("hint", AddHints);
+
+            /*
                   if (Game==SIN)
                   {
                   // ArghRad doesn't currently support SiN
@@ -430,8 +427,8 @@ static void SetDlgValues( int tab ){
                   }
                 */
 
-               if ( Game == QUAKE3 ) {
-                       /*
+            if (Game == QUAKE3) {
+                /*
                           // ArghRad sun is inapplicable (so far)
                           EnableWindow(GetDlgItem(hwndDisplay,DLG_ARGHRAD2),       0);
                           EnableWindow(GetDlgItem(hwndDisplay,DLG_ARGHRAD2_SPIN),  0);
@@ -444,7 +441,7 @@ static void SetDlgValues( int tab ){
                           SetDlgItemText(hwndDisplay,DLG_TEX_USEPAK,"Use pk3 file");
                           SetDlgItemText(hwndDisplay,DLG_TEX_PAK_TEXT,"PK3:");
                         */
-               }
+            }
 
 /*trix if(Game==HERETIC2)
         {
@@ -458,7 +455,7 @@ static void SetDlgValues( int tab ){
             SetDlgItemText(hwndDisplay,DLG_TEX_USEPAK,"Use pak file");
             SetDlgItemText(hwndDisplay,DLG_TEX_PAK_TEXT,"Pak:");
         } */
-               /*
+            /*
                    if(Game==HALFLIFE)
                    {
                        // A bunch of controls aren't applicable to HL
@@ -496,55 +493,55 @@ static void SetDlgValues( int tab ){
                        SetDlgItemText(hwndDisplay,DLG_TEX_PAK_TEXT,"Sin:");
                    }
                 */
-               break;
-       }
-       SetupControls();
+            break;
+    }
+    SetupControls();
 }
 
-static void ReadDlgValues( int tab ){
-       //  char Text[256];
-       //  int i;
-
-       switch ( tab )
-       {
-       case GENERAL_TAB:
-               gpointer spin;
-               Roughness  = atof( gtk_entry_get_text( GTK_ENTRY( g_object_get_data( G_OBJECT( g_pWnd ), "roughness" ) ) ) );
-               WaveLength = atof( gtk_entry_get_text( GTK_ENTRY( g_object_get_data( G_OBJECT( g_pWnd ), "wavelength" ) ) ) );
-               Amplitude  = atof( gtk_entry_get_text( GTK_ENTRY( g_object_get_data( G_OBJECT( g_pWnd ), "amplitude" ) ) ) );
-               spin = g_object_get_data( G_OBJECT( g_pWnd ), "random" );
-               RandomSeed = gtk_spin_button_get_value_as_int( GTK_SPIN_BUTTON( spin ) );
-               break;
-
-       case EXTENTS_TAB:
-               SP = atoi( gtk_entry_get_text( GTK_ENTRY( g_object_get_data( G_OBJECT( g_pWnd ), "sp" ) ) ) );
-               NH = atoi( gtk_entry_get_text( GTK_ENTRY( g_object_get_data( G_OBJECT( g_pWnd ), "nh" ) ) ) );
-               NV = atoi( gtk_entry_get_text( GTK_ENTRY( g_object_get_data( G_OBJECT( g_pWnd ), "nv" ) ) ) );
-
-               if ( Game == QUAKE3 && UsePatches != 0 ) {
-                       if ( NH % 2 ) {
-                               NH++;
-                       }
-                       if ( NH < 2 ) {
-                               NH = 2;
-                       }
-                       if ( NH > MAX_ROWS ) {
-                               NH = MAX_ROWS;
-                       }
-                       if ( NV % 2 ) {
-                               NV++;
-                       }
-                       if ( NV < 2 ) {
-                               NV = 2;
-                       }
-                       if ( NV > MAX_ROWS ) {
-                               NV = MAX_ROWS;
-                       }
-               }
-               break;
+static void ReadDlgValues(int tab)
+{
+    //  char Text[256];
+    //  int i;
+
+    switch (tab) {
+        case GENERAL_TAB:
+            gpointer spin;
+            Roughness = atof(gtk_entry_get_text(GTK_ENTRY(g_object_get_data(G_OBJECT(g_pWnd), "roughness"))));
+            WaveLength = atof(gtk_entry_get_text(GTK_ENTRY(g_object_get_data(G_OBJECT(g_pWnd), "wavelength"))));
+            Amplitude = atof(gtk_entry_get_text(GTK_ENTRY(g_object_get_data(G_OBJECT(g_pWnd), "amplitude"))));
+            spin = g_object_get_data(G_OBJECT(g_pWnd), "random");
+            RandomSeed = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(spin));
+            break;
+
+        case EXTENTS_TAB:
+            SP = atoi(gtk_entry_get_text(GTK_ENTRY(g_object_get_data(G_OBJECT(g_pWnd), "sp"))));
+            NH = atoi(gtk_entry_get_text(GTK_ENTRY(g_object_get_data(G_OBJECT(g_pWnd), "nh"))));
+            NV = atoi(gtk_entry_get_text(GTK_ENTRY(g_object_get_data(G_OBJECT(g_pWnd), "nv"))));
+
+            if (Game == QUAKE3 && UsePatches != 0) {
+                if (NH % 2) {
+                    NH++;
+                }
+                if (NH < 2) {
+                    NH = 2;
+                }
+                if (NH > MAX_ROWS) {
+                    NH = MAX_ROWS;
+                }
+                if (NV % 2) {
+                    NV++;
+                }
+                if (NV < 2) {
+                    NV = 2;
+                }
+                if (NV > MAX_ROWS) {
+                    NV = MAX_ROWS;
+                }
+            }
+            break;
 
 #if 0
-       case BITMAP_TAB:
+                                                                                                                                case BITMAP_TAB:
 
                if ( WaveType == WAVE_BITMAP ) {
                        GetDlgItemText( hwnd,DLG_BMP_FILE,gbmp.name,sizeof( gbmp.name ) );
@@ -635,128 +632,139 @@ static void ReadDlgValues( int tab ){
                ArghRad2 = atoi( Text );
                break;
 #endif
-       }
+    }
 }
 
 // =============================================================================
 // main dialog callbacks
 
-static void switch_page( GtkNotebook *notebook, GtkNotebookPage *page, guint page_num, gpointer data ){
-       if ( current_tab != page_num ) {
-               if ( page_num == FIXPOINTS_TAB ) {
-                       OldPreview = Preview;
-                       gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( g_object_get_data( G_OBJECT( g_pWnd ),
-                                                                                                                                                               "main_preview" ) ), TRUE );
-                       VertexMode = 1;
-                       UpdatePreview( true );
-                       NumVerticesSelected = 0;
-               }
-
-               if ( current_tab == FIXPOINTS_TAB ) {
-                       if ( !OldPreview ) {
-                               gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( g_object_get_data( G_OBJECT( g_pWnd ),
-                                                                                                                                                                       "main_preview" ) ), FALSE );
-                       }
-                       VertexMode = 0;
-                       UpdatePreview( true );
-                       NumVerticesSelected = 0;
-               }
-
-               if ( page_num == TEXTURE_TAB ) {
-                       WasDetail = UseDetail;
-                       if ( AddHints ) {
-                               UseDetail = 1;
-                               ENABLE_WIDGET( "detail", FALSE );
-                       }
-               }
-
-               ReadDlgValues( current_tab );
-               current_tab = page_num;
-               SetDlgValues( current_tab );
-       }
+static void switch_page(GtkNotebook *notebook, GtkNotebookPage *page, guint page_num, gpointer data)
+{
+    if (current_tab != page_num) {
+        if (page_num == FIXPOINTS_TAB) {
+            OldPreview = Preview;
+            gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(g_object_get_data(G_OBJECT(g_pWnd),
+                                                                             "main_preview")), TRUE);
+            VertexMode = 1;
+            UpdatePreview(true);
+            NumVerticesSelected = 0;
+        }
+
+        if (current_tab == FIXPOINTS_TAB) {
+            if (!OldPreview) {
+                gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(g_object_get_data(G_OBJECT(g_pWnd),
+                                                                                 "main_preview")), FALSE);
+            }
+            VertexMode = 0;
+            UpdatePreview(true);
+            NumVerticesSelected = 0;
+        }
+
+        if (page_num == TEXTURE_TAB) {
+            WasDetail = UseDetail;
+            if (AddHints) {
+                UseDetail = 1;
+                ENABLE_WIDGET("detail", FALSE);
+            }
+        }
+
+        ReadDlgValues(current_tab);
+        current_tab = page_num;
+        SetDlgValues(current_tab);
+    }
 }
 
-static gint main_close( GtkWidget *widget, gpointer data ){
-       gtk_widget_hide( g_pWnd );
-       gtk_widget_hide( g_pWndPreview );
+static gint main_close(GtkWidget *widget, gpointer data)
+{
+    gtk_widget_hide(g_pWnd);
+    gtk_widget_hide(g_pWndPreview);
 
-       return TRUE;
+    return TRUE;
 }
 
-static void main_save( GtkWidget *widget, gpointer data ){
-       ReadDlgValues( current_tab );
-       SaveSetup( g_pWnd );
+static void main_save(GtkWidget *widget, gpointer data)
+{
+    ReadDlgValues(current_tab);
+    SaveSetup(g_pWnd);
 }
 
-static void main_open( GtkWidget *widget, gpointer data ){
-       OpenSetup( g_pWnd, 0 );
-       for ( int i = 0; i < 5; i++ )
-               SetDlgValues( i );
-       ShowPreview();
+static void main_open(GtkWidget *widget, gpointer data)
+{
+    OpenSetup(g_pWnd, 0);
+    for (int i = 0; i < 5; i++) {
+        SetDlgValues(i);
+    }
+    ShowPreview();
 }
 
-static void main_defaults( GtkWidget *widget, gpointer data ){
-       OpenSetup( g_pWnd, 1 );
-       for ( int i = 0; i < 5; i++ )
-               SetDlgValues( i );
-       ShowPreview();
+static void main_defaults(GtkWidget *widget, gpointer data)
+{
+    OpenSetup(g_pWnd, 1);
+    for (int i = 0; i < 5; i++) {
+        SetDlgValues(i);
+    }
+    ShowPreview();
 }
 
-static void main_preview( GtkWidget *widget, gpointer data ){
-       Preview = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( widget ) );
-       ShowPreview();
+static void main_preview(GtkWidget *widget, gpointer data)
+{
+    Preview = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
+    ShowPreview();
 }
 
 // ^Fishman - Antializing for the preview window.
-static void main_antialiasing( GtkWidget *widget, gpointer data ){
-       Antialiasing = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( widget ) );
-       UpdatePreview( true );
+static void main_antialiasing(GtkWidget *widget, gpointer data)
+{
+    Antialiasing = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
+    UpdatePreview(true);
 }
 
-static void main_about( GtkWidget *widget, gpointer data ){
-       About( g_pWnd );
+static void main_about(GtkWidget *widget, gpointer data)
+{
+    About(g_pWnd);
 }
 
-static void main_go( GtkWidget *widget, gpointer data ){
-       GtkWidget *notebook = g_object_get_data( G_OBJECT( g_pWnd , "notebook" ) );
-       char Text[256];
-
-       ReadDlgValues( current_tab );
-       if ( NH < 1 || NH > MAX_ROWS ) {
-               sprintf( Text, "The number of divisions must be > 0 and no greater than %d.", MAX_ROWS );
-               g_FuncTable.m_pfnMessageBox( g_pWnd, Text, "GenSurf", eMB_OK, eMB_ICONWARNING );
-               gtk_notebook_set_page( GTK_NOTEBOOK( notebook ), EXTENTS_TAB );
-               return;
-       }
-
-       if ( NV < 1 || NV > MAX_ROWS ) {
-               sprintf( Text, "The number of divisions must be > 0 and no greater than %d.", MAX_ROWS );
-               g_FuncTable.m_pfnMessageBox( g_pWnd, Text, "GenSurf", eMB_OK, eMB_ICONWARNING );
-               gtk_notebook_set_page( GTK_NOTEBOOK( notebook ), EXTENTS_TAB );
-               return;
-       }
-
-       if ( Hll >= Hur ) {
-               g_FuncTable.m_pfnMessageBox( g_pWnd, "The \"lower-left\" values must be less than "
-                                                                                        "the corresponding \"upper-right\" values in "
-                                                                                        "the \"Extent\" box.","GenSurf", eMB_OK, eMB_ICONWARNING );
-               gtk_notebook_set_page( GTK_NOTEBOOK( notebook ), EXTENTS_TAB );
-               return;
-       }
-
-       if ( Vll >= Vur ) {
-               g_FuncTable.m_pfnMessageBox( g_pWnd,"The \"lower-left\" values must be less than "
-                                                                                       "the corresponding \"upper-right\" values in "
-                                                                                       "the \"Extent\" box.","GenSurf", eMB_OK, eMB_ICONWARNING );
-               gtk_notebook_set_page( GTK_NOTEBOOK( notebook ), EXTENTS_TAB );
-               return;
-       }
-
-       if ( !strlen( Texture[Game][0] ) ) {
-               g_FuncTable.m_pfnMessageBox( g_pWnd, "You must supply a texture name.", "GenSurf", eMB_OK, eMB_ICONWARNING );
-               gtk_notebook_set_page( GTK_NOTEBOOK( notebook ), EXTENTS_TAB );
-               return;
-       }
+static void main_go(GtkWidget *widget, gpointer data)
+{
+    GtkWidget *notebook = g_object_get_data(G_OBJECT(g_pWnd, "notebook"));
+    char Text[256];
+
+    ReadDlgValues(current_tab);
+    if (NH < 1 || NH > MAX_ROWS) {
+        sprintf(Text, "The number of divisions must be > 0 and no greater than %d.", MAX_ROWS);
+        g_FuncTable.m_pfnMessageBox(g_pWnd, Text, "GenSurf", eMB_OK, eMB_ICONWARNING);
+        gtk_notebook_set_page(GTK_NOTEBOOK(notebook), EXTENTS_TAB);
+        return;
+    }
+
+    if (NV < 1 || NV > MAX_ROWS) {
+        sprintf(Text, "The number of divisions must be > 0 and no greater than %d.", MAX_ROWS);
+        g_FuncTable.m_pfnMessageBox(g_pWnd, Text, "GenSurf", eMB_OK, eMB_ICONWARNING);
+        gtk_notebook_set_page(GTK_NOTEBOOK(notebook), EXTENTS_TAB);
+        return;
+    }
+
+    if (Hll >= Hur) {
+        g_FuncTable.m_pfnMessageBox(g_pWnd, "The \"lower-left\" values must be less than "
+                "the corresponding \"upper-right\" values in "
+                "the \"Extent\" box.", "GenSurf", eMB_OK, eMB_ICONWARNING);
+        gtk_notebook_set_page(GTK_NOTEBOOK(notebook), EXTENTS_TAB);
+        return;
+    }
+
+    if (Vll >= Vur) {
+        g_FuncTable.m_pfnMessageBox(g_pWnd, "The \"lower-left\" values must be less than "
+                "the corresponding \"upper-right\" values in "
+                "the \"Extent\" box.", "GenSurf", eMB_OK, eMB_ICONWARNING);
+        gtk_notebook_set_page(GTK_NOTEBOOK(notebook), EXTENTS_TAB);
+        return;
+    }
+
+    if (!strlen(Texture[Game][0])) {
+        g_FuncTable.m_pfnMessageBox(g_pWnd, "You must supply a texture name.", "GenSurf", eMB_OK, eMB_ICONWARNING);
+        gtk_notebook_set_page(GTK_NOTEBOOK(notebook), EXTENTS_TAB);
+        return;
+    }
 
 /*  if (Decimate>0 && GimpHints!=0)
    {
@@ -767,94 +775,100 @@ static void main_go( GtkWidget *widget, gpointer data ){
     GimpHints = 0;
    } */
 
-       gtk_widget_hide( g_pWnd );
-       if ( g_pWndPreview ) {
-               gtk_widget_hide( g_pWndPreview );
-       }
+    gtk_widget_hide(g_pWnd);
+    if (g_pWndPreview) {
+        gtk_widget_hide(g_pWndPreview);
+    }
 
-       GenerateMap();
-       WriteIniFile( gszIni );
+    GenerateMap();
+    WriteIniFile(gszIni);
 }
 
 // =============================================================================
 // general tab callbacks
 
-static void general_game( GtkToggleButton *widget, gpointer data ){
-       if ( gtk_toggle_button_get_active( widget ) ) {
-               Game = GPOINTER_TO_INT( data );
-               UpdatePreview( TRUE );
-       }
+static void general_game(GtkToggleButton *widget, gpointer data)
+{
+    if (gtk_toggle_button_get_active(widget)) {
+        Game = GPOINTER_TO_INT(data);
+        UpdatePreview(TRUE);
+    }
 }
 
-static void general_plane( GtkToggleButton *widget, gpointer data ){
-       if ( gtk_toggle_button_get_active( widget ) ) {
-               Plane = GPOINTER_TO_INT( data );
-               SetupControls();
-               UpdatePreview( TRUE );
-       }
+static void general_plane(GtkToggleButton *widget, gpointer data)
+{
+    if (gtk_toggle_button_get_active(widget)) {
+        Plane = GPOINTER_TO_INT(data);
+        SetupControls();
+        UpdatePreview(TRUE);
+    }
 }
 
-static void general_wave( GtkToggleButton *widget, gpointer data ){
-       if ( gtk_toggle_button_get_active( widget ) ) {
-               WaveType = GPOINTER_TO_INT( data );
-               SetupControls();
-               UpdatePreview( TRUE );
-       }
+static void general_wave(GtkToggleButton *widget, gpointer data)
+{
+    if (gtk_toggle_button_get_active(widget)) {
+        WaveType = GPOINTER_TO_INT(data);
+        SetupControls();
+        UpdatePreview(TRUE);
+    }
 }
 
-static void general_random( GtkAdjustment *adj, gpointer data ){
-       int nPos = (int)adj->value;
+static void general_random(GtkAdjustment *adj, gpointer data)
+{
+    int nPos = (int) adj->value;
 
-       if ( RandomSeed != nPos ) {
-               RandomSeed = nPos;
-               UpdatePreview( true );
-       }
+    if (RandomSeed != nPos) {
+        RandomSeed = nPos;
+        UpdatePreview(true);
+    }
 }
 
 // =============================================================================
 // extents tab callbacks
 
-static void extents_linearborder( GtkToggleButton *check, gpointer data ){
-       FixBorders = gtk_toggle_button_get_active( check );
-       UpdatePreview( true );
+static void extents_linearborder(GtkToggleButton *check, gpointer data)
+{
+    FixBorders = gtk_toggle_button_get_active(check);
+    UpdatePreview(true);
 }
 
-static void extents_use_patches( GtkToggleButton *check, gpointer data ){
-       if ( Game != QUAKE3 ) {
-               return;
-       }
+static void extents_use_patches(GtkToggleButton *check, gpointer data)
+{
+    if (Game != QUAKE3) {
+        return;
+    }
 
-       UsePatches = gtk_toggle_button_get_active( check );
-       SetDlgValues( current_tab );
-       SetupControls();
-       UpdatePreview( true );
+    UsePatches = gtk_toggle_button_get_active(check);
+    SetDlgValues(current_tab);
+    SetupControls();
+    UpdatePreview(true);
 }
 
-static void extents_nhnv_spin( GtkAdjustment *adj, int *data ){
-       int nPos = (int)adj->value;
-
-       if ( *data != nPos ) {
-               if ( Game == QUAKE3 && UsePatches && ( nPos % 2 ) ) {
-                       if ( *data < nPos ) {
-                               *data += 2;
-                       }
-                       else{
-                               *data -= 2;
-                       }
-                       gtk_adjustment_set_value( adj, *data );
-               }
-               else{
-                       *data = nPos;
-               }
-               UpdatePreview( true );
-       }
+static void extents_nhnv_spin(GtkAdjustment *adj, int *data)
+{
+    int nPos = (int) adj->value;
+
+    if (*data != nPos) {
+        if (Game == QUAKE3 && UsePatches && (nPos % 2)) {
+            if (*data < nPos) {
+                *data += 2;
+            } else {
+                *data -= 2;
+            }
+            gtk_adjustment_set_value(adj, *data);
+        } else {
+            *data = nPos;
+        }
+        UpdatePreview(true);
+    }
 }
 
-static void extents_decimate( GtkAdjustment *adj, gpointer data ){
-       int nPos = (int)adj->value;
+static void extents_decimate(GtkAdjustment *adj, gpointer data)
+{
+    int nPos = (int) adj->value;
 
-       Decimate = nPos;
-       UpdatePreview( true );
+    Decimate = nPos;
+    UpdatePreview(true);
 }
 
 // Hydra : snap to grid begin
@@ -867,1216 +881,1237 @@ static void extents_decimate( GtkAdjustment *adj, gpointer data ){
    }*/
 
 // ^Fishman - Modified version of Hydra's snap to grid code.
-static void extents_snaptogrid_spin( GtkAdjustment *adj, int *data ){
-       int nPos = (int)adj->value;
-       SnapToGrid = nPos;
-       UpdatePreview( true );
+static void extents_snaptogrid_spin(GtkAdjustment *adj, int *data)
+{
+    int nPos = (int) adj->value;
+    SnapToGrid = nPos;
+    UpdatePreview(true);
 }
 
 // =============================================================================
 // bitmap tab callbacks
 
-static gint bitmap_file_entryfocusout( GtkWidget* widget, GdkEventFocus* event, gpointer data ){
-       char filename[NAME_MAX];
-
-       strcpy( filename, gtk_entry_get_text( GTK_ENTRY( widget ) ) );
-       if ( strcmp( filename,gbmp.name ) ) {
-               strcpy( gbmp.name,filename );
-               if ( strlen( gbmp.name ) ) {
-                       OpenBitmap();
-               }
-               ENABLE_WIDGET( "go", ( gbmp.colors != NULL ? TRUE : FALSE ) );
-       }
-       return FALSE;
+static gint bitmap_file_entryfocusout(GtkWidget *widget, GdkEventFocus *event, gpointer data)
+{
+    char filename[NAME_MAX];
+
+    strcpy(filename, gtk_entry_get_text(GTK_ENTRY(widget)));
+    if (strcmp(filename, gbmp.name)) {
+        strcpy(gbmp.name, filename);
+        if (strlen(gbmp.name)) {
+            OpenBitmap();
+        }
+        ENABLE_WIDGET("go", (gbmp.colors != NULL ? TRUE : FALSE));
+    }
+    return FALSE;
 }
 
-static void bitmap_browse( GtkWidget *widget, gpointer data ){
-       const char *filename;
-       char *ptr;
+static void bitmap_browse(GtkWidget *widget, gpointer data)
+{
+    const char *filename;
+    char *ptr;
 
-       filename = g_FuncTable.m_pfnFileDialog( g_pWnd, TRUE, "Bitmap File", gbmp.defpath );
+    filename = g_FuncTable.m_pfnFileDialog(g_pWnd, TRUE, "Bitmap File", gbmp.defpath);
 
-       if ( filename != NULL ) {
-               strcpy( gbmp.name, filename );
+    if (filename != NULL) {
+        strcpy(gbmp.name, filename);
 
-               ptr = strrchr( filename, G_DIR_SEPARATOR );
-               if ( ptr != NULL ) {
-                       *( ptr + 1 ) = '\0';
-                       strcpy( gbmp.defpath, filename );
-               }
+        ptr = strrchr(filename, G_DIR_SEPARATOR);
+        if (ptr != NULL) {
+            *(ptr + 1) = '\0';
+            strcpy(gbmp.defpath, filename);
+        }
 
-               OpenBitmap();
-               ENABLE_WIDGET( "go", ( gbmp.colors != NULL ? TRUE : FALSE ) );
-       }
+        OpenBitmap();
+        ENABLE_WIDGET("go", (gbmp.colors != NULL ? TRUE : FALSE));
+    }
 }
 
-static void bitmap_reload( GtkWidget *widget, gpointer data ){
-       strcpy( gbmp.name, gtk_entry_get_text( GTK_ENTRY( g_object_get_data( G_OBJECT( g_pWnd ), "bmp_file" ) ) ) );
-       if ( strlen( gbmp.name ) ) {
-               OpenBitmap();
-               ENABLE_WIDGET( "go", ( gbmp.colors != NULL ? TRUE : FALSE ) );
-       }
-       else{
-               ENABLE_WIDGET( "go", FALSE );
-       }
+static void bitmap_reload(GtkWidget *widget, gpointer data)
+{
+    strcpy(gbmp.name, gtk_entry_get_text(GTK_ENTRY(g_object_get_data(G_OBJECT(g_pWnd), "bmp_file"))));
+    if (strlen(gbmp.name)) {
+        OpenBitmap();
+        ENABLE_WIDGET("go", (gbmp.colors != NULL ? TRUE : FALSE));
+    } else {
+        ENABLE_WIDGET("go", FALSE);
+    }
 }
 
 // =============================================================================
 // fix points tab callbacks
 
-static gint fix_value_entryfocusout( GtkWidget* widget, GdkEventFocus *event, gpointer data ){
-       int i = atoi( gtk_entry_get_text( GTK_ENTRY( widget ) ) ), k;
-       char Text[32];
-
-       if ( i < -65536 || i > 65536 ) {
-               gdk_beep();
-               g_FuncTable.m_pfnMessageBox( g_pWnd, "The value must be between -65536 and 65536, inclusive.",
-                                                                        "GenSurf", eMB_OK, eMB_ICONWARNING );
-               sprintf( Text, "%d", (int)xyz[Vertex[0].i][Vertex[0].j].fixed_value );
-               gtk_entry_set_text( GTK_ENTRY( widget ), Text );
-               gtk_window_set_focus( widget.window(), widget );
-       }
-       else if ( i != xyz[Vertex[0].i][Vertex[0].j].fixed_value ) {
-               for ( k = 0; k < NumVerticesSelected; k++ )
-                       xyz[Vertex[k].i][Vertex[k].j].fixed_value = i;
-
-               gtk_spin_button_set_value( GTK_SPIN_BUTTON( g_object_get_data( G_OBJECT( g_pWnd ), "fix_value" ) ),
-                                                                  (int)xyz[Vertex[0].i][Vertex[0].j].fixed_value );
-               UpdatePreview( true );
-       }
-       return FALSE;
+static gint fix_value_entryfocusout(GtkWidget *widget, GdkEventFocus *event, gpointer data)
+{
+    int i = atoi(gtk_entry_get_text(GTK_ENTRY(widget))), k;
+    char Text[32];
+
+    if (i < -65536 || i > 65536) {
+        gdk_beep();
+        g_FuncTable.m_pfnMessageBox(g_pWnd, "The value must be between -65536 and 65536, inclusive.",
+                                    "GenSurf", eMB_OK, eMB_ICONWARNING);
+        sprintf(Text, "%d", (int) xyz[Vertex[0].i][Vertex[0].j].fixed_value);
+        gtk_entry_set_text(GTK_ENTRY(widget), Text);
+        gtk_window_set_focus(widget.window(), widget);
+    } else if (i != xyz[Vertex[0].i][Vertex[0].j].fixed_value) {
+        for (k = 0; k < NumVerticesSelected; k++) {
+            xyz[Vertex[k].i][Vertex[k].j].fixed_value = i;
+        }
+
+        gtk_spin_button_set_value(GTK_SPIN_BUTTON(g_object_get_data(G_OBJECT(g_pWnd), "fix_value")),
+                                  (int) xyz[Vertex[0].i][Vertex[0].j].fixed_value);
+        UpdatePreview(true);
+    }
+    return FALSE;
 }
 
-static void fix_value_changed( GtkAdjustment *adj, gpointer data ){
-       int k, i = (int)adj->value;
+static void fix_value_changed(GtkAdjustment *adj, gpointer data)
+{
+    int k, i = (int) adj->value;
 
-       if ( xyz[Vertex[0].i][Vertex[0].j].fixed_value != i ) {
-               for ( k = 0; k < NumVerticesSelected; k++ )
-                       xyz[Vertex[k].i][Vertex[k].j].fixed_value = i;
-               UpdatePreview( true );
-       }
+    if (xyz[Vertex[0].i][Vertex[0].j].fixed_value != i) {
+        for (k = 0; k < NumVerticesSelected; k++) {
+            xyz[Vertex[k].i][Vertex[k].j].fixed_value = i;
+        }
+        UpdatePreview(true);
+    }
 }
 
-static gint fix_range_entryfocusout( GtkWidget *widget, GdkEventFocus *event, gpointer data ){
-       int i = atoi( gtk_entry_get_text( GTK_ENTRY( widget ) ) ), k;
-
-       if ( i != xyz[Vertex[0].i][Vertex[0].j].range ) {
-               for ( k = 0; k < NumVerticesSelected; k++ )
-                       xyz[Vertex[k].i][Vertex[k].j].range = i;
-               UpdatePreview( true );
-       }
-       return FALSE;
+static gint fix_range_entryfocusout(GtkWidget *widget, GdkEventFocus *event, gpointer data)
+{
+    int i = atoi(gtk_entry_get_text(GTK_ENTRY(widget))), k;
+
+    if (i != xyz[Vertex[0].i][Vertex[0].j].range) {
+        for (k = 0; k < NumVerticesSelected; k++) {
+            xyz[Vertex[k].i][Vertex[k].j].range = i;
+        }
+        UpdatePreview(true);
+    }
+    return FALSE;
 }
 
-static gint fix_rate_entryfocusout( GtkWidget *widget, GdkEventFocus *event, gpointer data ){
-       double r = atof( gtk_entry_get_text( GTK_ENTRY( widget ) ) );
-       int k;
-
-       if ( r != xyz[Vertex[0].i][Vertex[0].j].rate ) {
-               for ( k = 0; k < NumVerticesSelected; k++ )
-                       xyz[Vertex[k].i][Vertex[k].j].rate = r;
-               UpdatePreview( true );
-       }
-       return FALSE;
+static gint fix_rate_entryfocusout(GtkWidget *widget, GdkEventFocus *event, gpointer data)
+{
+    double r = atof(gtk_entry_get_text(GTK_ENTRY(widget)));
+    int k;
+
+    if (r != xyz[Vertex[0].i][Vertex[0].j].rate) {
+        for (k = 0; k < NumVerticesSelected; k++) {
+            xyz[Vertex[k].i][Vertex[k].j].rate = r;
+        }
+        UpdatePreview(true);
+    }
+    return FALSE;
 }
 
-static void fix_free( GtkWidget *widget, gpointer data ){
-       int k;
+static void fix_free(GtkWidget *widget, gpointer data)
+{
+    int k;
 
-       for ( k = 0; k < NumVerticesSelected; k++ )
-               xyz[Vertex[k].i][Vertex[k].j].fixed = 0;
-       NumVerticesSelected = 0;
-       SetupControls();
-       UpdatePreview( true );
+    for (k = 0; k < NumVerticesSelected; k++) {
+        xyz[Vertex[k].i][Vertex[k].j].fixed = 0;
+    }
+    NumVerticesSelected = 0;
+    SetupControls();
+    UpdatePreview(true);
 }
 
-static void fix_freeall( GtkWidget *widget, gpointer data ){
-       int i, j;
+static void fix_freeall(GtkWidget *widget, gpointer data)
+{
+    int i, j;
 
-       for ( i = 0; i <= NH; i++ )
-       {
-               for ( j = 0; j <= NV; j++ )
-                       xyz[i][j].fixed = 0;
-       }
-       fix_free( NULL, data ); // keep these together
+    for (i = 0; i <= NH; i++) {
+        for (j = 0; j <= NV; j++) {
+            xyz[i][j].fixed = 0;
+        }
+    }
+    fix_free(NULL, data); // keep these together
 }
 
-void vertex_selected(){
-       char Text[32];
-       int k;
-
-       SetupControls();
-
-       switch ( Plane )
-       {
-       case PLANE_XZ0:
-       case PLANE_XZ1:
-               for ( k = 0; k < NumVerticesSelected; k++ )
-                       xyz[Vertex[k].i][Vertex[k].j].fixed_value = xyz[Vertex[0].i][Vertex[0].j].p[1];
-               break;
-       case PLANE_YZ0:
-       case PLANE_YZ1:
-               for ( k = 0; k < NumVerticesSelected; k++ )
-                       xyz[Vertex[k].i][Vertex[k].j].fixed_value = xyz[Vertex[0].i][Vertex[0].j].p[0];
-               break;
-       default:
-               for ( k = 0; k < NumVerticesSelected; k++ )
-                       xyz[Vertex[k].i][Vertex[k].j].fixed_value = xyz[Vertex[0].i][Vertex[0].j].p[2];
-               break;
-       }
-
-       gtk_spin_button_set_value( GTK_SPIN_BUTTON( g_object_get_data( G_OBJECT( g_pWnd ), "fix_value" ) ),
-                                                          (int)xyz[Vertex[0].i][Vertex[0].j].fixed_value );
-
-       sprintf( Text,"%d",(int)xyz[Vertex[0].i][Vertex[0].j].range );
-       gtk_entry_set_text( GTK_ENTRY( g_object_get_data( G_OBJECT( g_pWnd ), "fix_range" ) ), Text );
-       sprintf( Text,"%.5g",xyz[Vertex[0].i][Vertex[0].j].rate );
-       gtk_entry_set_text( GTK_ENTRY( g_object_get_data( G_OBJECT( g_pWnd ), "fix_rate" ) ), Text );
-
-       for ( k = 0; k < NumVerticesSelected; k++ )
-               xyz[Vertex[k].i][Vertex[k].j].fixed = 1;
-
-       UpdatePreview( true );
+void vertex_selected()
+{
+    char Text[32];
+    int k;
+
+    SetupControls();
+
+    switch (Plane) {
+        case PLANE_XZ0:
+        case PLANE_XZ1:
+            for (k = 0; k < NumVerticesSelected; k++) {
+                xyz[Vertex[k].i][Vertex[k].j].fixed_value = xyz[Vertex[0].i][Vertex[0].j].p[1];
+            }
+            break;
+        case PLANE_YZ0:
+        case PLANE_YZ1:
+            for (k = 0; k < NumVerticesSelected; k++) {
+                xyz[Vertex[k].i][Vertex[k].j].fixed_value = xyz[Vertex[0].i][Vertex[0].j].p[0];
+            }
+            break;
+        default:
+            for (k = 0; k < NumVerticesSelected; k++) {
+                xyz[Vertex[k].i][Vertex[k].j].fixed_value = xyz[Vertex[0].i][Vertex[0].j].p[2];
+            }
+            break;
+    }
+
+    gtk_spin_button_set_value(GTK_SPIN_BUTTON(g_object_get_data(G_OBJECT(g_pWnd), "fix_value")),
+                              (int) xyz[Vertex[0].i][Vertex[0].j].fixed_value);
+
+    sprintf(Text, "%d", (int) xyz[Vertex[0].i][Vertex[0].j].range);
+    gtk_entry_set_text(GTK_ENTRY(g_object_get_data(G_OBJECT(g_pWnd), "fix_range")), Text);
+    sprintf(Text, "%.5g", xyz[Vertex[0].i][Vertex[0].j].rate);
+    gtk_entry_set_text(GTK_ENTRY(g_object_get_data(G_OBJECT(g_pWnd), "fix_rate")), Text);
+
+    for (k = 0; k < NumVerticesSelected; k++) {
+        xyz[Vertex[k].i][Vertex[k].j].fixed = 1;
+    }
+
+    UpdatePreview(true);
 }
 
 // =============================================================================
 // texture tab callbacks
 
-static void texture_detail( GtkToggleButton *check, gpointer data ){
-       UseDetail = gtk_toggle_button_get_active( check );
-       WasDetail = UseDetail;
+static void texture_detail(GtkToggleButton *check, gpointer data)
+{
+    UseDetail = gtk_toggle_button_get_active(check);
+    WasDetail = UseDetail;
 }
 
-static void texture_hint( GtkToggleButton *check, gpointer data ){
-       AddHints = gtk_toggle_button_get_active( check );
-       if ( AddHints == 1 ) {
-               UseDetail = 1;
-               ENABLE_WIDGET( "detail", FALSE );
-       }
-       else
-       {
-               UseDetail = WasDetail;
-               ENABLE_WIDGET( "detail", FALSE );
-       }
-       CHECK_WIDGET( "detail", UseDetail );
+static void texture_hint(GtkToggleButton *check, gpointer data)
+{
+    AddHints = gtk_toggle_button_get_active(check);
+    if (AddHints == 1) {
+        UseDetail = 1;
+        ENABLE_WIDGET("detail", FALSE);
+    } else {
+        UseDetail = WasDetail;
+        ENABLE_WIDGET("detail", FALSE);
+    }
+    CHECK_WIDGET("detail", UseDetail);
 }
 
 // ^Fishman - Add terrain key to func_group.
-static void texture_terrainent( GtkToggleButton *check, gpointer data ){
-       AddTerrainKey = gtk_toggle_button_get_active( check );
+static void texture_terrainent(GtkToggleButton *check, gpointer data)
+{
+    AddTerrainKey = gtk_toggle_button_get_active(check);
 }
 
-static void texture_set( int index, const char* name ){
-       strcpy( Texture[Game][index], name );
+static void texture_set(int index, const char *name)
+{
+    strcpy(Texture[Game][index], name);
 }
 
-static gint texture_entryfocusout( GtkWidget* widget, GdkEventFocus* event, gpointer data ){
-       texture_set( GPOINTER_TO_INT( data ), gtk_entry_get_text( GTK_ENTRY( widget ) ) );
-       return FALSE;
+static gint texture_entryfocusout(GtkWidget *widget, GdkEventFocus *event, gpointer data)
+{
+    texture_set(GPOINTER_TO_INT(data), gtk_entry_get_text(GTK_ENTRY(widget)));
+    return FALSE;
 }
 
 // =============================================================================
 // misc stuff
 
-static void UpdateVariable( GtkEntry *entry, GdkEventFocus *event, double *data ){
-       double x = atof( gtk_entry_get_text( entry ) );
+static void UpdateVariable(GtkEntry *entry, GdkEventFocus *event, double *data)
+{
+    double x = atof(gtk_entry_get_text(entry));
 
-       if ( x != *data ) {
-               *data = x;
-               UpdatePreview( true );
-       }
+    if (x != *data) {
+        *data = x;
+        UpdatePreview(true);
+    }
 }
 
-static gint doublevariable_entryfocusout( GtkWidget* widget, GdkEventFocus* event, gpointer data ){
-       UpdateVariable( GTK_ENTRY( widget ), event, reinterpret_cast<double*>( data ) );
-       return FALSE;
+static gint doublevariable_entryfocusout(GtkWidget *widget, GdkEventFocus *event, gpointer data)
+{
+    UpdateVariable(GTK_ENTRY(widget), event, reinterpret_cast<double *>( data ));
+    return FALSE;
 }
 
 // =============================================================================
 // create tooltips
 
-void create_tooltips(){
-       tooltips = gtk_tooltips_new();
-
-       // Main
-       gtk_tooltips_set_tip( GTK_TOOLTIPS( tooltips ),
-                                                 g_object_get_data( G_OBJECT( g_pWnd , "go" ) ),
-                                                 "Accept all input and generate a surface in Q3Radiant",
-                                                 "" );
-       gtk_tooltips_set_tip( GTK_TOOLTIPS( tooltips ),
-                                                 g_object_get_data( G_OBJECT( g_pWnd , "open" ) ),
-                                                 "Open a previously saved GenSurf settings file.",
-                                                 "" );
-       gtk_tooltips_set_tip( GTK_TOOLTIPS( tooltips ),
-                                                 g_object_get_data( G_OBJECT( g_pWnd , "save" ) ),
-                                                 "Save all settings to a file.",
-                                                 "" );
-       gtk_tooltips_set_tip( GTK_TOOLTIPS( tooltips ),
-                                                 g_object_get_data( G_OBJECT( g_pWnd , "defaults" ) ),
-                                                 "Restore default values from DEFAULTS.SRF. If this file does not exist, GenSurf "
-                                                 "initializes all input parameters to reasonable values. You can create your own "
-                                                 "default surface by setting all parameters to your liking, then saving a settings "
-                                                 "file as DEFAULTS.SRF with the Save As button.",
-                                                 "" );
-
-       gtk_tooltips_set_tip( GTK_TOOLTIPS( tooltips ),
-                                                 g_object_get_data( G_OBJECT( g_pWnd , "main_preview" ) ),
-                                                 "View a wire-frame representation of the surface",
-                                                 "" );
-
-       gtk_tooltips_set_tip( GTK_TOOLTIPS( tooltips ),
-                                                 g_object_get_data( G_OBJECT( g_pWnd , "main_antialiasing" ) ),
-                                                 "The lines in the preview window are antialiased for better quality",
-                                                 "" );
-
-       // General tab
-       gtk_tooltips_set_tip( GTK_TOOLTIPS( tooltips ),
-                                                 wave_radios[0] ,
-                                                 "Builds a surface with alternating hills and valleys. Uses the general form Z=cos(X) "
-                                                 "x sin(Y)",
-                                                 "" );
-       gtk_tooltips_set_tip( GTK_TOOLTIPS( tooltips ),
-                                                 wave_radios[1] ,
-                                                 "Builds a surface with ridges parallel to the vertical axis.",
-                                                 "" );
-       gtk_tooltips_set_tip( GTK_TOOLTIPS( tooltips ),
-                                                 wave_radios[2] ,
-                                                 "Builds a surface with ridges parallel to the horizontal axis.",
-                                                 "" );
-       gtk_tooltips_set_tip( GTK_TOOLTIPS( tooltips ),
-                                                 wave_radios[3] ,
-                                                 "Builds a map from a bitmap image representing a contour plot. Click the \"Bitmap\" "
-                                                 "tab to select the image. GenSurf only supports 256-color (8 bit) "
-                                                 "bitmaps. GenSurf will work with any 256-color bitmap, but gray scale bitmaps are a bit "
-                                                 "more intuitive.",
-                                                 "" );
-       gtk_tooltips_set_tip( GTK_TOOLTIPS( tooltips ),
-                                                 wave_radios[4] ,
-                                                 "Builds a random surface using the Plasma Cloud technique. Variance is controlled "
-                                                 "by the Roughness input. To build a surface with completely random values not "
-                                                 "dependent on neighboring vertices, use one of the other waveforms with 0 amplitude.",
-                                                 "" );
-       gtk_tooltips_set_tip( GTK_TOOLTIPS( tooltips ),
-                                                 g_object_get_data( G_OBJECT( g_pWnd , "wavelength" ) ),
-                                                 "Enter the wavelength (distance between crests). NOTE: Wavelengths equal to the grid "
-                                                 "size or 2 times the grid size will result in 0 amplitudes. For best results, the "
-                                                 "wavelength value should be at least 4 times the grid size (extents divided by the "
-                                                 "number of divisions",
-                                                 "" );
-       gtk_tooltips_set_tip( GTK_TOOLTIPS( tooltips ),
-                                                 g_object_get_data( G_OBJECT( g_pWnd , "amplitude" ) ),
-                                                 "Enter the height of hills/ridges.",
-                                                 "" );
-       gtk_tooltips_set_tip( GTK_TOOLTIPS( tooltips ),
-                                                 g_object_get_data( G_OBJECT( g_pWnd , "roughness" ) ),
-                                                 "Enter the roughness value (noise) for the surface. For fractal surfaces, this value "
-                                                 "is used as a variance in the fractal calculations.",
-                                                 "" );
-       gtk_tooltips_set_tip( GTK_TOOLTIPS( tooltips ),
-                                                 g_object_get_data( G_OBJECT( g_pWnd , "random" ) ),
-                                                 "Seed value for the pseudo-random number generator.",
-                                                 "" );
-       // Extents tab
-       gtk_tooltips_set_tip( GTK_TOOLTIPS( tooltips ),
-                                                 g_object_get_data( G_OBJECT( g_pWnd , "hmin" ) ),
-                                                 "Minimum horizontal coordinate of the surface, i.e. X for a surface parallel to "
-                                                 "the XY or XZ planes, Y for a surface parallel to the YZ plane. For best results, "
-                                                 "the extents (maximum-minimum values) in a given direction should be evenly "
-                                                 "divisible by the number of divisions in that direction.",
-                                                 "" );
-       gtk_tooltips_set_tip( GTK_TOOLTIPS( tooltips ),
-                                                 g_object_get_data( G_OBJECT( g_pWnd , "hmax" ) ),
-                                                 "Maximum horizontal coordinate of the surface, i.e. X for a surface parallel to "
-                                                 "the XY or XZ planes, Y for a surface parallel to the YZ plane. For best results, "
-                                                 "the extents (maximum-minimum values) in a given direction should be evenly "
-                                                 "divisible by the number of divisions in that direction.",
-                                                 "" );
-       gtk_tooltips_set_tip( GTK_TOOLTIPS( tooltips ),
-                                                 g_object_get_data( G_OBJECT( g_pWnd , "vmin" ) ),
-                                                 "Minimum vertical coordinate of the surface, i.e. Y for a surface parallel to "
-                                                 "the XY plane, Z for a surface parallel to the XZ or YZ planes. For best results, "
-                                                 "the extents (maximum-minimum values) in a given direction should be evenly "
-                                                 "divisible by the number of divisions in that direction.",
-                                                 "" );
-       gtk_tooltips_set_tip( GTK_TOOLTIPS( tooltips ),
-                                                 g_object_get_data( G_OBJECT( g_pWnd , "vmax" ) ),
-                                                 "Maximum vertical coordinate of the surface, i.e. Y for a surface parallel to "
-                                                 "the XY plane, Z for a surface parallel to the XZ or YZ planes. For best results, "
-                                                 "the extents (maximum-minimum values) in a given direction should be evenly "
-                                                 "divisible by the number of divisions in that direction.",
-                                                 "" );
-       gtk_tooltips_set_tip( GTK_TOOLTIPS( tooltips ),
-                                                 g_object_get_data( G_OBJECT( g_pWnd , "nh" ) ),
-                                                 "Number of divisions in the horizontal direction. For best results, the extents "
-                                                 "in a given direction should be evenly divisible by the number of divisions in "
-                                                 "that direction.",
-                                                 "" );
-       gtk_tooltips_set_tip( GTK_TOOLTIPS( tooltips ),
-                                                 g_object_get_data( G_OBJECT( g_pWnd , "nv" ) ),
-                                                 "Number of divisions in the vertical direction. For best results, the extents "
-                                                 "in a given direction should be evenly divisible by the number of divisions in "
-                                                 "that direction.",
-                                                 "" );
-       gtk_tooltips_set_tip( GTK_TOOLTIPS( tooltips ),
-                                                 g_object_get_data( G_OBJECT( g_pWnd , "use_patches" ) ),
-                                                 "Produce one or more curved patches in the shape of your selected surface rather "
-                                                 "than producing solid brushes. Depending on the size of your surface (and the "
-                                                 "user's graphic detail settings, which you cannot control), curved surfaces will "
-                                                 "be represented in the game by a very large number of polygons. Read the warnings "
-                                                 "concerning curved surfaces on the GenSurf web page before using this feature.",
-                                                 "" );
-       gtk_tooltips_set_tip( GTK_TOOLTIPS( tooltips ),
-                                                 g_object_get_data( G_OBJECT( g_pWnd , "decimate" ) ),
-                                                 "Use the slider to control the number of vertices discarded by GenSurf. For many "
-                                                 "surfaces, you can produce roughly the same shape surface with a high decimation "
-                                                 "value. This will generally result in a map with lower polygon counts (and better "
-                                                 "in-game performance). However, this feature should NOT be used for large terrain "
-                                                 "surfaces in Q3",
-                                                 "" );
-       gtk_tooltips_set_tip( GTK_TOOLTIPS( tooltips ),
-                                                 g_object_get_data( G_OBJECT( g_pWnd , "z00" ) ),
-                                                 "Enter the height of the surface at the lower left corner. This value will likely "
-                                                 "be modified unless \"Linear Borders\" is checked.",
-                                                 "" );
-       gtk_tooltips_set_tip( GTK_TOOLTIPS( tooltips ),
-                                                 g_object_get_data( G_OBJECT( g_pWnd , "z01" ) ),
-                                                 "Enter the height of the surface at the upper left corner. This value will likely "
-                                                 "be modified unless \"Linear Borders\" is checked.",
-                                                 "" );
-       gtk_tooltips_set_tip( GTK_TOOLTIPS( tooltips ),
-                                                 g_object_get_data( G_OBJECT( g_pWnd , "z10" ) ),
-                                                 "Enter the height of the surface at the lower right corner. This value will likely "
-                                                 "be modified unless \"Linear Borders\" is checked.",
-                                                 "" );
-       gtk_tooltips_set_tip( GTK_TOOLTIPS( tooltips ),
-                                                 g_object_get_data( G_OBJECT( g_pWnd , "z11" ) ),
-                                                 "Enter the height of the surface at the upper right corner. This value will likely "
-                                                 "be modified unless \"Linear Borders\" is checked.",
-                                                 "" );
-       gtk_tooltips_set_tip( GTK_TOOLTIPS( tooltips ),
-                                                 g_object_get_data( G_OBJECT( g_pWnd , "linearborder" ) ),
-                                                 "Restrict the edges of the surface to a straight line. This will help match up "
-                                                 "brush edges if you drop this surface into another map.",
-                                                 "" );
-       // Bitmap tab
-       gtk_tooltips_set_tip( GTK_TOOLTIPS( tooltips ),
-                                                 g_object_get_data( G_OBJECT( g_pWnd , "bmp_file" ) ),
-                                                 "Type the name of an 8-bit bitmap image file, or click Browse to select an image "
-                                                 "from a list of those available on your system.",
-                                                 "" );
-       gtk_tooltips_set_tip( GTK_TOOLTIPS( tooltips ),
-                                                 g_object_get_data( G_OBJECT( g_pWnd , "bmp_file_browse" ) ),
-                                                 "Select a bitmap image file from a list of those available on your system.",
-                                                 "" );
-       gtk_tooltips_set_tip( GTK_TOOLTIPS( tooltips ),
-                                                 g_object_get_data( G_OBJECT( g_pWnd , "bmp_reload" ) ),
-                                                 "Reload the selected bitmap file after making changes in an external image editor.",
-                                                 "" );
-       gtk_tooltips_set_tip( GTK_TOOLTIPS( tooltips ),
-                                                 g_object_get_data( G_OBJECT( g_pWnd , "bmp_black" ) ),
-                                                 "Enter the value corresponding to color index 0 in the bitmap file. For gray scale "
-                                                 "images, color 0 is normally black.",
-                                                 "" );
-       gtk_tooltips_set_tip( GTK_TOOLTIPS( tooltips ),
-                                                 g_object_get_data( G_OBJECT( g_pWnd , "bmp_white" ) ),
-                                                 "Enter the value corresponding to color index 255 in the bitmap file. For gray scale "
-                                                 "images, color 255 is normally white.",
-                                                 "" );
-       // Fixpoints tab
-       gtk_tooltips_set_tip( GTK_TOOLTIPS( tooltips ),
-                                                 g_object_get_data( G_OBJECT( g_pWnd , "fix_value" ) ),
-                                                 "Enter a value for the selected vertex. This value will not be adjusted when applying "
-                                                 "a waveform or roughness to the surface. Unlock this vertex (so that it will be "
-                                                 "adjusted normally) by clicking \"Free\". This vertex will influence vertices within "
-                                                 "the \"Range affected\" of this vertex.",
-                                                 "" );
-       gtk_tooltips_set_tip( GTK_TOOLTIPS( tooltips ),
-                                                 g_object_get_data( G_OBJECT( g_pWnd , "fix_range" ) ),
-                                                 "Enter the range away from the selected vertex that other vertices will be affected. "
-                                                 "Use 0 if you don't want other vertices to be influenced by the currently selected "
-                                                 "one. Note: this box is disabled if you've chosen the fractal generator, as it uses "
-                                                 "a completely different method for determining values.",
-                                                 "" );
-       gtk_tooltips_set_tip( GTK_TOOLTIPS( tooltips ),
-                                                 g_object_get_data( G_OBJECT( g_pWnd , "fix_rate" ) ),
-                                                 "Enter a rate of change for the surface affected by the fixed value. 0 gives a smooth "
-                                                 "sinusoidal curve, values less than 0 give progressively sharper spikes, and values "
-                                                 "greater than 0 take on a square shape. Values less than -30 or greater than 30 are "
-                                                 "set to -30 and 30, respectively. Note that this entry will have no effect unless "
-                                                 "you also specify a \"range affected\".",
-                                                 "" );
-       gtk_tooltips_set_tip( GTK_TOOLTIPS( tooltips ),
-                                                 g_object_get_data( G_OBJECT( g_pWnd , "fix_free" ) ),
-                                                 "Click this to free (unlock the value of) the currently selected vertex.",
-                                                 "" );
-       gtk_tooltips_set_tip( GTK_TOOLTIPS( tooltips ),
-                                                 g_object_get_data( G_OBJECT( g_pWnd , "fix_freeall" ) ),
-                                                 "Click this to free (unlock the values of) all vertices.",
-                                                 "" );
-       // Texture tab
-       gtk_tooltips_set_tip( GTK_TOOLTIPS( tooltips ),
-                                                 g_object_get_data( G_OBJECT( g_pWnd , "texture1" ) ),
-                                                 "Enter the name of the texture or shader used for the surface faces.",
-                                                 "" );
-       gtk_tooltips_set_tip( GTK_TOOLTIPS( tooltips ),
-                                                 g_object_get_data( G_OBJECT( g_pWnd , "texture2" ) ),
-                                                 "Enter the name of the texture or shader used for faces other than the surface. Under "
-                                                 "normal circumstances this should be \"common/caulk\"",
-                                                 "" );
-       gtk_tooltips_set_tip( GTK_TOOLTIPS( tooltips ),
-                                                 g_object_get_data( G_OBJECT( g_pWnd , "texture3" ) ),
-                                                 "Enter the name of the texture or shader used for \"steep\" surface faces, where \"steep\" "
-                                                 "is the angle specified below. If this entry is left blank or if the \"steep\" angle is 0, "
-                                                 "all surface faces will use the texture specified by \"Surface\".",
-                                                 "" );
-
-       gtk_tooltips_set_tip( GTK_TOOLTIPS( tooltips ),
-                                                 g_object_get_data( G_OBJECT( g_pWnd , "detail" ) ),
-                                                 "Check this box to use the detail content property on the generated brushes. Compile "
-                                                 "times will be considerably shorter if the detail property is used, though the surface "
-                                                 "will not block visibility at all. If you use the detail property, you should make sure "
-                                                 "that \"common/caulk\" is used for the non-surface faces, or the polygon count will be "
-                                                 "much higher than necessary.",
-                                                 "" );
+void create_tooltips()
+{
+    tooltips = gtk_tooltips_new();
+
+    // Main
+    gtk_tooltips_set_tip(GTK_TOOLTIPS(tooltips),
+                         g_object_get_data(G_OBJECT(g_pWnd, "go")),
+                         "Accept all input and generate a surface in Q3Radiant",
+                         "");
+    gtk_tooltips_set_tip(GTK_TOOLTIPS(tooltips),
+                         g_object_get_data(G_OBJECT(g_pWnd, "open")),
+                         "Open a previously saved GenSurf settings file.",
+                         "");
+    gtk_tooltips_set_tip(GTK_TOOLTIPS(tooltips),
+                         g_object_get_data(G_OBJECT(g_pWnd, "save")),
+                         "Save all settings to a file.",
+                         "");
+    gtk_tooltips_set_tip(GTK_TOOLTIPS(tooltips),
+                         g_object_get_data(G_OBJECT(g_pWnd, "defaults")),
+                         "Restore default values from DEFAULTS.SRF. If this file does not exist, GenSurf "
+                                 "initializes all input parameters to reasonable values. You can create your own "
+                                 "default surface by setting all parameters to your liking, then saving a settings "
+                                 "file as DEFAULTS.SRF with the Save As button.",
+                         "");
+
+    gtk_tooltips_set_tip(GTK_TOOLTIPS(tooltips),
+                         g_object_get_data(G_OBJECT(g_pWnd, "main_preview")),
+                         "View a wire-frame representation of the surface",
+                         "");
+
+    gtk_tooltips_set_tip(GTK_TOOLTIPS(tooltips),
+                         g_object_get_data(G_OBJECT(g_pWnd, "main_antialiasing")),
+                         "The lines in the preview window are antialiased for better quality",
+                         "");
+
+    // General tab
+    gtk_tooltips_set_tip(GTK_TOOLTIPS(tooltips),
+                         wave_radios[0],
+                         "Builds a surface with alternating hills and valleys. Uses the general form Z=cos(X) "
+                                 "x sin(Y)",
+                         "");
+    gtk_tooltips_set_tip(GTK_TOOLTIPS(tooltips),
+                         wave_radios[1],
+                         "Builds a surface with ridges parallel to the vertical axis.",
+                         "");
+    gtk_tooltips_set_tip(GTK_TOOLTIPS(tooltips),
+                         wave_radios[2],
+                         "Builds a surface with ridges parallel to the horizontal axis.",
+                         "");
+    gtk_tooltips_set_tip(GTK_TOOLTIPS(tooltips),
+                         wave_radios[3],
+                         "Builds a map from a bitmap image representing a contour plot. Click the \"Bitmap\" "
+                                 "tab to select the image. GenSurf only supports 256-color (8 bit) "
+                                 "bitmaps. GenSurf will work with any 256-color bitmap, but gray scale bitmaps are a bit "
+                                 "more intuitive.",
+                         "");
+    gtk_tooltips_set_tip(GTK_TOOLTIPS(tooltips),
+                         wave_radios[4],
+                         "Builds a random surface using the Plasma Cloud technique. Variance is controlled "
+                                 "by the Roughness input. To build a surface with completely random values not "
+                                 "dependent on neighboring vertices, use one of the other waveforms with 0 amplitude.",
+                         "");
+    gtk_tooltips_set_tip(GTK_TOOLTIPS(tooltips),
+                         g_object_get_data(G_OBJECT(g_pWnd, "wavelength")),
+                         "Enter the wavelength (distance between crests). NOTE: Wavelengths equal to the grid "
+                                 "size or 2 times the grid size will result in 0 amplitudes. For best results, the "
+                                 "wavelength value should be at least 4 times the grid size (extents divided by the "
+                                 "number of divisions",
+                         "");
+    gtk_tooltips_set_tip(GTK_TOOLTIPS(tooltips),
+                         g_object_get_data(G_OBJECT(g_pWnd, "amplitude")),
+                         "Enter the height of hills/ridges.",
+                         "");
+    gtk_tooltips_set_tip(GTK_TOOLTIPS(tooltips),
+                         g_object_get_data(G_OBJECT(g_pWnd, "roughness")),
+                         "Enter the roughness value (noise) for the surface. For fractal surfaces, this value "
+                                 "is used as a variance in the fractal calculations.",
+                         "");
+    gtk_tooltips_set_tip(GTK_TOOLTIPS(tooltips),
+                         g_object_get_data(G_OBJECT(g_pWnd, "random")),
+                         "Seed value for the pseudo-random number generator.",
+                         "");
+    // Extents tab
+    gtk_tooltips_set_tip(GTK_TOOLTIPS(tooltips),
+                         g_object_get_data(G_OBJECT(g_pWnd, "hmin")),
+                         "Minimum horizontal coordinate of the surface, i.e. X for a surface parallel to "
+                                 "the XY or XZ planes, Y for a surface parallel to the YZ plane. For best results, "
+                                 "the extents (maximum-minimum values) in a given direction should be evenly "
+                                 "divisible by the number of divisions in that direction.",
+                         "");
+    gtk_tooltips_set_tip(GTK_TOOLTIPS(tooltips),
+                         g_object_get_data(G_OBJECT(g_pWnd, "hmax")),
+                         "Maximum horizontal coordinate of the surface, i.e. X for a surface parallel to "
+                                 "the XY or XZ planes, Y for a surface parallel to the YZ plane. For best results, "
+                                 "the extents (maximum-minimum values) in a given direction should be evenly "
+                                 "divisible by the number of divisions in that direction.",
+                         "");
+    gtk_tooltips_set_tip(GTK_TOOLTIPS(tooltips),
+                         g_object_get_data(G_OBJECT(g_pWnd, "vmin")),
+                         "Minimum vertical coordinate of the surface, i.e. Y for a surface parallel to "
+                                 "the XY plane, Z for a surface parallel to the XZ or YZ planes. For best results, "
+                                 "the extents (maximum-minimum values) in a given direction should be evenly "
+                                 "divisible by the number of divisions in that direction.",
+                         "");
+    gtk_tooltips_set_tip(GTK_TOOLTIPS(tooltips),
+                         g_object_get_data(G_OBJECT(g_pWnd, "vmax")),
+                         "Maximum vertical coordinate of the surface, i.e. Y for a surface parallel to "
+                                 "the XY plane, Z for a surface parallel to the XZ or YZ planes. For best results, "
+                                 "the extents (maximum-minimum values) in a given direction should be evenly "
+                                 "divisible by the number of divisions in that direction.",
+                         "");
+    gtk_tooltips_set_tip(GTK_TOOLTIPS(tooltips),
+                         g_object_get_data(G_OBJECT(g_pWnd, "nh")),
+                         "Number of divisions in the horizontal direction. For best results, the extents "
+                                 "in a given direction should be evenly divisible by the number of divisions in "
+                                 "that direction.",
+                         "");
+    gtk_tooltips_set_tip(GTK_TOOLTIPS(tooltips),
+                         g_object_get_data(G_OBJECT(g_pWnd, "nv")),
+                         "Number of divisions in the vertical direction. For best results, the extents "
+                                 "in a given direction should be evenly divisible by the number of divisions in "
+                                 "that direction.",
+                         "");
+    gtk_tooltips_set_tip(GTK_TOOLTIPS(tooltips),
+                         g_object_get_data(G_OBJECT(g_pWnd, "use_patches")),
+                         "Produce one or more curved patches in the shape of your selected surface rather "
+                                 "than producing solid brushes. Depending on the size of your surface (and the "
+                                 "user's graphic detail settings, which you cannot control), curved surfaces will "
+                                 "be represented in the game by a very large number of polygons. Read the warnings "
+                                 "concerning curved surfaces on the GenSurf web page before using this feature.",
+                         "");
+    gtk_tooltips_set_tip(GTK_TOOLTIPS(tooltips),
+                         g_object_get_data(G_OBJECT(g_pWnd, "decimate")),
+                         "Use the slider to control the number of vertices discarded by GenSurf. For many "
+                                 "surfaces, you can produce roughly the same shape surface with a high decimation "
+                                 "value. This will generally result in a map with lower polygon counts (and better "
+                                 "in-game performance). However, this feature should NOT be used for large terrain "
+                                 "surfaces in Q3",
+                         "");
+    gtk_tooltips_set_tip(GTK_TOOLTIPS(tooltips),
+                         g_object_get_data(G_OBJECT(g_pWnd, "z00")),
+                         "Enter the height of the surface at the lower left corner. This value will likely "
+                                 "be modified unless \"Linear Borders\" is checked.",
+                         "");
+    gtk_tooltips_set_tip(GTK_TOOLTIPS(tooltips),
+                         g_object_get_data(G_OBJECT(g_pWnd, "z01")),
+                         "Enter the height of the surface at the upper left corner. This value will likely "
+                                 "be modified unless \"Linear Borders\" is checked.",
+                         "");
+    gtk_tooltips_set_tip(GTK_TOOLTIPS(tooltips),
+                         g_object_get_data(G_OBJECT(g_pWnd, "z10")),
+                         "Enter the height of the surface at the lower right corner. This value will likely "
+                                 "be modified unless \"Linear Borders\" is checked.",
+                         "");
+    gtk_tooltips_set_tip(GTK_TOOLTIPS(tooltips),
+                         g_object_get_data(G_OBJECT(g_pWnd, "z11")),
+                         "Enter the height of the surface at the upper right corner. This value will likely "
+                                 "be modified unless \"Linear Borders\" is checked.",
+                         "");
+    gtk_tooltips_set_tip(GTK_TOOLTIPS(tooltips),
+                         g_object_get_data(G_OBJECT(g_pWnd, "linearborder")),
+                         "Restrict the edges of the surface to a straight line. This will help match up "
+                                 "brush edges if you drop this surface into another map.",
+                         "");
+    // Bitmap tab
+    gtk_tooltips_set_tip(GTK_TOOLTIPS(tooltips),
+                         g_object_get_data(G_OBJECT(g_pWnd, "bmp_file")),
+                         "Type the name of an 8-bit bitmap image file, or click Browse to select an image "
+                                 "from a list of those available on your system.",
+                         "");
+    gtk_tooltips_set_tip(GTK_TOOLTIPS(tooltips),
+                         g_object_get_data(G_OBJECT(g_pWnd, "bmp_file_browse")),
+                         "Select a bitmap image file from a list of those available on your system.",
+                         "");
+    gtk_tooltips_set_tip(GTK_TOOLTIPS(tooltips),
+                         g_object_get_data(G_OBJECT(g_pWnd, "bmp_reload")),
+                         "Reload the selected bitmap file after making changes in an external image editor.",
+                         "");
+    gtk_tooltips_set_tip(GTK_TOOLTIPS(tooltips),
+                         g_object_get_data(G_OBJECT(g_pWnd, "bmp_black")),
+                         "Enter the value corresponding to color index 0 in the bitmap file. For gray scale "
+                                 "images, color 0 is normally black.",
+                         "");
+    gtk_tooltips_set_tip(GTK_TOOLTIPS(tooltips),
+                         g_object_get_data(G_OBJECT(g_pWnd, "bmp_white")),
+                         "Enter the value corresponding to color index 255 in the bitmap file. For gray scale "
+                                 "images, color 255 is normally white.",
+                         "");
+    // Fixpoints tab
+    gtk_tooltips_set_tip(GTK_TOOLTIPS(tooltips),
+                         g_object_get_data(G_OBJECT(g_pWnd, "fix_value")),
+                         "Enter a value for the selected vertex. This value will not be adjusted when applying "
+                                 "a waveform or roughness to the surface. Unlock this vertex (so that it will be "
+                                 "adjusted normally) by clicking \"Free\". This vertex will influence vertices within "
+                                 "the \"Range affected\" of this vertex.",
+                         "");
+    gtk_tooltips_set_tip(GTK_TOOLTIPS(tooltips),
+                         g_object_get_data(G_OBJECT(g_pWnd, "fix_range")),
+                         "Enter the range away from the selected vertex that other vertices will be affected. "
+                                 "Use 0 if you don't want other vertices to be influenced by the currently selected "
+                                 "one. Note: this box is disabled if you've chosen the fractal generator, as it uses "
+                                 "a completely different method for determining values.",
+                         "");
+    gtk_tooltips_set_tip(GTK_TOOLTIPS(tooltips),
+                         g_object_get_data(G_OBJECT(g_pWnd, "fix_rate")),
+                         "Enter a rate of change for the surface affected by the fixed value. 0 gives a smooth "
+                                 "sinusoidal curve, values less than 0 give progressively sharper spikes, and values "
+                                 "greater than 0 take on a square shape. Values less than -30 or greater than 30 are "
+                                 "set to -30 and 30, respectively. Note that this entry will have no effect unless "
+                                 "you also specify a \"range affected\".",
+                         "");
+    gtk_tooltips_set_tip(GTK_TOOLTIPS(tooltips),
+                         g_object_get_data(G_OBJECT(g_pWnd, "fix_free")),
+                         "Click this to free (unlock the value of) the currently selected vertex.",
+                         "");
+    gtk_tooltips_set_tip(GTK_TOOLTIPS(tooltips),
+                         g_object_get_data(G_OBJECT(g_pWnd, "fix_freeall")),
+                         "Click this to free (unlock the values of) all vertices.",
+                         "");
+    // Texture tab
+    gtk_tooltips_set_tip(GTK_TOOLTIPS(tooltips),
+                         g_object_get_data(G_OBJECT(g_pWnd, "texture1")),
+                         "Enter the name of the texture or shader used for the surface faces.",
+                         "");
+    gtk_tooltips_set_tip(GTK_TOOLTIPS(tooltips),
+                         g_object_get_data(G_OBJECT(g_pWnd, "texture2")),
+                         "Enter the name of the texture or shader used for faces other than the surface. Under "
+                                 "normal circumstances this should be \"common/caulk\"",
+                         "");
+    gtk_tooltips_set_tip(GTK_TOOLTIPS(tooltips),
+                         g_object_get_data(G_OBJECT(g_pWnd, "texture3")),
+                         "Enter the name of the texture or shader used for \"steep\" surface faces, where \"steep\" "
+                                 "is the angle specified below. If this entry is left blank or if the \"steep\" angle is 0, "
+                                 "all surface faces will use the texture specified by \"Surface\".",
+                         "");
+
+    gtk_tooltips_set_tip(GTK_TOOLTIPS(tooltips),
+                         g_object_get_data(G_OBJECT(g_pWnd, "detail")),
+                         "Check this box to use the detail content property on the generated brushes. Compile "
+                                 "times will be considerably shorter if the detail property is used, though the surface "
+                                 "will not block visibility at all. If you use the detail property, you should make sure "
+                                 "that \"common/caulk\" is used for the non-surface faces, or the polygon count will be "
+                                 "much higher than necessary.",
+                         "");
 }
 
 // =============================================================================
 // create main dialog
 
-GtkWidget* create_main_dialog(){
-       GtkWidget *hbox2, *button, *notebook, *table2;
-       GtkWidget *check, *spin, *radio, *label, *entry, *scale;
-       ui::Adjustment adj;
-       GSList *group;
-       int i;
-       const char *games[] = { "Quake 2", "Half-Life", "SiN", "Heretic 2", "Kingpin", "Genesis3D", "Quake 3 Arena" };
-       const char *waveforms[] = { "Alternating hill/valley", "Cylindrical left-to-right", "Cylindrical top-to-bottom",
-                                                               "From bitmap", "Fractal" };
-       const char *orientations[] = { "Ground surface", "Ceiling", "Wall facing 0", "Wall facing 90",
-                                                                  "Wall facing 180","Wall facing 270" };
-
-       auto dlg = g_pWnd = ui::Window( ui::window_type::TOP );
-       gtk_window_set_title( dlg, gszCaption );
-       dlg.connect( "delete_event", G_CALLBACK( main_close ), NULL );
-       //  dlg.connect( "destroy", G_CALLBACK (gtk_widget_destroy), NULL);
-       gtk_window_set_transient_for( dlg, g_pRadiantWnd );
-
-       auto hbox = ui::HBox( FALSE, 5 );
-       hbox.show();
-       dlg.add(hbox);
-       gtk_container_set_border_width( GTK_CONTAINER( hbox ), 5 );
-
-       notebook = gtk_notebook_new();
-       notebook.show();
-       hbox.pack_start( notebook, TRUE, TRUE, 0 );
-       notebook.connect( "switch_page",
-                                         G_CALLBACK( switch_page ), NULL );
-       gtk_notebook_set_tab_pos( GTK_NOTEBOOK( notebook ), GTK_POS_TOP );
-       g_object_set_data( G_OBJECT( dlg ), "notebook", notebook );
-
-       table = ui::Table( 2, 2, FALSE );
-       table.show();
-       gtk_container_set_border_width( GTK_CONTAINER( table ), 5 );
+GtkWidget *create_main_dialog()
+{
+    GtkWidget *hbox2, *button, *notebook, *table2;
+    GtkWidget *check, *spin, *radio, *label, *entry, *scale;
+    ui::Adjustment adj;
+    GSList *group;
+    int i;
+    const char *games[] = {"Quake 2", "Half-Life", "SiN", "Heretic 2", "Kingpin", "Genesis3D", "Quake 3 Arena"};
+    const char *waveforms[] = {"Alternating hill/valley", "Cylindrical left-to-right", "Cylindrical top-to-bottom",
+                               "From bitmap", "Fractal"};
+    const char *orientations[] = {"Ground surface", "Ceiling", "Wall facing 0", "Wall facing 90",
+                                  "Wall facing 180", "Wall facing 270"};
+
+    auto dlg = g_pWnd = ui::Window(ui::window_type::TOP);
+    gtk_window_set_title(dlg, gszCaption);
+    dlg.connect("delete_event", G_CALLBACK(main_close), NULL);
+    //  dlg.connect( "destroy", G_CALLBACK (gtk_widget_destroy), NULL);
+    gtk_window_set_transient_for(dlg, g_pRadiantWnd);
+
+    auto hbox = ui::HBox(FALSE, 5);
+    hbox.show();
+    dlg.add(hbox);
+    gtk_container_set_border_width(GTK_CONTAINER(hbox), 5);
+
+    notebook = gtk_notebook_new();
+    notebook.show();
+    hbox.pack_start(notebook, TRUE, TRUE, 0);
+    notebook.connect("switch_page",
+                     G_CALLBACK(switch_page), NULL);
+    gtk_notebook_set_tab_pos(GTK_NOTEBOOK(notebook), GTK_POS_TOP);
+    g_object_set_data(G_OBJECT(dlg), "notebook", notebook);
+
+    table = ui::Table(2, 2, FALSE);
+    table.show();
+    gtk_container_set_border_width(GTK_CONTAINER(table), 5);
     gtk_table_set_row_spacings(table, 5);
     gtk_table_set_col_spacings(table, 5);
 
-       label = ui::Label( "General" );
-       label.show();
-       gtk_notebook_append_page( GTK_NOTEBOOK( notebook ), table, label );
-
-       auto frame = ui::Frame( "Game" );
-       frame.show();
-       table.attach(frame, {0, 1, 0, 1});
-
-       auto vbox = ui::VBox( TRUE, 5 );
-       vbox.show();
-       frame.add(vbox);
-       gtk_container_set_border_width( GTK_CONTAINER( vbox ), 5 );
-
-       for ( i = 0, group = NULL; i < NUMGAMES; i++ )
-       {
-               radio = gtk_radio_button_new_with_label( group, games[i] );
-               radio.show();
-               vbox.pack_start( radio, TRUE, TRUE, 0 );
-               group = gtk_radio_button_get_group( GTK_RADIO_BUTTON( radio ) );
-               game_radios[i] = radio;
-               radio.connect( "toggled", G_CALLBACK( general_game ), GINT_TO_POINTER( i ) );
-       }
-
-       frame = ui::Frame( "Waveform" );
-       frame.show();
-       table.attach(frame, {1, 2, 0, 1});
-
-       vbox = ui::VBox( TRUE, 5 );
-       vbox.show();
-       frame.add(vbox);
-       gtk_container_set_border_width( GTK_CONTAINER( vbox ), 5 );
-
-       for ( i = 0, group = NULL; i < 5; i++ )
-       {
-               radio = gtk_radio_button_new_with_label( group, waveforms[i] );
-               radio.show();
-               vbox.pack_start( radio, TRUE, TRUE, 0 );
-               group = gtk_radio_button_get_group( GTK_RADIO_BUTTON( radio ) );
-               wave_radios[i] = radio;
-               radio.connect( "toggled", G_CALLBACK( general_wave ), GINT_TO_POINTER( i ) );
-       }
-
-       frame = ui::Frame( "Orientation" );
-       frame.show();
-       table.attach(frame, {0, 1, 1, 2});
-
-       vbox = ui::VBox( TRUE, 5 );
-       vbox.show();
-       frame.add(vbox);
-       gtk_container_set_border_width( GTK_CONTAINER( vbox ), 5 );
-
-       for ( i = 0, group = NULL; i < 6; i++ )
-       {
-               radio = gtk_radio_button_new_with_label( group, orientations[i] );
-               radio.show();
-               vbox.pack_start( radio, TRUE, TRUE, 0 );
-               group = gtk_radio_button_get_group( GTK_RADIO_BUTTON( radio ) );
-               plane_radios[i] = radio;
-               radio.connect( "toggled", G_CALLBACK( general_plane ), GINT_TO_POINTER( i ) );
-       }
-
-       table2 = ui::Table( 4, 2, FALSE );
-       table2.show();
+    label = ui::Label("General");
+    label.show();
+    gtk_notebook_append_page(GTK_NOTEBOOK(notebook), table, label);
+
+    auto frame = ui::Frame("Game");
+    frame.show();
+    table.attach(frame, {0, 1, 0, 1});
+
+    auto vbox = ui::VBox(TRUE, 5);
+    vbox.show();
+    frame.add(vbox);
+    gtk_container_set_border_width(GTK_CONTAINER(vbox), 5);
+
+    for (i = 0, group = NULL; i < NUMGAMES; i++) {
+        radio = gtk_radio_button_new_with_label(group, games[i]);
+        radio.show();
+        vbox.pack_start(radio, TRUE, TRUE, 0);
+        group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radio));
+        game_radios[i] = radio;
+        radio.connect("toggled", G_CALLBACK(general_game), GINT_TO_POINTER(i));
+    }
+
+    frame = ui::Frame("Waveform");
+    frame.show();
+    table.attach(frame, {1, 2, 0, 1});
+
+    vbox = ui::VBox(TRUE, 5);
+    vbox.show();
+    frame.add(vbox);
+    gtk_container_set_border_width(GTK_CONTAINER(vbox), 5);
+
+    for (i = 0, group = NULL; i < 5; i++) {
+        radio = gtk_radio_button_new_with_label(group, waveforms[i]);
+        radio.show();
+        vbox.pack_start(radio, TRUE, TRUE, 0);
+        group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radio));
+        wave_radios[i] = radio;
+        radio.connect("toggled", G_CALLBACK(general_wave), GINT_TO_POINTER(i));
+    }
+
+    frame = ui::Frame("Orientation");
+    frame.show();
+    table.attach(frame, {0, 1, 1, 2});
+
+    vbox = ui::VBox(TRUE, 5);
+    vbox.show();
+    frame.add(vbox);
+    gtk_container_set_border_width(GTK_CONTAINER(vbox), 5);
+
+    for (i = 0, group = NULL; i < 6; i++) {
+        radio = gtk_radio_button_new_with_label(group, orientations[i]);
+        radio.show();
+        vbox.pack_start(radio, TRUE, TRUE, 0);
+        group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radio));
+        plane_radios[i] = radio;
+        radio.connect("toggled", G_CALLBACK(general_plane), GINT_TO_POINTER(i));
+    }
+
+    table2 = ui::Table(4, 2, FALSE);
+    table2.show();
     gtk_table_set_row_spacings(table2, 5);
     gtk_table_set_col_spacings(table2, 5);
-       table.attach(table2, {1, 2, 1, 2});
-
-       label = ui::Label( "Wavelength:" );
-       label.show();
-       table2.attach(label, {0, 1, 0, 1});
-       gtk_misc_set_alignment( GTK_MISC( label ), 1, 0.5 );
-       gtk_label_set_justify( GTK_LABEL( label ), GTK_JUSTIFY_RIGHT );
-
-       label = ui::Label( "Max. amplitude:" );
-       label.show();
-       table2.attach(label, {0, 1, 1, 2});
-       gtk_misc_set_alignment( GTK_MISC( label ), 1, 0.5 );
-       gtk_label_set_justify( GTK_LABEL( label ), GTK_JUSTIFY_RIGHT );
-
-       label = ui::Label( "Roughness:" );
-       label.show();
+    table.attach(table2, {1, 2, 1, 2});
+
+    label = ui::Label("Wavelength:");
+    label.show();
+    table2.attach(label, {0, 1, 0, 1});
+    gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
+    gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_RIGHT);
+
+    label = ui::Label("Max. amplitude:");
+    label.show();
+    table2.attach(label, {0, 1, 1, 2});
+    gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
+    gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_RIGHT);
+
+    label = ui::Label("Roughness:");
+    label.show();
     table2.attach(label, {0, 1, 2, 3});
-       gtk_misc_set_alignment( GTK_MISC( label ), 1, 0.5 );
-       gtk_label_set_justify( GTK_LABEL( label ), GTK_JUSTIFY_RIGHT );
+    gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
+    gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_RIGHT);
 
-       label = ui::Label( "Random seed:" );
-       label.show();
+    label = ui::Label("Random seed:");
+    label.show();
     table2.attach(label, {0, 1, 3, 4});
-       gtk_misc_set_alignment( GTK_MISC( label ), 1, 0.5 );
-       gtk_label_set_justify( GTK_LABEL( label ), GTK_JUSTIFY_RIGHT );
+    gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
+    gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_RIGHT);
 
-       entry = ui::Entry();
-       entry.show();
+    entry = ui::Entry();
+    entry.show();
     table2.attach(entry, {1, 2, 0, 1});
-       entry.dimensions( 50, -1 );
-       g_object_set_data( G_OBJECT( dlg ), "wavelength", entry );
-       entry.connect( "focus_out_event", G_CALLBACK( doublevariable_entryfocusout ), &WaveLength );
+    entry.dimensions(50, -1);
+    g_object_set_data(G_OBJECT(dlg), "wavelength", entry);
+    entry.connect("focus_out_event", G_CALLBACK(doublevariable_entryfocusout), &WaveLength);
 
-       entry = ui::Entry();
-       entry.show();
+    entry = ui::Entry();
+    entry.show();
     table2.attach(entry, {1, 2, 1, 2});
-       entry.dimensions( 50, -1 );
-       g_object_set_data( G_OBJECT( dlg ), "amplitude", entry );
-       entry.connect( "focus_out_event", G_CALLBACK( doublevariable_entryfocusout ), &Amplitude );
-
-       entry = ui::Entry();
-       entry.show();
-       table2.attach(entry, {1, 2, 2, 3});
-       entry.dimensions( 50, -1 );
-       g_object_set_data( G_OBJECT( dlg ), "roughness", entry );
-       entry.connect( "focus_out_event", G_CALLBACK( doublevariable_entryfocusout ), &Roughness );
-
-       adj = ui::Adjustment( 1, 1, 32767, 1, 10, 0 );
-       adj.connect( "value_changed", G_CALLBACK( general_random ), NULL );
-       spin = ui::SpinButton( adj, 1, 0 );
-       spin.show();
-       table2.attach(spin, {1, 2, 3, 4});
-       spin.dimensions( 60, -1 );
-       g_object_set_data( G_OBJECT( dlg ), "random", spin );
-
-       vbox = ui::VBox( FALSE, 5 );
-       vbox.show();
-       gtk_container_set_border_width( GTK_CONTAINER( vbox ), 5 );
-
-       label = ui::Label( "Extents" );
-       label.show();
-       gtk_notebook_append_page( GTK_NOTEBOOK( notebook ), vbox, label );
-
-       hbox2 = ui::HBox( FALSE, 5 );
-       hbox2.show();
-       vbox.pack_start( hbox2, FALSE, TRUE, 0 );
-
-       frame = ui::Frame( "Extents" );
-       frame.show();
-       hbox2.pack_start( frame, TRUE, TRUE, 0 );
-
-       auto table = ui::Table( 3, 4, FALSE );
-       table.show();
-       gtk_container_set_border_width( GTK_CONTAINER( table ), 5 );
-       frame.add(table);
+    entry.dimensions(50, -1);
+    g_object_set_data(G_OBJECT(dlg), "amplitude", entry);
+    entry.connect("focus_out_event", G_CALLBACK(doublevariable_entryfocusout), &Amplitude);
+
+    entry = ui::Entry();
+    entry.show();
+    table2.attach(entry, {1, 2, 2, 3});
+    entry.dimensions(50, -1);
+    g_object_set_data(G_OBJECT(dlg), "roughness", entry);
+    entry.connect("focus_out_event", G_CALLBACK(doublevariable_entryfocusout), &Roughness);
+
+    adj = ui::Adjustment(1, 1, 32767, 1, 10, 0);
+    adj.connect("value_changed", G_CALLBACK(general_random), NULL);
+    spin = ui::SpinButton(adj, 1, 0);
+    spin.show();
+    table2.attach(spin, {1, 2, 3, 4});
+    spin.dimensions(60, -1);
+    g_object_set_data(G_OBJECT(dlg), "random", spin);
+
+    vbox = ui::VBox(FALSE, 5);
+    vbox.show();
+    gtk_container_set_border_width(GTK_CONTAINER(vbox), 5);
+
+    label = ui::Label("Extents");
+    label.show();
+    gtk_notebook_append_page(GTK_NOTEBOOK(notebook), vbox, label);
+
+    hbox2 = ui::HBox(FALSE, 5);
+    hbox2.show();
+    vbox.pack_start(hbox2, FALSE, TRUE, 0);
+
+    frame = ui::Frame("Extents");
+    frame.show();
+    hbox2.pack_start(frame, TRUE, TRUE, 0);
+
+    auto table = ui::Table(3, 4, FALSE);
+    table.show();
+    gtk_container_set_border_width(GTK_CONTAINER(table), 5);
+    frame.add(table);
     gtk_table_set_row_spacings(table, 5);
     gtk_table_set_col_spacings(table, 5);
 
-       label = ui::Label( "X:" );
-       label.show();
-       table.attach( label, {0, 1, 1, 2}, {GTK_FILL, GTK_FILL});
-       g_object_set_data( G_OBJECT( dlg ), "hmin_text", label );
-
-       label = ui::Label( "X:" );
-       label.show();
-       table.attach(label, {2, 3, 1, 2}, {GTK_FILL, GTK_FILL});
-       g_object_set_data( G_OBJECT( dlg ), "hmax_text", label );
-
-       label = ui::Label( "Y:" );
-       label.show();
-       table.attach(label, {0, 1, 2, 3}, {GTK_FILL, GTK_FILL});
-       g_object_set_data( G_OBJECT( dlg ), "vmin_text", label );
-
-       label = ui::Label( "Y:" );
-       label.show();
-       table.attach(label, {2, 3, 2, 3}, {GTK_FILL, GTK_FILL});
-       g_object_set_data( G_OBJECT( dlg ), "vmax_text", label );
-
-       label = ui::Label( "Lower-left" );
-       label.show();
-       table.attach(label, {1, 2, 0, 1}, {GTK_FILL, GTK_FILL});
-
-       label = ui::Label( "Upper-right" );
-       label.show();
-       table.attach(label, {3, 4, 0, 1},, {GTK_FILL, GTK_FILL});
-
-       entry = ui::Entry();
-       entry.show();
-       table.attach(entry, {1, 2, 1, 2});
-       entry.dimensions( 50, -1 );
-       g_object_set_data( G_OBJECT( dlg ), "hmin", entry );
-       entry.connect( "focus_out_event", G_CALLBACK( doublevariable_entryfocusout ), &Hll );
-
-       entry = ui::Entry();
-       entry.show();
-       table.attach(entry, {3, 4, 1, 2});
-       entry.dimensions( 50, -1 );
-       g_object_set_data( G_OBJECT( dlg ), "hmax", entry );
-       entry.connect( "focus_out_event", G_CALLBACK( doublevariable_entryfocusout ), &Hur );
-
-       entry = ui::Entry();
-       entry.show();
-       table.attach(entry, {1, 2, 2, 3});
-       entry.dimensions( 50, -1 );
-       g_object_set_data( G_OBJECT( dlg ), "vmin", entry );
-       entry.connect( "focus_out_event", G_CALLBACK( doublevariable_entryfocusout ), &Vll );
-
-       entry = ui::Entry();
-       entry.show();
-       table.attach(entry, {3, 4, 2, 3});
-       entry.dimensions( 50, -1 );
-       g_object_set_data( G_OBJECT( dlg ), "vmax", entry );
-       entry.connect( "focus_out_event", G_CALLBACK( doublevariable_entryfocusout ), &Vur );
-
-       frame = ui::Frame( "Divisions" );
-       frame.show();
-       hbox2.pack_start( frame, TRUE, TRUE, 0 );
-
-       table = ui::Table( 2, 2, FALSE );
-       table.show();
-       gtk_container_set_border_width( GTK_CONTAINER( table ), 5 );
-       frame.add(table);
+    label = ui::Label("X:");
+    label.show();
+    table.attach(label, {0, 1, 1, 2}, {GTK_FILL, GTK_FILL});
+    g_object_set_data(G_OBJECT(dlg), "hmin_text", label);
+
+    label = ui::Label("X:");
+    label.show();
+    table.attach(label, {2, 3, 1, 2}, {GTK_FILL, GTK_FILL});
+    g_object_set_data(G_OBJECT(dlg), "hmax_text", label);
+
+    label = ui::Label("Y:");
+    label.show();
+    table.attach(label, {0, 1, 2, 3}, {GTK_FILL, GTK_FILL});
+    g_object_set_data(G_OBJECT(dlg), "vmin_text", label);
+
+    label = ui::Label("Y:");
+    label.show();
+    table.attach(label, {2, 3, 2, 3}, {GTK_FILL, GTK_FILL});
+    g_object_set_data(G_OBJECT(dlg), "vmax_text", label);
+
+    label = ui::Label("Lower-left");
+    label.show();
+    table.attach(label, {1, 2, 0, 1}, {GTK_FILL, GTK_FILL});
+
+    label = ui::Label("Upper-right");
+    label.show();
+    table.attach(label, {3, 4, 0, 1}, , {GTK_FILL, GTK_FILL});
+
+    entry = ui::Entry();
+    entry.show();
+    table.attach(entry, {1, 2, 1, 2});
+    entry.dimensions(50, -1);
+    g_object_set_data(G_OBJECT(dlg), "hmin", entry);
+    entry.connect("focus_out_event", G_CALLBACK(doublevariable_entryfocusout), &Hll);
+
+    entry = ui::Entry();
+    entry.show();
+    table.attach(entry, {3, 4, 1, 2});
+    entry.dimensions(50, -1);
+    g_object_set_data(G_OBJECT(dlg), "hmax", entry);
+    entry.connect("focus_out_event", G_CALLBACK(doublevariable_entryfocusout), &Hur);
+
+    entry = ui::Entry();
+    entry.show();
+    table.attach(entry, {1, 2, 2, 3});
+    entry.dimensions(50, -1);
+    g_object_set_data(G_OBJECT(dlg), "vmin", entry);
+    entry.connect("focus_out_event", G_CALLBACK(doublevariable_entryfocusout), &Vll);
+
+    entry = ui::Entry();
+    entry.show();
+    table.attach(entry, {3, 4, 2, 3});
+    entry.dimensions(50, -1);
+    g_object_set_data(G_OBJECT(dlg), "vmax", entry);
+    entry.connect("focus_out_event", G_CALLBACK(doublevariable_entryfocusout), &Vur);
+
+    frame = ui::Frame("Divisions");
+    frame.show();
+    hbox2.pack_start(frame, TRUE, TRUE, 0);
+
+    table = ui::Table(2, 2, FALSE);
+    table.show();
+    gtk_container_set_border_width(GTK_CONTAINER(table), 5);
+    frame.add(table);
     gtk_table_set_row_spacings(table, 5);
     gtk_table_set_col_spacings(table, 5);
 
-       label = ui::Label( "X:" );
-       label.show();
-       table.attach(label, {0, 1, 0, 1}, {GTK_FILL, GTK_EXPAND | GTK_FILL});
-       g_object_set_data( G_OBJECT( dlg ), "nh_text", label );
-
-       label = ui::Label( "Y:" );
-       label.show();
-       table.attach(label, {0, 1, 1, 2}, {GTK_FILL, GTK_EXPAND | GTK_FILL});
-       g_object_set_data( G_OBJECT( dlg ), "nv_text", label );
-
-       adj = ui::Adjustment( 8, 1, MAX_ROWS, 1, 10, 0 );
-       adj.connect( "value_changed", G_CALLBACK( extents_nhnv_spin ), &NH );
-       spin = ui::SpinButton( adj, 1, 0 );
-       spin.show();
-       table.attach(spin, {1, 2, 0, 1});
-       spin.dimensions( 60, -1 );
-       g_object_set_data( G_OBJECT( dlg ), "nh", spin );
-
-       adj = ui::Adjustment( 8, 1, MAX_ROWS, 1, 10, 0 );
-       adj.connect( "value_changed", G_CALLBACK( extents_nhnv_spin ), &NV );
-       spin = ui::SpinButton( adj, 1, 0 );
-       spin.show();
-       table.attach(spin, {1, 2, 1, 2});
-       spin.dimensions( 60, -1 );
-       g_object_set_data( G_OBJECT( dlg ), "nv", spin );
-
-       check = ui::CheckButton( "Use Bezier patches" );
-       check.show();
-       vbox.pack_start( check, FALSE, TRUE, 0 );
-       g_object_set_data( G_OBJECT( dlg ), "use_patches", check );
-       check.connect( "toggled", G_CALLBACK( extents_use_patches ), NULL );
-
-       // ^Fishman - Snap to grid, replaced scroll bar with a texbox.
-       label = ui::Label( "Snap to grid:" );
-       label.show();
-       vbox.pack_start( label, FALSE, TRUE, 0 );
-       gtk_object_set_data( GTK_OBJECT( dlg ), "snap_text", label );
-
-       adj = ui::Adjustment( 8, 0, 256, 1, 10, 0 );
-       adj.connect( "value_changed", G_CALLBACK( extents_snaptogrid_spin ), &SP );
-       spin = ui::SpinButton( adj, 1, 0 );
-       spin.show();
-       vbox.pack_start( spin, FALSE, TRUE, 0 );
-       spin.dimensions( 60, -1 );
-       g_object_set_data( G_OBJECT( dlg ), "sp", spin );
-       // ^Fishman - End of Snap to grid code.
-
-       hbox2 = ui::HBox( FALSE, 5 );
-       hbox2.show();
-       vbox.pack_start( hbox2, FALSE, TRUE, 10 );
-
-       label = ui::Label( "Decimate:" );
-       label.show();
-       hbox2.pack_start( label, FALSE, TRUE, 0 );
-
-       adj = ui::Adjustment( 0, 0, 110, 1, 10, 0 );
-       adj.connect( "value_changed", G_CALLBACK( extents_decimate ), NULL );
-       g_object_set_data( G_OBJECT( dlg ), "decimate_adj", adj );
-       scale = ui::HScale( adj );
-       scale.show();
-       hbox2.pack_start( scale, TRUE, TRUE, 0 );
-       gtk_scale_set_value_pos( GTK_SCALE( scale ), GTK_POS_RIGHT );
-       gtk_scale_set_digits( GTK_SCALE( scale ), 0 );
-       g_object_set_data( G_OBJECT( dlg ), "decimate", scale );
-
-       frame = ui::Frame( "Corner values" );
-       frame.show();
-       vbox.pack_start( frame, FALSE, TRUE, 0 );
-
-       table = ui::Table( 3, 4, FALSE );
-       table.show();
-       gtk_container_set_border_width( GTK_CONTAINER( table ), 5 );
-       frame.add(table);
+    label = ui::Label("X:");
+    label.show();
+    table.attach(label, {0, 1, 0, 1}, {GTK_FILL, GTK_EXPAND | GTK_FILL});
+    g_object_set_data(G_OBJECT(dlg), "nh_text", label);
+
+    label = ui::Label("Y:");
+    label.show();
+    table.attach(label, {0, 1, 1, 2}, {GTK_FILL, GTK_EXPAND | GTK_FILL});
+    g_object_set_data(G_OBJECT(dlg), "nv_text", label);
+
+    adj = ui::Adjustment(8, 1, MAX_ROWS, 1, 10, 0);
+    adj.connect("value_changed", G_CALLBACK(extents_nhnv_spin), &NH);
+    spin = ui::SpinButton(adj, 1, 0);
+    spin.show();
+    table.attach(spin, {1, 2, 0, 1});
+    spin.dimensions(60, -1);
+    g_object_set_data(G_OBJECT(dlg), "nh", spin);
+
+    adj = ui::Adjustment(8, 1, MAX_ROWS, 1, 10, 0);
+    adj.connect("value_changed", G_CALLBACK(extents_nhnv_spin), &NV);
+    spin = ui::SpinButton(adj, 1, 0);
+    spin.show();
+    table.attach(spin, {1, 2, 1, 2});
+    spin.dimensions(60, -1);
+    g_object_set_data(G_OBJECT(dlg), "nv", spin);
+
+    check = ui::CheckButton("Use Bezier patches");
+    check.show();
+    vbox.pack_start(check, FALSE, TRUE, 0);
+    g_object_set_data(G_OBJECT(dlg), "use_patches", check);
+    check.connect("toggled", G_CALLBACK(extents_use_patches), NULL);
+
+    // ^Fishman - Snap to grid, replaced scroll bar with a texbox.
+    label = ui::Label("Snap to grid:");
+    label.show();
+    vbox.pack_start(label, FALSE, TRUE, 0);
+    gtk_object_set_data(GTK_OBJECT(dlg), "snap_text", label);
+
+    adj = ui::Adjustment(8, 0, 256, 1, 10, 0);
+    adj.connect("value_changed", G_CALLBACK(extents_snaptogrid_spin), &SP);
+    spin = ui::SpinButton(adj, 1, 0);
+    spin.show();
+    vbox.pack_start(spin, FALSE, TRUE, 0);
+    spin.dimensions(60, -1);
+    g_object_set_data(G_OBJECT(dlg), "sp", spin);
+    // ^Fishman - End of Snap to grid code.
+
+    hbox2 = ui::HBox(FALSE, 5);
+    hbox2.show();
+    vbox.pack_start(hbox2, FALSE, TRUE, 10);
+
+    label = ui::Label("Decimate:");
+    label.show();
+    hbox2.pack_start(label, FALSE, TRUE, 0);
+
+    adj = ui::Adjustment(0, 0, 110, 1, 10, 0);
+    adj.connect("value_changed", G_CALLBACK(extents_decimate), NULL);
+    g_object_set_data(G_OBJECT(dlg), "decimate_adj", adj);
+    scale = ui::HScale(adj);
+    scale.show();
+    hbox2.pack_start(scale, TRUE, TRUE, 0);
+    gtk_scale_set_value_pos(GTK_SCALE(scale), GTK_POS_RIGHT);
+    gtk_scale_set_digits(GTK_SCALE(scale), 0);
+    g_object_set_data(G_OBJECT(dlg), "decimate", scale);
+
+    frame = ui::Frame("Corner values");
+    frame.show();
+    vbox.pack_start(frame, FALSE, TRUE, 0);
+
+    table = ui::Table(3, 4, FALSE);
+    table.show();
+    gtk_container_set_border_width(GTK_CONTAINER(table), 5);
+    frame.add(table);
     gtk_table_set_row_spacings(table, 5);
     gtk_table_set_col_spacings(table, 5);
 
-       label = ui::Label( "Upper-left:" );
-       label.show();
-       table.attach(label, {0, 1, 0, 1}, {GTK_FILL, GTK_FILL});
-
-       label = ui::Label( "Lower-left:" );
-       label.show();
-       table.attach(label, {0, 1, 1, 2}, {GTK_FILL, GTK_FILL});
-
-       label = ui::Label( "Upper-right:" );
-       label.show();
-       table.attach(label, {2, 3, 0, 1}, {GTK_FILL, GTK_FILL});
-
-       label = ui::Label( "Lower-right:" );
-       label.show();
-       table.attach(label, {2, 3, 1, 2}, {GTK_FILL, GTK_FILL});
-
-       entry = ui::Entry();
-       entry.show();
-       table.attach(entry, {1, 2, 0, 1});
-       entry.dimensions( 50, -1 );
-       g_object_set_data( G_OBJECT( dlg ), "z01", entry );
-       entry.connect( "focus_out_event", G_CALLBACK( doublevariable_entryfocusout ), &Z01 );
-
-       entry = ui::Entry();
-       entry.show();
-       table.attach(entry, {1, 2, 1, 2});
-       entry.dimensions( 50, -1 );
-       g_object_set_data( G_OBJECT( dlg ), "z00", entry );
-       entry.connect( "focus_out_event", G_CALLBACK( doublevariable_entryfocusout ), &Z00 );
-
-       entry = ui::Entry();
-       entry.show();
-       table.attach(entry, {3, 4, 0, 1});
-       entry.dimensions( 50, -1 );
-       g_object_set_data( G_OBJECT( dlg ), "z11", entry );
-       entry.connect( "focus_out_event", G_CALLBACK( doublevariable_entryfocusout ), &Z11 );
-
-       entry = ui::Entry();
-       entry.show();
-       table.attach(entry, {3, 4, 1, 2});
-       entry.dimensions( 50, -1 );
-       g_object_set_data( G_OBJECT( dlg ), "z10", entry );
-       entry.connect( "focus_out_event", G_CALLBACK( doublevariable_entryfocusout ), &Z10 );
-
-       check = ui::CheckButton( "Linear borders" );
-       check.show();
-       table.attach(check, {0, 4, 2, 3});
-       g_object_set_data( G_OBJECT( dlg ), "linearborder", check );
-       check.connect( "toggled", G_CALLBACK( extents_linearborder ), NULL );
-
-       vbox = ui::VBox( FALSE, 10 );
-       vbox.show();
-       gtk_container_set_border_width( GTK_CONTAINER( vbox ), 5 );
-
-       label = ui::Label( "Bitmap" );
-       label.show();
-       gtk_notebook_append_page( GTK_NOTEBOOK( notebook ), vbox, label );
-
-       label = ui::Label( "" );
-       label.show();
-       vbox.pack_start( label, FALSE, TRUE, 0 );
-       g_object_set_data( G_OBJECT( dlg ), "bmp_note", label );
-
-       table = ui::Table( 2, 2, FALSE );
-       table.show();
-       gtk_container_set_border_width( GTK_CONTAINER( table ), 5 );
-       vbox.pack_start( table, FALSE, TRUE, 0 );
+    label = ui::Label("Upper-left:");
+    label.show();
+    table.attach(label, {0, 1, 0, 1}, {GTK_FILL, GTK_FILL});
+
+    label = ui::Label("Lower-left:");
+    label.show();
+    table.attach(label, {0, 1, 1, 2}, {GTK_FILL, GTK_FILL});
+
+    label = ui::Label("Upper-right:");
+    label.show();
+    table.attach(label, {2, 3, 0, 1}, {GTK_FILL, GTK_FILL});
+
+    label = ui::Label("Lower-right:");
+    label.show();
+    table.attach(label, {2, 3, 1, 2}, {GTK_FILL, GTK_FILL});
+
+    entry = ui::Entry();
+    entry.show();
+    table.attach(entry, {1, 2, 0, 1});
+    entry.dimensions(50, -1);
+    g_object_set_data(G_OBJECT(dlg), "z01", entry);
+    entry.connect("focus_out_event", G_CALLBACK(doublevariable_entryfocusout), &Z01);
+
+    entry = ui::Entry();
+    entry.show();
+    table.attach(entry, {1, 2, 1, 2});
+    entry.dimensions(50, -1);
+    g_object_set_data(G_OBJECT(dlg), "z00", entry);
+    entry.connect("focus_out_event", G_CALLBACK(doublevariable_entryfocusout), &Z00);
+
+    entry = ui::Entry();
+    entry.show();
+    table.attach(entry, {3, 4, 0, 1});
+    entry.dimensions(50, -1);
+    g_object_set_data(G_OBJECT(dlg), "z11", entry);
+    entry.connect("focus_out_event", G_CALLBACK(doublevariable_entryfocusout), &Z11);
+
+    entry = ui::Entry();
+    entry.show();
+    table.attach(entry, {3, 4, 1, 2});
+    entry.dimensions(50, -1);
+    g_object_set_data(G_OBJECT(dlg), "z10", entry);
+    entry.connect("focus_out_event", G_CALLBACK(doublevariable_entryfocusout), &Z10);
+
+    check = ui::CheckButton("Linear borders");
+    check.show();
+    table.attach(check, {0, 4, 2, 3});
+    g_object_set_data(G_OBJECT(dlg), "linearborder", check);
+    check.connect("toggled", G_CALLBACK(extents_linearborder), NULL);
+
+    vbox = ui::VBox(FALSE, 10);
+    vbox.show();
+    gtk_container_set_border_width(GTK_CONTAINER(vbox), 5);
+
+    label = ui::Label("Bitmap");
+    label.show();
+    gtk_notebook_append_page(GTK_NOTEBOOK(notebook), vbox, label);
+
+    label = ui::Label("");
+    label.show();
+    vbox.pack_start(label, FALSE, TRUE, 0);
+    g_object_set_data(G_OBJECT(dlg), "bmp_note", label);
+
+    table = ui::Table(2, 2, FALSE);
+    table.show();
+    gtk_container_set_border_width(GTK_CONTAINER(table), 5);
+    vbox.pack_start(table, FALSE, TRUE, 0);
     gtk_table_set_row_spacings(table, 5);
     gtk_table_set_col_spacings(table, 5);
 
-       label = ui::Label( "Filename:" );
-       label.show();
-       table.attach(label, {0, 1, 0, 1}, {GTK_FILL, GTK_FILL});
-       g_object_set_data( G_OBJECT( dlg ), "bmp_text1", label );
-
-       entry = ui::Entry();
-       entry.show();
-       table.attach(entry, {1, 2, 0, 1}, {GTK_EXPAND | GTK_FILL, GTK_FILL});
-       g_object_set_data( G_OBJECT( dlg ), "bmp_file", entry );
-       entry.connect( "focus_out_event", G_CALLBACK( bitmap_file_entryfocusout ), NULL );
-
-       hbox2 = ui::HBox( TRUE, 5 );
-       hbox2.show();
-       table.attach(hbox2, {1, 2, 1, 2}, {0, GTK_EXPAND | GTK_FILL});
-
-       button = ui::Button( "Browse..." );
-       button.show();
-       hbox2.pack_start( button, FALSE, FALSE, 0 );
-       button.dimensions( 60, -1 );
-       g_object_set_data( G_OBJECT( dlg ), "bmp_file_browse", button );
-       button.connect( "clicked", G_CALLBACK( bitmap_browse ), NULL );
-
-       button = ui::Button( "Reload" );
-       button.show();
-       hbox2.pack_start( button, FALSE, FALSE, 0 );
-       button.dimensions( 60, -1 );
-       g_object_set_data( G_OBJECT( dlg ), "bmp_reload", button );
-       button.connect( "clicked", G_CALLBACK( bitmap_reload ), NULL );
-
-       table = ui::Table( 2, 2, TRUE );
-       table.show();
-       gtk_container_set_border_width( GTK_CONTAINER( table ), 5 );
-       vbox.pack_start( table, FALSE, TRUE, 0 );
+    label = ui::Label("Filename:");
+    label.show();
+    table.attach(label, {0, 1, 0, 1}, {GTK_FILL, GTK_FILL});
+    g_object_set_data(G_OBJECT(dlg), "bmp_text1", label);
+
+    entry = ui::Entry();
+    entry.show();
+    table.attach(entry, {1, 2, 0, 1}, {GTK_EXPAND | GTK_FILL, GTK_FILL});
+    g_object_set_data(G_OBJECT(dlg), "bmp_file", entry);
+    entry.connect("focus_out_event", G_CALLBACK(bitmap_file_entryfocusout), NULL);
+
+    hbox2 = ui::HBox(TRUE, 5);
+    hbox2.show();
+    table.attach(hbox2, {1, 2, 1, 2}, {0, GTK_EXPAND | GTK_FILL});
+
+    button = ui::Button("Browse...");
+    button.show();
+    hbox2.pack_start(button, FALSE, FALSE, 0);
+    button.dimensions(60, -1);
+    g_object_set_data(G_OBJECT(dlg), "bmp_file_browse", button);
+    button.connect("clicked", G_CALLBACK(bitmap_browse), NULL);
+
+    button = ui::Button("Reload");
+    button.show();
+    hbox2.pack_start(button, FALSE, FALSE, 0);
+    button.dimensions(60, -1);
+    g_object_set_data(G_OBJECT(dlg), "bmp_reload", button);
+    button.connect("clicked", G_CALLBACK(bitmap_reload), NULL);
+
+    table = ui::Table(2, 2, TRUE);
+    table.show();
+    gtk_container_set_border_width(GTK_CONTAINER(table), 5);
+    vbox.pack_start(table, FALSE, TRUE, 0);
     gtk_table_set_row_spacings(table, 5);
     gtk_table_set_col_spacings(table, 5);
 
-       label = ui::Label( "Map color 0 to:" );
-       label.show();
-       table.attach(label, {0, 1, 0, 1}, {GTK_FILL | GTK_EXPAND, GTK_FILL});
-       g_object_set_data( G_OBJECT( dlg ), "bmp_text2", label );
-       gtk_misc_set_alignment( GTK_MISC( label ), 1, 0.5 );
-       gtk_label_set_justify( GTK_LABEL( label ), GTK_JUSTIFY_RIGHT );
-
-       label = ui::Label( "Map color 255 to:" );
-       label.show();
-       table.attach(label, {0, 1, 1, 2}, {GTK_FILL | GTK_EXPAND, GTK_FILL});
-       g_object_set_data( G_OBJECT( dlg ), "bmp_text3", label );
-       gtk_misc_set_alignment( GTK_MISC( label ), 1, 0.5 );
-       gtk_label_set_justify( GTK_LABEL( label ), GTK_JUSTIFY_RIGHT );
-
-       hbox2 = ui::HBox( FALSE, 5 );
-       hbox2.show();
-       table.attach(hbox2, {1, 2, 0, 1});
-
-       entry = ui::Entry();
-       entry.show();
-       hbox2.pack_start( entry, FALSE, FALSE, 0 );
-       entry.dimensions( 50, -1 );
-       g_object_set_data( G_OBJECT( dlg ), "bmp_black", entry );
-       entry.connect( "focus_out_event", G_CALLBACK( doublevariable_entryfocusout ), &gbmp.black_value );
-
-       hbox2 = ui::HBox( FALSE, 5 );
-       hbox2.show();
-       table.attach(hbox2, {1, 2, 1, 2});
-
-       entry = ui::Entry();
-       entry.show();
-       hbox2.pack_start( entry, FALSE, FALSE, 0 );
-       entry.dimensions( 50, -1 );
-       g_object_set_data( G_OBJECT( dlg ), "bmp_white", entry );
-       entry.connect( "focus_out_event", G_CALLBACK( doublevariable_entryfocusout ), &gbmp.white_value );
-
-       vbox = ui::VBox( FALSE, 10 );
-       vbox.show();
-       gtk_container_set_border_width( GTK_CONTAINER( vbox ), 5 );
-
-       label = ui::Label( "Fix Points" );
-       label.show();
-       gtk_notebook_append_page( GTK_NOTEBOOK( notebook ), vbox, label );
-
-       label = ui::Label( "Click on a vertex in the lower half of the preview window,\n"
-                                                  "then use the arrow keys or text box to assign a value.\n"
-                                                  "Use Ctrl+Click to select multiple vertices/toggle a\n"
-                                                  "selection. Use Shift+Click to select a range of vertices.\n\n"
-                                                  "Click \"Free\" to unlock a vertex. Vertices within \"Range\n"
-                                                  "affected\" will be influenced by this vertex." );
-       label.show();
-       vbox.pack_start( label, FALSE, TRUE, 0 );
-
-       table = ui::Table( 3, 3, FALSE );
-       table.show();
-       gtk_container_set_border_width( GTK_CONTAINER( table ), 5 );
-       vbox.pack_start( table, FALSE, TRUE, 0 );
+    label = ui::Label("Map color 0 to:");
+    label.show();
+    table.attach(label, {0, 1, 0, 1}, {GTK_FILL | GTK_EXPAND, GTK_FILL});
+    g_object_set_data(G_OBJECT(dlg), "bmp_text2", label);
+    gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
+    gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_RIGHT);
+
+    label = ui::Label("Map color 255 to:");
+    label.show();
+    table.attach(label, {0, 1, 1, 2}, {GTK_FILL | GTK_EXPAND, GTK_FILL});
+    g_object_set_data(G_OBJECT(dlg), "bmp_text3", label);
+    gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
+    gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_RIGHT);
+
+    hbox2 = ui::HBox(FALSE, 5);
+    hbox2.show();
+    table.attach(hbox2, {1, 2, 0, 1});
+
+    entry = ui::Entry();
+    entry.show();
+    hbox2.pack_start(entry, FALSE, FALSE, 0);
+    entry.dimensions(50, -1);
+    g_object_set_data(G_OBJECT(dlg), "bmp_black", entry);
+    entry.connect("focus_out_event", G_CALLBACK(doublevariable_entryfocusout), &gbmp.black_value);
+
+    hbox2 = ui::HBox(FALSE, 5);
+    hbox2.show();
+    table.attach(hbox2, {1, 2, 1, 2});
+
+    entry = ui::Entry();
+    entry.show();
+    hbox2.pack_start(entry, FALSE, FALSE, 0);
+    entry.dimensions(50, -1);
+    g_object_set_data(G_OBJECT(dlg), "bmp_white", entry);
+    entry.connect("focus_out_event", G_CALLBACK(doublevariable_entryfocusout), &gbmp.white_value);
+
+    vbox = ui::VBox(FALSE, 10);
+    vbox.show();
+    gtk_container_set_border_width(GTK_CONTAINER(vbox), 5);
+
+    label = ui::Label("Fix Points");
+    label.show();
+    gtk_notebook_append_page(GTK_NOTEBOOK(notebook), vbox, label);
+
+    label = ui::Label("Click on a vertex in the lower half of the preview window,\n"
+                              "then use the arrow keys or text box to assign a value.\n"
+                              "Use Ctrl+Click to select multiple vertices/toggle a\n"
+                              "selection. Use Shift+Click to select a range of vertices.\n\n"
+                              "Click \"Free\" to unlock a vertex. Vertices within \"Range\n"
+                              "affected\" will be influenced by this vertex.");
+    label.show();
+    vbox.pack_start(label, FALSE, TRUE, 0);
+
+    table = ui::Table(3, 3, FALSE);
+    table.show();
+    gtk_container_set_border_width(GTK_CONTAINER(table), 5);
+    vbox.pack_start(table, FALSE, TRUE, 0);
     gtk_table_set_row_spacings(table, 5);
     gtk_table_set_col_spacings(table, 5);
 
-       label = ui::Label( "Value:" );
-       label.show();
-       table.attach(label, {0, 1, 0, 1}, {GTK_FILL, GTK_FILL});
-       gtk_misc_set_alignment( GTK_MISC( label ), 1, 0.5 );
-       g_object_set_data( G_OBJECT( dlg ), "fix_value_text", label );
-
-       label = ui::Label( "Range affected:" );
-       label.show();
-       table.attach(label, {0, 1, 1, 2}, {GTK_FILL, GTK_FILL});
-       gtk_misc_set_alignment( GTK_MISC( label ), 1, 0.5 );
-       g_object_set_data( G_OBJECT( dlg ), "fix_range_text", label );
-
-       label = ui::Label( "Rate of change:" );
-       label.show();
-       table.attach(label, {0, 1, 2, 3}, {GTK_FILL, GTK_FILL});
-       gtk_misc_set_alignment( GTK_MISC( label ), 1, 0.5 );
-       g_object_set_data( G_OBJECT( dlg ), "fix_rate_text", label );
-
-       adj = ui::Adjustment( 0, -65536, 65536, 1, 16, 0 );
-       adj.connect( "value_changed", G_CALLBACK( fix_value_changed ), NULL );
-       spin = ui::SpinButton( adj, 1, 0 );
-       spin.show();
-       table.attach(spin, {1, 2, 0, 1}, {GTK_EXPAND, GTK_EXPAND});
-       spin.dimensions( 60, -1 );
-       g_object_set_data( G_OBJECT( dlg ), "fix_value", spin );
-       spin.connect( "focus_out_event", G_CALLBACK( fix_value_entryfocusout ), NULL );
-
-       entry = ui::Entry();
-       entry.show();
-       table.attach(entry, {1, 2, 1, 2}, {GTK_EXPAND, GTK_FILL});
-       entry.dimensions( 60, -1 );
-       g_object_set_data( G_OBJECT( dlg ), "fix_range", entry );
-       entry.connect( "focus_out_event", G_CALLBACK( fix_range_entryfocusout ), NULL );
-
-       entry = ui::Entry();
-       entry.show();
-       table.attach(entry, {1, 2, 2, 3}, {GTK_EXPAND, GTK_FILL});
-       entry.dimensions( 60, -1 );
-       g_object_set_data( G_OBJECT( dlg ), "fix_rate", entry );
-       entry.connect( "focus_out_event", G_CALLBACK( fix_rate_entryfocusout ), NULL );
-
-       button = ui::Button( "Free" );
-       button.show();
-       table.attach(button, {2, 3, 0, 1}, {GTK_EXPAND, GTK_FILL});
-       button.dimensions( 60, -1 );
-       g_object_set_data( G_OBJECT( dlg ), "fix_free", button );
-       button.connect( "clicked", G_CALLBACK( fix_free ), NULL );
-
-       button = ui::Button( "Free All" );
-       button.show();
-       table.attach(button, {2, 3, 1, 2}, {GTK_EXPAND, GTK_FILL});
-       button.dimensions( 60, -1 );
-       g_object_set_data( G_OBJECT( dlg ), "fix_freeall", button );
-       button.connect( "clicked", G_CALLBACK( fix_freeall ), NULL );
-
-       vbox = ui::VBox( FALSE, 10 );
-       vbox.show();
-       gtk_container_set_border_width( GTK_CONTAINER( vbox ), 5 );
-
-       label = ui::Label( "Texture" );
-       label.show();
-       gtk_notebook_append_page( GTK_NOTEBOOK( notebook ), vbox, label );
-
-       // ^Fishman - Modified to add more labels and textboxes.
-       table = ui::Table( 5, 2, FALSE );
-       table.show();
-       vbox.pack_start( table, FALSE, TRUE, 0 );
+    label = ui::Label("Value:");
+    label.show();
+    table.attach(label, {0, 1, 0, 1}, {GTK_FILL, GTK_FILL});
+    gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
+    g_object_set_data(G_OBJECT(dlg), "fix_value_text", label);
+
+    label = ui::Label("Range affected:");
+    label.show();
+    table.attach(label, {0, 1, 1, 2}, {GTK_FILL, GTK_FILL});
+    gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
+    g_object_set_data(G_OBJECT(dlg), "fix_range_text", label);
+
+    label = ui::Label("Rate of change:");
+    label.show();
+    table.attach(label, {0, 1, 2, 3}, {GTK_FILL, GTK_FILL});
+    gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
+    g_object_set_data(G_OBJECT(dlg), "fix_rate_text", label);
+
+    adj = ui::Adjustment(0, -65536, 65536, 1, 16, 0);
+    adj.connect("value_changed", G_CALLBACK(fix_value_changed), NULL);
+    spin = ui::SpinButton(adj, 1, 0);
+    spin.show();
+    table.attach(spin, {1, 2, 0, 1}, {GTK_EXPAND, GTK_EXPAND});
+    spin.dimensions(60, -1);
+    g_object_set_data(G_OBJECT(dlg), "fix_value", spin);
+    spin.connect("focus_out_event", G_CALLBACK(fix_value_entryfocusout), NULL);
+
+    entry = ui::Entry();
+    entry.show();
+    table.attach(entry, {1, 2, 1, 2}, {GTK_EXPAND, GTK_FILL});
+    entry.dimensions(60, -1);
+    g_object_set_data(G_OBJECT(dlg), "fix_range", entry);
+    entry.connect("focus_out_event", G_CALLBACK(fix_range_entryfocusout), NULL);
+
+    entry = ui::Entry();
+    entry.show();
+    table.attach(entry, {1, 2, 2, 3}, {GTK_EXPAND, GTK_FILL});
+    entry.dimensions(60, -1);
+    g_object_set_data(G_OBJECT(dlg), "fix_rate", entry);
+    entry.connect("focus_out_event", G_CALLBACK(fix_rate_entryfocusout), NULL);
+
+    button = ui::Button("Free");
+    button.show();
+    table.attach(button, {2, 3, 0, 1}, {GTK_EXPAND, GTK_FILL});
+    button.dimensions(60, -1);
+    g_object_set_data(G_OBJECT(dlg), "fix_free", button);
+    button.connect("clicked", G_CALLBACK(fix_free), NULL);
+
+    button = ui::Button("Free All");
+    button.show();
+    table.attach(button, {2, 3, 1, 2}, {GTK_EXPAND, GTK_FILL});
+    button.dimensions(60, -1);
+    g_object_set_data(G_OBJECT(dlg), "fix_freeall", button);
+    button.connect("clicked", G_CALLBACK(fix_freeall), NULL);
+
+    vbox = ui::VBox(FALSE, 10);
+    vbox.show();
+    gtk_container_set_border_width(GTK_CONTAINER(vbox), 5);
+
+    label = ui::Label("Texture");
+    label.show();
+    gtk_notebook_append_page(GTK_NOTEBOOK(notebook), vbox, label);
+
+    // ^Fishman - Modified to add more labels and textboxes.
+    table = ui::Table(5, 2, FALSE);
+    table.show();
+    vbox.pack_start(table, FALSE, TRUE, 0);
     gtk_table_set_row_spacings(table, 5);
     gtk_table_set_col_spacings(table, 5);
 
-       label = ui::Label( "Surface:" );
-       label.show();
-       table.attach(label, {0, 1, 0, 1}, {GTK_FILL, GTK_FILL});
-       gtk_misc_set_alignment( GTK_MISC( label ), 1, 0.5 );
-
-       label = ui::Label( "Other:" );
-       label.show();
-       table.attach(label, {0, 1, 1, 2}, {GTK_FILL, GTK_FILL});
-       gtk_misc_set_alignment( GTK_MISC( label ), 1, 0.5 );
-
-       label = ui::Label( "Steep:" );
-       label.show();
-       table.attach(label, {0, 1, 2, 3}, {GTK_FILL, GTK_FILL});
-       gtk_misc_set_alignment( GTK_MISC( label ), 1, 0.5 );
-
-       entry = ui::Entry();
-       entry.show();
-       table.attach(entry, {1, 2, 0, 1}, {GTK_EXPAND | GTK_FILL, GTK_FILL});
-       entry.dimensions( 60, -1 );
-       g_object_set_data( G_OBJECT( dlg ), "texture1", entry );
-       entry.connect( "focus_out_event", G_CALLBACK( texture_entryfocusout ), GINT_TO_POINTER( 0 ) );
-
-       entry = ui::Entry();
-       entry.show();
-       table.attach(entry, {1, 2, 1, 2}, {GTK_EXPAND | GTK_FILL, GTK_FILL});
-       entry.dimensions( 60, -1 );
-       g_object_set_data( G_OBJECT( dlg ), "texture2", entry );
-       entry.connect( "focus_out_event", G_CALLBACK( texture_entryfocusout ), GINT_TO_POINTER( 1 ) );
-
-       entry = ui::Entry();
-       entry.show();
-       table.attach(entry, {1, 2, 2, 3}, {GTK_EXPAND | GTK_FILL, GTK_FILL});
-       entry.dimensions( 60, -1 );
-       g_object_set_data( G_OBJECT( dlg ), "texture3", entry );
-
-       hbox2 = ui::HBox( FALSE, 5 );
-       hbox2.show();
-       vbox.pack_start( hbox2, FALSE, TRUE, 0 );
-
-       label = ui::Label( "\"Steep\" angle:" );
-       label.show();
-       hbox2.pack_start( label, FALSE, TRUE, 0 );
-
-       adj = ui::Adjustment( 60, 0, 90, 1, 10, 0 );
-       spin = ui::SpinButton( adj, 1, 0 );
-       spin.show();
-       hbox2.pack_start( spin, FALSE, TRUE, 0 );
-       g_object_set_data( G_OBJECT( dlg ), "tex_slant", spin );
-
-       table = ui::Table( 2, 4, TRUE );
-       table.show();
-       vbox.pack_start( table, FALSE, TRUE, 0 );
+    label = ui::Label("Surface:");
+    label.show();
+    table.attach(label, {0, 1, 0, 1}, {GTK_FILL, GTK_FILL});
+    gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
+
+    label = ui::Label("Other:");
+    label.show();
+    table.attach(label, {0, 1, 1, 2}, {GTK_FILL, GTK_FILL});
+    gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
+
+    label = ui::Label("Steep:");
+    label.show();
+    table.attach(label, {0, 1, 2, 3}, {GTK_FILL, GTK_FILL});
+    gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
+
+    entry = ui::Entry();
+    entry.show();
+    table.attach(entry, {1, 2, 0, 1}, {GTK_EXPAND | GTK_FILL, GTK_FILL});
+    entry.dimensions(60, -1);
+    g_object_set_data(G_OBJECT(dlg), "texture1", entry);
+    entry.connect("focus_out_event", G_CALLBACK(texture_entryfocusout), GINT_TO_POINTER(0));
+
+    entry = ui::Entry();
+    entry.show();
+    table.attach(entry, {1, 2, 1, 2}, {GTK_EXPAND | GTK_FILL, GTK_FILL});
+    entry.dimensions(60, -1);
+    g_object_set_data(G_OBJECT(dlg), "texture2", entry);
+    entry.connect("focus_out_event", G_CALLBACK(texture_entryfocusout), GINT_TO_POINTER(1));
+
+    entry = ui::Entry();
+    entry.show();
+    table.attach(entry, {1, 2, 2, 3}, {GTK_EXPAND | GTK_FILL, GTK_FILL});
+    entry.dimensions(60, -1);
+    g_object_set_data(G_OBJECT(dlg), "texture3", entry);
+
+    hbox2 = ui::HBox(FALSE, 5);
+    hbox2.show();
+    vbox.pack_start(hbox2, FALSE, TRUE, 0);
+
+    label = ui::Label("\"Steep\" angle:");
+    label.show();
+    hbox2.pack_start(label, FALSE, TRUE, 0);
+
+    adj = ui::Adjustment(60, 0, 90, 1, 10, 0);
+    spin = ui::SpinButton(adj, 1, 0);
+    spin.show();
+    hbox2.pack_start(spin, FALSE, TRUE, 0);
+    g_object_set_data(G_OBJECT(dlg), "tex_slant", spin);
+
+    table = ui::Table(2, 4, TRUE);
+    table.show();
+    vbox.pack_start(table, FALSE, TRUE, 0);
     gtk_table_set_row_spacings(table, 5);
     gtk_table_set_col_spacings(table, 5);
 
-       label = ui::Label( "Offset <h,v>" );
-       label.show();
-       table.attach(label, {0, 2, 0, 1}, {GTK_FILL, GTK_FILL});
-
-       label = ui::Label( "Scale <h,v>" );
-       label.show();
-       table.attach(label, {2, 4, 0, 1}, {GTK_FILL, GTK_FILL});
-
-       entry = ui::Entry();
-       entry.show();
-       table.attach(entry, {0, 1, 1, 2}, {GTK_EXPAND | GTK_FILL, GTK_FILL});
-       entry.dimensions( 60, -1 );
-       g_object_set_data( G_OBJECT( dlg ), "texoffsetx", entry );
-
-       entry = ui::Entry();
-       entry.show();
-       table.attach(entry, {1, 2, 1, 2}, {GTK_EXPAND | GTK_FILL, GTK_FILL});
-       entry.dimensions( 60, -1 );
-       g_object_set_data( G_OBJECT( dlg ), "texoffsety", entry );
-
-       entry = ui::Entry();
-       entry.show();
-       table.attach(entry, {2, 3, 1, 2}, {GTK_EXPAND | GTK_FILL, GTK_FILL});
-       entry.dimensions( 60, -1 );
-       g_object_set_data( G_OBJECT( dlg ), "texscalex", entry );
-
-       entry = ui::Entry();
-       entry.show();
-       table.attach(entry, {3, 4, 1, 2}, {GTK_EXPAND | GTK_FILL, GTK_FILL});
-       entry.dimensions( 60, -1 );
-       g_object_set_data( G_OBJECT( dlg ), "texscaley", entry );
-
-
-
-       check = ui::CheckButton( "Use detail brushes" );
-       check.show();
-       vbox.pack_start( check, FALSE, TRUE, 0 );
-       g_object_set_data( G_OBJECT( dlg ), "detail", check );
-       check.connect( "toggled", G_CALLBACK( texture_detail ), NULL );
-
-       check = ui::CheckButton( "Detail hint brushes" );
-       check.show();
-       vbox.pack_start( check, FALSE, TRUE, 0 );
-       g_object_set_data( G_OBJECT( dlg ), "hint", check );
-       check.connect( "toggled", G_CALLBACK( texture_hint ), NULL );
-
-       // ^Fishman - Add terrain key to func_group.
-       check = ui::CheckButton( "Add terrain key" );
-       check.show();
-       vbox.pack_start( check, FALSE, TRUE, 0 );
-       g_object_set_data( G_OBJECT( dlg ), "terrain_ent", check );
-       check.connect( "toggled", G_CALLBACK( texture_terrainent ), NULL );
-
-       vbox = ui::VBox( FALSE, 5 );
-       vbox.show();
-       hbox.pack_start( vbox, FALSE, TRUE, 0 );
-
-       button = ui::Button( "OK" );
-       button.show();
-       vbox.pack_start( button, FALSE, TRUE, 0 );
-       button.dimensions( 60, -1 );
-       g_object_set_data( G_OBJECT( dlg ), "go", button );
-       button.connect( "clicked", G_CALLBACK( main_go ), NULL );
-
-       label = ui::Label( "Settings:" );
-       label.show();
-       vbox.pack_start( label, FALSE, TRUE, 0 );
-
-       button = ui::Button( "Open..." );
-       button.show();
-       vbox.pack_start( button, FALSE, TRUE, 0 );
-       g_object_set_data( G_OBJECT( dlg ), "open", button );
-       button.connect( "clicked", G_CALLBACK( main_open ), NULL );
-
-       button = ui::Button( "Save as..." );
-       button.show();
-       vbox.pack_start( button, FALSE, TRUE, 0 );
-       g_object_set_data( G_OBJECT( dlg ), "save", button );
-       button.connect( "clicked", G_CALLBACK( main_save ), NULL );
-
-       button = ui::Button( "Defaults" );
-       button.show();
-       vbox.pack_start( button, FALSE, TRUE, 0 );
-       g_object_set_data( G_OBJECT( dlg ), "defaults", button );
-       button.connect( "clicked", G_CALLBACK( main_defaults ), NULL );
-
-       button = ui::Button( "About..." );
-       button.show();
-       vbox.pack_start( button, FALSE, TRUE, 0 );
-       button.connect( "clicked", G_CALLBACK( main_about ), NULL );
-
-       check = ui::CheckButton( "Preview" );
-       check.show();
-       vbox.pack_start( check, FALSE, TRUE, 0 );
-       check.connect( "toggled", G_CALLBACK( main_preview ), NULL );
-       g_object_set_data( G_OBJECT( dlg ), "main_preview", check );
-
-       // ^Fishman - Antializing for the preview window.
-       check = ui::CheckButton( "Antialised lines" );
-       check.show();
-       vbox.pack_start( check, FALSE, TRUE, 0 );
-       g_object_set_data( G_OBJECT( dlg ), "main_antialiasing", check );
-       check.connect( "toggled", G_CALLBACK( main_antialiasing ), NULL );
-
-       for ( i = 0; i < 5; i++ )
-               SetDlgValues( i );
-
-       CreateViewWindow();
-
-       create_tooltips();
-
-       FirstPassComplete = 1;
-
-       return dlg;
+    label = ui::Label("Offset <h,v>");
+    label.show();
+    table.attach(label, {0, 2, 0, 1}, {GTK_FILL, GTK_FILL});
+
+    label = ui::Label("Scale <h,v>");
+    label.show();
+    table.attach(label, {2, 4, 0, 1}, {GTK_FILL, GTK_FILL});
+
+    entry = ui::Entry();
+    entry.show();
+    table.attach(entry, {0, 1, 1, 2}, {GTK_EXPAND | GTK_FILL, GTK_FILL});
+    entry.dimensions(60, -1);
+    g_object_set_data(G_OBJECT(dlg), "texoffsetx", entry);
+
+    entry = ui::Entry();
+    entry.show();
+    table.attach(entry, {1, 2, 1, 2}, {GTK_EXPAND | GTK_FILL, GTK_FILL});
+    entry.dimensions(60, -1);
+    g_object_set_data(G_OBJECT(dlg), "texoffsety", entry);
+
+    entry = ui::Entry();
+    entry.show();
+    table.attach(entry, {2, 3, 1, 2}, {GTK_EXPAND | GTK_FILL, GTK_FILL});
+    entry.dimensions(60, -1);
+    g_object_set_data(G_OBJECT(dlg), "texscalex", entry);
+
+    entry = ui::Entry();
+    entry.show();
+    table.attach(entry, {3, 4, 1, 2}, {GTK_EXPAND | GTK_FILL, GTK_FILL});
+    entry.dimensions(60, -1);
+    g_object_set_data(G_OBJECT(dlg), "texscaley", entry);
+
+
+    check = ui::CheckButton("Use detail brushes");
+    check.show();
+    vbox.pack_start(check, FALSE, TRUE, 0);
+    g_object_set_data(G_OBJECT(dlg), "detail", check);
+    check.connect("toggled", G_CALLBACK(texture_detail), NULL);
+
+    check = ui::CheckButton("Detail hint brushes");
+    check.show();
+    vbox.pack_start(check, FALSE, TRUE, 0);
+    g_object_set_data(G_OBJECT(dlg), "hint", check);
+    check.connect("toggled", G_CALLBACK(texture_hint), NULL);
+
+    // ^Fishman - Add terrain key to func_group.
+    check = ui::CheckButton("Add terrain key");
+    check.show();
+    vbox.pack_start(check, FALSE, TRUE, 0);
+    g_object_set_data(G_OBJECT(dlg), "terrain_ent", check);
+    check.connect("toggled", G_CALLBACK(texture_terrainent), NULL);
+
+    vbox = ui::VBox(FALSE, 5);
+    vbox.show();
+    hbox.pack_start(vbox, FALSE, TRUE, 0);
+
+    button = ui::Button("OK");
+    button.show();
+    vbox.pack_start(button, FALSE, TRUE, 0);
+    button.dimensions(60, -1);
+    g_object_set_data(G_OBJECT(dlg), "go", button);
+    button.connect("clicked", G_CALLBACK(main_go), NULL);
+
+    label = ui::Label("Settings:");
+    label.show();
+    vbox.pack_start(label, FALSE, TRUE, 0);
+
+    button = ui::Button("Open...");
+    button.show();
+    vbox.pack_start(button, FALSE, TRUE, 0);
+    g_object_set_data(G_OBJECT(dlg), "open", button);
+    button.connect("clicked", G_CALLBACK(main_open), NULL);
+
+    button = ui::Button("Save as...");
+    button.show();
+    vbox.pack_start(button, FALSE, TRUE, 0);
+    g_object_set_data(G_OBJECT(dlg), "save", button);
+    button.connect("clicked", G_CALLBACK(main_save), NULL);
+
+    button = ui::Button("Defaults");
+    button.show();
+    vbox.pack_start(button, FALSE, TRUE, 0);
+    g_object_set_data(G_OBJECT(dlg), "defaults", button);
+    button.connect("clicked", G_CALLBACK(main_defaults), NULL);
+
+    button = ui::Button("About...");
+    button.show();
+    vbox.pack_start(button, FALSE, TRUE, 0);
+    button.connect("clicked", G_CALLBACK(main_about), NULL);
+
+    check = ui::CheckButton("Preview");
+    check.show();
+    vbox.pack_start(check, FALSE, TRUE, 0);
+    check.connect("toggled", G_CALLBACK(main_preview), NULL);
+    g_object_set_data(G_OBJECT(dlg), "main_preview", check);
+
+    // ^Fishman - Antializing for the preview window.
+    check = ui::CheckButton("Antialised lines");
+    check.show();
+    vbox.pack_start(check, FALSE, TRUE, 0);
+    g_object_set_data(G_OBJECT(dlg), "main_antialiasing", check);
+    check.connect("toggled", G_CALLBACK(main_antialiasing), NULL);
+
+    for (i = 0; i < 5; i++) {
+        SetDlgValues(i);
+    }
+
+    CreateViewWindow();
+
+    create_tooltips();
+
+    FirstPassComplete = 1;
+
+    return dlg;
 }
 
 
 #if 0
 
-HWND hwndDisplay = (HWND)NULL;
+                                                                                                                        HWND hwndDisplay = (HWND)NULL;
 HWND ghwndTab    = (HWND)NULL;
 int iTab = 0;
 Rect rcTab;