Line data Source code
1 : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : /*
3 : * This file is part of the LibreOffice project.
4 : *
5 : * This Source Code Form is subject to the terms of the Mozilla Public
6 : * License, v. 2.0. If a copy of the MPL was not distributed with this
7 : * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 : *
9 : * This file incorporates work covered by the following license notice:
10 : *
11 : * Licensed to the Apache Software Foundation (ASF) under one or more
12 : * contributor license agreements. See the NOTICE file distributed
13 : * with this work for additional information regarding copyright
14 : * ownership. The ASF licenses this file to you under the Apache
15 : * License, Version 2.0 (the "License"); you may not use this file
16 : * except in compliance with the License. You may obtain a copy of
17 : * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 : */
19 :
20 : #include "prtsetup.hxx"
21 : #include "helper.hxx" // for PaResId
22 : #include "rtsetup.hrc"
23 : #include "cmddlg.hxx"
24 :
25 : #include "vcl/fontmanager.hxx"
26 :
27 : #include "osl/thread.h"
28 :
29 : #include <officecfg/Office/Common.hxx>
30 :
31 : using namespace psp;
32 : using namespace padmin;
33 :
34 : using ::rtl::OUString;
35 : using ::rtl::OUStringHash;
36 : using ::rtl::OString;
37 :
38 0 : void RTSDialog::insertAllPPDValues( ListBox& rBox, const PPDParser* pParser, const PPDKey* pKey )
39 : {
40 0 : if( ! pKey || ! pParser )
41 0 : return;
42 :
43 0 : const PPDValue* pValue = NULL;
44 0 : sal_uInt16 nPos = 0;
45 0 : String aOptionText;
46 :
47 0 : for( int i = 0; i < pKey->countValues(); i++ )
48 : {
49 0 : pValue = pKey->getValue( i );
50 0 : aOptionText = pParser->translateOption( pKey->getKey(), pValue->m_aOption) ;
51 :
52 0 : if( m_aJobData.m_aContext.checkConstraints( pKey, pValue ) )
53 : {
54 0 : if( rBox.GetEntryPos( (void*)pValue ) == LISTBOX_ENTRY_NOTFOUND )
55 : {
56 0 : nPos = rBox.InsertEntry( aOptionText, LISTBOX_APPEND );
57 0 : rBox.SetEntryData( nPos, (void*)pValue );
58 : }
59 : }
60 : else
61 : {
62 0 : if( ( nPos = rBox.GetEntryPos( (void*)pValue ) ) != LISTBOX_ENTRY_NOTFOUND )
63 0 : rBox.RemoveEntry( nPos );
64 : }
65 : }
66 0 : pValue = m_aJobData.m_aContext.getValue( pKey );
67 0 : if( pValue )
68 : {
69 0 : if( ( nPos = rBox.GetEntryPos( (void*)pValue ) ) != LISTBOX_ENTRY_NOTFOUND )
70 0 : rBox.SelectEntryPos( nPos );
71 : }
72 : else
73 0 : rBox.SelectEntry( m_aInvalidString );
74 : }
75 :
76 : // --------------------------------------------------------------------------
77 :
78 : /*
79 : * RTSDialog
80 : */
81 :
82 0 : RTSDialog::RTSDialog( const PrinterInfo& rJobData, const String& rPrinter, bool bAllPages, Window* pParent )
83 : : TabDialog(pParent, "PrinterPropertiesDialog", "spa/ui/printerpropertiesdialog.ui" )
84 : , m_aJobData(rJobData)
85 : , m_aPrinter(rPrinter)
86 : , m_pPaperPage(NULL)
87 : , m_pDevicePage(NULL)
88 : , m_pOtherPage(NULL)
89 : , m_pFontSubstPage(NULL)
90 : , m_pCommandPage(NULL)
91 0 : , m_aInvalidString(PaResId(RID_RTS_RTSDIALOG_INVALID_TXT).toString())
92 : {
93 0 : get(m_pOKButton, "ok");
94 0 : get(m_pCancelButton, "cancel");
95 0 : get(m_pTabControl, "notebook");
96 :
97 0 : String aTitle( GetText() );
98 0 : aTitle.SearchAndReplace( String( RTL_CONSTASCII_USTRINGPARAM( "%s" ) ), m_aJobData.m_aPrinterName );
99 0 : SetText( aTitle );
100 :
101 0 : if( ! bAllPages )
102 : {
103 0 : m_pTabControl->RemovePage(m_pTabControl->GetPageId("other"));
104 0 : m_pTabControl->RemovePage(m_pTabControl->GetPageId("font"));
105 0 : m_pTabControl->RemovePage(m_pTabControl->GetPageId("command"));
106 : }
107 0 : else if( m_aJobData.m_aDriverName.compareToAscii( "CUPS:", 5 ) == 0 && ! PrinterInfoManager::get().isCUPSDisabled() )
108 : {
109 : // command page makes no sense for CUPS printers
110 0 : m_pTabControl->RemovePage(m_pTabControl->GetPageId("command"));
111 : }
112 :
113 0 : m_pTabControl->SetActivatePageHdl( LINK( this, RTSDialog, ActivatePage ) );
114 0 : m_pOKButton->SetClickHdl( LINK( this, RTSDialog, ClickButton ) );
115 0 : m_pCancelButton->SetClickHdl( LINK( this, RTSDialog, ClickButton ) );
116 0 : ActivatePage(m_pTabControl);
117 0 : }
118 :
119 : // --------------------------------------------------------------------------
120 :
121 0 : RTSDialog::~RTSDialog()
122 : {
123 0 : if( m_pPaperPage )
124 0 : delete m_pPaperPage;
125 0 : if( m_pDevicePage )
126 0 : delete m_pDevicePage;
127 0 : if( m_pOtherPage )
128 0 : delete m_pOtherPage;
129 0 : if( m_pFontSubstPage )
130 0 : delete m_pFontSubstPage;
131 0 : if( m_pCommandPage )
132 0 : delete m_pCommandPage;
133 0 : }
134 :
135 : // --------------------------------------------------------------------------
136 :
137 0 : IMPL_LINK( RTSDialog, ActivatePage, TabControl*, pTabCtrl )
138 : {
139 0 : if( pTabCtrl != m_pTabControl )
140 0 : return 0;
141 :
142 0 : sal_uInt16 nId = m_pTabControl->GetCurPageId();
143 0 : OString sPage = m_pTabControl->GetPageName(nId);
144 0 : if ( ! m_pTabControl->GetTabPage( nId ) )
145 : {
146 0 : TabPage *pPage = NULL;
147 0 : if (sPage == "paper")
148 0 : pPage = m_pPaperPage = new RTSPaperPage( this );
149 0 : else if (sPage == "device")
150 0 : pPage = m_pDevicePage = new RTSDevicePage( this );
151 0 : else if (sPage == "other")
152 0 : pPage = m_pOtherPage = new RTSOtherPage( this );
153 0 : else if (sPage == "font")
154 0 : pPage = m_pFontSubstPage = new RTSFontSubstPage( this );
155 0 : else if (sPage == "command")
156 0 : pPage = m_pCommandPage = new RTSCommandPage( this );
157 0 : if( pPage )
158 0 : m_pTabControl->SetTabPage( nId, pPage );
159 : }
160 : else
161 : {
162 0 : if (sPage == "paper")
163 0 : m_pPaperPage->update();
164 0 : else if (sPage == "device")
165 0 : m_pDevicePage->update();
166 : }
167 :
168 0 : return 0;
169 : }
170 :
171 : // --------------------------------------------------------------------------
172 :
173 0 : IMPL_LINK( RTSDialog, ClickButton, Button*, pButton )
174 : {
175 0 : if( pButton == m_pOKButton )
176 : {
177 : // refresh the changed values
178 0 : if( m_pPaperPage )
179 : {
180 : // orientation
181 0 : m_aJobData.m_eOrientation = m_pPaperPage->getOrientation() == 0 ?
182 0 : orientation::Portrait : orientation::Landscape;
183 : }
184 0 : if( m_pDevicePage )
185 : {
186 0 : m_aJobData.m_nColorDepth = m_pDevicePage->getDepth();
187 0 : m_aJobData.m_nColorDevice = m_pDevicePage->getColorDevice();
188 0 : m_aJobData.m_nPSLevel = m_pDevicePage->getLevel();
189 0 : m_aJobData.m_nPDFDevice = m_pDevicePage->getPDFDevice();
190 : }
191 0 : if( m_pOtherPage )
192 : // write other settings
193 0 : m_pOtherPage->save();
194 0 : if( m_pCommandPage )
195 : // write command settings
196 0 : m_pCommandPage->save();
197 :
198 0 : EndDialog( 1 );
199 : }
200 0 : else if( pButton == m_pCancelButton )
201 0 : EndDialog( 0 );
202 :
203 0 : return 0;
204 : }
205 :
206 : // --------------------------------------------------------------------------
207 :
208 : /*
209 : * RTSPaperPage
210 : */
211 :
212 0 : RTSPaperPage::RTSPaperPage(RTSDialog* pParent)
213 : : TabPage(pParent->m_pTabControl, "PrinterPaperPage", "spa/ui/printerpaperpage.ui" )
214 0 : , m_pParent( pParent )
215 : {
216 0 : get(m_pPaperText, "paperft");
217 0 : get(m_pPaperBox, "paperlb");
218 0 : get(m_pOrientBox, "orientlb");
219 0 : get(m_pDuplexText, "duplexft");
220 0 : get(m_pDuplexBox, "duplexlb");
221 0 : get(m_pSlotText, "slotft");
222 0 : get(m_pSlotBox, "slotlb");
223 :
224 0 : m_pPaperBox->SetSelectHdl( LINK( this, RTSPaperPage, SelectHdl ) );
225 0 : m_pOrientBox->SetSelectHdl( LINK( this, RTSPaperPage, SelectHdl ) );
226 0 : m_pDuplexBox->SetSelectHdl( LINK( this, RTSPaperPage, SelectHdl ) );
227 0 : m_pSlotBox->SetSelectHdl( LINK( this, RTSPaperPage, SelectHdl ) );
228 :
229 0 : sal_uInt16 nPos = 0;
230 :
231 : // duplex
232 0 : nPos = m_pDuplexBox->InsertEntry( m_pParent->m_aInvalidString );
233 0 : m_pDuplexBox->SetEntryData( nPos, NULL );
234 :
235 : // paper does not have an invalid entry
236 :
237 : // input slots
238 0 : nPos = m_pSlotBox->InsertEntry( m_pParent->m_aInvalidString );
239 0 : m_pSlotBox->SetEntryData( nPos, NULL );
240 :
241 0 : update();
242 0 : }
243 :
244 : // --------------------------------------------------------------------------
245 :
246 0 : RTSPaperPage::~RTSPaperPage()
247 : {
248 0 : }
249 :
250 : // --------------------------------------------------------------------------
251 :
252 0 : void RTSPaperPage::update()
253 : {
254 0 : const PPDKey* pKey = NULL;
255 :
256 : // orientation
257 : m_pOrientBox->SelectEntryPos(
258 0 : m_pParent->m_aJobData.m_eOrientation == orientation::Portrait ? 0 : 1);
259 :
260 : // duplex
261 0 : if( m_pParent->m_aJobData.m_pParser &&
262 0 : (pKey = m_pParent->m_aJobData.m_pParser->getKey( String( RTL_CONSTASCII_USTRINGPARAM( "Duplex" ) ) )) )
263 : {
264 0 : m_pParent->insertAllPPDValues( *m_pDuplexBox, m_pParent->m_aJobData.m_pParser, pKey );
265 : }
266 : else
267 : {
268 0 : m_pDuplexText->Enable( sal_False );
269 0 : m_pDuplexBox->Enable( sal_False );
270 : }
271 :
272 : // paper
273 0 : if( m_pParent->m_aJobData.m_pParser &&
274 0 : (pKey = m_pParent->m_aJobData.m_pParser->getKey( String( RTL_CONSTASCII_USTRINGPARAM( "PageSize" ) ) )) )
275 : {
276 0 : m_pParent->insertAllPPDValues( *m_pPaperBox, m_pParent->m_aJobData.m_pParser, pKey );
277 : }
278 : else
279 : {
280 0 : m_pPaperText->Enable( sal_False );
281 0 : m_pPaperBox->Enable( sal_False );
282 : }
283 :
284 : // input slots
285 0 : if( m_pParent->m_aJobData.m_pParser &&
286 0 : (pKey = m_pParent->m_aJobData.m_pParser->getKey( rtl::OUString("InputSlot") )) )
287 : {
288 0 : m_pParent->insertAllPPDValues( *m_pSlotBox, m_pParent->m_aJobData.m_pParser, pKey );
289 : }
290 : else
291 : {
292 0 : m_pSlotText->Enable( sal_False );
293 0 : m_pSlotBox->Enable( sal_False );
294 : }
295 0 : }
296 :
297 : // --------------------------------------------------------------------------
298 :
299 0 : IMPL_LINK( RTSPaperPage, SelectHdl, ListBox*, pBox )
300 : {
301 0 : const PPDKey* pKey = NULL;
302 0 : if( pBox == m_pPaperBox )
303 : {
304 0 : if( m_pParent->m_aJobData.m_pParser )
305 0 : pKey = m_pParent->m_aJobData.m_pParser->getKey( String( RTL_CONSTASCII_USTRINGPARAM( "PageSize" ) ) );
306 : }
307 0 : else if( pBox == m_pDuplexBox )
308 : {
309 0 : if( m_pParent->m_aJobData.m_pParser )
310 0 : pKey = m_pParent->m_aJobData.m_pParser->getKey( String( RTL_CONSTASCII_USTRINGPARAM( "Duplex" ) ) );
311 : }
312 0 : else if( pBox == m_pSlotBox )
313 : {
314 0 : if( m_pParent->m_aJobData.m_pParser )
315 0 : pKey = m_pParent->m_aJobData.m_pParser->getKey( String( RTL_CONSTASCII_USTRINGPARAM( "InputSlot" ) ) );
316 : }
317 0 : else if( pBox == m_pOrientBox )
318 : {
319 0 : m_pParent->m_aJobData.m_eOrientation = m_pOrientBox->GetSelectEntryPos() == 0 ? orientation::Portrait : orientation::Landscape;
320 : }
321 0 : if( pKey )
322 : {
323 : PPDValue* pValue =
324 0 : (PPDValue*)pBox->GetEntryData( pBox->GetSelectEntryPos() );
325 0 : m_pParent->m_aJobData.m_aContext.setValue( pKey, pValue );
326 0 : update();
327 : }
328 0 : return 0;
329 : }
330 :
331 : // --------------------------------------------------------------------------
332 :
333 : /*
334 : * RTSDevicePage
335 : */
336 :
337 0 : RTSDevicePage::RTSDevicePage( RTSDialog* pParent )
338 : : TabPage(pParent->m_pTabControl, "PrinterDevicePage", "spa/ui/printerdevicepage.ui" )
339 0 : , m_pParent( pParent )
340 : {
341 0 : get(m_pPPDKeyBox, "options");
342 0 : get(m_pPPDValueBox, "values");
343 :
344 0 : m_pPPDKeyBox->SetDropDownLineCount(12);
345 0 : m_pPPDValueBox->SetDropDownLineCount(12);
346 :
347 0 : get(m_pLevelBox, "level");
348 0 : get(m_pSpaceBox, "colorspace");
349 0 : get(m_pDepthBox, "colordepth");
350 :
351 0 : m_pPPDKeyBox->SetSelectHdl( LINK( this, RTSDevicePage, SelectHdl ) );
352 0 : m_pPPDValueBox->SetSelectHdl( LINK( this, RTSDevicePage, SelectHdl ) );
353 :
354 0 : switch( m_pParent->m_aJobData.m_nColorDevice )
355 : {
356 0 : case 0: m_pSpaceBox->SelectEntryPos(0);break;
357 0 : case 1: m_pSpaceBox->SelectEntryPos(1);break;
358 0 : case -1: m_pSpaceBox->SelectEntryPos(2);break;
359 : }
360 :
361 0 : sal_uLong nLevelEntryData = 0; //automatic
362 0 : if( m_pParent->m_aJobData.m_nPDFDevice == 2 ) //explicitly PDF
363 0 : nLevelEntryData = 10;
364 0 : else if (m_pParent->m_aJobData.m_nPSLevel > 0) //explicit PS Level
365 0 : nLevelEntryData = m_pParent->m_aJobData.m_nPSLevel+1;
366 0 : else if (m_pParent->m_aJobData.m_nPDFDevice == 1) //automatically PDF
367 0 : nLevelEntryData = 0;
368 0 : else if (m_pParent->m_aJobData.m_nPDFDevice == -1) //explicitly PS from driver
369 0 : nLevelEntryData = 1;
370 :
371 : bool bAutoIsPDF = officecfg::Office::Common::Print::Option::Printer::PDFAsStandardPrintJobFormat::get();
372 :
373 : assert(nLevelEntryData != 0 || bAutoIsPDF == m_pParent->m_aJobData.m_nPDFDevice);
374 :
375 0 : OUString sStr = m_pLevelBox->GetEntry(0);
376 0 : m_pLevelBox->InsertEntry(sStr.replaceAll("%s", bAutoIsPDF ? m_pLevelBox->GetEntry(5) : m_pLevelBox->GetEntry(1)), 0);
377 0 : m_pLevelBox->SetEntryData(0, m_pLevelBox->GetEntryData(1));
378 0 : m_pLevelBox->RemoveEntry(1);
379 :
380 0 : for( sal_uInt16 i = 0; i < m_pLevelBox->GetEntryCount(); i++ )
381 : {
382 0 : if( (sal_uLong)m_pLevelBox->GetEntryData( i ) == nLevelEntryData )
383 : {
384 0 : m_pLevelBox->SelectEntryPos( i );
385 0 : break;
386 : }
387 : }
388 :
389 0 : if (m_pParent->m_aJobData.m_nColorDepth == 8)
390 0 : m_pDepthBox->SelectEntryPos(0);
391 0 : else if (m_pParent->m_aJobData.m_nColorDepth == 24)
392 0 : m_pDepthBox->SelectEntryPos(1);
393 :
394 : // fill ppd boxes
395 0 : if( m_pParent->m_aJobData.m_pParser )
396 : {
397 0 : for( int i = 0; i < m_pParent->m_aJobData.m_pParser->getKeys(); i++ )
398 : {
399 0 : const PPDKey* pKey = m_pParent->m_aJobData.m_pParser->getKey( i );
400 0 : if( pKey->isUIKey() &&
401 0 : ! pKey->getKey().EqualsAscii( "PageSize" ) &&
402 0 : ! pKey->getKey().EqualsAscii( "InputSlot" ) &&
403 0 : ! pKey->getKey().EqualsAscii( "PageRegion" ) &&
404 0 : ! pKey->getKey().EqualsAscii( "Duplex" )
405 : )
406 : {
407 0 : String aEntry( m_pParent->m_aJobData.m_pParser->translateKey( pKey->getKey() ) );
408 0 : sal_uInt16 nPos = m_pPPDKeyBox->InsertEntry( aEntry );
409 0 : m_pPPDKeyBox->SetEntryData( nPos, (void*)pKey );
410 : }
411 : }
412 0 : }
413 0 : }
414 :
415 : // --------------------------------------------------------------------------
416 :
417 0 : RTSDevicePage::~RTSDevicePage()
418 : {
419 0 : }
420 :
421 : // --------------------------------------------------------------------------
422 :
423 0 : void RTSDevicePage::update()
424 : {
425 0 : }
426 :
427 0 : sal_uLong RTSDevicePage::getDepth()
428 : {
429 0 : sal_uInt16 nSelectPos = m_pDepthBox->GetSelectEntryPos();
430 0 : if (nSelectPos == 0)
431 0 : return 8;
432 : else
433 0 : return 24;
434 : }
435 :
436 0 : sal_uLong RTSDevicePage::getColorDevice()
437 : {
438 0 : sal_uInt16 nSelectPos = m_pSpaceBox->GetSelectEntryPos();
439 0 : switch (nSelectPos)
440 : {
441 : case 0:
442 0 : return 0;
443 : case 1:
444 0 : return 1;
445 : case 2:
446 0 : return -1;
447 : }
448 0 : return 0;
449 : }
450 :
451 : // ------------------------------------------------------------------
452 :
453 0 : sal_uLong RTSDevicePage::getLevel()
454 : {
455 0 : sal_uLong nLevel = (sal_uLong)m_pLevelBox->GetEntryData( m_pLevelBox->GetSelectEntryPos() );
456 0 : if (nLevel == 0)
457 0 : return 0; //automatic
458 0 : return nLevel < 10 ? nLevel-1 : 0;
459 : }
460 :
461 : // ------------------------------------------------------------------
462 :
463 0 : sal_uLong RTSDevicePage::getPDFDevice()
464 : {
465 0 : sal_uLong nLevel = (sal_uLong)m_pLevelBox->GetEntryData( m_pLevelBox->GetSelectEntryPos() );
466 0 : if (nLevel > 9)
467 0 : return 2; //explictly PDF
468 0 : else if (nLevel == 0)
469 0 : return 0; //automatic
470 0 : return -1; //explicitly PS
471 : }
472 :
473 : // ------------------------------------------------------------------
474 :
475 0 : IMPL_LINK( RTSDevicePage, SelectHdl, ListBox*, pBox )
476 : {
477 0 : if( pBox == m_pPPDKeyBox )
478 : {
479 0 : const PPDKey* pKey = (PPDKey*)m_pPPDKeyBox->GetEntryData( m_pPPDKeyBox->GetSelectEntryPos() );
480 0 : FillValueBox( pKey );
481 : }
482 0 : else if( pBox == m_pPPDValueBox )
483 : {
484 0 : const PPDKey* pKey = (PPDKey*)m_pPPDKeyBox->GetEntryData( m_pPPDKeyBox->GetSelectEntryPos() );
485 0 : const PPDValue* pValue = (PPDValue*)m_pPPDValueBox->GetEntryData( m_pPPDValueBox->GetSelectEntryPos() );
486 0 : if( pKey && pValue )
487 : {
488 0 : m_pParent->m_aJobData.m_aContext.setValue( pKey, pValue );
489 0 : FillValueBox( pKey );
490 : }
491 : }
492 0 : return 0;
493 : }
494 :
495 : // ------------------------------------------------------------------
496 :
497 0 : void RTSDevicePage::FillValueBox( const PPDKey* pKey )
498 : {
499 0 : m_pPPDValueBox->Clear();
500 :
501 0 : if( ! pKey )
502 0 : return;
503 :
504 0 : const PPDValue* pValue = NULL;
505 0 : for( int i = 0; i < pKey->countValues(); i++ )
506 : {
507 0 : pValue = pKey->getValue( i );
508 0 : if( m_pParent->m_aJobData.m_aContext.checkConstraints( pKey, pValue ) &&
509 : m_pParent->m_aJobData.m_pParser )
510 : {
511 0 : String aEntry( m_pParent->m_aJobData.m_pParser->translateOption( pKey->getKey(), pValue->m_aOption ) );
512 0 : sal_uInt16 nPos = m_pPPDValueBox->InsertEntry( aEntry );
513 0 : m_pPPDValueBox->SetEntryData( nPos, (void*)pValue );
514 : }
515 : }
516 0 : pValue = m_pParent->m_aJobData.m_aContext.getValue( pKey );
517 0 : m_pPPDValueBox->SelectEntryPos( m_pPPDValueBox->GetEntryPos( (void*)pValue ) );
518 : }
519 :
520 : // --------------------------------------------------------------------------
521 :
522 : /*
523 : * RTSOtherPage
524 : */
525 :
526 0 : RTSOtherPage::RTSOtherPage( RTSDialog* pParent ) :
527 : TabPage( pParent->m_pTabControl, PaResId( RID_RTS_OTHERPAGE ) ),
528 : m_pParent( pParent ),
529 : m_aLeftTxt( this, PaResId( RID_RTS_OTHER_LEFTMARGIN_TXT ) ),
530 : m_aLeftLB( this, PaResId( RID_RTS_OTHER_LEFTMARGIN_BOX ) ),
531 : m_aTopTxt( this, PaResId( RID_RTS_OTHER_TOPMARGIN_TXT ) ),
532 : m_aTopLB( this, PaResId( RID_RTS_OTHER_TOPMARGIN_BOX ) ),
533 : m_aRightTxt( this, PaResId( RID_RTS_OTHER_RIGHTMARGIN_TXT ) ),
534 : m_aRightLB( this, PaResId( RID_RTS_OTHER_RIGHTMARGIN_BOX ) ),
535 : m_aBottomTxt( this, PaResId( RID_RTS_OTHER_BOTTOMMARGIN_TXT ) ),
536 : m_aBottomLB( this, PaResId( RID_RTS_OTHER_BOTTOMMARGIN_BOX ) ),
537 : m_aCommentTxt( this, PaResId( RID_RTS_OTHER_COMMENT_TXT ) ),
538 : m_aCommentEdt( this, PaResId( RID_RTS_OTHER_COMMENT_EDT ) ),
539 0 : m_aDefaultBtn( this, PaResId( RID_RTS_OTHER_DEFAULT_BTN ) )
540 : {
541 0 : FreeResource();
542 :
543 0 : m_aTopLB.EnableEmptyFieldValue( sal_True );
544 0 : m_aBottomLB.EnableEmptyFieldValue( sal_True );
545 0 : m_aLeftLB.EnableEmptyFieldValue( sal_True );
546 0 : m_aRightLB.EnableEmptyFieldValue( sal_True );
547 :
548 0 : m_aDefaultBtn.SetClickHdl( LINK( this, RTSOtherPage, ClickBtnHdl ) );
549 :
550 0 : initValues();
551 0 : }
552 :
553 : // ------------------------------------------------------------------
554 :
555 0 : RTSOtherPage::~RTSOtherPage()
556 : {
557 0 : }
558 :
559 : // ------------------------------------------------------------------
560 :
561 0 : void RTSOtherPage::initValues()
562 : {
563 0 : int nMarginLeft = 0;
564 0 : int nMarginTop = 0;
565 0 : int nMarginRight = 0;
566 0 : int nMarginBottom = 0;
567 :
568 0 : if( m_pParent->m_aJobData.m_pParser )
569 : {
570 : m_pParent->m_aJobData.m_pParser->
571 : getMargins( m_pParent->m_aJobData.m_pParser->getDefaultPaperDimension(),
572 : nMarginLeft,
573 : nMarginRight,
574 : nMarginTop,
575 0 : nMarginBottom );
576 : }
577 :
578 0 : nMarginLeft += m_pParent->m_aJobData.m_nLeftMarginAdjust;
579 0 : nMarginRight += m_pParent->m_aJobData.m_nRightMarginAdjust;
580 0 : nMarginTop += m_pParent->m_aJobData.m_nTopMarginAdjust;
581 0 : nMarginBottom += m_pParent->m_aJobData.m_nBottomMarginAdjust;
582 :
583 0 : m_aLeftLB.SetValue( nMarginLeft, FUNIT_POINT );
584 0 : m_aRightLB.SetValue( nMarginRight, FUNIT_POINT );
585 0 : m_aTopLB.SetValue( nMarginTop, FUNIT_POINT );
586 0 : m_aBottomLB.SetValue( nMarginBottom, FUNIT_POINT );
587 0 : m_aCommentEdt.SetText( m_pParent->m_aJobData.m_aComment );
588 0 : }
589 :
590 : // ------------------------------------------------------------------
591 :
592 0 : void RTSOtherPage::save()
593 : {
594 0 : int nMarginLeft = 0;
595 0 : int nMarginTop = 0;
596 0 : int nMarginRight = 0;
597 0 : int nMarginBottom = 0;
598 :
599 0 : if( m_pParent->m_aJobData.m_pParser )
600 : {
601 : m_pParent->m_aJobData.m_pParser->
602 : getMargins( m_pParent->m_aJobData.m_pParser->getDefaultPaperDimension(),
603 : nMarginLeft,
604 : nMarginRight,
605 : nMarginTop,
606 0 : nMarginBottom );
607 : }
608 :
609 0 : m_pParent->m_aJobData.m_nLeftMarginAdjust = m_aLeftLB.GetValue( FUNIT_POINT ) - nMarginLeft;
610 0 : m_pParent->m_aJobData.m_nRightMarginAdjust = m_aRightLB.GetValue( FUNIT_POINT ) - nMarginRight;
611 0 : m_pParent->m_aJobData.m_nTopMarginAdjust = m_aTopLB.GetValue( FUNIT_POINT ) - nMarginTop;
612 0 : m_pParent->m_aJobData.m_nBottomMarginAdjust = m_aBottomLB.GetValue( FUNIT_POINT ) - nMarginBottom;
613 0 : m_pParent->m_aJobData.m_aComment = m_aCommentEdt.GetText();
614 0 : }
615 :
616 : // ------------------------------------------------------------------
617 :
618 0 : IMPL_LINK( RTSOtherPage, ClickBtnHdl, Button*, pButton )
619 : {
620 0 : if( pButton == &m_aDefaultBtn )
621 : {
622 : m_pParent->m_aJobData.m_nLeftMarginAdjust =
623 : m_pParent->m_aJobData.m_nRightMarginAdjust =
624 : m_pParent->m_aJobData.m_nTopMarginAdjust =
625 0 : m_pParent->m_aJobData.m_nBottomMarginAdjust = 0;
626 :
627 0 : initValues();
628 : }
629 0 : return 0;
630 : }
631 :
632 : // ------------------------------------------------------------------
633 :
634 : /*
635 : * RTSFontSubstPage
636 : */
637 :
638 0 : RTSFontSubstPage::RTSFontSubstPage( RTSDialog* pParent ) :
639 : TabPage( pParent->m_pTabControl, PaResId( RID_RTS_FONTSUBSTPAGE ) ),
640 : m_pParent( pParent ),
641 : m_aSubstitutionsText( this, PaResId( RID_RTS_FS_SUBST_TXT ) ),
642 : m_aSubstitutionsBox( this, PaResId( RID_RTS_FS_SUBST_BOX ) ),
643 : m_aFromFontText( this, PaResId( RID_RTS_FS_FROM_TXT ) ),
644 : m_aFromFontBox( this, PaResId( RID_RTS_FS_FROM_BOX ) ),
645 : m_aToFontText( this, PaResId( RID_RTS_FS_TO_TXT ) ),
646 : m_aToFontBox( this, PaResId( RID_RTS_FS_TO_BOX ) ),
647 : m_aAddButton( this, PaResId( RID_RTS_FS_ADD_BTN ) ),
648 : m_aRemoveButton( this, PaResId( RID_RTS_FS_REMOVE_BTN ) ),
649 0 : m_aEnableBox( this, PaResId( RID_RTS_FS_ENABLE_BTN ) )
650 : {
651 0 : FreeResource();
652 :
653 : // fill to box
654 0 : PrintFontManager& rFontManager = PrintFontManager::get();
655 0 : ::std::list< FastPrintFontInfo > aFonts;
656 0 : rFontManager.getFontListWithFastInfo( aFonts, m_pParent->m_aJobData.m_pParser, false );
657 0 : ::std::list< FastPrintFontInfo >::const_iterator it;
658 0 : ::boost::unordered_map< OUString, int, OUStringHash > aToMap, aFromMap;
659 0 : for( it = aFonts.begin(); it != aFonts.end(); ++it )
660 : {
661 0 : if( it->m_eType == fonttype::Builtin )
662 : {
663 0 : if( aToMap.find( it->m_aFamilyName ) == aToMap.end() )
664 : {
665 0 : m_aToFontBox.InsertEntry( it->m_aFamilyName );
666 0 : aToMap[ it->m_aFamilyName ] = 1;
667 : }
668 : }
669 : else
670 : {
671 0 : if( aFromMap.find( it->m_aFamilyName ) == aFromMap.end() )
672 : {
673 0 : m_aFromFontBox.InsertEntry( it->m_aFamilyName );
674 0 : aFromMap[ it->m_aFamilyName ] = 1;
675 : }
676 : }
677 : }
678 :
679 0 : m_aEnableBox.Check( m_pParent->m_aJobData.m_bPerformFontSubstitution );
680 0 : m_aRemoveButton.Enable( sal_False );
681 0 : if( ! m_pParent->m_aJobData.m_bPerformFontSubstitution )
682 : {
683 0 : m_aSubstitutionsBox.Enable( sal_False );
684 0 : m_aSubstitutionsText.Enable( sal_False );
685 0 : m_aAddButton.Enable( sal_False );
686 0 : m_aToFontBox.Enable( sal_False );
687 0 : m_aToFontText.Enable( sal_False );
688 0 : m_aFromFontBox.Enable( sal_False );
689 0 : m_aFromFontText.Enable( sal_False );
690 : }
691 :
692 0 : update();
693 :
694 0 : m_aAddButton.SetClickHdl( LINK( this, RTSFontSubstPage, ClickBtnHdl ) );
695 0 : m_aRemoveButton.SetClickHdl( LINK( this, RTSFontSubstPage, ClickBtnHdl ) );
696 0 : m_aEnableBox.SetClickHdl( LINK( this, RTSFontSubstPage, ClickBtnHdl ) );
697 0 : m_aSubstitutionsBox.SetSelectHdl( LINK( this, RTSFontSubstPage, SelectHdl ) );
698 0 : m_aSubstitutionsBox.setDelPressedLink( LINK( this, RTSFontSubstPage, DelPressedHdl ) );
699 0 : }
700 :
701 0 : RTSFontSubstPage::~RTSFontSubstPage()
702 : {
703 0 : }
704 :
705 0 : void RTSFontSubstPage::update()
706 : {
707 0 : m_aSubstitutionsBox.Clear();
708 0 : m_aRemoveButton.Enable( sal_False );
709 : // fill substitutions box
710 0 : ::boost::unordered_map< OUString, OUString, OUStringHash >::const_iterator it;
711 0 : for( it = m_pParent->m_aJobData.m_aFontSubstitutes.begin();
712 0 : it != m_pParent->m_aJobData.m_aFontSubstitutes.end(); ++it )
713 : {
714 0 : String aEntry( it->first );
715 0 : aEntry.AppendAscii( " -> " );
716 0 : aEntry.Append( String( it->second ) );
717 0 : m_aSubstitutionsBox.InsertEntry( aEntry );
718 0 : }
719 0 : }
720 :
721 0 : IMPL_LINK( RTSFontSubstPage, DelPressedHdl, ListBox*, pBox )
722 : {
723 0 : if( pBox == &m_aSubstitutionsBox &&
724 0 : m_aRemoveButton.IsEnabled() )
725 0 : ClickBtnHdl( &m_aRemoveButton );
726 0 : return 0;
727 : }
728 :
729 0 : IMPL_LINK( RTSFontSubstPage, SelectHdl, ListBox*, pBox )
730 : {
731 0 : if( pBox == &m_aSubstitutionsBox )
732 : {
733 0 : m_aRemoveButton.Enable( m_aSubstitutionsBox.GetSelectEntryCount() && m_pParent->m_aJobData.m_bPerformFontSubstitution );
734 : }
735 0 : return 0;
736 : }
737 :
738 0 : IMPL_LINK( RTSFontSubstPage, ClickBtnHdl, Button*, pButton )
739 : {
740 0 : if( pButton == &m_aAddButton )
741 : {
742 0 : m_pParent->m_aJobData.m_aFontSubstitutes[ m_aFromFontBox.GetText() ] = m_aToFontBox.GetSelectEntry();
743 0 : update();
744 : }
745 0 : else if( pButton == &m_aRemoveButton )
746 : {
747 0 : for( int i = 0; i < m_aSubstitutionsBox.GetSelectEntryCount(); i++ )
748 : {
749 0 : String aEntry( m_aSubstitutionsBox.GetSelectEntry( i ) );
750 0 : sal_uInt16 nPos = aEntry.SearchAscii( " -> " );
751 0 : aEntry.Erase( nPos );
752 0 : m_pParent->m_aJobData.m_aFontSubstitutes.erase( aEntry );
753 0 : }
754 0 : update();
755 : }
756 0 : else if( pButton == &m_aEnableBox )
757 : {
758 0 : m_pParent->m_aJobData.m_bPerformFontSubstitution = m_aEnableBox.IsChecked() ? true : false;
759 0 : m_aSubstitutionsBox.Enable( m_pParent->m_aJobData.m_bPerformFontSubstitution );
760 0 : m_aSubstitutionsText.Enable( m_pParent->m_aJobData.m_bPerformFontSubstitution );
761 0 : m_aAddButton.Enable( m_pParent->m_aJobData.m_bPerformFontSubstitution );
762 0 : m_aRemoveButton.Enable( m_aSubstitutionsBox.GetSelectEntryCount() && m_pParent->m_aJobData.m_bPerformFontSubstitution );
763 0 : m_aToFontBox.Enable( m_pParent->m_aJobData.m_bPerformFontSubstitution );
764 0 : m_aToFontText.Enable( m_pParent->m_aJobData.m_bPerformFontSubstitution );
765 0 : m_aFromFontBox.Enable( m_pParent->m_aJobData.m_bPerformFontSubstitution );
766 0 : m_aFromFontText.Enable( m_pParent->m_aJobData.m_bPerformFontSubstitution );
767 : }
768 0 : return 0;
769 : }
770 :
771 :
772 : class RTSPWDialog : public ModalDialog
773 : {
774 : FixedText m_aText;
775 : FixedText m_aUserText;
776 : Edit m_aUserEdit;
777 : FixedText m_aPassText;
778 : Edit m_aPassEdit;
779 :
780 : OKButton m_aOKButton;
781 : CancelButton m_aCancelButton;
782 : public:
783 : RTSPWDialog( const OString& rServer, const OString& rUserName, Window* pParent );
784 : ~RTSPWDialog();
785 :
786 : OString getUserName() const;
787 : OString getPassword() const;
788 : };
789 :
790 0 : RTSPWDialog::RTSPWDialog( const OString& rServer, const OString& rUserName, Window* pParent )
791 : :
792 : ModalDialog( pParent, PaResId( RID_RTS_PWDIALOG ) ),
793 : m_aText( this, PaResId( RID_RTS_PWDIALOG_TXT ) ),
794 : m_aUserText( this, PaResId( RID_RTS_PWDIALOG_USER_TXT ) ),
795 : m_aUserEdit( this, PaResId( RID_RTS_PWDIALOG_USER_EDT ) ),
796 : m_aPassText( this, PaResId( RID_RTS_PWDIALOG_PASS_TXT ) ),
797 : m_aPassEdit( this, PaResId( RID_RTS_PWDIALOG_PASS_EDT ) ),
798 : m_aOKButton( this, PaResId( RID_RTS_PWDIALOG_OK_BTN ) ),
799 0 : m_aCancelButton( this, PaResId( RID_RTS_PWDIALOG_CANCEL_BTN ) )
800 : {
801 0 : FreeResource();
802 0 : String aText( m_aText.GetText() );
803 0 : aText.SearchAndReplace( String( RTL_CONSTASCII_USTRINGPARAM( "%s" ) ), OStringToOUString( rServer, osl_getThreadTextEncoding() ) );
804 0 : m_aText.SetText( aText );
805 0 : m_aUserEdit.SetText( OStringToOUString( rUserName, osl_getThreadTextEncoding() ) );
806 0 : }
807 :
808 0 : RTSPWDialog::~RTSPWDialog()
809 : {
810 0 : }
811 :
812 0 : OString RTSPWDialog::getUserName() const
813 : {
814 0 : return rtl::OUStringToOString( m_aUserEdit.GetText(), osl_getThreadTextEncoding() );
815 : }
816 :
817 0 : OString RTSPWDialog::getPassword() const
818 : {
819 0 : return rtl::OUStringToOString( m_aPassEdit.GetText(), osl_getThreadTextEncoding() );
820 : }
821 :
822 : extern "C" {
823 :
824 0 : int SPA_DLLPUBLIC Sal_SetupPrinterDriver( ::psp::PrinterInfo& rJobData )
825 : {
826 0 : int nRet = 0;
827 0 : RTSDialog aDialog( rJobData, rJobData.m_aPrinterName, false );
828 :
829 0 : if( aDialog.Execute() )
830 : {
831 0 : rJobData = aDialog.getSetup();
832 0 : nRet = 1;
833 : }
834 :
835 0 : return nRet;
836 : }
837 :
838 0 : int SPA_DLLPUBLIC Sal_queryFaxNumber( String& rNumber )
839 : {
840 0 : String aTmpString( PaResId( RID_TXT_QUERYFAXNUMBER ) );
841 0 : QueryString aQuery( NULL, aTmpString, rNumber );
842 0 : return aQuery.Execute();
843 : }
844 :
845 0 : bool SPA_DLLPUBLIC Sal_authenticateQuery( const OString& rServer, OString& rUserName, OString& rPassword )
846 : {
847 0 : bool bRet = false;
848 :
849 0 : RTSPWDialog aDialog( rServer, rUserName, NULL );
850 0 : if( aDialog.Execute() )
851 : {
852 0 : rUserName = aDialog.getUserName();
853 0 : rPassword = aDialog.getPassword();
854 0 : bRet = true;
855 : }
856 0 : return bRet;
857 : }
858 :
859 : } // extern "C"
860 :
861 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|