# # 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 # # $Id: PrintDialog.pm,v 1.12 2007/09/13 15:12:25 dk Exp $ 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__ =pod =head1 NAME Prima::PrintDialog - standard printer setup dialog =head1 DESCRIPTION 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 C. 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 C property. This technique allows direct use of the user-selected printer and its properties without prior knowledge of the selection process. =head1 SYNOPSIS 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; =head1 AUTHOR Dmitry Karasik, Edmitry@karasik.eu.orgE. =head1 SEE ALSO L, L, L. =cut