/usr/local/CPAN/DBR/DBR/Admin/Window/FieldRelationshipList.pm



# the contents of this file are Copyright (c) 2004-2009 David Blood
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License as
# published by the Free Software Foundation.


package DBR::Admin::Window::FieldRelationshipList;

use strict;
use Class::Std;
use Data::Dumper;
use DBR::Config::Trans;
use DBR::Config::Field;

use lib '/drj/tools/perl-dbr/lib';
use DBR::Admin::Window;
use DBR::Admin::Utility;
use DBR::Admin::Window::RelationshipList;

use vars qw($VERSION $PKG);

$VERSION = 1.0;

$PKG = __PACKAGE__;

use base qw(DBR::Admin::Window);



{
    my %fields_of : ATTR( :get<fields> :set<fields>);
    my %field_listbox_of : ATTR( :get<field_listbox> :set<field_listbox>);
    my %table_id_of : ATTR( :get<table_id> :set<table_id>);
    my %schema_id_of : ATTR( :get<schema_id> :set<schema_id>);

    ####################
    sub BUILD {

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

	$self->set_table_id($_args->{table_id});
	$self->set_schema_id($_args->{schema_id});

	my $new_relationship_button = $self->get_win->add(
						  'newrelationship', 'Buttonbox',
						  -buttons   => [
							       { 
								-label => '< Add New Relationship >',
								-value => 1,
								-shortcut => 1 ,
								-onpress => sub {
								    DBR::Admin::Window::RelationshipList->new(
									      {id => 'relationships', 
									       parent => $self->get_win, 
									       parent_title => ucfirst($self->get_id),
									       field_id => shift->get, 
									       schema_id => $self->get_schema_id(),
									       table_id => $self->get_table_id(),
									      })->add_edit_relationship(add => 1)
								}
								
							       },
								],
						  -x => 40,
						  -y => 1,
								
						 );

	$new_relationship_button->draw();

	my $listbox = $self->get_win->add(
					  'fieldlistbox', 'Listbox',
					  -y => 2,
					  -width => 25,
					  -vscrollbar => 1,
					  -onchange => sub {
					      DBR::Admin::Window::RelationshipList->new(
									      {id => 'relationships', 
									       parent => $self->get_win, 
									       parent_title => ucfirst($self->get_id),
									       field_id => shift->get, 
									       schema_id => $self->get_schema_id(),
									       table_id => $self->get_table_id(),
									      }
									       );
					  }
					 );

	$listbox->onFocus(sub {$listbox->clear_selection});
	$self->set_field_listbox($listbox);
	$self->load_field_list();
	$self->get_field_listbox->layout();
	$self->get_field_listbox->focus();
	$self->get_win->set_focusorder('fieldlistbox','newrelationship', 'close');
    }

    #######################
    # get the list from the database
    sub get_field_list {

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

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



	my $data = $dbrh->select(
				      -table => {
						 'r' => 'dbr_relationships',
						 'f' => 'dbr_fields',
						},
				      -fields => 'f.table_id f.name f.field_id',
				      -where => {
						 'f.field_id' => ['j', 'r.from_field_id'],
						 'r.from_table_id' => $self->get_table_id()
						}

				     ) or  throw DBR::Admin::Exception(
						       message => "failed to select from dbr_relationship, dbr_fields $!",
						       root_window => $self->get_win->root()
						      );

	#print STDERR Dumper $data;

	my %menu_list;
	my %fields;

	foreach my $e (@$data) {
	    $menu_list{$e->{field_id}} = $e->{name};
	    $fields{$e->{field_id}} = $e;
	}

	$self->set_fields(\%fields);
	return \%menu_list;
    }

    #################
    # load the field list into the
    # field listbox
    sub load_field_list{

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

	my $field_listbox = $self->get_field_listbox();
	my $menu_list = $self->get_field_list();
	my @menu_values = keys %{$menu_list};
	$field_listbox->values(\@menu_values);
	$field_listbox->labels($menu_list);
	$self->set_field_listbox($field_listbox);
    }

 

    

}

1;