]> de.git.xonotic.org Git - xonotic/netradiant.git/blobdiff - radiant/findtexturedialog.cpp
iqmmodel: better format description
[xonotic/netradiant.git] / radiant / findtexturedialog.cpp
index b09ce4a7c823e85988d295e0e449c9349e908f9b..2a6c028199d2402385aa5148d1e58f25dce70c7d 100644 (file)
@@ -1,5 +1,5 @@
 /*
-   Copyright (C) 1999-2007 id Software, Inc. and contributors.
+   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.
 // Leonardo Zide (leo@lokigames.com)
 //
 
-#include "stdafx.h"
 #include "findtexturedialog.h"
-#include <glib/gi18n.h>
 
-FindTextureDialog g_TexFindDlg;
-FindTextureDialog& g_dlgFind = g_TexFindDlg;
-static bool g_bFindActive = true;
+#include <gtk/gtk.h>
 
-static void OnApply( 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 );
-}
+#include "debugging/debugging.h"
 
-static void OnFind( GtkWidget *widget, gpointer data ){
-       g_dlgFind.UpdateData( TRUE );
-       FindReplaceTextures( g_dlgFind.m_strFind, g_dlgFind.m_strReplace,
-                                                g_dlgFind.m_bSelectedOnly, FALSE, TRUE );
-}
+#include "ishaders.h"
 
-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();
-}
+#include "gtkutil/window.h"
+#include "stream/stringstream.h"
 
-static void OnClose( GtkWidget *widget, gpointer data ){
-       g_dlgFind.HideDlg();
-}
+#include "commands.h"
+#include "dialog.h"
+#include "select.h"
+#include "textureentry.h"
+
+
+class FindTextureDialog : public Dialog {
+public:
+    static void setReplaceStr(const char *name);
+
+    static void setFindStr(const char *name);
+
+    static bool isOpen();
+
+    static void show();
+
+    typedef FreeCaller<void(), &FindTextureDialog::show> ShowCaller;
+
+    static void updateTextures(const char *name);
+
+    FindTextureDialog();
+
+    virtual ~FindTextureDialog();
 
-static void popup_selected( GtkWidget *widget, gpointer data ){
-       gchar *str;
+    ui::Window BuildDialog();
 
-       gtk_label_get( GTK_LABEL( GTK_BIN( widget )->child ), &str );
-       gtk_entry_set_text( GTK_ENTRY( data ), str );
+    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;
+
+namespace {
+    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 OnApply(ui::Widget widget, gpointer data)
+    {
+        g_FindTextureDialog.exportData();
+        FindTextureDialog_apply();
+    }
+
+    static void OnFind(ui::Widget widget, gpointer data)
+    {
+        g_FindTextureDialog.exportData();
+        FindTextureDialog_apply();
+    }
+
+    static void OnOK(ui::Widget widget, gpointer data)
+    {
+        g_FindTextureDialog.exportData();
+        FindTextureDialog_apply();
+        g_FindTextureDialog.HideDlg();
+    }
+
+    static void OnClose(ui::Widget widget, gpointer data)
+    {
+        g_FindTextureDialog.HideDlg();
+    }
+
+
+    static gint find_focus_in(ui::Widget widget, GdkEventFocus *event, gpointer data)
+    {
+        g_bFindActive = true;
+        return FALSE;
+    }
+
+    static gint replace_focus_in(ui::Widget widget, GdkEventFocus *event, gpointer data)
+    {
+        g_bFindActive = false;
+        return FALSE;
+    }
 }
 
-static void find_clicked( GtkWidget *widget, gpointer data ){
-       GtkWidget *menu, *item;
-       menu = gtk_menu_new();
+// =============================================================================
+// FindTextureDialog class
 
-       for ( int i = 0; i < QERApp_GetActiveShaderCount(); i++ )
-       {
-               IShader *pShader = QERApp_ActiveShader_ForIndex( i );
+FindTextureDialog::FindTextureDialog()
+{
+    m_bSelectedOnly = 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 );
-       }
+FindTextureDialog::~FindTextureDialog()
+{
+}
 
-       gtk_menu_popup( GTK_MENU( menu ), NULL, NULL, NULL, NULL, 1, GDK_CURRENT_TIME );
+ui::Window FindTextureDialog::BuildDialog()
+{
+    ui::Widget label{ui::null};
+    ui::Widget button{ui::null};
+    ui::Entry entry{ui::null};
+
+    auto dlg = ui::Window(create_floating_window("Find / Replace Texture(s)", m_parent));
+
+    auto hbox = ui::HBox(FALSE, 5);
+    hbox.show();
+    dlg.add(hbox);
+    gtk_container_set_border_width(GTK_CONTAINER(hbox), 5);
+
+    auto vbox = ui::VBox(FALSE, 5);
+    vbox.show();
+    hbox.pack_start(vbox, TRUE, TRUE, 0);
+
+    auto table = ui::Table(2, 2, FALSE);
+    table.show();
+    vbox.pack_start(table, TRUE, TRUE, 0);
+    gtk_table_set_row_spacings(table, 5);
+    gtk_table_set_col_spacings(table, 5);
+
+    label = ui::Label("Find:");
+    label.show();
+    table.attach(label, {0, 1, 0, 1}, {GTK_FILL, 0});
+    gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
+
+    label = ui::Label("Replace:");
+    label.show();
+    table.attach(label, {0, 1, 1, 2}, {GTK_FILL, 0});
+    gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
+
+    entry = ui::Entry(ui::New);
+    entry.show();
+    table.attach(entry, {1, 2, 0, 1}, {GTK_EXPAND | GTK_FILL, 0});
+    entry.connect("focus_in_event",
+                  G_CALLBACK(find_focus_in), 0);
+    AddDialogData(entry, m_strFind);
+    GlobalTextureEntryCompletion::instance().connect(entry);
+
+    entry = ui::Entry(ui::New);
+    entry.show();
+    table.attach(entry, {1, 2, 1, 2}, {GTK_EXPAND | GTK_FILL, 0});
+    entry.connect("focus_in_event",
+                  G_CALLBACK(replace_focus_in), 0);
+    AddDialogData(entry, m_strReplace);
+    GlobalTextureEntryCompletion::instance().connect(entry);
+
+    auto check = ui::CheckButton("Within selected brushes only");
+    check.show();
+    vbox.pack_start(check, TRUE, TRUE, 0);
+    AddDialogData(check, m_bSelectedOnly);
+
+    vbox = ui::VBox(FALSE, 5);
+    vbox.show();
+    hbox.pack_start(vbox, FALSE, FALSE, 0);
+
+    button = ui::Button("Apply");
+    button.show();
+    vbox.pack_start(button, FALSE, FALSE, 0);
+    button.connect("clicked",
+                   G_CALLBACK(OnApply), 0);
+    button.dimensions(60, -1);
+
+    button = ui::Button("Close");
+    button.show();
+    vbox.pack_start(button, FALSE, FALSE, 0);
+    button.connect("clicked",
+                   G_CALLBACK(OnClose), 0);
+    button.dimensions(60, -1);
+
+    return dlg;
 }
 
-static gint find_focus_in( GtkWidget *widget, GdkEventFocus *event, gpointer data ){
-       g_bFindActive = true;
-       return FALSE;
+void FindTextureDialog::updateTextures(const char *name)
+{
+    if (isOpen()) {
+        if (g_bFindActive) {
+            setFindStr(name + 9);
+        } else {
+            setReplaceStr(name + 9);
+        }
+    }
 }
 
-static gint replace_focus_in( GtkWidget *widget, GdkEventFocus *event, gpointer data ){
-       g_bFindActive = false;
-       return FALSE;
+bool FindTextureDialog::isOpen()
+{
+    return g_FindTextureDialog.GetWidget().visible();
 }
 
-// =============================================================================
-// FindTextureDialog class
+void FindTextureDialog::setFindStr(const char *name)
+{
+    g_FindTextureDialog.exportData();
+    g_FindTextureDialog.m_strFind = name;
+    g_FindTextureDialog.importData();
+}
 
-FindTextureDialog::FindTextureDialog (){
-       m_bSelectedOnly = FALSE;
-       m_strFind = "";
-       m_strReplace = "";
-       m_bForce = FALSE;
-       m_bLive = TRUE;
+void FindTextureDialog::setReplaceStr(const char *name)
+{
+    g_FindTextureDialog.exportData();
+    g_FindTextureDialog.m_strReplace = name;
+    g_FindTextureDialog.importData();
 }
 
-FindTextureDialog::~FindTextureDialog (){
+void FindTextureDialog::show()
+{
+    g_FindTextureDialog.ShowDlg();
 }
 
-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_constructWindow(ui::Window main_window)
+{
+    g_FindTextureDialog.constructWindow(main_window);
 }
 
-void FindTextureDialog::updateTextures( const char *p ){
-       if ( isOpen() ) {
-               if ( g_bFindActive ) {
-                       setFindStr( p );
-               }
-               else
-               {
-                       setReplaceStr( p );
-               }
-       }
+void FindTextureDialog_destroyWindow()
+{
+    g_FindTextureDialog.destroyWindow();
 }
 
-bool FindTextureDialog::isOpen(){
-       return ( g_dlgFind.m_pWidget == NULL || GTK_WIDGET_VISIBLE( g_dlgFind.m_pWidget ) == FALSE ) ? false : true;
+bool FindTextureDialog_isOpen()
+{
+    return g_FindTextureDialog.isOpen();
 }
 
-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_selectTexture(const char *name)
+{
+    g_FindTextureDialog.updateTextures(name);
 }
 
-void FindTextureDialog::setReplaceStr( const char * p ){
-       g_dlgFind.UpdateData( TRUE );
-       if ( g_dlgFind.m_bLive ) {
-               g_dlgFind.m_strReplace = p;
-               g_dlgFind.UpdateData( FALSE );
-       }
+void FindTextureDialog_Construct()
+{
+    GlobalCommands_insert("FindReplaceTextures", FindTextureDialog::ShowCaller());
 }
 
-void FindTextureDialog::show(){
-       g_dlgFind.ShowDlg();
+void FindTextureDialog_Destroy()
+{
 }