DBR

 view release on metacpan or  search on metacpan

lib/DBR/Admin/Window/FieldList.pm  view on Meta::CPAN

					     schema_id => $self->get_schema_id(),
					     table_id => $self->get_table_id(),
					    }
					     );
	}
	elsif  ($_args{listbox}->get eq 'Enum Map'){
	    $self->edit_enum_map(%_args);
	}

    }

    
    #####################
     sub add_new_enum {

 	my ($self,  %_args) = @_;

	my %existing_enums;
	my $max_sortval = 0;
	foreach my $e (@{$_args{current_enums}}) {
	    $existing_enums{$e->{enum_id}} = 1;
	    if ($e->{sortval} > $max_sortval) {
		$max_sortval = $e->{sortval};
	    }
	}

	my $edit_window = $self->get_win->add(
					      'new_enum_window', 'Window',
					      -border => 1,
					      -y    => 1,
					      -bfg  => 'blue',
					      -title => 'New Enum',
					      -titlereverse => 0,
					     );

	my $x = 5;
	my $y = 1;

	# get available enums (not already used) in dropdown

	my $dbrh = DBR::Admin::Utility::get_dbrh();

	my $data = $dbrh->select(
				 -table => 'enum',
				 -fields => 'enum_id handle name override_id',
				) or  throw DBR::Admin::Exception(
						       message => "failed to select from enum $!",
						       root_window => $self->get_win->root()
						       );

	my $labels;
	my $values;


	foreach my $e (sort { $a->{name} cmp $b->{name} } @$data) {
	    next if $existing_enums{$e->{enum_id}};
	    push @{$values}, $e->{enum_id};
	    $labels->{$e->{enum_id}} = "$e->{name} (handle: $e->{handle}, id: $e->{enum_id}, override: $e->{override_id})";
	}
	my $label = $edit_window->add(
				      "enum_popup_label", 'Label',
				      -text => 'Add Enum: ',
				      -x => $x,
				      -y => $y
				     );

	$label->draw;

	my $enum_popup = $edit_window->add(
					 "type_popup", 'Popupmenu',
					 -y => $y,
					 -x => ($x + 16) ,
					 -values => $values,
					 -labels => $labels,
					);
					 
	
	$enum_popup->focus();
	
	$y += 3;


	# submit - cancel
	my $submit_button = $edit_window->add(
					      'submit', 'Buttonbox',
					      -buttons   => [
							   { 
							    -label => '< Submit >',
							    -value => 1,
							    -shortcut => 1 ,
							    -onpress => sub {
								$self->submit_new_enum(original_args => $_args{original_args},
										       enum_id => $enum_popup->get(),
										       name => 'new_enum_window',
										       edit_window => $edit_window,
										       max_sortval => $max_sortval,
										      );
							    }
							   },
							   { 
							    -label => '< Cancel >',
							    -value => 2,
							    -shortcut => 2 ,
							    -onpress => sub {$self->close_edit_window(edit_window => $edit_window, name => 'new_enum_window')}
							   }
							       	
							    ],
					      -x => 6,
					      -y => $y,
								
					     );

	 $submit_button->draw();

    }


     ####################
    sub submit_new_enum {

	my ($self,  %_args) = @_;

	my $dbrh = DBR::Admin::Utility::get_dbrh();
	my $ret;

	# insert

	$ret = $dbrh->insert(
			     -table => 'enum_map',
			     -fields => {
					 field_id => $_args{original_args}->{field_id},
					 enum_id => $_args{enum_id},
					 sortval => $_args{max_sortval} + 1,
					},
			    ) or throw DBR::Admin::Exception(
						   message => "failed to insert into enum_map",
						   root_window => $self->get_win->root()
						      );
	


	#success dialog
	my $confirm = $self->get_win->root->dialog(
						   -message   => "The enum has been successfully added",
						   -title     => "Success", 
						   -buttons   => [
								{ 
								 -label => '< OK >',
								 -value => 1,
								 -shortcut => 1 
								}
								 ]
						  );

lib/DBR/Admin/Window/FieldList.pm  view on Meta::CPAN

 	my $x = 5;
 	my $y = 1;
 	foreach my $f (@readonly_fields) {
	
 	    my $label = $edit_window->add(
 					  $f . "_label", 'Label',
 					  -text => "$f: ",
 					  -x => $x,
 					  -y => $y
 					 );

 	    $label->draw;

 	    my $text_box = $edit_window->add(
 					     $f . "_text_box", 'TextEditor',
 					     -sbborder => 0,
 					     -y => $y,
 					     -x => ($x + 16) ,
 					     -readonly => 1,
 					     -singleline => 1,
 					     -text => $field_hash->{$f}
 					    );
 	    $text_box->draw();
	    $y += 1;
 	}

	$y += 2;
	######
	# editable fields
	my $label = $edit_window->add(
				      "display_name_label", 'Label',
				      -text => "display_name: ",
				      -x => $x,
				      -y => $y
				     );

	$label->draw;

	my $display_text_box = $edit_window->add(
					 "display_name_text_box", 'TextEditor',
					 -sbborder => 1,
					 -y => $y,
					 -x => ($x + 16) ,
					 -readonly => 0,
					 -singleline => 1,
					 -text => $field_hash->{display_name}
					);
	$y += 3;

	######
	$label = $edit_window->add(
				      "trans_id_label", 'Label',
				      -text => "trans_id: ",
				      -x => $x,
				      -y => $y
				     );

	$label->draw;

	
	my ($values, $labels, $selected) = _get_popup_menu_values(DBR::Config::Trans::list_translators(), $field_hash, 'trans_id');

	my $trans_id = $edit_window->add(
					 "trans_id_popup", 'Popupmenu',
					 -y => $y,
					 -x => ($x + 16) ,
					 -values => $values,
					 -labels => $labels,
					 -selected => $selected,
					);
					 
	
	$trans_id->draw();

	$y += 3;

	#####
	# buttons
	my $submit_button = $edit_window->add(
					      'submit', 'Buttonbox',
					      -buttons   => [
							   { 
							    -label => '< Submit >',
							    -value => 1,
							    -shortcut => 1 ,
							    -onpress => sub {
								$self->submit_edit(
										   field_id => $_args{field_id},
										   display_name => $display_text_box->get(),
										   trans_id => $trans_id->get(),
										   edit_window => $edit_window,
										   name => 'fieldeditwindow',
										  );
							    }
							   },
							   { 
							    -label => '< Cancel >',
							    -value => 2,
							    -shortcut => 2 ,
							    -onpress => sub {$self->close_edit_window(edit_window => $edit_window, name => 'fieldeditwindow')}
							   }
							       	
							    ],
					      -x => 6,
					      -y => $y,
								
					     );
	$submit_button->draw();

	$display_text_box->focus();

     }

   #######################
    # called when the submit button on the
    # add/edit window is selected
    sub submit_edit {

	my ($self,  %_args) = @_;

	my $dbrh = DBR::Admin::Utility::get_dbrh();
	my $ret;
	

	$ret = $dbrh->update(
			     -table => 'dbr_fields',
			     -fields => {
					 trans_id => $_args{trans_id},
					 display_name => $_args{display_name}
					},
			     -where => {field_id => $_args{field_id}}
			    ) or throw DBR::Admin::Exception(
						       message => "failed to update dbr_fields",
						       root_window => $self->get_win->root()
						      );


	#success dialog
	my $confirm = $self->get_win->root->dialog(
						   -message   => "This field has been successfully updated.",
						   -title     => "Success", 
						   -buttons   => [
								{ 
								 -label => '< OK >',
								 -value => 1,
								 -shortcut => 1 
								}
								 ]
						  );

	# reset the field list
	$self->load_field_list();

	# close window
	$self->close_edit_window(%_args);
	
    }

    #######################
    sub close_edit_window {

	my ($self,  %_args) = @_;

	$_args{edit_window}->parent->delete($_args{name});
	$_args{edit_window}->parent->draw();
	$_args{edit_window}->parent->focus();
    }

     #############
      sub _get_popup_menu_values {
	  my ($value_ref, $lookup, $key) = @_;

	my %values;
	foreach my $t (@$value_ref) {
	    $values{$t->{id}} = $t->{name} || $t->{handle};
	}
	my @vals = keys %values;
	# find the index of the selected value in @vals
	my $index = 0;
	my $found = 0;
	foreach my $v (@vals) {
	    if ($v == $lookup->{$key}) {
		$found = 1;
		last;
	    }
	    $index++;
	}

	if (!$found) {
	    $index = undef;
	}
	  
	  return (\@vals, \%values, $index);
      }

}

1;



( run in 2.700 seconds using v1.01-cache-2.11-cpan-364913b4093 )