diff --git a/lib/Biodiverse/GUI/ParametersTable.pm b/lib/Biodiverse/GUI/ParametersTable.pm index 2adb6f7f8..1a721f129 100644 --- a/lib/Biodiverse/GUI/ParametersTable.pm +++ b/lib/Biodiverse/GUI/ParametersTable.pm @@ -99,9 +99,11 @@ sub fill { } next PARAM if !$widget; # might not be putting into table (eg: using the filechooser) + + my $param_name = $param->{name}; # Make the label - my $label_text = $param->{label_text} || $param->{name}; + my $label_text = $param->{label_text} // $param_name; chomp $label_text; my $label = Gtk2::Label->new ($label_text); $label->set_line_wrap(30); @@ -120,7 +122,7 @@ sub fill { $widget = Gtk2::HBox->new; } - $label_widget_pairs{$label_text} = [$label, $widget]; + $label_widget_pairs{$param_name} = [$label, $widget]; my $rows = $table->get('n-rows'); @@ -156,7 +158,6 @@ sub fill { $table->set('n-rows' => $rows); $table->attach($label, 0, 1, $rows, $rows + 1, 'fill', [], 0, 0); $table->attach($widget, 1, 2, $rows, $rows + 1, $fill_flags, [], 0, 0); - $label_widget_pairs{$label_text} = [$label, $widget]; } # Add a tooltip diff --git a/lib/Biodiverse/GUI/Tabs/Randomise.pm b/lib/Biodiverse/GUI/Tabs/Randomise.pm index ac9ecacd8..fbadcbd6e 100644 --- a/lib/Biodiverse/GUI/Tabs/Randomise.pm +++ b/lib/Biodiverse/GUI/Tabs/Randomise.pm @@ -340,6 +340,8 @@ sub on_function_changed { my $widget_hash = ($self->{widget_hash} //= {}); my $params_hash = ($self->{params_hash} //= {}); my $metadata_cache = $self->get_metadata_cache; + my $params_table = $self->get_parameters_table; + my $label_widget_pairs_hash = $params_table->get_label_widget_pairs_hash; # Get the Parameters metadata my $func = $self->get_selected_function; @@ -365,18 +367,27 @@ sub on_function_changed { my %func_p_hash = map {$_->get_name => $_} @$params; P_NAME: - foreach my $p_name (keys %$widget_hash) { + foreach my $p_name (keys %$label_widget_pairs_hash) { + no autovivification; my $parameter = $params_hash->{$p_name}; + my $show_hide = 'show'; + my $lw = $label_widget_pairs_hash->{$p_name}; + my ($label, $widget) = @$lw; if (exists $func_p_hash{$p_name}) { # desensitise by default, but mutable params can always be changed my $sens = $parameter->get_mutable // $sensitise; $parameter->set_sensitive ($sens); # needed now? - $widget_hash->{$p_name}->set_sensitive($sens); + $widget->set_sensitive($sens); } else { - $widget_hash->{$p_name}->set_sensitive(0); + $widget->set_sensitive(0); + $show_hide = 'hide'; + } + foreach my $w ($label, $widget) { + next if !$w; + $w->$show_hide; } }