| Prima documentation | Contained in the Prima distribution. |
Prima::PrintDialog - standard printer setup dialog
Provides a standard dialog that allows the user to select a printer
and its options. The toolkit does not provide the in-depth management
of the printer options; this can only be accessed by executing a printer-specific
setup window, called by Prima::Printer::setup_dialog. The class invokes
this method when the user presses 'Properties' button. Otherwise, the class
provides only selection of a printer from the printer list.
When the dialog finished successfully, the selected printer is set as the current
by writing to Prima::Printer::printer property. This technique allows direct use of
the user-selected printer and its properties without prior knowledge of the
selection process.
use Prima::PrintDialog;
$dlg = Prima::PrintSetupDialog-> create;
if ( $dlg-> execute) {
my $p = $::application-> get_printer;
if ( $p-> begin_doc ) {
$p-> text_out( 'Hello world', 10, 10);
$p-> end_doc;
}
}
$dlg-> destroy;
Dmitry Karasik, <dmitry@karasik.eu.org>.
Prima, Prima::Window, Prima::Printer.
| Prima documentation | Contained in the Prima distribution. |
# # Copyright (c) 1997-2002 The Protein Laboratory, University of Copenhagen # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # # Created by Dmitry Karasik <dk@plab.ku.dk> # # $Id$ use strict; use Carp; use Prima::Classes; use Prima::Buttons; use Prima::Label; use Prima::ComboBox; package Prima::PrintSetupDialog; use vars qw(@ISA); @ISA = qw(Prima::Dialog); sub profile_default { my $def = $_[ 0]-> SUPER::profile_default; my %prf = ( text => 'Printer setup', width => 309, height => 143, designScale => [7,16], centered => 1, visible => 0, ); @$def{keys %prf} = values %prf; return $def; } sub init { my $self = shift; my %profile = $self-> SUPER::init(@_); my $cb = $self-> insert( ComboBox => origin => [ 4, 89], style => cs::DropDownList, name => 'Printers', size => [ 299, 20], delegations => ['Change'], ); $self-> insert( Button => origin => [ 208, 4], size => [ 96, 36], text => 'P~roperties...', name => 'Properties', delegations => ['Click'], ); $self-> insert( Label => origin => [ 4, 116], size => [ 299, 20], text => '~Printer', focusLink => $cb, ); $self-> insert( Label => origin => [ 3, 50], name => 'Device', size => [ 299, 20], text => '', ); $self-> insert( Button => origin => [ 4, 4], size => [ 96, 36], name => 'OK', text => '~OK', default => 1, delegations => ['Click'], ); $self-> insert( Button => origin => [ 107, 4], size => [ 96, 36], text => 'Cancel', name => 'Cancel', delegations => ['Click'], ); return %profile; } sub on_execute { my $self = $_[0]; my $oldp = $self-> Printers-> text; my @prs = @{$::application-> get_printer-> printers}; unless ( scalar @prs) { $self-> cancel; Prima::message("No printers found"); return; } $self-> {list} = [ @prs]; my $p = $self-> Printers; my @newprs = @prs; @newprs = map {$_ = $_-> {name}} @newprs; my $found = 0; for ( @newprs) { $found = 1, last if $_ eq $oldp; } unless ( $found) { for ( @prs) { $oldp = $_-> {name}, last if $_-> {defaultPrinter} } } $p-> items( \@newprs ), $p-> text( $oldp); my $i = $p-> List-> focusedItem; $self-> Device-> text( 'Device: ' . $prs[ $i]-> {device}); $self-> {oldPrinter} = $oldp; } sub Printers_Change { my ( $self, $combic) = @_; $::application-> get_printer-> printer( $combic-> text); $self-> Device-> text( 'Device: ' . $self-> {list}-> [ $combic-> List-> focusedItem]-> {device} ); } sub Properties_Click { $::application-> get_printer-> setup_dialog; } sub OK_Click { $_[0]-> ok; } sub Cancel_Click { $::application-> get_printer-> printer( $_[0]-> {oldPrinter}); $_[0]-> cancel; } sub execute { return $_[0]-> SUPER::execute == mb::OK; } 1; __DATA__