package TidyView::Frame; # the whole idea here is to try to centralise the creation of Tk::Frame widgets to one point of the code. # However, it turns out we usually over-ride at least one of the defaults every time we create a frame, # so perhaps it was a bad idea. use strict; use warnings; use Tk; our $frameDefaults = { -relief => 'ridge', -borderwidth => 5, }; our $packDefaults = { -side => 'left', -fill => 'both', -expand => 1, }; sub new { my (undef, %args) = @_; my ($parent, $frameOptions, $packOptions) = @args{qw(parent frameOptions packOptions)}; $frameOptions ||= {}; $packOptions ||= {}; my %frameOptions = (%$frameDefaults, %$frameOptions); my %packOptions = (%$packDefaults, %$packOptions); my $frame = $parent->Frame(%frameOptions); $frame->pack(%packOptions); return $frame; }