xref: /aoo41x/main/padmin/source/adddlg.cxx (revision 466d5a0b)
1*466d5a0bSAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3*466d5a0bSAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4*466d5a0bSAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5*466d5a0bSAndrew Rist  * distributed with this work for additional information
6*466d5a0bSAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7*466d5a0bSAndrew Rist  * to you under the Apache License, Version 2.0 (the
8*466d5a0bSAndrew Rist  * "License"); you may not use this file except in compliance
9*466d5a0bSAndrew Rist  * with the License.  You may obtain a copy of the License at
10*466d5a0bSAndrew Rist  *
11*466d5a0bSAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12*466d5a0bSAndrew Rist  *
13*466d5a0bSAndrew Rist  * Unless required by applicable law or agreed to in writing,
14*466d5a0bSAndrew Rist  * software distributed under the License is distributed on an
15*466d5a0bSAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*466d5a0bSAndrew Rist  * KIND, either express or implied.  See the License for the
17*466d5a0bSAndrew Rist  * specific language governing permissions and limitations
18*466d5a0bSAndrew Rist  * under the License.
19*466d5a0bSAndrew Rist  *
20*466d5a0bSAndrew Rist  *************************************************************/
21*466d5a0bSAndrew Rist 
22*466d5a0bSAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir #include <unistd.h>
25cdf0e10cSrcweir 
26cdf0e10cSrcweir #include "adddlg.hxx"
27cdf0e10cSrcweir #include "newppdlg.hxx"
28cdf0e10cSrcweir #include "cmddlg.hxx"
29cdf0e10cSrcweir #include "padialog.hrc"
30cdf0e10cSrcweir 
31cdf0e10cSrcweir #include "vcl/msgbox.hxx"
32cdf0e10cSrcweir #include "vcl/strhelper.hxx"
33cdf0e10cSrcweir 
34cdf0e10cSrcweir #include "osl/thread.h"
35cdf0e10cSrcweir 
36cdf0e10cSrcweir #include <hash_set>
37cdf0e10cSrcweir 
38cdf0e10cSrcweir 
39cdf0e10cSrcweir using namespace rtl;
40cdf0e10cSrcweir using namespace psp;
41cdf0e10cSrcweir using namespace padmin;
42cdf0e10cSrcweir using namespace std;
43cdf0e10cSrcweir 
APTabPage(AddPrinterDialog * pParent,const ResId & rResId)44cdf0e10cSrcweir APTabPage::APTabPage( AddPrinterDialog* pParent, const ResId& rResId )
45cdf0e10cSrcweir 			: TabPage( pParent, rResId ),
46cdf0e10cSrcweir               m_aTitle( PaResId( RID_ADDP_STR_TITLE ) ),
47cdf0e10cSrcweir               m_pParent( pParent )
48cdf0e10cSrcweir {
49cdf0e10cSrcweir }
50cdf0e10cSrcweir 
APChooseDevicePage(AddPrinterDialog * pParent)51cdf0e10cSrcweir APChooseDevicePage::APChooseDevicePage( AddPrinterDialog* pParent ) :
52cdf0e10cSrcweir 		APTabPage( pParent, PaResId( RID_ADDP_PAGE_CHOOSEDEV ) ),
53cdf0e10cSrcweir 		m_aPrinterBtn( this, PaResId( RID_ADDP_CHDEV_BTN_PRINTER ) ),
54cdf0e10cSrcweir 		m_aFaxBtn( this, PaResId( RID_ADDP_CHDEV_BTN_FAX ) ),
55cdf0e10cSrcweir 		m_aPDFBtn( this, PaResId( RID_ADDP_CHDEV_BTN_PDF ) ),
56cdf0e10cSrcweir 		m_aOldBtn( this, PaResId( RID_ADDP_CHDEV_BTN_OLD ) ),
57cdf0e10cSrcweir 		m_aOverTxt( this, PaResId( RID_ADDP_CHDEV_TXT_OVER ) )
58cdf0e10cSrcweir {
59cdf0e10cSrcweir 	FreeResource();
60cdf0e10cSrcweir 	m_aPrinterBtn.Check( sal_True );
61cdf0e10cSrcweir 	m_aFaxBtn.Check( sal_False );
62cdf0e10cSrcweir 	m_aPDFBtn.Check( sal_False );
63cdf0e10cSrcweir 	m_aOldBtn.Check( sal_False );
64cdf0e10cSrcweir     if( ! AddPrinterDialog::getOldPrinterLocation().Len() )
65cdf0e10cSrcweir         m_aOldBtn.Enable( sal_False );
66cdf0e10cSrcweir     if( ! PrinterInfoManager::get().addOrRemovePossible() )
67cdf0e10cSrcweir     {
68cdf0e10cSrcweir         m_aPrinterBtn.Check( sal_False );
69cdf0e10cSrcweir         m_aFaxBtn.Check( sal_True );
70cdf0e10cSrcweir         m_aPrinterBtn.Enable( sal_False );
71cdf0e10cSrcweir         m_aOldBtn.Enable( sal_False );
72cdf0e10cSrcweir     }
73cdf0e10cSrcweir }
74cdf0e10cSrcweir 
~APChooseDevicePage()75cdf0e10cSrcweir APChooseDevicePage::~APChooseDevicePage()
76cdf0e10cSrcweir {
77cdf0e10cSrcweir }
78cdf0e10cSrcweir 
check()79cdf0e10cSrcweir bool APChooseDevicePage::check()
80cdf0e10cSrcweir {
81cdf0e10cSrcweir 	return true;
82cdf0e10cSrcweir }
83cdf0e10cSrcweir 
fill(PrinterInfo & rInfo)84cdf0e10cSrcweir void APChooseDevicePage::fill( PrinterInfo& rInfo )
85cdf0e10cSrcweir {
86cdf0e10cSrcweir 	if( m_aPDFBtn.IsChecked() )
87cdf0e10cSrcweir 	{
88cdf0e10cSrcweir 		rInfo.m_aFeatures = OUString::createFromAscii( "pdf=" );
89cdf0e10cSrcweir 	}
90cdf0e10cSrcweir 	else if( m_aFaxBtn.IsChecked() )
91cdf0e10cSrcweir 	{
92cdf0e10cSrcweir 		rInfo.m_aFeatures = OUString::createFromAscii( "fax" );
93cdf0e10cSrcweir 	}
94cdf0e10cSrcweir 	else
95cdf0e10cSrcweir 		rInfo.m_aFeatures = OUString();
96cdf0e10cSrcweir }
97cdf0e10cSrcweir 
98cdf0e10cSrcweir //--------------------------------------------------------------------
99cdf0e10cSrcweir 
APChooseDriverPage(AddPrinterDialog * pParent)100cdf0e10cSrcweir APChooseDriverPage::APChooseDriverPage( AddPrinterDialog* pParent )
101cdf0e10cSrcweir 		: APTabPage( pParent, PaResId( RID_ADDP_PAGE_CHOOSEDRIVER ) ),
102cdf0e10cSrcweir 		  m_aDriverTxt( this, PaResId( RID_ADDP_CHDRV_TXT_DRIVER ) ),
103cdf0e10cSrcweir 		  m_aDriverBox( this, PaResId( RID_ADDP_CHDRV_BOX_DRIVER ) ),
104cdf0e10cSrcweir 		  m_aAddBtn( this, PaResId( RID_ADDP_CHDRV_BTN_ADD ) ),
105cdf0e10cSrcweir 		  m_aRemBtn( this, PaResId( RID_ADDP_CHDRV_BTN_REMOVE ) ),
106cdf0e10cSrcweir 		  m_aRemStr( PaResId( RID_ADDP_CHDRV_STR_REMOVE ) )
107cdf0e10cSrcweir {
108cdf0e10cSrcweir 	FreeResource();
109cdf0e10cSrcweir 	m_aAddBtn.SetClickHdl( LINK( this, APChooseDriverPage, ClickBtnHdl ) );
110cdf0e10cSrcweir 	m_aRemBtn.SetClickHdl( LINK( this, APChooseDriverPage, ClickBtnHdl ) );
111cdf0e10cSrcweir 	m_aDriverBox.setDelPressedLink( LINK( this, APChooseDriverPage, DelPressedHdl ) );
112cdf0e10cSrcweir 	updateDrivers();
113cdf0e10cSrcweir }
114cdf0e10cSrcweir 
~APChooseDriverPage()115cdf0e10cSrcweir APChooseDriverPage::~APChooseDriverPage()
116cdf0e10cSrcweir {
117cdf0e10cSrcweir 	for( int i = 0; i < m_aDriverBox.GetEntryCount(); i++ )
118cdf0e10cSrcweir 		delete (String*)m_aDriverBox.GetEntryData( i );
119cdf0e10cSrcweir }
120cdf0e10cSrcweir 
check()121cdf0e10cSrcweir bool APChooseDriverPage::check()
122cdf0e10cSrcweir {
123cdf0e10cSrcweir 	return m_aDriverBox.GetSelectEntryCount() > 0;
124cdf0e10cSrcweir }
125cdf0e10cSrcweir 
fill(PrinterInfo & rInfo)126cdf0e10cSrcweir void APChooseDriverPage::fill( PrinterInfo& rInfo )
127cdf0e10cSrcweir {
128cdf0e10cSrcweir 	sal_uInt16 nPos = m_aDriverBox.GetSelectEntryPos();
129cdf0e10cSrcweir 	String* pDriver = (String*)m_aDriverBox.GetEntryData( nPos );
130cdf0e10cSrcweir 	rInfo.m_aDriverName = *pDriver;
131cdf0e10cSrcweir #if OSL_DEBUG_LEVEL > 1
132cdf0e10cSrcweir     fprintf( stderr, "m_aLastPrinterName = \"%s\", rInfo.m_aPrinterName = \"%s\"\n",
133cdf0e10cSrcweir              OUStringToOString( m_aLastPrinterName, RTL_TEXTENCODING_ISO_8859_1 ).getStr(),
134cdf0e10cSrcweir              OUStringToOString( rInfo.m_aPrinterName, RTL_TEXTENCODING_ISO_8859_1 ).getStr() );
135cdf0e10cSrcweir #endif
136cdf0e10cSrcweir 	if( rInfo.m_aPrinterName.equals( m_aLastPrinterName ) )
137cdf0e10cSrcweir 	{
138cdf0e10cSrcweir 		String aPrinter( AddPrinterDialog::uniquePrinterName( m_aDriverBox.GetEntry( nPos ) ) );
139cdf0e10cSrcweir 		rInfo.m_aPrinterName = m_aLastPrinterName = aPrinter;
140cdf0e10cSrcweir 	}
141cdf0e10cSrcweir }
142cdf0e10cSrcweir 
updateDrivers(bool bRefresh,const rtl::OUString & rSelectDriver)143cdf0e10cSrcweir void APChooseDriverPage::updateDrivers( bool bRefresh, const rtl::OUString& rSelectDriver )
144cdf0e10cSrcweir {
145cdf0e10cSrcweir 	for( int k = 0; k < m_aDriverBox.GetEntryCount(); k++ )
146cdf0e10cSrcweir 		delete (String*)m_aDriverBox.GetEntryData( k );
147cdf0e10cSrcweir 	m_aDriverBox.Clear();
148cdf0e10cSrcweir 
149cdf0e10cSrcweir     std::list< rtl::OUString > aDrivers;
150cdf0e10cSrcweir     psp::PPDParser::getKnownPPDDrivers( aDrivers, bRefresh );
151cdf0e10cSrcweir 
152cdf0e10cSrcweir     rtl::OUString aSelectDriver( psp::PPDParser::getPPDPrinterName( rSelectDriver ) );
153cdf0e10cSrcweir 
154cdf0e10cSrcweir     rtl::OUString aSelectedEntry;
155cdf0e10cSrcweir     for( std::list< rtl::OUString >::const_iterator it = aDrivers.begin(); it != aDrivers.end(); ++it )
156cdf0e10cSrcweir     {
157cdf0e10cSrcweir         rtl::OUString aDriver( psp::PPDParser::getPPDPrinterName( *it ) );
158cdf0e10cSrcweir         if( aDriver.getLength() )
159cdf0e10cSrcweir         {
160cdf0e10cSrcweir             int nPos = m_aDriverBox.InsertEntry( aDriver );
161cdf0e10cSrcweir             m_aDriverBox.SetEntryData( nPos, new String( *it ) );
162cdf0e10cSrcweir             if( aDriver == aSelectDriver )
163cdf0e10cSrcweir                 aSelectedEntry = aDriver;
164cdf0e10cSrcweir         }
165cdf0e10cSrcweir     }
166cdf0e10cSrcweir 
167cdf0e10cSrcweir     m_aDriverBox.SelectEntry( aSelectedEntry );
168cdf0e10cSrcweir 	m_aRemBtn.Enable( m_aDriverBox.GetEntryCount() > 0 );
169cdf0e10cSrcweir }
170cdf0e10cSrcweir 
IMPL_LINK(APChooseDriverPage,DelPressedHdl,ListBox *,pListBox)171cdf0e10cSrcweir IMPL_LINK( APChooseDriverPage, DelPressedHdl, ListBox*, pListBox )
172cdf0e10cSrcweir {
173cdf0e10cSrcweir 	if( pListBox == &m_aDriverBox )
174cdf0e10cSrcweir 		ClickBtnHdl( &m_aRemBtn );
175cdf0e10cSrcweir 
176cdf0e10cSrcweir 	return 0;
177cdf0e10cSrcweir }
178cdf0e10cSrcweir 
IMPL_LINK(APChooseDriverPage,ClickBtnHdl,PushButton *,pButton)179cdf0e10cSrcweir IMPL_LINK( APChooseDriverPage, ClickBtnHdl, PushButton*, pButton )
180cdf0e10cSrcweir {
181cdf0e10cSrcweir 	if( pButton == &m_aAddBtn )
182cdf0e10cSrcweir 	{
183cdf0e10cSrcweir 		PPDImportDialog aDlg( this );
184cdf0e10cSrcweir 		if( aDlg.Execute() )
185cdf0e10cSrcweir         {
186cdf0e10cSrcweir             const std::list< rtl::OUString >& rImported( aDlg.getImportedFiles() );
187cdf0e10cSrcweir             if( rImported.empty() )
188cdf0e10cSrcweir                 updateDrivers( true );
189cdf0e10cSrcweir             else
190cdf0e10cSrcweir                 updateDrivers( true, rImported.front() );
191cdf0e10cSrcweir         }
192cdf0e10cSrcweir 	}
193cdf0e10cSrcweir 	else if( pButton == &m_aRemBtn )
194cdf0e10cSrcweir 	{
195cdf0e10cSrcweir 		rtl_TextEncoding aEncoding = osl_getThreadTextEncoding();
196cdf0e10cSrcweir 		PrinterInfoManager& rPIManager( PrinterInfoManager::get() );
197cdf0e10cSrcweir 
198cdf0e10cSrcweir 		for( int i = 0; i < m_aDriverBox.GetSelectEntryCount(); i++ )
199cdf0e10cSrcweir 		{
200cdf0e10cSrcweir 			int nSelect = m_aDriverBox.GetSelectEntryPos(i);
201cdf0e10cSrcweir 			String aDriver( *(String*)m_aDriverBox.GetEntryData( nSelect ) );
202cdf0e10cSrcweir 			if( aDriver.Len() )
203cdf0e10cSrcweir 			{
204cdf0e10cSrcweir                 // never delete the default driver
205cdf0e10cSrcweir                 if( aDriver.EqualsIgnoreCaseAscii( "SGENPRT" ) )
206cdf0e10cSrcweir                 {
207cdf0e10cSrcweir 					String aText( PaResId( RID_ERR_REMOVESGENPRT ) );
208cdf0e10cSrcweir 					aText.SearchAndReplace( String::CreateFromAscii( "%s" ), m_aDriverBox.GetSelectEntry( i ) );
209cdf0e10cSrcweir 					ErrorBox aErrorBox( this, WB_OK | WB_DEF_OK, aText );
210cdf0e10cSrcweir 					aErrorBox.SetText( m_aRemStr );
211cdf0e10cSrcweir 					aErrorBox.Execute();
212cdf0e10cSrcweir                     continue;
213cdf0e10cSrcweir                 }
214cdf0e10cSrcweir 
215cdf0e10cSrcweir 				PrinterInfo aDefInfo( rPIManager.getPrinterInfo( rPIManager.getDefaultPrinter() ) );
216cdf0e10cSrcweir                 // for comparisons convert to a OUString
217cdf0e10cSrcweir 				OUString aPPD( aDriver );
218cdf0e10cSrcweir 				if( aDefInfo.m_aDriverName == aPPD )
219cdf0e10cSrcweir 				{
220cdf0e10cSrcweir 					String aText( PaResId( RID_ERR_REMOVEDEFAULTDRIVER ) );
221cdf0e10cSrcweir 					aText.SearchAndReplace( String::CreateFromAscii( "%s" ), m_aDriverBox.GetSelectEntry( i ) );
222cdf0e10cSrcweir 					ErrorBox aErrorBox( this, WB_OK | WB_DEF_OK, aText );
223cdf0e10cSrcweir 					aErrorBox.SetText( m_aRemStr );
224cdf0e10cSrcweir 					aErrorBox.Execute();
225cdf0e10cSrcweir 					continue;
226cdf0e10cSrcweir 				}
227cdf0e10cSrcweir 
228cdf0e10cSrcweir 				::std::list< OUString > aPrinters;
229cdf0e10cSrcweir 				::std::list< OUString >::iterator it;
230cdf0e10cSrcweir 				rPIManager.listPrinters( aPrinters );
231cdf0e10cSrcweir 				for( it = aPrinters.begin(); it != aPrinters.end(); ++it )
232cdf0e10cSrcweir 				{
233cdf0e10cSrcweir 					PrinterInfo aInfo( rPIManager.getPrinterInfo( *it ) );
234cdf0e10cSrcweir 					if( aInfo.m_aDriverName == aPPD )
235cdf0e10cSrcweir 						break;
236cdf0e10cSrcweir 				}
237cdf0e10cSrcweir 
238cdf0e10cSrcweir 				if( it != aPrinters.end() )
239cdf0e10cSrcweir 				{
240cdf0e10cSrcweir 					String aText( PaResId( RID_QUERY_DRIVERUSED ) );
241cdf0e10cSrcweir 					aText.SearchAndReplace( String::CreateFromAscii( "%s" ), m_aDriverBox.GetSelectEntry( i ) );
242cdf0e10cSrcweir 					QueryBox aBox( this, WB_YES_NO | WB_DEF_NO, aText );
243cdf0e10cSrcweir 					aBox.SetText( m_aRemStr );
244cdf0e10cSrcweir 					if( aBox.Execute() == RET_NO )
245cdf0e10cSrcweir 						continue;
246cdf0e10cSrcweir 				}
247cdf0e10cSrcweir 				else
248cdf0e10cSrcweir 				{
249cdf0e10cSrcweir 					String aText( PaResId( RID_QUERY_REMOVEDRIVER ) );
250cdf0e10cSrcweir 					aText.SearchAndReplace( String::CreateFromAscii( "%s" ), m_aDriverBox.GetSelectEntry( i ) );
251cdf0e10cSrcweir 					QueryBox aBox( this, WB_YES_NO | WB_DEF_NO, aText );
252cdf0e10cSrcweir 					aBox.SetText( m_aRemStr );
253cdf0e10cSrcweir 					if( aBox.Execute() == RET_NO )
254cdf0e10cSrcweir 						continue;
255cdf0e10cSrcweir 				}
256cdf0e10cSrcweir 
257cdf0e10cSrcweir 				// remove the printers using this driver
258cdf0e10cSrcweir 				for( it = aPrinters.begin(); it != aPrinters.end(); ++it )
259cdf0e10cSrcweir 				{
260cdf0e10cSrcweir 					PrinterInfo aInfo( rPIManager.getPrinterInfo( *it ) );
261cdf0e10cSrcweir 					if( aInfo.m_aDriverName == aPPD )
262cdf0e10cSrcweir 						rPIManager.removePrinter( *it );
263cdf0e10cSrcweir 				}
264cdf0e10cSrcweir 
265cdf0e10cSrcweir 				std::list< rtl::OUString > aDirs;
266cdf0e10cSrcweir                 // get only psprint's directories, not eventual system dirs
267cdf0e10cSrcweir 				psp::getPrinterPathList( aDirs, NULL );
268cdf0e10cSrcweir 				std::list< rtl::OUString >::iterator dir;
269cdf0e10cSrcweir 				for( dir = aDirs.begin(); dir != aDirs.end(); ++dir )
270cdf0e10cSrcweir 				{
271cdf0e10cSrcweir 					::std::list< String > aFiles;
272cdf0e10cSrcweir 					::std::list< String >::iterator file;
273cdf0e10cSrcweir                     OUStringBuffer aDir( *dir );
274cdf0e10cSrcweir                     aDir.append( sal_Unicode( '/' ) );
275cdf0e10cSrcweir                     aDir.appendAscii( PRINTER_PPDDIR );
276cdf0e10cSrcweir                     rtl::OUString aPPDDir( aDir.makeStringAndClear() );
277cdf0e10cSrcweir 					FindFiles( aPPDDir, aFiles, String( RTL_CONSTASCII_USTRINGPARAM( "PS;PPD;PS.GZ;PPD.GZ" ) ), true );
278cdf0e10cSrcweir 					for( file = aFiles.begin(); file != aFiles.end(); ++file )
279cdf0e10cSrcweir 					{
280cdf0e10cSrcweir 						String aFile( aPPDDir );
281cdf0e10cSrcweir 						if( aFile.GetChar( aFile.Len() ) != '/' )
282cdf0e10cSrcweir 							aFile.AppendAscii( "/" );
283cdf0e10cSrcweir 						aFile.Append( *file );
284cdf0e10cSrcweir 
285cdf0e10cSrcweir 						int nPos = file->SearchBackward( '.' );
286cdf0e10cSrcweir 						if( file->Copy( 0, nPos ) == String( aPPD ) )
287cdf0e10cSrcweir 						{
288cdf0e10cSrcweir 							ByteString aSysPath( aFile, aEncoding );
289cdf0e10cSrcweir 							if( unlink( aSysPath.GetBuffer() ) )
290cdf0e10cSrcweir                             {
291cdf0e10cSrcweir                                 String aText( PaResId( RID_ERR_REMOVEDRIVERFAILED ) );
292cdf0e10cSrcweir                                 aText.SearchAndReplace( String::CreateFromAscii( "%s1" ), m_aDriverBox.GetSelectEntry( i ) );
293cdf0e10cSrcweir                                 aText.SearchAndReplace( String::CreateFromAscii( "%s2" ), aFile );
294cdf0e10cSrcweir                                 ErrorBox aErrorBox( this, WB_OK | WB_DEF_OK, aText );
295cdf0e10cSrcweir                                 aErrorBox.SetText( m_aRemStr );
296cdf0e10cSrcweir                                 aErrorBox.Execute();
297cdf0e10cSrcweir                             }
298cdf0e10cSrcweir 						}
299cdf0e10cSrcweir 					}
300cdf0e10cSrcweir 				}
301cdf0e10cSrcweir 			}
302cdf0e10cSrcweir 		}
303cdf0e10cSrcweir 		updateDrivers();
304cdf0e10cSrcweir 	}
305cdf0e10cSrcweir 	return 0;
306cdf0e10cSrcweir }
307cdf0e10cSrcweir 
308cdf0e10cSrcweir //--------------------------------------------------------------------
309cdf0e10cSrcweir 
APNamePage(AddPrinterDialog * pParent,const String & rInitName,DeviceKind::type eKind)310cdf0e10cSrcweir APNamePage::APNamePage( AddPrinterDialog* pParent, const String& rInitName, DeviceKind::type eKind )
311cdf0e10cSrcweir 		: APTabPage( pParent, PaResId( RID_ADDP_PAGE_NAME ) ),
312cdf0e10cSrcweir 		  m_aNameTxt(
313cdf0e10cSrcweir 					 this,
314cdf0e10cSrcweir 					 PaResId(
315cdf0e10cSrcweir 							 eKind == DeviceKind::Printer ? RID_ADDP_NAME_TXT_NAME :
316cdf0e10cSrcweir 							 eKind == DeviceKind::Fax ? RID_ADDP_NAME_TXT_FAXNAME : RID_ADDP_NAME_TXT_PDFNAME
317cdf0e10cSrcweir 							 )
318cdf0e10cSrcweir 					 ),
319cdf0e10cSrcweir 		  m_aNameEdt(
320cdf0e10cSrcweir 					 this,
321cdf0e10cSrcweir 					 PaResId(
322cdf0e10cSrcweir 							 eKind == DeviceKind::Printer ? RID_ADDP_NAME_EDT_NAME :
323cdf0e10cSrcweir 							 eKind == DeviceKind::Fax ? RID_ADDP_NAME_EDT_FAXNAME : RID_ADDP_NAME_EDT_PDFNAME
324cdf0e10cSrcweir 							 )
325cdf0e10cSrcweir 					 ),
326cdf0e10cSrcweir 		  m_aDefaultBox( this, PaResId( RID_ADDP_NAME_BOX_DEFAULT ) ),
327cdf0e10cSrcweir 		  m_aFaxSwallowBox( this, PaResId( RID_ADDP_NAME_BOX_FAXSWALLOW ) )
328cdf0e10cSrcweir {
329cdf0e10cSrcweir 	FreeResource();
330cdf0e10cSrcweir 	if( eKind != DeviceKind::Printer )
331cdf0e10cSrcweir 		m_aDefaultBox.Show( sal_False );
332cdf0e10cSrcweir 	else
333cdf0e10cSrcweir 		m_aNameEdt.SetText( rInitName );
334cdf0e10cSrcweir 	if( eKind != DeviceKind::Fax )
335cdf0e10cSrcweir 		m_aFaxSwallowBox.Show( sal_False );
336cdf0e10cSrcweir 
337cdf0e10cSrcweir 	m_aNameEdt.SetText( AddPrinterDialog::uniquePrinterName( m_aNameEdt.GetText() ) );
338cdf0e10cSrcweir 	m_aDefaultBox.Check( sal_False );
339cdf0e10cSrcweir 	m_aFaxSwallowBox.Check( sal_False );
340cdf0e10cSrcweir }
341cdf0e10cSrcweir 
~APNamePage()342cdf0e10cSrcweir APNamePage::~APNamePage()
343cdf0e10cSrcweir {
344cdf0e10cSrcweir }
345cdf0e10cSrcweir 
check()346cdf0e10cSrcweir bool APNamePage::check()
347cdf0e10cSrcweir {
348cdf0e10cSrcweir 	return m_aNameEdt.GetText().Len();
349cdf0e10cSrcweir }
350cdf0e10cSrcweir 
fill(PrinterInfo & rInfo)351cdf0e10cSrcweir void APNamePage::fill( PrinterInfo& rInfo )
352cdf0e10cSrcweir {
353cdf0e10cSrcweir 	rInfo.m_aPrinterName = m_aNameEdt.GetText();
354cdf0e10cSrcweir }
355cdf0e10cSrcweir 
356cdf0e10cSrcweir //--------------------------------------------------------------------
357cdf0e10cSrcweir 
APCommandPage(AddPrinterDialog * pParent,DeviceKind::type eKind)358cdf0e10cSrcweir APCommandPage::APCommandPage( AddPrinterDialog* pParent, DeviceKind::type eKind )
359cdf0e10cSrcweir 		: APTabPage( pParent, PaResId( RID_ADDP_PAGE_COMMAND ) ),
360cdf0e10cSrcweir 		  m_aCommandTxt( this, PaResId( RID_ADDP_CMD_TXT_COMMAND ) ),
361cdf0e10cSrcweir 		  m_aCommandBox( this, PaResId( eKind == DeviceKind::Pdf ? RID_ADDP_CMD_BOX_PDFCOMMAND : RID_ADDP_CMD_BOX_COMMAND ) ),
362cdf0e10cSrcweir 		  m_aHelpBtn( this, PaResId( RID_ADDP_CMD_BTN_HELP ) ),
363cdf0e10cSrcweir 		  m_aHelpTxt( PaResId( eKind == DeviceKind::Fax ? RID_ADDP_CMD_STR_FAXHELP : RID_ADDP_CMD_STR_PDFHELP ) ),
364cdf0e10cSrcweir 		  m_aPdfDirTxt( this, PaResId( RID_ADDP_CMD_TXT_PDFDIR ) ),
365cdf0e10cSrcweir 		  m_aPdfDirEdt( this, PaResId( RID_ADDP_CMD_EDT_PDFDIR ) ),
366cdf0e10cSrcweir 		  m_aPdfDirBtn( this, PaResId( RID_ADDP_CMD_BTN_PDFDIR ) ),
367cdf0e10cSrcweir 		  m_eKind( eKind )
368cdf0e10cSrcweir {
369cdf0e10cSrcweir 	FreeResource();
370cdf0e10cSrcweir 	::std::list< String > aCommands;
371cdf0e10cSrcweir 	if( m_eKind == DeviceKind::Printer )
372cdf0e10cSrcweir     {
373cdf0e10cSrcweir 		m_aHelpBtn.Show( sal_False );
374cdf0e10cSrcweir         Size aSize = m_aCommandTxt.GetSizePixel();
375cdf0e10cSrcweir         aSize.Width() = m_aCommandBox.GetSizePixel().Width();
376cdf0e10cSrcweir         m_aCommandTxt.SetSizePixel( aSize );
377cdf0e10cSrcweir     }
378cdf0e10cSrcweir 	if( m_eKind != DeviceKind::Pdf )
379cdf0e10cSrcweir 	{
380cdf0e10cSrcweir 		m_aPdfDirBtn.Show( sal_False );
381cdf0e10cSrcweir 		m_aPdfDirEdt.Show( sal_False );
382cdf0e10cSrcweir 		m_aPdfDirTxt.Show( sal_False );
383cdf0e10cSrcweir 	}
384cdf0e10cSrcweir 	switch( m_eKind )
385cdf0e10cSrcweir 	{
386cdf0e10cSrcweir 		case DeviceKind::Printer:	CommandStore::getPrintCommands( aCommands );break;
387cdf0e10cSrcweir 		case DeviceKind::Fax:		CommandStore::getFaxCommands( aCommands );break;
388cdf0e10cSrcweir 		case DeviceKind::Pdf:		CommandStore::getPdfCommands( aCommands );break;
389cdf0e10cSrcweir 	}
390cdf0e10cSrcweir     // adjust height of command text and help button
391cdf0e10cSrcweir     Rectangle aPosSize( m_aCommandTxt.GetPosPixel(), m_aCommandTxt.GetSizePixel() );
392cdf0e10cSrcweir     Rectangle aTextSize = m_aCommandTxt.GetTextRect( Rectangle( Point(), aPosSize.GetSize() ), m_aCommandTxt.GetText() );
393cdf0e10cSrcweir     if( aTextSize.GetWidth() <= 2*(aPosSize.GetWidth()+1) )
394cdf0e10cSrcweir     {
395cdf0e10cSrcweir         Size aNewSize( aPosSize.GetWidth(), aPosSize.GetHeight()*2/3 );
396cdf0e10cSrcweir         if( aNewSize.Height() < m_aHelpBtn.GetSizePixel().Height()+2 )
397cdf0e10cSrcweir             aNewSize.Height() = m_aHelpBtn.GetSizePixel().Height()+2;
398cdf0e10cSrcweir         Point aNewPos( aPosSize.Left(), aPosSize.Top() + aPosSize.GetHeight() - aNewSize.Height() );
399cdf0e10cSrcweir         m_aCommandTxt.SetPosSizePixel( aNewPos, aNewSize );
400cdf0e10cSrcweir         aNewPos.X() = m_aHelpBtn.GetPosPixel().X();
401cdf0e10cSrcweir         m_aHelpBtn.SetPosPixel( aNewPos );
402cdf0e10cSrcweir     }
403cdf0e10cSrcweir 
404cdf0e10cSrcweir     // fill in commands
405cdf0e10cSrcweir 	::std::list< String >::iterator it;
406cdf0e10cSrcweir 	for( it = aCommands.begin(); it != aCommands.end(); ++it )
407cdf0e10cSrcweir 		m_aCommandBox.InsertEntry( *it );
408cdf0e10cSrcweir 
409cdf0e10cSrcweir 	m_aHelpBtn.SetClickHdl( LINK( this, APCommandPage, ClickBtnHdl ) );
410cdf0e10cSrcweir 	m_aPdfDirBtn.SetClickHdl( LINK( this, APCommandPage, ClickBtnHdl ) );
411cdf0e10cSrcweir     if( m_eKind != DeviceKind::Printer )
412cdf0e10cSrcweir     {
413cdf0e10cSrcweir         m_aCommandBox.SetModifyHdl( LINK( this, APCommandPage, ModifyHdl ) );
414cdf0e10cSrcweir         m_pParent->enableNext( false );
415cdf0e10cSrcweir     }
416cdf0e10cSrcweir }
417cdf0e10cSrcweir 
~APCommandPage()418cdf0e10cSrcweir APCommandPage::~APCommandPage()
419cdf0e10cSrcweir {
420cdf0e10cSrcweir 	::std::list< String > aCommands;
421cdf0e10cSrcweir 	String aLastCommand( m_aCommandBox.GetText() );
422cdf0e10cSrcweir 	for( int i = 0; i < m_aCommandBox.GetEntryCount(); i++ )
423cdf0e10cSrcweir 	{
424cdf0e10cSrcweir 		String aCommand( m_aCommandBox.GetEntry( i ) );
425cdf0e10cSrcweir 		if( aCommand != aLastCommand )
426cdf0e10cSrcweir 			aCommands.push_back( aCommand );
427cdf0e10cSrcweir 	}
428cdf0e10cSrcweir 	aCommands.push_back( aLastCommand );
429cdf0e10cSrcweir 	switch( m_eKind )
430cdf0e10cSrcweir 	{
431cdf0e10cSrcweir 		case DeviceKind::Printer:	CommandStore::setPrintCommands( aCommands );break;
432cdf0e10cSrcweir 		case DeviceKind::Fax:		CommandStore::setFaxCommands( aCommands );break;
433cdf0e10cSrcweir 		case DeviceKind::Pdf:		CommandStore::setPdfCommands( aCommands );break;
434cdf0e10cSrcweir 	}
435cdf0e10cSrcweir }
436cdf0e10cSrcweir 
IMPL_LINK(APCommandPage,ClickBtnHdl,PushButton *,pButton)437cdf0e10cSrcweir IMPL_LINK( APCommandPage, ClickBtnHdl, PushButton*, pButton )
438cdf0e10cSrcweir {
439cdf0e10cSrcweir 	if( pButton == &m_aHelpBtn )
440cdf0e10cSrcweir 	{
441cdf0e10cSrcweir 		InfoBox aBox( this, m_aHelpTxt );
442cdf0e10cSrcweir 		aBox.Execute();
443cdf0e10cSrcweir 	}
444cdf0e10cSrcweir 	else if( pButton == &m_aPdfDirBtn )
445cdf0e10cSrcweir 	{
446cdf0e10cSrcweir         String aPath( m_aPdfDirEdt.GetText() );
447cdf0e10cSrcweir         if( chooseDirectory( aPath ) )
448cdf0e10cSrcweir             m_aPdfDirEdt.SetText( aPath );
449cdf0e10cSrcweir 	}
450cdf0e10cSrcweir 	return 0;
451cdf0e10cSrcweir }
452cdf0e10cSrcweir 
IMPL_LINK(APCommandPage,ModifyHdl,ComboBox *,pBox)453cdf0e10cSrcweir IMPL_LINK( APCommandPage, ModifyHdl, ComboBox*, pBox )
454cdf0e10cSrcweir {
455cdf0e10cSrcweir     if( pBox == &m_aCommandBox )
456cdf0e10cSrcweir     {
457cdf0e10cSrcweir         m_pParent->enableNext( m_aCommandBox.GetText().Len() );
458cdf0e10cSrcweir     }
459cdf0e10cSrcweir     return 0;
460cdf0e10cSrcweir }
461cdf0e10cSrcweir 
check()462cdf0e10cSrcweir bool APCommandPage::check()
463cdf0e10cSrcweir {
464cdf0e10cSrcweir 	return true;
465cdf0e10cSrcweir }
466cdf0e10cSrcweir 
fill(PrinterInfo & rInfo)467cdf0e10cSrcweir void APCommandPage::fill( PrinterInfo& rInfo )
468cdf0e10cSrcweir {
469cdf0e10cSrcweir 	rInfo.m_aCommand = m_aCommandBox.GetText();
470cdf0e10cSrcweir }
471cdf0e10cSrcweir 
472cdf0e10cSrcweir //--------------------------------------------------------------------
473cdf0e10cSrcweir 
APOldPrinterPage(AddPrinterDialog * pParent)474cdf0e10cSrcweir APOldPrinterPage::APOldPrinterPage( AddPrinterDialog* pParent )
475cdf0e10cSrcweir 		: APTabPage( pParent, PaResId( RID_ADDP_PAGE_OLDPRINTERS ) ),
476cdf0e10cSrcweir 		  m_aOldPrinterTxt( this, PaResId( RID_ADDP_OLD_TXT_PRINTERS ) ),
477cdf0e10cSrcweir 		  m_aOldPrinterBox( this, PaResId( RID_ADDP_OLD_BOX_PRINTERS ) ),
478cdf0e10cSrcweir 		  m_aSelectAllBtn( this, PaResId( RID_ADDP_OLD_BTN_SELECTALL ) )
479cdf0e10cSrcweir {
480cdf0e10cSrcweir 	FreeResource();
481cdf0e10cSrcweir 
482cdf0e10cSrcweir 	m_aSelectAllBtn.SetClickHdl( LINK( this, APOldPrinterPage, ClickBtnHdl ) );
483cdf0e10cSrcweir     rtl_TextEncoding aEncoding = osl_getThreadTextEncoding();
484cdf0e10cSrcweir 
485cdf0e10cSrcweir     String aFileName( AddPrinterDialog::getOldPrinterLocation() );
486cdf0e10cSrcweir     Config aConfig( aFileName );
487cdf0e10cSrcweir 
488cdf0e10cSrcweir     // read defaults
489cdf0e10cSrcweir     aConfig.SetGroup( "Xprinter,PostScript" );
490cdf0e10cSrcweir     ByteString aDefPageSize( aConfig.ReadKey( "PageSize" ) );
491cdf0e10cSrcweir     ByteString aDefOrientation( aConfig.ReadKey( "Orientation" ) );
492cdf0e10cSrcweir     ByteString aDefMarginLeft( aConfig.ReadKey( "MarginLeft" ) );
493cdf0e10cSrcweir     ByteString aDefMarginRight( aConfig.ReadKey( "MarginRight" ) );
494cdf0e10cSrcweir     ByteString aDefMarginTop( aConfig.ReadKey( "MarginTop" ) );
495cdf0e10cSrcweir     ByteString aDefMarginBottom( aConfig.ReadKey( "MarginBottom" ) );
496cdf0e10cSrcweir     ByteString aDefScale( aConfig.ReadKey( "Scale" ) );
497cdf0e10cSrcweir     ByteString aDefCopies( aConfig.ReadKey( "Copies" ) );
498cdf0e10cSrcweir     ByteString aDefDPI( aConfig.ReadKey( "DPI" ) );
499cdf0e10cSrcweir 
500cdf0e10cSrcweir     aConfig.SetGroup( "devices" );
501cdf0e10cSrcweir     int nDevices = aConfig.GetKeyCount();
502cdf0e10cSrcweir     for( int nKey = 0; nKey < nDevices; nKey++ )
503cdf0e10cSrcweir     {
504cdf0e10cSrcweir         aConfig.SetGroup( "devices" );
505cdf0e10cSrcweir         ByteString aPrinter( aConfig.GetKeyName( nKey ) );
506cdf0e10cSrcweir         ByteString aValue( aConfig.ReadKey( aPrinter ) );
507cdf0e10cSrcweir         ByteString aPort( aValue.GetToken( 1, ',' ) );
508cdf0e10cSrcweir         ByteString aDriver( aValue.GetToken( 0, ' ' ) );
509cdf0e10cSrcweir         ByteString aPS( aValue.GetToken( 0, ',' ).GetToken( 1, ' ' ) );
510cdf0e10cSrcweir         ByteString aNewDriver( aDriver );
511cdf0e10cSrcweir         if( aDriver == "GENERIC" )
512cdf0e10cSrcweir             aNewDriver = "SGENPRT";
513cdf0e10cSrcweir 
514cdf0e10cSrcweir         if( aPS != "PostScript" )
515cdf0e10cSrcweir             continue;
516cdf0e10cSrcweir 
517cdf0e10cSrcweir         const PPDParser* pParser = PPDParser::getParser( String( aNewDriver, aEncoding ) );
518cdf0e10cSrcweir         if( pParser == NULL )
519cdf0e10cSrcweir         {
520cdf0e10cSrcweir             String aText( PaResId( RID_TXT_DRIVERDOESNOTEXIST ) );
521cdf0e10cSrcweir             aText.SearchAndReplace( String( RTL_CONSTASCII_USTRINGPARAM( "%s1" ) ), String( aPrinter, aEncoding ) );
522cdf0e10cSrcweir             aText.SearchAndReplace( String( RTL_CONSTASCII_USTRINGPARAM( "%s2" ) ), String( aDriver, aEncoding ) );
523cdf0e10cSrcweir             InfoBox aBox( this, aText );
524cdf0e10cSrcweir             aBox.Execute();
525cdf0e10cSrcweir             continue;
526cdf0e10cSrcweir         }
527cdf0e10cSrcweir 
528cdf0e10cSrcweir         // read the command
529cdf0e10cSrcweir         aConfig.SetGroup( "ports" );
530cdf0e10cSrcweir         ByteString aCommand( aConfig.ReadKey( aPort ) );
531cdf0e10cSrcweir         if( ! aCommand.Len() )
532cdf0e10cSrcweir         {
533cdf0e10cSrcweir             String aText( PaResId( RID_TXT_PRINTERWITHOUTCOMMAND ) );
534cdf0e10cSrcweir             aText.SearchAndReplace( String( RTL_CONSTASCII_USTRINGPARAM( "%s" ) ), String( aPrinter, aEncoding ) );
535cdf0e10cSrcweir             InfoBox aBox( this, aText );
536cdf0e10cSrcweir             aBox.Execute();
537cdf0e10cSrcweir             continue;
538cdf0e10cSrcweir         }
539cdf0e10cSrcweir 
540cdf0e10cSrcweir 
541cdf0e10cSrcweir         String aUPrinter( AddPrinterDialog::uniquePrinterName( String( aPrinter, aEncoding ) ) );
542cdf0e10cSrcweir 
543cdf0e10cSrcweir         PrinterInfo aInfo;
544cdf0e10cSrcweir         aInfo.m_aDriverName		= String( aNewDriver, aEncoding );
545cdf0e10cSrcweir         aInfo.m_pParser			= pParser;
546cdf0e10cSrcweir         aInfo.m_aContext.setParser( pParser );
547cdf0e10cSrcweir         aInfo.m_aPrinterName	= aUPrinter;
548cdf0e10cSrcweir         aInfo.m_aCommand		= String( aCommand, aEncoding );
549cdf0e10cSrcweir 
550cdf0e10cSrcweir         // read the printer settings
551cdf0e10cSrcweir         ByteString aGroup( aDriver );
552cdf0e10cSrcweir         aGroup += ",PostScript,";
553cdf0e10cSrcweir         aGroup += aPort;
554cdf0e10cSrcweir         aConfig.SetGroup( aGroup );
555cdf0e10cSrcweir 
556cdf0e10cSrcweir         aValue = aConfig.ReadKey( "PageSize", aDefPageSize );
557cdf0e10cSrcweir         int nLeft, nRight, nTop, nBottom;
558cdf0e10cSrcweir         if( aValue.Len() &&
559cdf0e10cSrcweir             aInfo.m_pParser->getMargins( String( aValue, aEncoding ),
560cdf0e10cSrcweir                                          nLeft, nRight, nTop, nBottom ) )
561cdf0e10cSrcweir         {
562cdf0e10cSrcweir             const PPDKey* pKey = aInfo.m_pParser->getKey( String( RTL_CONSTASCII_USTRINGPARAM( "PageSize" ) ) );
563cdf0e10cSrcweir             const PPDValue* pValue = pKey ? pKey->getValue( String( aValue, aEncoding ) ) : NULL;
564cdf0e10cSrcweir             if( pKey && pValue )
565cdf0e10cSrcweir                 aInfo.m_aContext.setValue( pKey, pValue );
566cdf0e10cSrcweir             aValue = aConfig.ReadKey( "MarginLeft", aDefMarginLeft );
567cdf0e10cSrcweir             if( aValue.Len() )
568cdf0e10cSrcweir                 aInfo.m_nLeftMarginAdjust = aValue.ToInt32() - (int)((double)nLeft * 35.27777778 );
569cdf0e10cSrcweir             aValue = aConfig.ReadKey( "MarginRight", aDefMarginRight );
570cdf0e10cSrcweir             if( aValue.Len() )
571cdf0e10cSrcweir                 aInfo.m_nRightMarginAdjust = aValue.ToInt32() - (int)((double)nRight * 35.27777778 );
572cdf0e10cSrcweir             aValue = aConfig.ReadKey( "MarginTop", aDefMarginTop );
573cdf0e10cSrcweir             if( aValue.Len() )
574cdf0e10cSrcweir                 aInfo.m_nTopMarginAdjust = aValue.ToInt32() - (int)((double)nTop * 35.27777778 );
575cdf0e10cSrcweir             aValue = aConfig.ReadKey( "MarginBottom", aDefMarginBottom );
576cdf0e10cSrcweir             if( aValue.Len() )
577cdf0e10cSrcweir                 aInfo.m_nBottomMarginAdjust = aValue.ToInt32() - (int)((double)nBottom * 35.27777778 );
578cdf0e10cSrcweir         }
579cdf0e10cSrcweir 
580cdf0e10cSrcweir         aValue = aConfig.ReadKey( "Copies", aDefScale );
581cdf0e10cSrcweir         if( aValue.Len() )
582cdf0e10cSrcweir             aInfo.m_nCopies = aValue.ToInt32();
583cdf0e10cSrcweir 
584cdf0e10cSrcweir         aValue = aConfig.ReadKey( "Comment" );
585cdf0e10cSrcweir         aInfo.m_aComment = String( aValue, aEncoding );
586cdf0e10cSrcweir 
587cdf0e10cSrcweir         aValue = aConfig.ReadKey( "Level" );
588cdf0e10cSrcweir         if( aValue.Len() )
589cdf0e10cSrcweir             aInfo.m_nPSLevel = aValue.ToInt32();
590cdf0e10cSrcweir 
591cdf0e10cSrcweir         aValue = aConfig.ReadKey( "Orientation", aDefOrientation );
592cdf0e10cSrcweir         if( aValue.Len() )
593cdf0e10cSrcweir             aInfo.m_eOrientation = aValue.CompareIgnoreCaseToAscii( "landscape" ) == COMPARE_EQUAL ? orientation::Landscape : orientation::Portrait;
594cdf0e10cSrcweir         int nGroupKeys = aConfig.GetKeyCount();
595cdf0e10cSrcweir         for( int nPPDKey = 0; nPPDKey < nGroupKeys; nPPDKey++ )
596cdf0e10cSrcweir         {
597cdf0e10cSrcweir             ByteString aPPDKey( aConfig.GetKeyName( nPPDKey ) );
598cdf0e10cSrcweir             // ignore page region
599cdf0e10cSrcweir             // there are some ppd keys in old Xpdefaults that
600cdf0e10cSrcweir             // should never have been writte because they are defaults
601cdf0e10cSrcweir             // PageRegion leads to problems in conjunction
602cdf0e10cSrcweir             // with a not matching PageSize
603cdf0e10cSrcweir             if( aPPDKey.CompareTo( "PPD_", 4 ) == COMPARE_EQUAL &&
604cdf0e10cSrcweir                 aPPDKey != "PPD_PageRegion"
605cdf0e10cSrcweir                 )
606cdf0e10cSrcweir             {
607cdf0e10cSrcweir                 aValue = aConfig.ReadKey( nPPDKey );
608cdf0e10cSrcweir                 aPPDKey.Erase( 0, 4 );
609cdf0e10cSrcweir                 const PPDKey* pKey = aInfo.m_pParser->getKey( String( aPPDKey, RTL_TEXTENCODING_ISO_8859_1 ) );
610cdf0e10cSrcweir                 const PPDValue* pValue = pKey ? ( aValue.Equals( "*nil" ) ? NULL : pKey->getValue( String( aValue, RTL_TEXTENCODING_ISO_8859_1 ) ) ) : NULL;
611cdf0e10cSrcweir                 if( pKey )
612cdf0e10cSrcweir                     aInfo.m_aContext.setValue( pKey, pValue, true );
613cdf0e10cSrcweir             }
614cdf0e10cSrcweir         }
615cdf0e10cSrcweir 
616cdf0e10cSrcweir         m_aOldPrinters.push_back( aInfo );
617cdf0e10cSrcweir         int nPos = m_aOldPrinterBox.InsertEntry( aInfo.m_aPrinterName );
618cdf0e10cSrcweir         m_aOldPrinterBox.SetEntryData( nPos, & m_aOldPrinters.back() );
619cdf0e10cSrcweir     }
620cdf0e10cSrcweir }
621cdf0e10cSrcweir 
~APOldPrinterPage()622cdf0e10cSrcweir APOldPrinterPage::~APOldPrinterPage()
623cdf0e10cSrcweir {
624cdf0e10cSrcweir }
625cdf0e10cSrcweir 
IMPL_LINK(APOldPrinterPage,ClickBtnHdl,PushButton *,pButton)626cdf0e10cSrcweir IMPL_LINK( APOldPrinterPage, ClickBtnHdl, PushButton*, pButton )
627cdf0e10cSrcweir {
628cdf0e10cSrcweir 	if( pButton == &m_aSelectAllBtn )
629cdf0e10cSrcweir 	{
630cdf0e10cSrcweir         for( int i = 0; i < m_aOldPrinterBox.GetEntryCount(); i++ )
631cdf0e10cSrcweir             m_aOldPrinterBox.SelectEntryPos( i );
632cdf0e10cSrcweir     }
633cdf0e10cSrcweir 	return 0;
634cdf0e10cSrcweir }
635cdf0e10cSrcweir 
addOldPrinters()636cdf0e10cSrcweir void APOldPrinterPage::addOldPrinters()
637cdf0e10cSrcweir {
638cdf0e10cSrcweir 	PrinterInfoManager& rManager( PrinterInfoManager::get() );
639cdf0e10cSrcweir 	for( int i = 0; i < m_aOldPrinterBox.GetSelectEntryCount(); i++ )
640cdf0e10cSrcweir 	{
641cdf0e10cSrcweir 		PrinterInfo* pInfo = (PrinterInfo*)m_aOldPrinterBox.GetEntryData( m_aOldPrinterBox.GetSelectEntryPos( i ) );
642cdf0e10cSrcweir 		pInfo->m_aPrinterName = AddPrinterDialog::uniquePrinterName( pInfo->m_aPrinterName );
643cdf0e10cSrcweir 		if( ! rManager.addPrinter( pInfo->m_aPrinterName, pInfo->m_aDriverName ) )
644cdf0e10cSrcweir 		{
645cdf0e10cSrcweir 			String aText( PaResId( RID_TXT_PRINTERADDFAILED ) );
646cdf0e10cSrcweir 			aText.SearchAndReplace( String( RTL_CONSTASCII_USTRINGPARAM( "%s" ) ), pInfo->m_aPrinterName );
647cdf0e10cSrcweir 				ErrorBox aBox( this, WB_OK | WB_DEF_OK, aText );
648cdf0e10cSrcweir 				aBox.Execute();
649cdf0e10cSrcweir 				continue;
650cdf0e10cSrcweir 		}
651cdf0e10cSrcweir 		rManager.changePrinterInfo( pInfo->m_aPrinterName, *pInfo );
652cdf0e10cSrcweir 	}
653cdf0e10cSrcweir }
654cdf0e10cSrcweir 
check()655cdf0e10cSrcweir bool APOldPrinterPage::check()
656cdf0e10cSrcweir {
657cdf0e10cSrcweir 	return m_aOldPrinterBox.GetEntryCount() > 0;
658cdf0e10cSrcweir }
659cdf0e10cSrcweir 
fill(PrinterInfo &)660cdf0e10cSrcweir void APOldPrinterPage::fill( PrinterInfo& )
661cdf0e10cSrcweir {
662cdf0e10cSrcweir }
663cdf0e10cSrcweir 
664cdf0e10cSrcweir //--------------------------------------------------------------------
665cdf0e10cSrcweir 
APFaxDriverPage(AddPrinterDialog * pParent)666cdf0e10cSrcweir APFaxDriverPage::APFaxDriverPage( AddPrinterDialog* pParent )
667cdf0e10cSrcweir 		: APTabPage( pParent, PaResId( RID_ADDP_PAGE_FAXDRIVER ) ),
668cdf0e10cSrcweir 		  m_aFaxTxt( this, PaResId( RID_ADDP_FAXDRV_TXT_DRIVER ) ),
669cdf0e10cSrcweir 		  m_aDefBtn( this, PaResId( RID_ADDP_FAXDRV_BTN_DEFAULT ) ),
670cdf0e10cSrcweir 		  m_aSelectBtn( this, PaResId( RID_ADDP_FAXDRV_BTN_SELECT ) )
671cdf0e10cSrcweir {
672cdf0e10cSrcweir 	FreeResource();
673cdf0e10cSrcweir 
674cdf0e10cSrcweir 	m_aDefBtn.Check( sal_True );
675cdf0e10cSrcweir 	m_aSelectBtn.Check( sal_False );
676cdf0e10cSrcweir 	m_aSelectBtn.SetStyle( m_aSelectBtn.GetStyle() | WB_WORDBREAK );
677cdf0e10cSrcweir }
678cdf0e10cSrcweir 
~APFaxDriverPage()679cdf0e10cSrcweir APFaxDriverPage::~APFaxDriverPage()
680cdf0e10cSrcweir {
681cdf0e10cSrcweir }
682cdf0e10cSrcweir 
check()683cdf0e10cSrcweir bool APFaxDriverPage::check()
684cdf0e10cSrcweir {
685cdf0e10cSrcweir 	return true;
686cdf0e10cSrcweir }
687cdf0e10cSrcweir 
fill(PrinterInfo & rInfo)688cdf0e10cSrcweir void APFaxDriverPage::fill( PrinterInfo& rInfo )
689cdf0e10cSrcweir {
690cdf0e10cSrcweir 	if( isDefault() )
691cdf0e10cSrcweir 	{
692cdf0e10cSrcweir 		rInfo.m_aDriverName = OUString::createFromAscii( "SGENPRT" );
693cdf0e10cSrcweir 	}
694cdf0e10cSrcweir }
695cdf0e10cSrcweir 
696cdf0e10cSrcweir //--------------------------------------------------------------------
697cdf0e10cSrcweir 
APPdfDriverPage(AddPrinterDialog * pParent)698cdf0e10cSrcweir APPdfDriverPage::APPdfDriverPage( AddPrinterDialog* pParent )
699cdf0e10cSrcweir 		: APTabPage( pParent, PaResId( RID_ADDP_PAGE_PDFDRIVER ) ),
700cdf0e10cSrcweir 		  m_aPdfTxt( this, PaResId( RID_ADDP_PDFDRV_TXT_DRIVER ) ),
701cdf0e10cSrcweir 		  m_aDefBtn( this, PaResId( RID_ADDP_PDFDRV_BTN_DEFAULT ) ),
702cdf0e10cSrcweir 		  m_aDistBtn( this, PaResId( RID_ADDP_PDFDRV_BTN_DIST ) ),
703cdf0e10cSrcweir 		  m_aSelectBtn( this, PaResId( RID_ADDP_PDFDRV_BTN_SELECT ) )
704cdf0e10cSrcweir {
705cdf0e10cSrcweir 	FreeResource();
706cdf0e10cSrcweir 
707cdf0e10cSrcweir 	m_aDefBtn.Check( sal_True );
708cdf0e10cSrcweir 	m_aDistBtn.Check( sal_False );
709cdf0e10cSrcweir 	m_aSelectBtn.Check( sal_False );
710cdf0e10cSrcweir 	m_aSelectBtn.SetStyle( m_aSelectBtn.GetStyle() | WB_WORDBREAK );
711cdf0e10cSrcweir }
712cdf0e10cSrcweir 
~APPdfDriverPage()713cdf0e10cSrcweir APPdfDriverPage::~APPdfDriverPage()
714cdf0e10cSrcweir {
715cdf0e10cSrcweir }
716cdf0e10cSrcweir 
check()717cdf0e10cSrcweir bool APPdfDriverPage::check()
718cdf0e10cSrcweir {
719cdf0e10cSrcweir 	return true;
720cdf0e10cSrcweir }
721cdf0e10cSrcweir 
fill(PrinterInfo & rInfo)722cdf0e10cSrcweir void APPdfDriverPage::fill( PrinterInfo& rInfo )
723cdf0e10cSrcweir {
724cdf0e10cSrcweir 	if( isDefault() )
725cdf0e10cSrcweir 		rInfo.m_aDriverName = OUString::createFromAscii( "SGENPRT" );
726cdf0e10cSrcweir 	else if( isDist() )
727cdf0e10cSrcweir 		rInfo.m_aDriverName = OUString::createFromAscii( "ADISTILL" );
728cdf0e10cSrcweir }
729cdf0e10cSrcweir 
730cdf0e10cSrcweir //--------------------------------------------------------------------
731cdf0e10cSrcweir 
AddPrinterDialog(Window * pParent)732cdf0e10cSrcweir AddPrinterDialog::AddPrinterDialog( Window* pParent )
733cdf0e10cSrcweir 		: ModalDialog( pParent, PaResId( RID_ADD_PRINTER_DIALOG ) ),
734cdf0e10cSrcweir 		  m_aCancelPB( this, PaResId( RID_ADDP_BTN_CANCEL ) ),
735cdf0e10cSrcweir 		  m_aPrevPB( this, PaResId( RID_ADDP_BTN_PREV ) ),
736cdf0e10cSrcweir 		  m_aNextPB( this, PaResId( RID_ADDP_BTN_NEXT ) ),
737cdf0e10cSrcweir 		  m_aFinishPB( this, PaResId( RID_ADDP_BTN_FINISH ) ),
738cdf0e10cSrcweir 		  m_aLine( this, PaResId( RID_ADDP_LINE ) ),
739cdf0e10cSrcweir           m_aTitleImage( this, PaResId( RID_ADDP_CTRL_TITLE ) ),
740cdf0e10cSrcweir 		  m_pCurrentPage( NULL ),
741cdf0e10cSrcweir 		  m_pChooseDevicePage( NULL ),
742cdf0e10cSrcweir 		  m_pCommandPage( NULL ),
743cdf0e10cSrcweir 		  m_pChooseDriverPage( NULL ),
744cdf0e10cSrcweir 		  m_pNamePage( NULL ),
745cdf0e10cSrcweir 		  m_pOldPrinterPage( NULL ),
746cdf0e10cSrcweir 		  m_pFaxDriverPage( NULL ),
747cdf0e10cSrcweir 		  m_pFaxSelectDriverPage( NULL ),
748cdf0e10cSrcweir 		  m_pFaxNamePage( NULL ),
749cdf0e10cSrcweir 		  m_pFaxCommandPage( NULL ),
750cdf0e10cSrcweir 		  m_pPdfDriverPage( NULL ),
751cdf0e10cSrcweir 		  m_pPdfSelectDriverPage( NULL ),
752cdf0e10cSrcweir 		  m_pPdfNamePage( NULL ),
753cdf0e10cSrcweir 		  m_pPdfCommandPage( NULL )
754cdf0e10cSrcweir {
755cdf0e10cSrcweir 	FreeResource();
756cdf0e10cSrcweir 	m_pCurrentPage = m_pChooseDevicePage = new APChooseDevicePage( this );
757cdf0e10cSrcweir 	m_pCurrentPage->Show( sal_True );
758cdf0e10cSrcweir 	m_aFinishPB.Enable( sal_False );
759cdf0e10cSrcweir 	m_aPrevPB.Enable( sal_False );
760cdf0e10cSrcweir 
761cdf0e10cSrcweir 	m_aNextPB.SetClickHdl( LINK( this, AddPrinterDialog, ClickBtnHdl ) );
762cdf0e10cSrcweir 	m_aPrevPB.SetClickHdl( LINK( this, AddPrinterDialog, ClickBtnHdl ) );
763cdf0e10cSrcweir 	m_aFinishPB.SetClickHdl( LINK( this, AddPrinterDialog, ClickBtnHdl ) );
764cdf0e10cSrcweir 	m_aCancelPB.SetClickHdl( LINK( this, AddPrinterDialog, ClickBtnHdl ) );
765cdf0e10cSrcweir 
766cdf0e10cSrcweir     m_aTitleImage.SetBackgroundColor( Color( 0xff, 0xff, 0xff ) );
767cdf0e10cSrcweir     m_aTitleImage.SetText( m_pCurrentPage->getTitle() );
768cdf0e10cSrcweir     updateSettings();
769cdf0e10cSrcweir }
770cdf0e10cSrcweir 
~AddPrinterDialog()771cdf0e10cSrcweir AddPrinterDialog::~AddPrinterDialog()
772cdf0e10cSrcweir {
773cdf0e10cSrcweir 	if( m_pChooseDevicePage )
774cdf0e10cSrcweir 		delete m_pChooseDevicePage;
775cdf0e10cSrcweir 	if( m_pChooseDriverPage )
776cdf0e10cSrcweir 		delete m_pChooseDriverPage;
777cdf0e10cSrcweir 	if( m_pNamePage )
778cdf0e10cSrcweir 		delete m_pNamePage;
779cdf0e10cSrcweir 	if( m_pCommandPage )
780cdf0e10cSrcweir 		delete m_pCommandPage;
781cdf0e10cSrcweir 	if( m_pOldPrinterPage )
782cdf0e10cSrcweir 		delete m_pOldPrinterPage;
783cdf0e10cSrcweir 	if( m_pFaxDriverPage )
784cdf0e10cSrcweir 		delete m_pFaxDriverPage;
785cdf0e10cSrcweir 	if( m_pFaxSelectDriverPage )
786cdf0e10cSrcweir 		delete m_pFaxSelectDriverPage;
787cdf0e10cSrcweir 	if( m_pFaxCommandPage )
788cdf0e10cSrcweir 		delete m_pFaxCommandPage;
789cdf0e10cSrcweir 	if( m_pFaxNamePage )
790cdf0e10cSrcweir 		delete m_pFaxNamePage;
791cdf0e10cSrcweir 	if( m_pPdfDriverPage )
792cdf0e10cSrcweir 		delete m_pPdfDriverPage;
793cdf0e10cSrcweir 	if( m_pPdfSelectDriverPage )
794cdf0e10cSrcweir 		delete m_pPdfSelectDriverPage;
795cdf0e10cSrcweir 	if( m_pPdfNamePage )
796cdf0e10cSrcweir 		delete m_pPdfNamePage;
797cdf0e10cSrcweir 	if( m_pPdfCommandPage )
798cdf0e10cSrcweir 		delete m_pPdfCommandPage;
799cdf0e10cSrcweir }
800cdf0e10cSrcweir 
updateSettings()801cdf0e10cSrcweir void AddPrinterDialog::updateSettings()
802cdf0e10cSrcweir {
803cdf0e10cSrcweir     if( ! GetSettings().GetStyleSettings().GetHighContrastMode() )
804cdf0e10cSrcweir         m_aTitleImage.SetImage( Image( BitmapEx( PaResId( RID_BMP_PRINTER ) ) ) );
805cdf0e10cSrcweir     else
806cdf0e10cSrcweir         m_aTitleImage.SetImage( Image( BitmapEx( PaResId( RID_BMP_PRINTER_HC ) ) ) );
807cdf0e10cSrcweir }
808cdf0e10cSrcweir 
DataChanged(const DataChangedEvent & rEv)809cdf0e10cSrcweir void AddPrinterDialog::DataChanged( const DataChangedEvent& rEv )
810cdf0e10cSrcweir {
811cdf0e10cSrcweir     ModalDialog::DataChanged( rEv );
812cdf0e10cSrcweir     if( (rEv.GetType() == DATACHANGED_SETTINGS) &&
813cdf0e10cSrcweir         (rEv.GetFlags() & SETTINGS_STYLE) )
814cdf0e10cSrcweir     {
815cdf0e10cSrcweir         updateSettings();
816cdf0e10cSrcweir     }
817cdf0e10cSrcweir }
818cdf0e10cSrcweir 
advance()819cdf0e10cSrcweir void AddPrinterDialog::advance()
820cdf0e10cSrcweir {
821cdf0e10cSrcweir 	m_pCurrentPage->Show( sal_False );
822cdf0e10cSrcweir 	if( m_pCurrentPage == m_pChooseDevicePage )
823cdf0e10cSrcweir 	{
824cdf0e10cSrcweir 		if( m_pChooseDevicePage->isPrinter() )
825cdf0e10cSrcweir 		{
826cdf0e10cSrcweir             if( ! m_pChooseDriverPage )
827cdf0e10cSrcweir                 m_pChooseDriverPage = new APChooseDriverPage( this );
828cdf0e10cSrcweir             m_pCurrentPage = m_pChooseDriverPage;
829cdf0e10cSrcweir 			m_aPrevPB.Enable( sal_True );
830cdf0e10cSrcweir 		}
831cdf0e10cSrcweir 		else if( m_pChooseDevicePage->isOld() )
832cdf0e10cSrcweir 		{
833cdf0e10cSrcweir 			if( ! m_pOldPrinterPage )
834cdf0e10cSrcweir 				m_pOldPrinterPage = new APOldPrinterPage( this );
835cdf0e10cSrcweir 			m_pCurrentPage = m_pOldPrinterPage;
836cdf0e10cSrcweir 			m_aPrevPB.Enable( sal_True );
837cdf0e10cSrcweir 			m_aFinishPB.Enable( sal_True );
838cdf0e10cSrcweir 			m_aNextPB.Enable( sal_False );
839cdf0e10cSrcweir 		}
840cdf0e10cSrcweir 		else if( m_pChooseDevicePage->isFax() )
841cdf0e10cSrcweir 		{
842cdf0e10cSrcweir 			if( ! m_pFaxDriverPage )
843cdf0e10cSrcweir 				m_pFaxDriverPage = new APFaxDriverPage( this );
844cdf0e10cSrcweir 			m_pCurrentPage = m_pFaxDriverPage;
845cdf0e10cSrcweir 			m_aPrevPB.Enable( sal_True );
846cdf0e10cSrcweir 		}
847cdf0e10cSrcweir 		else if( m_pChooseDevicePage->isPDF() )
848cdf0e10cSrcweir 		{
849cdf0e10cSrcweir 			if( ! m_pPdfDriverPage )
850cdf0e10cSrcweir 				m_pPdfDriverPage = new APPdfDriverPage( this );
851cdf0e10cSrcweir 			m_pCurrentPage = m_pPdfDriverPage;
852cdf0e10cSrcweir 			m_aPrevPB.Enable( sal_True );
853cdf0e10cSrcweir 		}
854cdf0e10cSrcweir 	}
855cdf0e10cSrcweir 	else if( m_pCurrentPage == m_pChooseDriverPage )
856cdf0e10cSrcweir 	{
857cdf0e10cSrcweir         if( ! m_pCommandPage )
858cdf0e10cSrcweir             m_pCommandPage = new APCommandPage( this, DeviceKind::Printer );
859cdf0e10cSrcweir         m_pCurrentPage = m_pCommandPage;
860cdf0e10cSrcweir 	}
861cdf0e10cSrcweir 	else if( m_pCurrentPage == m_pCommandPage )
862cdf0e10cSrcweir 	{
863cdf0e10cSrcweir 		if( ! m_pNamePage )
864cdf0e10cSrcweir 			m_pNamePage = new APNamePage( this, m_aPrinter.m_aPrinterName, DeviceKind::Printer );
865cdf0e10cSrcweir         else
866cdf0e10cSrcweir             m_pNamePage->setText( m_aPrinter.m_aPrinterName );
867cdf0e10cSrcweir 		m_pCurrentPage = m_pNamePage;
868cdf0e10cSrcweir 		m_aFinishPB.Enable( sal_True );
869cdf0e10cSrcweir 		m_aNextPB.Enable( sal_False );
870cdf0e10cSrcweir 	}
871cdf0e10cSrcweir 	else if( m_pCurrentPage == m_pFaxDriverPage )
872cdf0e10cSrcweir 	{
873cdf0e10cSrcweir 		if( ! m_pFaxDriverPage->isDefault() )
874cdf0e10cSrcweir 		{
875cdf0e10cSrcweir 			if( ! m_pFaxSelectDriverPage )
876cdf0e10cSrcweir 				m_pFaxSelectDriverPage = new APChooseDriverPage( this );
877cdf0e10cSrcweir 			m_pCurrentPage = m_pFaxSelectDriverPage;
878cdf0e10cSrcweir 		}
879cdf0e10cSrcweir 		else
880cdf0e10cSrcweir 		{
881cdf0e10cSrcweir             if( ! m_pFaxCommandPage )
882cdf0e10cSrcweir                 m_pFaxCommandPage = new APCommandPage( this, DeviceKind::Fax );
883cdf0e10cSrcweir             m_pCurrentPage = m_pFaxCommandPage;
884cdf0e10cSrcweir 		}
885cdf0e10cSrcweir 	}
886cdf0e10cSrcweir 	else if( m_pCurrentPage == m_pFaxSelectDriverPage )
887cdf0e10cSrcweir 	{
888cdf0e10cSrcweir 		if( ! m_pFaxCommandPage )
889cdf0e10cSrcweir 			m_pFaxCommandPage = new APCommandPage( this, DeviceKind::Fax );
890cdf0e10cSrcweir 		m_pCurrentPage = m_pFaxCommandPage;
891cdf0e10cSrcweir 	}
892cdf0e10cSrcweir 	else if( m_pCurrentPage == m_pFaxCommandPage )
893cdf0e10cSrcweir 	{
894cdf0e10cSrcweir 		if( ! m_pFaxNamePage )
895cdf0e10cSrcweir 			m_pFaxNamePage = new APNamePage( this, String(), DeviceKind::Fax );
896cdf0e10cSrcweir 		m_pCurrentPage = m_pFaxNamePage;
897cdf0e10cSrcweir 		m_aNextPB.Enable( sal_False );
898cdf0e10cSrcweir 		m_aFinishPB.Enable( sal_True );
899cdf0e10cSrcweir 	}
900cdf0e10cSrcweir 	else if( m_pCurrentPage == m_pPdfDriverPage )
901cdf0e10cSrcweir 	{
902cdf0e10cSrcweir 		if( ! m_pPdfDriverPage->isDefault() && ! m_pPdfDriverPage->isDist() )
903cdf0e10cSrcweir 		{
904cdf0e10cSrcweir 			if( ! m_pPdfSelectDriverPage )
905cdf0e10cSrcweir 				m_pPdfSelectDriverPage = new APChooseDriverPage( this );
906cdf0e10cSrcweir 			m_pCurrentPage = m_pPdfSelectDriverPage;
907cdf0e10cSrcweir 		}
908cdf0e10cSrcweir 		else
909cdf0e10cSrcweir 		{
910cdf0e10cSrcweir             if( ! m_pPdfCommandPage )
911cdf0e10cSrcweir                 m_pPdfCommandPage = new APCommandPage( this, DeviceKind::Pdf );
912cdf0e10cSrcweir             m_pCurrentPage = m_pPdfCommandPage;
913cdf0e10cSrcweir 		}
914cdf0e10cSrcweir 	}
915cdf0e10cSrcweir 	else if( m_pCurrentPage == m_pPdfSelectDriverPage )
916cdf0e10cSrcweir 	{
917cdf0e10cSrcweir 		if( ! m_pPdfCommandPage )
918cdf0e10cSrcweir 			m_pPdfCommandPage = new APCommandPage( this, DeviceKind::Pdf );
919cdf0e10cSrcweir 		m_pCurrentPage = m_pPdfCommandPage;
920cdf0e10cSrcweir 	}
921cdf0e10cSrcweir 	else if( m_pCurrentPage == m_pPdfCommandPage )
922cdf0e10cSrcweir 	{
923cdf0e10cSrcweir 		if( ! m_pPdfNamePage )
924cdf0e10cSrcweir 			m_pPdfNamePage = new APNamePage( this, String(), DeviceKind::Pdf );
925cdf0e10cSrcweir 		m_pCurrentPage = m_pPdfNamePage;
926cdf0e10cSrcweir 		m_aNextPB.Enable( sal_False );
927cdf0e10cSrcweir 		m_aFinishPB.Enable( sal_True );
928cdf0e10cSrcweir 	}
929cdf0e10cSrcweir 
930cdf0e10cSrcweir 	m_pCurrentPage->Show( sal_True );
931cdf0e10cSrcweir     m_aTitleImage.SetText( m_pCurrentPage->getTitle() );
932cdf0e10cSrcweir }
933cdf0e10cSrcweir 
back()934cdf0e10cSrcweir void AddPrinterDialog::back()
935cdf0e10cSrcweir {
936cdf0e10cSrcweir 	m_pCurrentPage->Show( sal_False );
937cdf0e10cSrcweir 	if( m_pCurrentPage == m_pChooseDriverPage )
938cdf0e10cSrcweir 	{
939cdf0e10cSrcweir 		m_pCurrentPage = m_pChooseDevicePage;
940cdf0e10cSrcweir 		m_aPrevPB.Enable( sal_False );
941cdf0e10cSrcweir 	}
942cdf0e10cSrcweir 	else if( m_pCurrentPage == m_pNamePage )
943cdf0e10cSrcweir 	{
944cdf0e10cSrcweir 		m_pCurrentPage = m_pCommandPage;
945cdf0e10cSrcweir 		m_aNextPB.Enable( sal_True );
946cdf0e10cSrcweir 	}
947cdf0e10cSrcweir 	else if( m_pCurrentPage == m_pCommandPage )
948cdf0e10cSrcweir 	{
949cdf0e10cSrcweir 		m_pCurrentPage = m_pChooseDriverPage;
950cdf0e10cSrcweir 	}
951cdf0e10cSrcweir 	else if( m_pCurrentPage == m_pOldPrinterPage )
952cdf0e10cSrcweir 	{
953cdf0e10cSrcweir 		m_pCurrentPage = m_pChooseDevicePage;
954cdf0e10cSrcweir 		m_aPrevPB.Enable( sal_False );
955cdf0e10cSrcweir 		m_aNextPB.Enable( sal_True );
956cdf0e10cSrcweir 	}
957cdf0e10cSrcweir 	else if( m_pCurrentPage == m_pFaxDriverPage )
958cdf0e10cSrcweir 	{
959cdf0e10cSrcweir 		m_pCurrentPage = m_pChooseDevicePage;
960cdf0e10cSrcweir 		m_aPrevPB.Enable( sal_False );
961cdf0e10cSrcweir 	}
962cdf0e10cSrcweir 	else if( m_pCurrentPage == m_pFaxSelectDriverPage )
963cdf0e10cSrcweir 	{
964cdf0e10cSrcweir 		m_pCurrentPage = m_pFaxDriverPage;
965cdf0e10cSrcweir 	}
966cdf0e10cSrcweir 	else if( m_pCurrentPage == m_pFaxNamePage )
967cdf0e10cSrcweir 	{
968cdf0e10cSrcweir 		m_pCurrentPage = m_pFaxCommandPage;
969cdf0e10cSrcweir 		m_aNextPB.Enable( sal_True );
970cdf0e10cSrcweir 	}
971cdf0e10cSrcweir 	else if( m_pCurrentPage == m_pFaxCommandPage )
972cdf0e10cSrcweir 	{
973cdf0e10cSrcweir 		m_pCurrentPage = m_pFaxDriverPage->isDefault() ? (APTabPage*)m_pFaxDriverPage : (APTabPage*)m_pFaxSelectDriverPage;
974cdf0e10cSrcweir         m_aNextPB.Enable( sal_True );
975cdf0e10cSrcweir 	}
976cdf0e10cSrcweir 	else if( m_pCurrentPage == m_pPdfDriverPage )
977cdf0e10cSrcweir 	{
978cdf0e10cSrcweir 		m_pCurrentPage = m_pChooseDevicePage;
979cdf0e10cSrcweir 		m_aPrevPB.Enable( sal_False );
980cdf0e10cSrcweir 	}
981cdf0e10cSrcweir 	else if( m_pCurrentPage == m_pPdfSelectDriverPage )
982cdf0e10cSrcweir 	{
983cdf0e10cSrcweir 		m_pCurrentPage = m_pPdfDriverPage;
984cdf0e10cSrcweir 	}
985cdf0e10cSrcweir 	else if( m_pCurrentPage == m_pPdfNamePage )
986cdf0e10cSrcweir 	{
987cdf0e10cSrcweir 		m_pCurrentPage = m_pPdfCommandPage;
988cdf0e10cSrcweir 		m_aNextPB.Enable( sal_True );
989cdf0e10cSrcweir 	}
990cdf0e10cSrcweir 	else if( m_pCurrentPage == m_pPdfCommandPage )
991cdf0e10cSrcweir 	{
992cdf0e10cSrcweir 		m_pCurrentPage = m_pPdfDriverPage->isDefault() || m_pPdfDriverPage->isDist() ? (APTabPage*)m_pPdfDriverPage : (APTabPage*)m_pPdfSelectDriverPage;
993cdf0e10cSrcweir 		m_aNextPB.Enable( sal_True );
994cdf0e10cSrcweir 	}
995cdf0e10cSrcweir 	m_pCurrentPage->Show( sal_True );
996cdf0e10cSrcweir     m_aTitleImage.SetText( m_pCurrentPage->getTitle() );
997cdf0e10cSrcweir }
998cdf0e10cSrcweir 
addPrinter()999cdf0e10cSrcweir void AddPrinterDialog::addPrinter()
1000cdf0e10cSrcweir {
1001cdf0e10cSrcweir 	PrinterInfoManager& rManager( PrinterInfoManager::get() );
1002cdf0e10cSrcweir 	if( ! m_pChooseDevicePage->isOld() )
1003cdf0e10cSrcweir 	{
1004cdf0e10cSrcweir 		m_aPrinter.m_aPrinterName = uniquePrinterName( m_aPrinter.m_aPrinterName );
1005cdf0e10cSrcweir 		if( rManager.addPrinter( m_aPrinter.m_aPrinterName, m_aPrinter.m_aDriverName ) )
1006cdf0e10cSrcweir 		{
1007cdf0e10cSrcweir 			PrinterInfo aInfo( rManager.getPrinterInfo( m_aPrinter.m_aPrinterName ) );
1008cdf0e10cSrcweir 			aInfo.m_aCommand = m_aPrinter.m_aCommand;
1009cdf0e10cSrcweir 			if( m_pChooseDevicePage->isPrinter() )
1010cdf0e10cSrcweir 			{
1011cdf0e10cSrcweir 				if( m_pNamePage->isDefault() )
1012cdf0e10cSrcweir 					rManager.setDefaultPrinter( m_aPrinter.m_aPrinterName );
1013cdf0e10cSrcweir 			}
1014cdf0e10cSrcweir 			else if( m_pChooseDevicePage->isFax() )
1015cdf0e10cSrcweir 			{
1016cdf0e10cSrcweir 				aInfo.m_aFeatures = OUString::createFromAscii( "fax=" );
1017cdf0e10cSrcweir 				if( m_pFaxNamePage->isFaxSwallow() )
1018cdf0e10cSrcweir 					aInfo.m_aFeatures += OUString::createFromAscii( "swallow" );
1019cdf0e10cSrcweir 			}
1020cdf0e10cSrcweir 			else if( m_pChooseDevicePage->isPDF() )
1021cdf0e10cSrcweir 			{
1022cdf0e10cSrcweir 				OUString aPdf( OUString::createFromAscii( "pdf=" ) );
1023cdf0e10cSrcweir 				aPdf += m_pPdfCommandPage->getPdfDir();
1024cdf0e10cSrcweir 				aInfo.m_aFeatures = aPdf;
1025cdf0e10cSrcweir 			}
1026cdf0e10cSrcweir 			rManager.changePrinterInfo( m_aPrinter.m_aPrinterName, aInfo );
1027cdf0e10cSrcweir 		}
1028cdf0e10cSrcweir 	}
1029cdf0e10cSrcweir 	else if( m_pOldPrinterPage )
1030cdf0e10cSrcweir 		m_pOldPrinterPage->addOldPrinters();
1031cdf0e10cSrcweir }
1032cdf0e10cSrcweir 
IMPL_LINK(AddPrinterDialog,ClickBtnHdl,PushButton *,pButton)1033cdf0e10cSrcweir IMPL_LINK( AddPrinterDialog, ClickBtnHdl, PushButton*, pButton )
1034cdf0e10cSrcweir {
1035cdf0e10cSrcweir 	if( pButton == &m_aNextPB )
1036cdf0e10cSrcweir 	{
1037cdf0e10cSrcweir 		if( m_pCurrentPage->check() )
1038cdf0e10cSrcweir 		{
1039cdf0e10cSrcweir 			m_pCurrentPage->fill( m_aPrinter );
1040cdf0e10cSrcweir 			advance();
1041cdf0e10cSrcweir 		}
1042cdf0e10cSrcweir 	}
1043cdf0e10cSrcweir 	else if( pButton == &m_aPrevPB )
1044cdf0e10cSrcweir 	{
1045cdf0e10cSrcweir 		if( m_pCurrentPage->check() )
1046cdf0e10cSrcweir 			m_pCurrentPage->fill( m_aPrinter );
1047cdf0e10cSrcweir 		back();
1048cdf0e10cSrcweir 	}
1049cdf0e10cSrcweir 	else if( pButton == &m_aFinishPB )
1050cdf0e10cSrcweir 	{
1051cdf0e10cSrcweir 		if( m_pCurrentPage->check() )
1052cdf0e10cSrcweir 		{
1053cdf0e10cSrcweir 			m_pCurrentPage->fill( m_aPrinter );
1054cdf0e10cSrcweir 			addPrinter();
1055cdf0e10cSrcweir 			PrinterInfoManager::get().writePrinterConfig();
1056cdf0e10cSrcweir 			EndDialog( 1 );
1057cdf0e10cSrcweir 		}
1058cdf0e10cSrcweir 	}
1059cdf0e10cSrcweir 	else if( pButton == &m_aCancelPB )
1060cdf0e10cSrcweir 		EndDialog( 0 );
1061cdf0e10cSrcweir 
1062cdf0e10cSrcweir 	return 0;
1063cdf0e10cSrcweir }
1064cdf0e10cSrcweir 
uniquePrinterName(const String & rBase)1065cdf0e10cSrcweir String AddPrinterDialog::uniquePrinterName( const String& rBase )
1066cdf0e10cSrcweir {
1067cdf0e10cSrcweir 	String aResult( rBase );
1068cdf0e10cSrcweir 
1069cdf0e10cSrcweir 	PrinterInfoManager& rManager( PrinterInfoManager::get() );
1070cdf0e10cSrcweir 
1071cdf0e10cSrcweir 	int nVersion = 1;
1072cdf0e10cSrcweir     list< OUString > aPrinterList;
1073cdf0e10cSrcweir     rManager.listPrinters( aPrinterList );
1074cdf0e10cSrcweir     hash_set< OUString, OUStringHash > aPrinters;
1075cdf0e10cSrcweir     for( list< OUString >::const_iterator it = aPrinterList.begin(); it != aPrinterList.end(); ++it )
1076cdf0e10cSrcweir         aPrinters.insert( *it );
1077cdf0e10cSrcweir     while( aPrinters.find( aResult ) != aPrinters.end() )
1078cdf0e10cSrcweir     {
1079cdf0e10cSrcweir         aResult = rBase;
1080cdf0e10cSrcweir         aResult.AppendAscii( "_" );
1081cdf0e10cSrcweir         aResult += String::CreateFromInt32( nVersion++ );
1082cdf0e10cSrcweir     }
1083cdf0e10cSrcweir 
1084cdf0e10cSrcweir 	return aResult;
1085cdf0e10cSrcweir }
1086cdf0e10cSrcweir 
getOldPrinterLocation()1087cdf0e10cSrcweir String AddPrinterDialog::getOldPrinterLocation()
1088cdf0e10cSrcweir {
1089cdf0e10cSrcweir 	static const char* pHome = getenv( "HOME" );
1090cdf0e10cSrcweir     String aRet;
1091cdf0e10cSrcweir     ByteString aFileName;
1092cdf0e10cSrcweir 
1093cdf0e10cSrcweir 	rtl_TextEncoding aEncoding = osl_getThreadTextEncoding();
1094cdf0e10cSrcweir 	if( pHome )
1095cdf0e10cSrcweir 	{
1096cdf0e10cSrcweir 		aFileName = pHome;
1097cdf0e10cSrcweir 		aFileName.Append( "/.Xpdefaults" );
1098cdf0e10cSrcweir         if( access( aFileName.GetBuffer(), F_OK ) )
1099cdf0e10cSrcweir         {
1100cdf0e10cSrcweir             aFileName = pHome;
1101cdf0e10cSrcweir             aFileName.Append( "/.sversionrc" );
1102cdf0e10cSrcweir             Config aSVer( String( aFileName, aEncoding ) );
1103cdf0e10cSrcweir             aSVer.SetGroup( "Versions" );
1104cdf0e10cSrcweir             aFileName = aSVer.ReadKey( "StarOffice 5.2" );
1105cdf0e10cSrcweir             if( aFileName.Len() )
1106cdf0e10cSrcweir                 aFileName.Append( "/share/xp3/Xpdefaults" );
1107cdf0e10cSrcweir             else if(
1108cdf0e10cSrcweir                     (aFileName = aSVer.ReadKey( "StarOffice 5.1" ) ).Len()
1109cdf0e10cSrcweir                     ||
1110cdf0e10cSrcweir                     (aFileName = aSVer.ReadKey( "StarOffice 5.0" ) ).Len()
1111cdf0e10cSrcweir                     ||
1112cdf0e10cSrcweir                     (aFileName = aSVer.ReadKey( "StarOffice 4.0" ) ).Len()
1113cdf0e10cSrcweir                     )
1114cdf0e10cSrcweir             {
1115cdf0e10cSrcweir                 aFileName.Append( "/xp3/Xpdefaults" );
1116cdf0e10cSrcweir             }
1117cdf0e10cSrcweir             if( aFileName.Len() && access( aFileName.GetBuffer(), F_OK ) )
1118cdf0e10cSrcweir                 aFileName.Erase();
1119cdf0e10cSrcweir         }
1120cdf0e10cSrcweir     }
1121cdf0e10cSrcweir     if( aFileName.Len() )
1122cdf0e10cSrcweir         aRet = String( aFileName, aEncoding );
1123cdf0e10cSrcweir     return aRet;
1124cdf0e10cSrcweir }
1125