Padre::Wx::Role::Main(3pm)

NAME
Padre::Wx::Role::Main - Convenience methods for children of the main window

DESCRIPTION
This role implements the fairly common method pattern for Wx elements that are children of Padre::Wx::Main.

It provides accessors for easy access to the most commonly needed elements, and shortcut integration with the Padre::Current context system.

METHODS

  "ide"
    my $ide = $object->ide;

Get the Padre IDE instance that this object is a child of.

  "config"
    my $config = $object->config;

Get the Padre::Config for the current user. Provided mainly as a convenience because it is needed so often.

Please note that this method does NOT integrate with the Padre::Current context system. Any project-specific configuration of overrides of default behaviour will not be present in this configuration object.

For a project-aware configuration, use the following instead.

  $self->current->config;

  "main"
    my $main = $object->main;

Get the Padre::Wx::Main main window that this object is a child of.

  "aui"
    my $aui = $object->aui;

Convenient access to the Wx Advanced User Interface (AUI) Manager object.

  current
    my $current = $object->current;

Get a new "Padre::Current" context object, for access to other parts of the current context.

  lock_update
    my $lock = $object->lock_update;

The Padre::Locker API in Padre provides a solid and extensible system for locking of IDE resources when large-scale change of state is to occur.

Unfortunately, there are some cases in which this mechanism can cause problems.

Window update locking using this API is done on the entire main window. The resulting "Freeze"/"Thaw" calls are recursive on Windows, and as "Thaw" calls invalidate the painted state of widgets, this results in a global redraw and on the non-double-bufferred Windows platform this causes flickering.

When a piece of code is making very targeted changes to just the graphical state of the application and will only need an UPDATE lock (i.e. does not need refresh or database locks) the alternative "lock_update" method provides a convenience for creating a Wx::WindowUpdateLocker independent of the main locking API.

By using a localised lock and avoiding a global update lock, this should remove global flickering on these changes, and limit flickering to just the element being update, which should be much less noticeable.

COPYRIGHT & LICENSE
Copyright 2008-2013 The Padre development team as listed in Padre.pm.

This program is free software; you can redistribute it and/or modify it under the same terms as Perl 5 itself.

The full text of the license can be found in the LICENSE file included with this module.