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