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 )