• Skip to content
  • Skip to link menu
Trinity API Reference
  • Trinity API Reference
  • kdeprint
 

kdeprint

  • kdeprint
kpposterpage.cpp
1 /*
2  * This file is part of the KDE libraries
3  * Copyright (c) 2001-2002 Michael Goffioul <kdeprint@swing.be>
4  *
5  * This library is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU Library General Public
7  * License version 2 as published by the Free Software Foundation.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12  * Library General Public License for more details.
13  *
14  * You should have received a copy of the GNU Library General Public License
15  * along with this library; see the file COPYING.LIB. If not, write to
16  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17  * Boston, MA 02110-1301, USA.
18  **/
19 
20 #include "kpposterpage.h"
21 #include "posterpreview.h"
22 #include "kprinter.h"
23 #include "kmfactory.h"
24 #include "util.h"
25 
26 #include <tqcheckbox.h>
27 #include <tqcombobox.h>
28 #include <tqlabel.h>
29 #include <tqlayout.h>
30 #include <tqtooltip.h>
31 #include <tqlineedit.h>
32 #include <tqwhatsthis.h>
33 #include <kpushbutton.h>
34 #include <klocale.h>
35 #include <knuminput.h>
36 #include <kiconloader.h>
37 
38 KPPosterPage::KPPosterPage( TQWidget *parent, const char *name )
39  : KPrintDialogPage( parent, name )
40 {
41  //WhatsThis strings.... (added by pfeifle@kde.org)
42  TQString whatsThis5_PosterPage = i18n( " <qt> "
43  " 5. "
44  " </qt>" );
45 
46  TQString whatsThisEnablePosterPage = i18n( " <qt> "
47  " <b>Print Poster</b> (enabled or disabled). "
48  " <p>If you enable this option, you can print posters of different sizes "
49  " The printout will happen in the form <em>'tiles'</em> printed on smaller "
50  " paper sizes, which you can stitch together later. <em>If you enable this "
51  " option here, the <em>'Poster Printing' filter</em> will be auto-loaded in "
52  " the 'Filters' tab of this dialog. </p>"
53  " <p>This tab is only visible if the external <em>'poster'</em> utility is "
54  " discovered by KDEPrint on your system. [<em>'poster'</em> is a commandline "
55  " utility that enables you to convert PostScript files into tiled printouts "
56  " which allow for oversized appearance of the stitched-together tiles.] </p>"
57  " <p><b>Note:</b> The standard version of 'poster' will not work. Your system "
58  " must use a patched version of 'poster'. Ask your operating system vendor to "
59  " provide a patched version of 'poster' if he does not already. </p>"
60  " <p><b>Additional hint for power users:</b> A patched version of 'poster' is "
61  " available from the <a href=\"http://printing.kde.org/\">KDEPrint Website</a> "
62  " at <a href=\"http://printing.kde.org/downloads/\">http://printing.kde.org/downloads/</a>. "
63  " The direct link to the patched source tarball is "
64  " <a href=\"ftp://ftp.kde.org/pub/kde/printing/poster.tar.bz2\">ftp://ftp.kde.org/pub/kde/printing/poster.tar.bz2</a> "
65  " </p> "
66  " </qt>" );
67 
68  TQString whatsThisTileSelectionPosterPage = i18n( " <qt> "
69  " <b>Tile Selection widget</b> "
70  " <p>This GUI element is <em>not only for viewing</em> your selections: it also "
71  " lets you interactively select the tile(s) you want to print. "
72  " </p>"
73  " <p><b>Hints</b> "
74  " <ul> "
75  " <li>Click any tile to select it for printing.</li> "
76  " <li>To select multiple tiles to be printed "
77  " at once, <em>'shift-click'</em> on the tiles ('shift-click' means: hold down the "
78  " [SHIFT]-key on your keyboard and click with the mouse while [SHIFT]-key is held.) "
79  " <em>Be aware</em> that the order "
80  " of your clicking is also significant to the order of printing the different tiles. </li>"
81  " </ul> "
82  " <b>Note 1:</b> The order of your selection (and the order for printout of the tiles) "
83  " is indicated by the contents of the text field below, "
84  " labelled as <em>'Tile pages (to be printed):'</em><p>"
85  " <b>Note 2:</b> By default no tile is selected. Before you can print (a part "
86  " of) your poster, you must select at least one tile. </p> "
87  " </qt>" );
88 
89  TQString whatsThisPostersizePosterPage = i18n( " <qt> "
90  " <b>Poster Size</b> "
91  " <p>Select the poster size you want from the dropdown list. </p> "
92  " Available sizes are all standard paper sizes up to "
93  " 'A0'. [A0 is the same size as 16 sheets of A4, or '84cm x 118.2cm'.] </p> "
94  " <p><b>Notice</b>, how the little preview window below changes with your change of poster "
95  " size. It indicates to you how many tiles need to be printed to make the poster, "
96  " given the selected paper size.</p> "
97  " <p><b>Hint:</b> The little preview window below is not just a passive icon. You can click "
98  " on its individual tiles to select them for printing. To select multiple tiles to be printed "
99  " at once, you need to <em>'shift-click'</em> on the tiles ('shift-click' means: hold down the "
100  " [SHIFT]-key on your keyboard and click with the mouse while [SHIFT]-key is held.) The order "
101  " of your clicking is significant to the order of printing the different tiles. The order of "
102  " your selection (and for the printed tiles) is indicated by the contents of the text field "
103  " labelled as <em>'Tile pages (to be printed):'</em><p>"
104  " <b>Note:</b> By default no tile is selected. Before you can print (a part "
105  " of) your poster, you must select at least one tile. </p> "
106  " </qt>" );
107 
108  TQString whatsThisPrintsizePosterPage = i18n( " <qt> "
109  " <b>Paper Size</b> "
110  " <p>This field indicates the paper size the poster tiles will be printed on. "
111  " To select a different paper size for your poster tiles, go to the 'General' tab "
112  " of this dialog and select one from the dropdown list. </p> "
113  " Available sizes are most standard paper sizes supported by your printer. Your printer's "
114  " supported paper sizes are read from the printer driver info (as laid down in the <em>'PPD'</em>, "
115  " the printer description file). <em>Be aware that the 'Paper Size' selected may not be supported "
116  " by 'poster' (example: 'HalfLetter') while it may well be supported by your printer.</em> If "
117  " you hit that obstacle, simply use another, supported Paper Size, like 'A4' or 'Letter'. "
118  " <p><b>Notice</b>, how the little preview window below changes with your change of paper "
119  " size. It indicates how many tiles need to be printed to make up the poster, "
120  " given the selected paper and poster size.</p> "
121  " <p><b>Hint:</b> The little preview window below is not just a passive icon. You can click "
122  " on its individual tiles to select them for printing. To select multiple tiles to be printed "
123  " at once, you need to <em>'shift-click'</em> on the tiles ('shift-click' means: hold down the "
124  " [SHIFT]-key on your keyboard and click with the mouse while [SHIFT]-key is held.) The order "
125  " of your clicking is significant to the order of printing the different tiles. The order of "
126  " your selection (and for the printed tiles) is indicated by the contents of the text field "
127  " labelled as <em>'Tile pages (to be printed):'</em><p>"
128  " <b>Note:</b> By default no tile is selected. Before you can print (a part "
129  " of) your poster, you must select at least one tile. </p> "
130  " </qt>" );
131 
132  TQString whatsThisCutmarginPosterPage = i18n( " <qt> "
133  " <b>Cut Margin selection</b> "
134  " <p>Slider and spinbox let you determine a <em>'cut margin'</em> which will be printed onto "
135  " each tile of your poster to help you cut the pieces as needed. </p>"
136  " <p><b>Notice</b>, how the little preview window above changes with your change of cut "
137  " margins. It indicates to you how much space the cut margins will take away from each tile. "
138  " <p><b>Be aware</b>, that your cut margins need to be equal to or greater than the margins your "
139  " printer uses. The printer's capabilities are described in the <em>'ImageableArea'</em> "
140  " keywords of its driver PPD file. </p> "
141  " </qt>" );
142 
143  TQString whatsThisTileOrderSelectionPosterPage = i18n( " <qt> "
144  " <b>Order and number of tile pages to be printed</b> "
145  " <p>This field displays and sets the individual tiles to be printed, as well as the order "
146  " for their printout. </p> "
147  " You can file the field with 2 different methods: "
148  " <ul> "
149  " <li>Either use the interactive thumbnail preview above and '[SHIFT]-click' on the tiles. </li> "
150  " <li>Or edit this text field accordingly. </li> "
151  " </ul> "
152  " <p>When editing the field, you can use a '3-7' syntax instead of a '3,4,5,6,7' one. </p> "
153  " <p><b>Examples:</b></p> "
154  " <pre> "
155  " \"2,3,7,9,3\" "
156  " <br> "
157  " \"1-3,6,8-11\" "
158  " </qt>" );
159 
160  setTitle( i18n( "Poster" ) );
161 
162  m_postercheck = new TQCheckBox( i18n( "&Print poster" ), this );
163  TQWhatsThis::add(m_postercheck, whatsThisEnablePosterPage);
164  TQWidget *dummy = new TQWidget( this );
165  m_preview = new PosterPreview( dummy );
166  TQWhatsThis::add(m_preview, whatsThisTileSelectionPosterPage);
167  m_postersize = new TQComboBox( dummy );
168  TQWhatsThis::add(m_postersize, whatsThisPostersizePosterPage);
169  m_printsize = new TQComboBox( dummy );
170  TQWhatsThis::add(m_printsize, whatsThisPrintsizePosterPage);
171  m_lockbtn = new KPushButton( dummy );
172  //TQWhatsThis::add(m_lockbtn, whatsThis5_PosterPage); //FIXME ASK_MICHAEL: which pushbutton would that be?
173  m_mediasize = new TQLabel( dummy );
174  TQWhatsThis::add(m_mediasize, whatsThisPrintsizePosterPage);
175  m_mediasize->setFrameStyle( TQFrame::Panel|TQFrame::Sunken );
176  TQLabel *posterlab = new TQLabel( i18n( "Poste&r size:" ), dummy );
177  TQWhatsThis::add(posterlab, whatsThisPostersizePosterPage);
178  TQLabel *medialab = new TQLabel( i18n( "Media size:" ), dummy );
179  TQWhatsThis::add(medialab, whatsThisPrintsizePosterPage);
180  TQLabel *printlab = new TQLabel( i18n( "Pri&nt size:" ), dummy );
181  TQWhatsThis::add(printlab, whatsThisPrintsizePosterPage);
182  posterlab->setBuddy( m_postersize );
183  printlab->setBuddy( m_printsize );
184  m_cutmargin = new KIntNumInput( 5, dummy );
185  TQWhatsThis::add(m_cutmargin, whatsThisCutmarginPosterPage);
186  // xgettext:no-c-format
187  m_cutmargin->setLabel( i18n( "C&ut margin (% of media):" ) );
188  m_cutmargin->setRange( 0, 100, 2, true ); // step width was too big, changed from 10 to 2 (-kp-)
189  m_selection = new TQLineEdit( dummy );
190  TQWhatsThis::add(m_selection, whatsThisTileOrderSelectionPosterPage);
191  TQLabel *selectionlab = new TQLabel( i18n( "&Tile pages (to be printed):" ), dummy );
192  TQWhatsThis::add(selectionlab, whatsThisTileOrderSelectionPosterPage);
193  selectionlab->setBuddy( m_selection );
194  m_lockbtn->setToggleButton( true );
195  m_lockbtn->setPixmap( SmallIcon( "encrypted" ) );
196  m_lockbtn->setOn( true );
197  m_lockbtn->setFixedSize( m_lockbtn->sizeHint() );
198  TQToolTip::add( m_lockbtn, i18n( "Link/unlink poster and print size" ) );
199 
200  for ( int i=0; i<KPrinter::NPageSize-1; i++ )
201  {
202  m_postersize->insertItem( page_sizes[ i ].text );
203  m_printsize->insertItem( page_sizes[ i ].text );
204  }
205  m_postersize->setCurrentItem( findIndex( KPrinter::A3 ) );
206  slotPosterSizeChanged( m_postersize->currentItem() );
207 
208  connect( m_postercheck, TQT_SIGNAL( toggled( bool ) ), dummy, TQT_SLOT( setEnabled( bool ) ) );
209  dummy->setEnabled( false );
210  connect( m_postersize, TQT_SIGNAL( activated( int ) ), TQT_SLOT( slotPosterSizeChanged( int ) ) );
211  connect( m_cutmargin, TQT_SIGNAL( valueChanged( int ) ), TQT_SLOT( slotMarginChanged( int ) ) );
212  connect( m_lockbtn, TQT_SIGNAL( toggled( bool ) ), m_printsize, TQT_SLOT( setDisabled( bool ) ) );
213  m_printsize->setEnabled( false );
214  connect( m_lockbtn, TQT_SIGNAL( toggled( bool ) ), TQT_SLOT( slotLockToggled( bool ) ) );
215  connect( m_selection, TQT_SIGNAL( textChanged( const TQString& ) ), m_preview, TQT_SLOT( setSelectedPages( const TQString& ) ) );
216  connect( m_preview, TQT_SIGNAL( selectionChanged( const TQString& ) ), m_selection, TQT_SLOT( setText( const TQString& ) ) );
217 
218  if ( KMFactory::self()->settings()->application != KPrinter::Dialog
219  && KMFactory::self()->settings()->application >= 0 )
220  {
221  m_printsize->hide();
222  m_lockbtn->hide();
223  printlab->hide();
224  }
225 
226  TQVBoxLayout *l0 = new TQVBoxLayout( this, 0, 10 );
227  l0->addWidget( m_postercheck );
228  l0->addWidget( dummy, 1 );
229  TQGridLayout *l1 = new TQGridLayout( dummy, 8, 3, 0, 5 );
230  l1->addWidget( posterlab, 0, 0 );
231  l1->addWidget( m_postersize, 0, 1 );
232  l1->addWidget( printlab, 1, 0 );
233  l1->addWidget( m_printsize, 1, 1 );
234  l1->addWidget( medialab, 2, 0 );
235  l1->addWidget( m_mediasize, 2, 1 );
236  l1->addMultiCellWidget( m_preview, 4, 4, 0, 2 );
237  l1->addMultiCellWidget( m_cutmargin, 6, 6, 0, 2 );
238  l1->addMultiCellWidget( m_lockbtn, 0, 1, 2, 2 );
239  TQHBoxLayout *l2 = new TQHBoxLayout( 0, 0, 5 );
240  l1->addMultiCellLayout( l2, 7, 7, 0, 2 );
241  l2->addWidget( selectionlab );
242  l2->addWidget( m_selection );
243  l1->setColStretch( 1, 1 );
244  l1->setRowStretch( 4, 1 );
245  l1->addRowSpacing( 3, 10 );
246  l1->addRowSpacing( 5, 10 );
247 }
248 
249 KPPosterPage::~KPPosterPage()
250 {
251 }
252 
253 void KPPosterPage::setOptions( const TQMap<TQString,TQString>& opts )
254 {
255  TQString ps = opts[ "PageSize" ];
256  if ( ps.isEmpty() && !opts[ "kde-pagesize" ].isEmpty() )
257  {
258  ps = pageSizeToPageName( ( KPrinter::PageSize )opts[ "kde-pagesize" ].toInt() );
259  if ( ps.isEmpty() )
260  ps = opts[ "_kde-poster-media" ];
261  }
262  if ( ps.isEmpty() )
263  m_mediasize->setText( i18n( "Unknown" ) );
264  else
265  m_mediasize->setText( ps );
266  m_preview->setMediaSize( ps );
267 
268  if ( opts[ "_kde-filters" ].find( "poster" ) != -1 )
269  {
270  m_postercheck->setChecked( true );
271  ps = opts[ "_kde-poster-size" ];
272  TQString prtsize = opts[ "kde-printsize" ];
273  if ( !ps.isEmpty() )
274  {
275  m_postersize->setCurrentItem( findIndex( pageNameToPageSize( ps ) ) );
276  m_lockbtn->setOn( !prtsize.isEmpty() &&
277  page_sizes[ m_postersize->currentItem() ].ID == prtsize.toInt() );
278  if ( !m_lockbtn->isOn() )
279  m_printsize->setCurrentItem( findIndex( prtsize.toInt() ) );
280  slotPosterSizeChanged( m_postersize->currentItem() );
281  }
282  if ( !opts[ "_kde-poster-cut" ].isEmpty() )
283  m_cutmargin->setValue( opts[ "_kde-poster-cut" ].toInt() );
284  m_selection->setText( opts[ "_kde-poster-select" ] );
285  }
286  else
287  m_postercheck->setChecked( false );
288 }
289 
290 void KPPosterPage::getOptions( TQMap<TQString,TQString>& opts, bool )
291 {
292  TQStringList o = TQStringList::split( ",", opts[ "_kde-filters" ], false );
293  if ( !m_postercheck->isChecked() )
294  {
295  o.remove( "poster" );
296  opts[ "_kde-filters" ] = o.join( "," );
297  opts.remove( "_kde-poster-media" );
298  opts.remove( "_kde-poster-size" );
299  opts.remove( "_kde-poster-cut" );
300  opts.remove( "kde-printsize" );
301  opts.remove( "_kde-poster-select" );
302  }
303  else
304  {
305  if ( !o.contains( "poster" ) )
306  o.append( "poster" );
307  opts[ "_kde-filters" ] = o.join( "," );
308  opts[ "_kde-poster-media" ] = m_mediasize->text();
309  opts[ "_kde-poster-size" ] = pageSizeToPageName( ( KPrinter::PageSize )page_sizes[ m_postersize->currentItem() ].ID );
310  opts[ "kde-printsize" ] = TQString::number( page_sizes[ m_printsize->currentItem() ].ID );
311  opts[ "_kde-poster-cut" ] = TQString::number( m_cutmargin->value() );
312  opts[ "_kde-poster-select" ] = m_selection->text().stripWhiteSpace();
313  }
314 }
315 
316 bool KPPosterPage::isValid()
317 {
318  return true;
319 }
320 
321 void KPPosterPage::slotPosterSizeChanged( int value )
322 {
323  int ID = page_sizes[ m_postersize->currentItem() ].ID;
324  m_preview->setPosterSize( ID );
325  if ( m_lockbtn->isOn() )
326  m_printsize->setCurrentItem( value );
327 }
328 
329 void KPPosterPage::slotMarginChanged( int value )
330 {
331  m_preview->setCutMargin( value );
332 }
333 
334 void KPPosterPage::slotLockToggled( bool on )
335 {
336  m_lockbtn->setPixmap( SmallIcon( on ? "encrypted" : "decrypted" ) );
337  if ( on )
338  m_printsize->setCurrentItem( m_postersize->currentItem() );
339 }
340 
341 #include "kpposterpage.moc"
KPrintDialogPage
This class is intended to be used as base class for customized print dialog page.
Definition: kprintdialogpage.h:91
KPrintDialogPage::isValid
virtual bool isValid(TQString &msg)
Returns true if options selected in the page are valid (no conflict), false otherwise.
Definition: kprintdialogpage.cpp:45
KPrinter::PageSize
PageSize
Defines the paper size to use.
Definition: kprinter.h:168

kdeprint

Skip menu "kdeprint"
  • Main Page
  • Class Hierarchy
  • Alphabetical List
  • Class List
  • File List
  • Class Members
  • Related Pages

kdeprint

Skip menu "kdeprint"
  • arts
  • dcop
  • dnssd
  • interfaces
  •     interface
  •     library
  •   kspeech
  •   ktexteditor
  • kabc
  • kate
  • kcmshell
  • kdecore
  • kded
  • kdefx
  • kdeprint
  • kdesu
  • kdeui
  • kdoctools
  • khtml
  • kimgio
  • kinit
  • kio
  •   bookmarks
  •   httpfilter
  •   kfile
  •   kio
  •   kioexec
  •   kpasswdserver
  •   kssl
  • kioslave
  •   http
  • kjs
  • kmdi
  •   kmdi
  • knewstuff
  • kparts
  • krandr
  • kresources
  • kspell2
  • kunittest
  • kutils
  • kwallet
  • libkmid
  • libkscreensaver
Generated for kdeprint by doxygen 1.9.1
This website is maintained by Timothy Pearson.
KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. |