mirror of
https://github.com/TTimo/GtkRadiant.git
synced 2024-11-10 07:11:54 +00:00
Find / replace history
This commit is contained in:
parent
51c301b8f7
commit
e8acfaebc1
1 changed files with 114 additions and 6 deletions
|
@ -3487,6 +3487,41 @@ int DoLightIntensityDlg( int *intensity ){
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void limitHistory( GtkWidget *combo, gint max_count )
|
||||||
|
{
|
||||||
|
GtkTreeModel *model;
|
||||||
|
gint length;
|
||||||
|
|
||||||
|
if( max_count <= 0 )
|
||||||
|
return;
|
||||||
|
|
||||||
|
model = gtk_combo_box_get_model( GTK_COMBO_BOX( combo ) );
|
||||||
|
if( !model )
|
||||||
|
return;
|
||||||
|
|
||||||
|
length = gtk_tree_model_iter_n_children( model, NULL );
|
||||||
|
if( length > max_count )
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
gint count = length - max_count;
|
||||||
|
|
||||||
|
for( i = 0; i < count; i++ )
|
||||||
|
{
|
||||||
|
gtk_combo_box_text_remove( GTK_COMBO_BOX_TEXT( combo ), 0 );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
static void AddToFindHistory( GtkWidget *combo, const gchar *strFind )
|
||||||
|
{
|
||||||
|
gtk_combo_box_text_append( GTK_COMBO_BOX_TEXT( combo ), strFind, strFind );
|
||||||
|
limitHistory( combo, 20 );
|
||||||
|
}
|
||||||
|
static void AddToReplaceHistory( GtkWidget *combo, const gchar *strReplace )
|
||||||
|
{
|
||||||
|
gtk_combo_box_text_append( GTK_COMBO_BOX_TEXT( combo ), strReplace, strReplace );
|
||||||
|
limitHistory( combo, 20 );
|
||||||
|
}
|
||||||
|
|
||||||
static void OnReplace_clicked( GtkButton *button, gpointer data )
|
static void OnReplace_clicked( GtkButton *button, gpointer data )
|
||||||
{
|
{
|
||||||
gboolean bSelectedOnly, bForce;
|
gboolean bSelectedOnly, bForce;
|
||||||
|
@ -3511,6 +3546,9 @@ static void OnReplace_clicked( GtkButton *button, gpointer data )
|
||||||
strReplace = gtk_entry_get_text( GTK_ENTRY( entry ) );
|
strReplace = gtk_entry_get_text( GTK_ENTRY( entry ) );
|
||||||
|
|
||||||
FindReplaceTextures( strFind, strReplace, bSelectedOnly, bForce, FALSE );
|
FindReplaceTextures( strFind, strReplace, bSelectedOnly, bForce, FALSE );
|
||||||
|
|
||||||
|
AddToFindHistory( find_combo, strFind );
|
||||||
|
AddToReplaceHistory( replace_combo, strReplace );
|
||||||
}
|
}
|
||||||
static void OnFind_clicked( GtkButton *button, gpointer data )
|
static void OnFind_clicked( GtkButton *button, gpointer data )
|
||||||
{
|
{
|
||||||
|
@ -3533,13 +3571,72 @@ static void OnFind_clicked( GtkButton *button, gpointer data )
|
||||||
strReplace = gtk_entry_get_text( GTK_ENTRY( entry ) );
|
strReplace = gtk_entry_get_text( GTK_ENTRY( entry ) );
|
||||||
|
|
||||||
FindReplaceTextures( strFind, strReplace, bSelectedOnly, FALSE, TRUE );
|
FindReplaceTextures( strFind, strReplace, bSelectedOnly, FALSE, TRUE );
|
||||||
|
|
||||||
|
AddToFindHistory( find_combo, strFind );
|
||||||
|
}
|
||||||
|
|
||||||
|
static void findpopup_selected( GtkWidget *widget, gpointer data )
|
||||||
|
{
|
||||||
|
const gchar *str;
|
||||||
|
GtkWidget *label;
|
||||||
|
|
||||||
|
GtkWidget *texlabel = GTK_WIDGET( g_object_get_data( G_OBJECT( widget ), "texture-label" ) );
|
||||||
|
if( texlabel )
|
||||||
|
{
|
||||||
|
label = texlabel;
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
label = gtk_bin_get_child( GTK_BIN( widget ) );
|
||||||
|
}
|
||||||
|
str = gtk_label_get_text( GTK_LABEL( label ) );
|
||||||
|
gtk_entry_set_text( GTK_ENTRY( data ), str );
|
||||||
|
}
|
||||||
|
|
||||||
|
static void findbutton_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 );
|
||||||
|
|
||||||
|
if( strcmp( g_qeglobals.d_texturewin.texdef.GetName(), pShader->getName() ) == 0 )
|
||||||
|
{
|
||||||
|
GtkWidget *label, *box;
|
||||||
|
|
||||||
|
item = gtk_menu_item_new();
|
||||||
|
|
||||||
|
box = gtk_box_new( GTK_ORIENTATION_HORIZONTAL, 6 );
|
||||||
|
gtk_container_add( GTK_CONTAINER( item ), box );
|
||||||
|
gtk_widget_show( box );
|
||||||
|
|
||||||
|
label = gtk_label_new( pShader->getName() );
|
||||||
|
gtk_container_add( GTK_CONTAINER( box ), label );
|
||||||
|
gtk_widget_show( label );
|
||||||
|
g_object_set_data( G_OBJECT( item ), "texture-label", label );
|
||||||
|
|
||||||
|
label = gtk_label_new( _( "!" ) );
|
||||||
|
gtk_container_add( GTK_CONTAINER( box ), label );
|
||||||
|
gtk_widget_show( label );
|
||||||
|
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
item = gtk_menu_item_new_with_label( pShader->getName() );
|
||||||
|
}
|
||||||
|
gtk_menu_shell_append( GTK_MENU_SHELL( menu ), item );
|
||||||
|
gtk_widget_show( item );
|
||||||
|
g_signal_connect( item, "activate", G_CALLBACK( findpopup_selected ), data );
|
||||||
|
}
|
||||||
|
|
||||||
|
gtk_menu_popup( GTK_MENU( menu ), NULL, widget, NULL, NULL, 1, GDK_CURRENT_TIME );
|
||||||
}
|
}
|
||||||
|
|
||||||
void DoFindReplaceTexturesDialog()
|
void DoFindReplaceTexturesDialog()
|
||||||
{
|
{
|
||||||
GtkWidget *dialog, *content_area, *combo, *hbox;
|
GtkWidget *dialog, *content_area, *combo, *hbox;
|
||||||
GtkWidget *vbox, *table, *label, *button, *find_button, *replace_button;
|
GtkWidget *vbox, *table, *label, *button, *find_button, *replace_button;
|
||||||
GtkWidget *find_combo, *replace_combo, *check;
|
GtkWidget *find_combo, *replace_combo, *check, *entry;
|
||||||
GtkSizeGroup *button_group;
|
GtkSizeGroup *button_group;
|
||||||
GtkDialogFlags flags = GTK_DIALOG_DESTROY_WITH_PARENT;
|
GtkDialogFlags flags = GTK_DIALOG_DESTROY_WITH_PARENT;
|
||||||
|
|
||||||
|
@ -3570,23 +3667,34 @@ void DoFindReplaceTexturesDialog()
|
||||||
gtk_widget_set_halign( label, GTK_ALIGN_START );
|
gtk_widget_set_halign( label, GTK_ALIGN_START );
|
||||||
gtk_widget_show( label );
|
gtk_widget_show( label );
|
||||||
|
|
||||||
label = gtk_label_new( "Replace:" );
|
|
||||||
gtk_grid_attach( GTK_GRID( table ), label, 0, 1, 1, 1 );
|
|
||||||
gtk_widget_set_halign( label, GTK_ALIGN_START );
|
|
||||||
gtk_widget_show( label );
|
|
||||||
|
|
||||||
find_combo = combo = gtk_combo_box_text_new_with_entry();
|
find_combo = combo = gtk_combo_box_text_new_with_entry();
|
||||||
gtk_grid_attach( GTK_GRID( table ), combo, 1, 0, 1, 1 );
|
gtk_grid_attach( GTK_GRID( table ), combo, 1, 0, 1, 1 );
|
||||||
gtk_widget_set_hexpand( combo, TRUE );
|
gtk_widget_set_hexpand( combo, TRUE );
|
||||||
gtk_widget_show( combo );
|
gtk_widget_show( combo );
|
||||||
g_object_set_data( G_OBJECT( dialog ), "find_combo", find_combo );
|
g_object_set_data( G_OBJECT( dialog ), "find_combo", find_combo );
|
||||||
|
|
||||||
|
button = gtk_button_new_with_label( "..." );
|
||||||
|
gtk_grid_attach( GTK_GRID( table ), button, 2, 0, 1, 1 );
|
||||||
|
gtk_widget_show( button );
|
||||||
|
entry = gtk_bin_get_child( GTK_BIN( find_combo ) );
|
||||||
|
g_signal_connect( button, "clicked", G_CALLBACK( findbutton_clicked ), entry );
|
||||||
|
|
||||||
|
label = gtk_label_new( "Replace:" );
|
||||||
|
gtk_grid_attach( GTK_GRID( table ), label, 0, 1, 1, 1 );
|
||||||
|
gtk_widget_set_halign( label, GTK_ALIGN_START );
|
||||||
|
gtk_widget_show( label );
|
||||||
|
|
||||||
replace_combo = combo = gtk_combo_box_text_new_with_entry();
|
replace_combo = combo = gtk_combo_box_text_new_with_entry();
|
||||||
gtk_grid_attach( GTK_GRID( table ), combo, 1, 1, 1, 1 );
|
gtk_grid_attach( GTK_GRID( table ), combo, 1, 1, 1, 1 );
|
||||||
gtk_widget_set_hexpand( combo, TRUE );
|
gtk_widget_set_hexpand( combo, TRUE );
|
||||||
gtk_widget_show( combo );
|
gtk_widget_show( combo );
|
||||||
g_object_set_data( G_OBJECT( dialog ), "replace_combo", replace_combo );
|
g_object_set_data( G_OBJECT( dialog ), "replace_combo", replace_combo );
|
||||||
|
|
||||||
|
button = gtk_button_new_with_label( "..." );
|
||||||
|
gtk_grid_attach( GTK_GRID( table ), button, 2, 1, 1, 1 );
|
||||||
|
gtk_widget_show( button );
|
||||||
|
entry = gtk_bin_get_child( GTK_BIN( replace_combo ) );
|
||||||
|
g_signal_connect( button, "clicked", G_CALLBACK( findbutton_clicked ), entry );
|
||||||
|
|
||||||
check = gtk_check_button_new_with_label( "Use selected brushes only" );
|
check = gtk_check_button_new_with_label( "Use selected brushes only" );
|
||||||
gtk_box_pack_start( GTK_BOX( vbox ), check, TRUE, TRUE, 0 );
|
gtk_box_pack_start( GTK_BOX( vbox ), check, TRUE, TRUE, 0 );
|
||||||
|
|
Loading…
Reference in a new issue