Tk-ObjEditor

 view release on metacpan or  search on metacpan

lib/Tk/ObjEditor.pm  view on Meta::CPAN

#
# This file is part of Tk-ObjEditor
#
# This software is copyright (c) 2014 by Dominique Dumont.
#
# This is free software; you can redistribute it and/or modify it under
# the same terms as the Perl 5 programming language system itself.
#
package Tk::ObjEditor;
$Tk::ObjEditor::VERSION = '2.010';
use Carp;
use Tk::Derived;
use Tk::Frame;
use Tk::ObjScanner 2.010;
use Tk::Dialog;
use Tk::DialogBox;
use warnings;
use strict;
use 5.10.1;
use Scalar::Util 1.01 qw(reftype);

use vars qw/$VERSION @ISA/;

use Storable qw(dclone);

use base qw(Tk::Derived Tk::ObjScanner);

Tk::Widget->Construct('ObjEditor');

sub _isa {
    return (reftype($_[0]) // '') eq $_[1] ;
}

sub edit_object {
    require Tk;
    import Tk;
    my $object = shift;

    my $mw = MainWindow->new;
    $mw->geometry('+10+10');
    my $s = $mw->ObjEditor(
        '-caller' => $object,
        -direct   => 1,
        -title    => 'object editor'
    );

    $s->pack( -expand => 1, -fill => 'both' );
    $s->OnDestroy( sub { $mw->destroy; } );

    &MainLoop;    # Tk's
}

sub InitObject {
    my ( $cw, $args ) = @_;

    my $data = delete $args->{'caller'} || delete $args->{'-caller'};
    $cw->{direct} =
        delete $args->{'direct'} || delete $args->{'-direct'} || 0;

    $cw->{user_data} = $data;

    my $edited_data = $cw->{direct} ? $data : dclone($data);

    $args->{'-caller'}    = $edited_data;    # to pass to ObjScanner
    $args->{'-show_tied'} = 0;               # do not show tied data internal

    $args->{title} = ref($data) . ' editor'
        unless ( defined $args->{title} || defined $args->{-title} );

    $cw->SUPER::InitObject($args);

    $cw->Subwidget('hlist')->bind( '<B3-ButtonRelease>', sub { $cw->modify_menu() } );

    $cw->{actions} = [];

    return $cw;
}

sub modify_menu {
    my $cw   = shift;
    my $item = shift;    # reserved for tests

    unless ( defined $item ) {

        # pointery and rooty are common widget method and must called on
        # the right widget to give accurate results



( run in 0.777 second using v1.01-cache-2.11-cpan-d7a12ab2c7f )