NAME
    Tie::Wx::Widget - implicit access value of a Wx widget

SYNOPSIS
        use Tie::Wx::Widget;

        tie $tiedwidget, Tie::Wx::Widget, $widget;

        $tiedwidget = 7;       # instead of $widgetref->SetValue(7);

        say $tiedwidget;       # instead of say $widgetref->GetValue;

        untie $tiedwidget;     # now $tiedwidget is a normal scalar again (not required)

CALLBACKS
    Often are the widget values coupled with each other. For instance in
    App::Spirograph is a slider, which max value is the value of another
    slider. Once you know this, why keep track of it and change the range by
    hand any given time?

        tie $tslider, Tie::Wx::Widget, $slider,
            sub { $[0]->SetValue($[1]); $subslider->SetRange(1, $[1]) };

    The first parameter to the callback is always the Wx object reference,
    the assign-callback gets also a second with the assigned value. Own
    callbacks replace the the ones, generated by default.

    The complete parameter list is is:

        tie $tw, Tie::Wx::Widget, $widget, [&$do_when_assign, &$do_when_retrieve];

    Yes, its also doable with events, but thats also more syntax than this.
    Plus, its a different event for many widgets, why remember this? Plus, a
    tied widget still gives you the freedom to change the value under the
    radar. See section "INTERNALS" for more.

WARNINGS
    Your program will "die", if you don't provide a proper Wx widget, that
    has a GetValue and SetValue method, or the callbacks are no coderef.
    Unless you init with:

        use Tie::Wx::Widget 'warn_mode';

    or do later:

        Tie::Wx::Widget::warn_mode();

    Then will be called "warn" instead of "die". But you can switch anytime
    back with:

        Tie::Wx::Widget::die_mode();

    Wich has only effect for all variables tied afterwards. Because if the
    Wx ref is not good, there will be no tying anyway.

INTERNALS
        # how to get a reference to the Tie::Wx::Widget object ?
        $tieobject = tie $tiedwidget, Tie::Wx::Widget, $widget;
        $tieobject = tied $tiedwidget;

        # now you even can:
        $tieobject->FETCH()
        # aka:
        $tieobject->{'widget'}->GetValue;
        # or do any other method on the wx object
        $tieobject->{'w'}->Show(0);
        # works too (hides the widget)
        $tieobject->STORE(7);

        # doesn't do anything
        $tieobject->DESTROY()

ACKNOWLEDGEMENTS
    This was solely my idea before Linuxtag 2011. Started as a slide for my
    talk there.

AUTHOR
    Herbert Breunung, "<lichtkind at cpan.org>"

LICENSE AND COPYRIGHT
    Copyright 2011-2022 Herbert Breunung.

    This program is free software; you can redistribute it and/or modify it
    under the terms of either: the GNU General Public License as published
    by the Free Software Foundation; or the Artistic License.

    See http://dev.perl.org/licenses/ for more information.

