GuiBuilder
view release on metacpan or search on metacpan
lib/GuiBuilder.pm view on Meta::CPAN
my $F_GI;
my @sub_decl_array;
my @grid_array;
my @name_array;
my @radio_button_name_array;
my $pad_x_all = 10;
my $pad_y_all = 2;
my $TYPE_IDX = 0;
my $NAME_IDX = 1;
my $LOC_IDX = 2;
my $LIST_IDX = 3;
my $RADIO_BUTTON_GRP_IDX = 3;
my $DBG_ON = 0;
my %radio_button_group_hash;
my $main;
#------------------------------------------------------------------------------
# These subroutines are for generating perl gui script based on info provided.
#------------------------------------------------------------------------------
#------------------------------------------------------------------------------
sub generate_gui_file {
if($DBG_ON) {
print("gui_file = $gui_file.\n");
print("gui_options_array = @gui_options_array.\n");
}
open(F_GI, ">$gui_file") or die("$!");
&process_options_array();
&update_gui_file("Auto Generated Gui");
&declare_subroutines(@sub_decl_array);
&define_process_option_subroutine();
&define_clear_text_subroutine();
&define_deselect_radio_button_subroutine();
close(F_GI);
my $msg_box = $main->MsgBox(-title => "Gui File Generated", -icon=>'info', -type=>'ok', -message=>"Generated '$gui_file'...\n");
my $button = $msg_box->Show;
print("Generated '$gui_file'...\n");
exit;
}
#------------------------------------------------------------------------------
sub get_max_frame {
my $option_str;
my @option_param_array;
my $max_frame = 0;
for(my $opc_cnt = 0; $opc_cnt < @gui_options_array; $opc_cnt++) {
$option_str = $gui_options_array[$opc_cnt];
@option_param_array = split(/#/, $option_str);
my ($frame, $row, $column) = &get_location_details($option_param_array[$LOC_IDX]);
if($max_frame < $frame) {
$max_frame = $frame;
}
}
if($DBG_ON) { print("max_frame = $max_frame.\n"); }
return $max_frame;
}
#------------------------------------------------------------------------------
sub update_gui_file {
my ($title) = @_;
my $max_frames;
my %row_start_for_frame;
my %num_row_in_frame;
my $tmp_file_name = "tmp.gui";
open(F_TMP, ">$tmp_file_name") or die("$!");
print F_TMP <<EOF
use strict;
use Tk;
require Tk::MsgBox;
require Tk::Pane;
my %field_ref_hash;
my %radio_button_ref_hash;
& main();
sub main {
my \$main;
my \$row_num_1;
\$main = MainWindow->new;
\$main->configure(-title => '$title');
my \$pane = \$main->Scrolled('Pane', -scrollbars=>'osoe',-sticky=>'ewns',-width=>1000, -height=>500);
my \$sframe = \$pane->Frame();
EOF
;
print F_TMP "\n";
# Declaring the frames.
$max_frames = &get_max_frame();
for(my $idx = 1; $idx <= $max_frames; $idx++) {
my $frame_name = "\$frame_"."$idx";
print F_TMP " my $frame_name = \$sframe->Frame();\n";
$row_start_for_frame{$idx} = 1;
$num_row_in_frame{$idx} = 0;
}
print F_TMP "\n";
# Find maximum row number for each frame.
for(my $grid_cnt = 0; $grid_cnt < @grid_array; $grid_cnt++) {
my $grid_str = $grid_array[$grid_cnt];
my ($field_name, $frame, $row, $col) = &unpack_grid_data($grid_str);
if($DBG_ON) { print("num_row_in_frame{$frame} = $num_row_in_frame{$frame}, row = $row.\n"); }
if($num_row_in_frame{$frame} < $row) {
$num_row_in_frame{$frame} = $row;
}
if($DBG_ON) { print("num_row_in_frame{$frame} = $num_row_in_frame{$frame}.\n"); }
}
# Generating starting row number for each frame.
for(my $idx = 1; $idx <= $max_frames; $idx++) {
my $id_2;
for($id_2 = 1; $id_2 < $idx; $id_2++) {
$row_start_for_frame{$idx} += $num_row_in_frame{$id_2};
}
}
close(F_GI);
open(F_GI, "<$gui_file") or die("$!");
# Copying existing code from gui_file to tmp file.
lib/GuiBuilder.pm view on Meta::CPAN
$radio_button_ref_hash{label}->deselect();
# Deselecting 'listbox' Radiobutton.
$radio_button_ref_hash{listbox}->deselect();
# Deselecting 'button' Radiobutton.
$radio_button_ref_hash{button}->deselect();
# Deselecting 'checkbutton' Radiobutton.
$radio_button_ref_hash{checkbutton}->deselect();
# Deselecting 'radiobutton' Radiobutton.
$radio_button_ref_hash{radiobutton}->deselect();
} # deselect_radio_buttons.
#------------------------------------------------------------------------------
sub add_field_action {
my ($main, $list_box) = @_;
my $add_delete_list_text;
my (@gui_options) = &get_gui_options();
my ($grp__Field_Select_Grp_1_radio_button_var,
$name_text_text_var,
$frame_row_column_number_text_text_var,
$list_element_text_text_var,
$group_name_for_radio_button_text_text_var,
$list_box_to_remove_field_list_box_var) = @gui_options;
my $stat = 0;
$stat = &check_options($main, $grp__Field_Select_Grp_1_radio_button_var, $name_text_text_var, $frame_row_column_number_text_text_var, $list_element_text_text_var, $group_name_for_radio_button_text_text_var);
if($stat == 0) {
my $field_str = &get_field_text(@gui_options);
push(@gui_options_array, $field_str);
&update_list($list_box);
&clear_text_boxes();
&deselect_radio_buttons();
}
} # add_field_action
#------------------------------------------------------------------------------
sub get_field_text {
my (@gui_options) = @_;
my ($grp__Field_Select_Grp_1_radio_button_var,
$name_text_text_var,
$frame_row_column_number_text_text_var,
$list_element_text_text_var,
$group_name_for_radio_button_text_text_var,
$list_box_to_remove_field_list_box_var) = @gui_options;
my $field_str = $grp__Field_Select_Grp_1_radio_button_var . "#" .
$name_text_text_var . "#" . "-LOC-$frame_row_column_number_text_text_var";
if($grp__Field_Select_Grp_1_radio_button_var =~ /Listbox/) {
$field_str .= "#$list_element_text_text_var";
}
if($grp__Field_Select_Grp_1_radio_button_var =~ /Radiobutton/) {
$field_str .= "#$group_name_for_radio_button_text_text_var";
}
return $field_str;
} # get_field_text
#------------------------------------------------------------------------------
sub update_list {
my ($list_box) = @_;
my $list_size = $list_box -> size();
for(my $i = 0; $i < $list_size; $i++) {
$list_box -> delete(0);
}
$list_box -> insert('end', @gui_options_array);
$list_box -> activate(0);
} # update_list
#------------------------------------------------------------------------------
sub delete_field_action {
my ($list_box) = @_;
my (@gui_options) = &get_gui_options();
my $add_delete_list_text = &get_selected_element_from_list($list_box);
&remove_list_entry($add_delete_list_text, \@gui_options_array);
&update_list($list_box);
} # delete_field_action
#------------------------------------------------------------------------------
sub remove_list_entry {
my ($list_entry, $list_ref) = @_;
my $id_to_delete;
my $id;
my @tmp_array;
for($id = 0; $id < @{$list_ref}; $id++) {
my $list_element = ${list_ref}->[$id];
if($list_element =~ /^$list_entry$/) {
$id_to_delete = $id;
}
else {
push(@tmp_array, $list_element);
}
}
@{$list_ref} = @tmp_array;
} # remove_list_entry
#------------------------------------------------------------------------------
sub get_selected_element_from_list {
my ($list_box) = @_;
my $list_sel_element;
my $list_index;
$list_index = $list_box->curselection();
if($DBG_ON) {
print("list_index = $list_index.\n");
}
if(!defined($list_index)) {
$list_index = 0;
}
$list_sel_element = $list_box->get($list_index);
if($DBG_ON) {
print("list_sel_element = $list_sel_element.\n");
}
chomp($list_sel_element);
( run in 2.968 seconds using v1.01-cache-2.11-cpan-d8267643d1d )