]> de.git.xonotic.org Git - xonotic/netradiant.git/blobdiff - radiant/findtexturedialog.cpp
Remove <gtk/gtk.h> from most of radiant/*
[xonotic/netradiant.git] / radiant / findtexturedialog.cpp
index 012208c2f6aea05639685ab69112641e2d9fe931..8ca4466ce5af32e92b9366bf0b1f425d413b6c1d 100644 (file)
@@ -1,23 +1,23 @@
 /*
-Copyright (C) 1999-2007 id Software, Inc. and contributors.
-For a list of contributors, see the accompanying CONTRIBUTORS file.
+   Copyright (C) 1999-2006 Id Software, Inc. and contributors.
+   For a list of contributors, see the accompanying CONTRIBUTORS file.
 
-This file is part of GtkRadiant.
+   This file is part of GtkRadiant.
 
-GtkRadiant is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
+   GtkRadiant is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
 
-GtkRadiant is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
+   GtkRadiant is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
 
-You should have received a copy of the GNU General Public License
-along with GtkRadiant; if not, write to the Free Software
-Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
-*/
+   You should have received a copy of the GNU General Public License
+   along with GtkRadiant; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ */
 
 //
 // Find/Replace textures dialogs
@@ -25,265 +25,239 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 // Leonardo Zide (leo@lokigames.com)
 //
 
-#include "stdafx.h"
 #include "findtexturedialog.h"
 
-FindTextureDialog g_TexFindDlg;
-FindTextureDialog& g_dlgFind = g_TexFindDlg;
-static bool g_bFindActive = true;
+#include "debugging/debugging.h"
+
+#include "ishaders.h"
+
+#include "gtkutil/window.h"
+#include "stream/stringstream.h"
+
+#include "commands.h"
+#include "dialog.h"
+#include "select.h"
+#include "textureentry.h"
+
+
 
-static void OnApply(GtkWidget *widget, gpointer data) 
+class FindTextureDialog : public Dialog
 {
-  g_dlgFind.UpdateData(TRUE);
-  FindReplaceTextures(g_dlgFind.m_strFind, g_dlgFind.m_strReplace,
-    g_dlgFind.m_bSelectedOnly, g_dlgFind.m_bForce, FALSE);
+public:
+static void setReplaceStr( const char* name );
+static void setFindStr( const char* name );
+static bool isOpen();
+static void show();
+typedef FreeCaller<&FindTextureDialog::show> ShowCaller;
+static void updateTextures( const char* name );
+
+FindTextureDialog();
+virtual ~FindTextureDialog();
+ui::Window BuildDialog();
+
+void constructWindow( ui::Window parent ){
+       m_parent = parent;
+       Create();
 }
+void destroyWindow(){
+       Destroy();
+}
+
+
+bool m_bSelectedOnly;
+CopiedString m_strFind;
+CopiedString m_strReplace;
+};
+
+FindTextureDialog g_FindTextureDialog;
+static bool g_bFindActive = true;
 
-static void OnFind(GtkWidget *widget, gpointer data) 
+namespace
 {
-  g_dlgFind.UpdateData(TRUE);
-  FindReplaceTextures(g_dlgFind.m_strFind, g_dlgFind.m_strReplace,
-    g_dlgFind.m_bSelectedOnly, FALSE, TRUE);
+void FindTextureDialog_apply(){
+       StringOutputStream find( 256 );
+       StringOutputStream replace( 256 );
+
+       find << "textures/" << g_FindTextureDialog.m_strFind.c_str();
+       replace << "textures/" << g_FindTextureDialog.m_strReplace.c_str();
+       FindReplaceTextures( find.c_str(), replace.c_str(), g_FindTextureDialog.m_bSelectedOnly );
 }
 
-static void OnOK(GtkWidget *widget, gpointer data) 
-{
-  g_dlgFind.UpdateData(TRUE);
-  FindReplaceTextures(g_dlgFind.m_strFind, g_dlgFind.m_strReplace,
-    g_dlgFind.m_bSelectedOnly, g_dlgFind.m_bForce, FALSE);
-  g_dlgFind.HideDlg ();
+static void OnApply( ui::Widget widget, gpointer data ){
+       g_FindTextureDialog.exportData();
+       FindTextureDialog_apply();
 }
 
-static void OnClose(GtkWidget *widget, gpointer data) 
-{
-  g_dlgFind.HideDlg ();
+static void OnFind( GtkWidget* widget, gpointer data ){
+       g_FindTextureDialog.exportData();
+       FindTextureDialog_apply();
 }
 
-static void popup_selected (GtkWidget *widget, gpointer data) 
-{
-  gchar *str;
+static void OnOK( GtkWidget* widget, gpointer data ){
+       g_FindTextureDialog.exportData();
+       FindTextureDialog_apply();
+       g_FindTextureDialog.HideDlg();
+}
 
-  gtk_label_get (GTK_LABEL (GTK_BIN (widget)->child), &str);
-  gtk_entry_set_text (GTK_ENTRY (data), str);
+static void OnClose( ui::Widget widget, gpointer data ){
+       g_FindTextureDialog.HideDlg();
 }
 
-static void find_clicked (GtkWidget *widget, gpointer data) 
-{
-  GtkWidget *menu, *item;
-  menu = gtk_menu_new ();
 
-  for (int i = 0; i < QERApp_GetActiveShaderCount (); i++)
-  {
-    IShader *pShader = QERApp_ActiveShader_ForIndex (i);
+static gint find_focus_in( ui::Widget widget, GdkEventFocus *event, gpointer data ){
+       g_bFindActive = true;
+       return FALSE;
+}
 
-    item = gtk_menu_item_new_with_label (pShader->getName ());
-    gtk_signal_connect (GTK_OBJECT (item), "activate", GTK_SIGNAL_FUNC (popup_selected), data);
-    gtk_widget_show (item);
-    gtk_menu_append (GTK_MENU (menu), item);
-  }
+static gint replace_focus_in( ui::Widget widget, GdkEventFocus *event, gpointer data ){
+       g_bFindActive = false;
+       return FALSE;
+}
+}
 
-  gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL, NULL, 1, GDK_CURRENT_TIME); 
+// =============================================================================
+// FindTextureDialog class
+
+FindTextureDialog::FindTextureDialog(){
+       m_bSelectedOnly = FALSE;
 }
 
-static gint find_focus_in (GtkWidget *widget, GdkEventFocus *event, gpointer data)
-{
-  g_bFindActive = true;
-  return FALSE;
+FindTextureDialog::~FindTextureDialog(){
 }
 
-static gint replace_focus_in (GtkWidget *widget, GdkEventFocus *event, gpointer data)
-{
-  g_bFindActive = false;
-  return FALSE;
+ui::Window FindTextureDialog::BuildDialog(){
+       ui::Widget vbox, hbox, table, label;
+       ui::Widget button, check, entry;
+
+       ui::Window dlg = ui::Window(create_floating_window( "Find / Replace Texture(s)", m_parent ));
+
+       hbox = ui::HBox( FALSE, 5 );
+       gtk_widget_show( hbox );
+       gtk_container_add( GTK_CONTAINER( dlg ), GTK_WIDGET( hbox ) );
+       gtk_container_set_border_width( GTK_CONTAINER( hbox ), 5 );
+
+       vbox = ui::VBox( FALSE, 5 );
+       gtk_widget_show( vbox );
+       gtk_box_pack_start( GTK_BOX( hbox ), GTK_WIDGET( vbox ), TRUE, TRUE, 0 );
+
+       table = ui::Table( 2, 2, FALSE );
+       gtk_widget_show( table );
+       gtk_box_pack_start( GTK_BOX( vbox ), GTK_WIDGET( table ), TRUE, TRUE, 0 );
+       gtk_table_set_row_spacings( GTK_TABLE( table ), 5 );
+       gtk_table_set_col_spacings( GTK_TABLE( table ), 5 );
+
+       label = ui::Label( "Find:" );
+       gtk_widget_show( label );
+       gtk_table_attach( GTK_TABLE( table ), label, 0, 1, 0, 1,
+                                         (GtkAttachOptions) ( GTK_FILL ),
+                                         (GtkAttachOptions) ( 0 ), 0, 0 );
+       gtk_misc_set_alignment( GTK_MISC( label ), 0, 0.5 );
+
+       label = ui::Label( "Replace:" );
+       gtk_widget_show( label );
+       gtk_table_attach( GTK_TABLE( table ), label, 0, 1, 1, 2,
+                                         (GtkAttachOptions) ( GTK_FILL ),
+                                         (GtkAttachOptions) ( 0 ), 0, 0 );
+       gtk_misc_set_alignment( GTK_MISC( label ), 0, 0.5 );
+
+       entry = ui::Entry();
+       gtk_widget_show( entry );
+       gtk_table_attach( GTK_TABLE( table ), entry, 1, 2, 0, 1,
+                                         (GtkAttachOptions) ( GTK_EXPAND | GTK_FILL ),
+                                         (GtkAttachOptions) ( 0 ), 0, 0 );
+       g_signal_connect( G_OBJECT( entry ), "focus_in_event",
+                                         G_CALLBACK( find_focus_in ), 0 );
+       AddDialogData( *GTK_ENTRY( entry ), m_strFind );
+       GlobalTextureEntryCompletion::instance().connect( GTK_ENTRY( entry ) );
+
+       entry = ui::Entry();
+       gtk_widget_show( entry );
+       gtk_table_attach( GTK_TABLE( table ), entry, 1, 2, 1, 2,
+                                         (GtkAttachOptions) ( GTK_EXPAND | GTK_FILL ),
+                                         (GtkAttachOptions) ( 0 ), 0, 0 );
+       g_signal_connect( G_OBJECT( entry ), "focus_in_event",
+                                         G_CALLBACK( replace_focus_in ), 0 );
+       AddDialogData( *GTK_ENTRY( entry ), m_strReplace );
+       GlobalTextureEntryCompletion::instance().connect( GTK_ENTRY( entry ) );
+
+       check = ui::CheckButton( "Within selected brushes only" );
+       gtk_widget_show( check );
+       gtk_box_pack_start( GTK_BOX( vbox ), check, TRUE, TRUE, 0 );
+       AddDialogData( *GTK_TOGGLE_BUTTON( check ), m_bSelectedOnly );
+
+       vbox = ui::VBox( FALSE, 5 );
+       gtk_widget_show( vbox );
+       gtk_box_pack_start( GTK_BOX( hbox ), GTK_WIDGET( vbox ), FALSE, FALSE, 0 );
+
+       button = ui::Button( "Apply" );
+       gtk_widget_show( button );
+       gtk_box_pack_start( GTK_BOX( vbox ), button, FALSE, FALSE, 0 );
+       g_signal_connect( G_OBJECT( button ), "clicked",
+                                         G_CALLBACK( OnApply ), 0 );
+       gtk_widget_set_size_request( button, 60, -1 );
+
+       button = ui::Button( "Close" );
+       gtk_widget_show( button );
+       gtk_box_pack_start( GTK_BOX( vbox ), button, FALSE, FALSE, 0 );
+       g_signal_connect( G_OBJECT( button ), "clicked",
+                                         G_CALLBACK( OnClose ), 0 );
+       gtk_widget_set_size_request( button, 60, -1 );
+
+       return dlg;
 }
 
-// =============================================================================
-// FindTextureDialog class
+void FindTextureDialog::updateTextures( const char* name ){
+       if ( isOpen() ) {
+               if ( g_bFindActive ) {
+                       setFindStr( name + 9 );
+               }
+               else
+               {
+                       setReplaceStr( name + 9 );
+               }
+       }
+}
 
-FindTextureDialog::FindTextureDialog ()
-{
-  m_bSelectedOnly = FALSE;
-  m_strFind = "";
-  m_strReplace = "";
-  m_bForce = FALSE;
-  m_bLive = TRUE;
+bool FindTextureDialog::isOpen(){
+       return gtk_widget_get_visible( g_FindTextureDialog.GetWidget() ) == TRUE;
 }
 
-FindTextureDialog::~FindTextureDialog ()
-{
+void FindTextureDialog::setFindStr( const char* name ){
+       g_FindTextureDialog.exportData();
+       g_FindTextureDialog.m_strFind = name;
+       g_FindTextureDialog.importData();
 }
 
-void FindTextureDialog::BuildDialog ()
-{
-  GtkWidget *dlg, *vbox, *hbox, *table, *label;
-  GtkWidget *button, *check, *entry, *arrow;
-
-  dlg = m_pWidget;
-  gtk_window_set_title (GTK_WINDOW (dlg), "Find / Replace Texture(s)");
-  gtk_window_set_transient_for (GTK_WINDOW (dlg), GTK_WINDOW (g_pParentWnd->m_pWidget));
-
-  hbox = gtk_hbox_new (FALSE, 5);
-  gtk_widget_show (hbox);
-  gtk_container_add (GTK_CONTAINER (dlg), hbox);
-  gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
-
-  vbox = gtk_vbox_new (FALSE, 5);
-  gtk_widget_show (vbox);
-  gtk_box_pack_start (GTK_BOX (hbox), vbox, TRUE, TRUE, 0);
-
-  table = gtk_table_new (2, 3, FALSE);
-  gtk_widget_show (table);
-  gtk_box_pack_start (GTK_BOX (vbox), table, TRUE, TRUE, 0);
-  gtk_table_set_row_spacings (GTK_TABLE (table), 5);
-  gtk_table_set_col_spacings (GTK_TABLE (table), 5);
-
-  label = gtk_label_new ("Find:");
-  gtk_widget_show (label);
-  gtk_table_attach (GTK_TABLE (table), label, 0, 1, 0, 1,
-                    (GtkAttachOptions) (GTK_FILL),
-                    (GtkAttachOptions) (0), 0, 0);
-  gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
-
-  label = gtk_label_new ("Replace:");
-  gtk_widget_show (label);
-  gtk_table_attach (GTK_TABLE (table), label, 0, 1, 1, 2,
-                    (GtkAttachOptions) (GTK_FILL),
-                    (GtkAttachOptions) (0), 0, 0);
-  gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
-
-  entry = gtk_entry_new ();
-  gtk_widget_show (entry);
-  gtk_table_attach (GTK_TABLE (table), entry, 1, 2, 0, 1,
-                    (GtkAttachOptions) (GTK_EXPAND|GTK_FILL),
-                    (GtkAttachOptions) (0), 0, 0);
-  gtk_signal_connect (GTK_OBJECT (entry), "focus_in_event",
-                     GTK_SIGNAL_FUNC (find_focus_in), NULL);
-  AddDialogData (entry, &m_strFind, DLG_ENTRY_TEXT);
-
-  button = gtk_button_new ();
-  gtk_widget_show (button);
-  gtk_table_attach (GTK_TABLE (table), button, 2, 3, 0, 1,
-                    (GtkAttachOptions) (GTK_FILL),
-                    (GtkAttachOptions) (GTK_FILL), 0, 0);
-  gtk_signal_connect (GTK_OBJECT (button), "clicked",
-                     GTK_SIGNAL_FUNC (find_clicked), entry);
-
-  arrow = gtk_arrow_new (GTK_ARROW_DOWN, GTK_SHADOW_OUT);
-  gtk_widget_show (arrow);
-  gtk_container_add (GTK_CONTAINER (button), arrow);
-
-  entry = gtk_entry_new ();
-  gtk_widget_show (entry);
-  gtk_table_attach (GTK_TABLE (table), entry, 1, 2, 1, 2,
-                    (GtkAttachOptions) (GTK_EXPAND|GTK_FILL),
-                    (GtkAttachOptions) (0), 0, 0);
-  gtk_signal_connect (GTK_OBJECT (entry), "focus_in_event",
-                     GTK_SIGNAL_FUNC (replace_focus_in), NULL);
-  AddDialogData (entry, &m_strReplace, DLG_ENTRY_TEXT);
-
-  button = gtk_button_new ();
-  gtk_widget_show (button);
-  gtk_table_attach (GTK_TABLE (table), button, 2, 3, 1, 2,
-                    (GtkAttachOptions) (GTK_FILL),
-                    (GtkAttachOptions) (GTK_FILL), 0, 0);
-  gtk_signal_connect (GTK_OBJECT (button), "clicked",
-                     GTK_SIGNAL_FUNC (find_clicked), entry);
-
-  arrow = gtk_arrow_new (GTK_ARROW_DOWN, GTK_SHADOW_OUT);
-  gtk_widget_show (arrow);
-  gtk_container_add (GTK_CONTAINER (button), arrow);
-
-  check = gtk_check_button_new_with_label ("Use selected brushes only");
-  gtk_widget_show (check);
-  gtk_box_pack_start (GTK_BOX (vbox), check, TRUE, TRUE, 0);
-  AddDialogData (check, &m_bSelectedOnly, DLG_CHECK_BOOL);
-
-  check = gtk_check_button_new_with_label ("Replace everywhere (selected/active), don't test against Find");
-  gtk_widget_show (check);
-  gtk_box_pack_start (GTK_BOX (vbox), check, TRUE, TRUE, 0);
-  AddDialogData (check, &m_bForce, DLG_CHECK_BOOL);
-
-  check = gtk_check_button_new_with_label ("Live updates from Texture/Camera windows");
-  gtk_widget_show (check);
-  gtk_box_pack_start (GTK_BOX (vbox), check, TRUE, TRUE, 0);
-  AddDialogData (check, &m_bLive, DLG_CHECK_BOOL);
-
-  vbox = gtk_vbox_new (FALSE, 5);
-  gtk_widget_show (vbox);
-  gtk_box_pack_start (GTK_BOX (hbox), vbox, TRUE, TRUE, 0);
-
-  button = gtk_button_new_with_label( "Find" );
-  gtk_widget_show( button );
-  gtk_box_pack_start( GTK_BOX( vbox ), button, FALSE, FALSE, 0 );
-  gtk_signal_connect( GTK_OBJECT( button ), "clicked",
-                      GTK_SIGNAL_FUNC( OnFind ), NULL );
-  gtk_widget_set_usize( button, 60, -2 );
-
-  button = gtk_button_new_with_label ("OK");
-  gtk_widget_show (button);
-  gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
-  gtk_signal_connect (GTK_OBJECT (button), "clicked",
-                      GTK_SIGNAL_FUNC (OnOK), NULL);
-  gtk_widget_set_usize (button, 60, -2);
-
-  button = gtk_button_new_with_label ("Apply");
-  gtk_widget_show (button);
-  gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
-  gtk_signal_connect (GTK_OBJECT (button), "clicked",
-                      GTK_SIGNAL_FUNC (OnApply), NULL);
-  gtk_widget_set_usize (button, 60, -2);
-
-  button = gtk_button_new_with_label ("Close");
-  gtk_widget_show (button);
-  gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
-  gtk_signal_connect (GTK_OBJECT (button), "clicked",
-                      GTK_SIGNAL_FUNC (OnClose), NULL);
-  gtk_widget_set_usize (button, 60, -2);
-
-  gtk_widget_show (dlg);
+void FindTextureDialog::setReplaceStr( const char* name ){
+       g_FindTextureDialog.exportData();
+       g_FindTextureDialog.m_strReplace = name;
+       g_FindTextureDialog.importData();
 }
 
-void FindTextureDialog::updateTextures(const char *p)
-{
-  if (isOpen())
-  {
-    if (g_bFindActive)
-    {
-      setFindStr(p);
-    }
-    else
-    {
-      setReplaceStr(p);
-    }
-  }
+void FindTextureDialog::show(){
+       g_FindTextureDialog.ShowDlg();
 }
 
-bool FindTextureDialog::isOpen()
-{
-  return (g_dlgFind.m_pWidget == NULL || GTK_WIDGET_VISIBLE (g_dlgFind.m_pWidget) == FALSE) ? false : true;
+
+void FindTextureDialog_constructWindow( ui::Window main_window ){
+       g_FindTextureDialog.constructWindow( main_window );
 }
 
-void FindTextureDialog::setFindStr(const char * p)
-{
-  g_dlgFind.UpdateData(TRUE);
-  if (g_dlgFind.m_bLive)
-  {
-    g_dlgFind.m_strFind = p;
-    g_dlgFind.UpdateData(FALSE);
-  }
+void FindTextureDialog_destroyWindow(){
+       g_FindTextureDialog.destroyWindow();
 }
 
-void FindTextureDialog::setReplaceStr(const char * p)
-{
-  g_dlgFind.UpdateData(TRUE);
-  if (g_dlgFind.m_bLive)
-  {
-    g_dlgFind.m_strReplace = p;
-    g_dlgFind.UpdateData(FALSE);
-  }
+bool FindTextureDialog_isOpen(){
+       return g_FindTextureDialog.isOpen();
 }
 
-void FindTextureDialog::show()
-{
-  g_dlgFind.ShowDlg ();
+void FindTextureDialog_selectTexture( const char* name ){
+       g_FindTextureDialog.updateTextures( name );
+}
+
+void FindTextureDialog_Construct(){
+       GlobalCommands_insert( "FindReplaceTextures", FindTextureDialog::ShowCaller() );
+}
+
+void FindTextureDialog_Destroy(){
 }