summaryrefslogtreecommitdiff
path: root/padmin/source/padialog.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'padmin/source/padialog.cxx')
-rw-r--r--padmin/source/padialog.cxx698
1 files changed, 698 insertions, 0 deletions
diff --git a/padmin/source/padialog.cxx b/padmin/source/padialog.cxx
new file mode 100644
index 000000000000..0e3174714278
--- /dev/null
+++ b/padmin/source/padialog.cxx
@@ -0,0 +1,698 @@
+/*************************************************************************
+ *
+ * $RCSfile: padialog.cxx,v $
+ *
+ * $Revision: 1.1.1.1 $
+ *
+ * last change: $Author: pl $ $Date: 2001-05-08 11:56:36 $
+ *
+ * The Contents of this file are made available subject to the terms of
+ * either of the following licenses
+ *
+ * - GNU Lesser General Public License Version 2.1
+ * - Sun Industry Standards Source License Version 1.1
+ *
+ * Sun Microsystems Inc., October, 2000
+ *
+ * GNU Lesser General Public License Version 2.1
+ * =============================================
+ * Copyright 2000 by Sun Microsystems, Inc.
+ * 901 San Antonio Road, Palo Alto, CA 94303, USA
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1, as published by the Free Software Foundation.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ *
+ *
+ * Sun Industry Standards Source License Version 1.1
+ * =================================================
+ * The contents of this file are subject to the Sun Industry Standards
+ * Source License Version 1.1 (the "License"); You may not use this file
+ * except in compliance with the License. You may obtain a copy of the
+ * License at http://www.openoffice.org/license.html.
+ *
+ * Software provided under this License is provided on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
+ * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
+ * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
+ * See the License for the specific provisions governing your rights and
+ * obligations concerning the Software.
+ *
+ * The Initial Developer of the Original Code is: Sun Microsystems, Inc.
+ *
+ * Copyright: 2000 by Sun Microsystems, Inc.
+ *
+ * All Rights Reserved.
+ *
+ * Contributor(s): _______________________________________
+ *
+ *
+ ************************************************************************/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <string.h>
+#include <math.h>
+
+#ifndef _SV_MSGBOX_HXX
+#include <vcl/msgbox.hxx>
+#endif
+#ifndef _SV_PRINT_HXX
+#include <vcl/print.hxx>
+#endif
+#ifndef _SV_GRADIENT_HXX
+#include <vcl/gradient.hxx>
+#endif
+#ifndef _SV_BITMAP_HXX
+#include <vcl/bitmap.hxx>
+#endif
+#ifndef _SV_LINEINFO_HXX
+#include <vcl/lineinfo.hxx>
+#endif
+#ifndef _SV_SVAPP_HXX
+#include <vcl/svapp.hxx>
+#endif
+#ifndef _STREAM_HXX
+#include <tools/stream.hxx>
+#endif
+#ifndef _TOOLS_COLOR_HXX
+#include <tools/color.hxx>
+#endif
+#ifndef _PAD_PADIALOG_HRC_
+#include <padialog.hrc>
+#endif
+#ifndef _PAD_FONTENTRY_HXX_
+#include <fontentry.hxx>
+#endif
+#ifndef _PAD_HELPER_HXX_
+#include <helper.hxx>
+#endif
+#ifndef _PSP_PRINTERINFOMANAGER_HXX_
+#include <psprint/printerinfomanager.hxx>
+#endif
+#ifndef _PAD_PADIALOG_HXX_
+#include <padialog.hxx>
+#endif
+#ifndef _PAD_ADDDLG_HXX_
+#include <adddlg.hxx>
+#endif
+#ifndef _PAD_PRTSETUP_HXX_
+#include <prtsetup.hxx>
+#endif
+#ifndef _OSL_FILE_HXX_
+#include <osl/file.hxx>
+#endif
+
+using namespace psp;
+using namespace rtl;
+using namespace padmin;
+using namespace osl;
+
+PADialog* PADialog::Create( Window* pParent, BOOL bAdmin )
+{
+ return new PADialog( pParent, bAdmin );
+}
+
+PADialog::PADialog( Window* pParent, BOOL bAdmin ) :
+ ModalDialog( pParent, PaResId( RID_PADIALOG ) ),
+ m_aAddPB( this, PaResId( RID_PA_BTN_ADD ) ),
+ m_aCancelButton( this, PaResId( RID_PA_BTN_CANCEL ) ),
+ m_aDevicesLB( this, PaResId( RID_PA_LB_DEV ) ),
+ m_aStdPB( this, PaResId( RID_PA_BTN_STD ) ),
+ m_aRemPB( this, PaResId( RID_PA_BTN_DEL ) ),
+ m_aGroupBox( this, PaResId( RID_PA_GROUP_INSTALL ) ),
+ m_aFontsPB( this, PaResId( RID_PA_BTN_FONTS ) ),
+ m_aAddFontsPB( this, PaResId( RID_PA_BTN_ADDFONTS ) ),
+ m_aConfPB( this, PaResId( RID_PA_BTN_CONF ) ),
+ m_aRenamePB( this, PaResId( RID_PA_BTN_RENAME ) ),
+ m_aTestPagePB( this, PaResId( RID_PA_TESTPAGE ) ),
+ m_aDriverTxt( this, PaResId( RID_PA_TXT_DRIVER ) ),
+ m_aDriver( this, PaResId( RID_PA_TXT_DRIVER_STRING ) ),
+ m_aLocationTxt( this, PaResId( RID_PA_TXT_LOCATION ) ),
+ m_aLocation( this, PaResId( RID_PA_TXT_LOCATION_STRING ) ),
+ m_aCommandTxt( this, PaResId( RID_PA_TXT_COMMAND ) ),
+ m_aCommand( this, PaResId( RID_PA_TXT_COMMAND_STRING ) ),
+ m_aCommentTxt( this, PaResId( RID_PA_TXT_COMMENT ) ),
+ m_aComment( this, PaResId( RID_PA_TXT_COMMENT_STRING ) ),
+ m_aDefPrt( PaResId( RID_PA_STR_DEFPRT ) ),
+ m_aRenameStr( PaResId( RID_PA_STR_RENAME ) ),
+ m_pPrinter( 0 ),
+ m_rPIManager( PrinterInfoManager::get() )
+{
+ Init();
+ FreeResource();
+}
+
+void PADialog::Init()
+{
+ UpdateDevice();
+ UpdateText();
+
+ m_aRemPB.Enable( FALSE );
+
+ m_aDevicesLB.SetDoubleClickHdl( LINK( this, PADialog, DoubleClickHdl ) );
+ m_aDevicesLB.SetSelectHdl( LINK( this, PADialog, SelectHdl ) );
+ m_aStdPB.SetClickHdl( LINK( this, PADialog, ClickBtnHdl ) );
+ m_aRemPB.SetClickHdl( LINK( this, PADialog, ClickBtnHdl ) );
+ m_aConfPB.SetClickHdl( LINK( this, PADialog, ClickBtnHdl ) );
+ m_aRenamePB.SetClickHdl( LINK( this, PADialog, ClickBtnHdl ) );
+ m_aTestPagePB.SetClickHdl( LINK( this, PADialog, ClickBtnHdl ) );
+ m_aFontsPB.SetClickHdl( LINK( this, PADialog, ClickBtnHdl ) );
+ m_aAddFontsPB.SetClickHdl( LINK( this, PADialog, ClickBtnHdl ) );
+ m_aAddPB.SetClickHdl( LINK( this, PADialog, ClickBtnHdl ) );
+ m_aDevicesLB.setDelPressedLink( LINK( this, PADialog, DelPressedHdl ) );
+
+ ::psp::PrintFontManager& rFontManager( ::psp::PrintFontManager::get() );
+ if( ! rFontManager.checkImportPossible() )
+ m_aFontsPB.Enable( FALSE );
+}
+
+PADialog::~PADialog()
+{
+ m_rPIManager.writePrinterConfig();
+ freePadminRC();
+}
+
+String PADialog::getSelectedDevice()
+{
+ int nPos = m_aDevicesLB.GetSelectEntryPos();
+ int nLen = (int)m_aDevicesLB.GetEntryData( nPos );
+ return m_aDevicesLB.GetEntry( nPos ).Copy( 0, nLen );
+}
+
+IMPL_LINK( PADialog, DelPressedHdl, ListBox*, pBox )
+{
+ if( pBox == &m_aDevicesLB && m_aRemPB.IsEnabled() )
+ ClickBtnHdl( &m_aRemPB );
+ return 0;
+}
+
+IMPL_LINK( PADialog, ClickBtnHdl, PushButton*, pButton )
+{
+ if( pButton == &m_aStdPB )
+ UpdateDefPrt();
+ else if( pButton == &m_aRemPB && AreYouSure( this, RID_QUERY_REMOVEPRINTER ) )
+ RemDevice();
+ else if( pButton == &m_aConfPB )
+ ConfigureDevice();
+ else if( pButton == &m_aRenamePB )
+ RenameDevice();
+ else if( pButton == &m_aTestPagePB )
+ PrintTestPage();
+ else if( pButton == &m_aAddPB )
+ AddDevice();
+ else if( pButton == &m_aFontsPB )
+ {
+ FontNameDlg aDialog( this );
+ aDialog.Execute();
+ }
+ else if( pButton == & m_aAddFontsPB )
+ {
+ FontImportDialog aDialog( this );
+ aDialog.Execute();
+ }
+
+ return 0;
+}
+
+IMPL_LINK( PADialog, DoubleClickHdl, ListBox*, pListBox )
+{
+ if( pListBox == &m_aDevicesLB )
+ UpdateDefPrt();
+ return 0;
+}
+
+IMPL_LINK( PADialog, SelectHdl, ListBox*, pListBox )
+{
+ if( pListBox == &m_aDevicesLB )
+ {
+ String sSelect = getSelectedDevice();
+ String sDefPrt = m_rPIManager.getDefaultPrinter();
+ if( sDefPrt == sSelect )
+ m_aRemPB.Enable( FALSE );
+ else
+ m_aRemPB.Enable( TRUE );
+ UpdateText();
+ }
+ return 0;
+}
+
+IMPL_LINK( PADialog, EndPrintHdl, void*, pNil )
+{
+ String aInfoString( PaResId( RID_PA_TXT_TESTPAGE_PRINTED ) );
+ InfoBox aInfoBox( this, aInfoString );
+ aInfoBox.SetText( String( PaResId( RID_BXT_TESTPAGE ) ) );
+ aInfoBox.Execute();
+
+ delete m_pPrinter;
+ m_pPrinter = NULL;
+ return 0;
+}
+
+void PADialog::UpdateDefPrt()
+{
+ m_rPIManager.setDefaultPrinter( getSelectedDevice() );
+
+ UpdateDevice();
+ UpdateText();
+
+ if( m_aRemPB.HasFocus() )
+ m_aDevicesLB.GetFocus();
+ m_aRemPB.Enable( FALSE );
+}
+
+void PADialog::UpdateText()
+{
+ const PrinterInfo& rInfo = m_rPIManager.getPrinterInfo( getSelectedDevice() );
+ String aDriver( rInfo.m_aPrinterName );
+ aDriver.AppendAscii( " (" );
+ aDriver += String( rInfo.m_aDriverName );
+ aDriver.Append( ')' );
+ m_aDriver.SetText( aDriver );
+ m_aCommand.SetText( rInfo.m_aCommand );
+ m_aComment.SetText( rInfo.m_aComment );
+ m_aLocation.SetText( rInfo.m_aLocation );
+}
+
+static Point project( const Point& rPoint )
+{
+ const double angle_x = M_PI / 6.0;
+ const double angle_z = M_PI / 6.0;
+
+ // transform planar coordinates to 3d
+ double x = rPoint.X();
+ double y = rPoint.Y();
+ double z = 0;
+
+ // rotate around X axis
+ double x1 = x;
+ double y1 = y * cos( angle_x );
+ double z1 = y * sin( angle_x );
+
+ // rotate around Z axis
+ double x2 = x1 * cos( angle_z ) + y1 * sin( angle_z );
+ double y2 = y1 * cos( angle_z ) - x1 * sin( angle_z );
+ double z2 = z1;
+
+ return Point( x2, z2 );
+}
+
+static Color approachColor( const Color& rFrom, const Color& rTo )
+{
+ Color aColor;
+ UINT8 nDiff;
+ // approach red
+ if( rFrom.GetRed() < rTo.GetRed() )
+ {
+ nDiff = rTo.GetRed() - rFrom.GetRed();
+ aColor.SetRed( rFrom.GetRed() + ( nDiff < 10 ? nDiff : 10 ) );
+ }
+ else if( rFrom.GetRed() > rTo.GetRed() )
+ {
+ nDiff = rFrom.GetRed() - rTo.GetRed();
+ aColor.SetRed( rFrom.GetRed() - ( nDiff < 10 ? nDiff : 10 ) );
+ }
+ else
+ aColor.SetRed( rFrom.GetRed() );
+
+ // approach Green
+ if( rFrom.GetGreen() < rTo.GetGreen() )
+ {
+ nDiff = rTo.GetGreen() - rFrom.GetGreen();
+ aColor.SetGreen( rFrom.GetGreen() + ( nDiff < 10 ? nDiff : 10 ) );
+ }
+ else if( rFrom.GetGreen() > rTo.GetGreen() )
+ {
+ nDiff = rFrom.GetGreen() - rTo.GetGreen();
+ aColor.SetGreen( rFrom.GetGreen() - ( nDiff < 10 ? nDiff : 10 ) );
+ }
+ else
+ aColor.SetGreen( rFrom.GetGreen() );
+
+ // approach blue
+ if( rFrom.GetBlue() < rTo.GetBlue() )
+ {
+ nDiff = rTo.GetBlue() - rFrom.GetBlue();
+ aColor.SetBlue( rFrom.GetBlue() + ( nDiff < 10 ? nDiff : 10 ) );
+ }
+ else if( rFrom.GetBlue() > rTo.GetBlue() )
+ {
+ nDiff = rFrom.GetBlue() - rTo.GetBlue();
+ aColor.SetBlue( rFrom.GetBlue() - ( nDiff < 10 ? nDiff : 10 ) );
+ }
+ else
+ aColor.SetBlue( rFrom.GetBlue() );
+
+ return aColor;
+}
+
+#define DELTA 5.0
+void PADialog::PrintTestPage()
+{
+ if( m_pPrinter ) // already printing; user pressed button twice
+ return;
+
+ rtl_TextEncoding aEncoding = gsl_getSystemTextEncoding();
+
+ String sPrinter( getSelectedDevice() );
+
+ m_pPrinter = new Printer( sPrinter );
+
+ PrinterInfo aInfo( m_rPIManager.getPrinterInfo( sPrinter ) );
+ const PPDParser* pPrintParser = aInfo.m_pParser;
+
+ MapMode aMapMode( MAP_100TH_MM );
+
+ Bitmap aButterfly( PaResId( RID_BUTTERFLY ) );
+
+ m_pPrinter->SetMapMode( aMapMode );
+ m_pPrinter->SetEndPrintHdl( LINK( this, PADialog, EndPrintHdl ) );
+ String aJobName( String( RTL_CONSTASCII_USTRINGPARAM( "StarOffice Test" ) ) );
+ if( m_pPrinter->GetName() != sPrinter || ! m_pPrinter->StartJob( aJobName ) )
+ {
+ String aString( PaResId( RID_ERR_NOPRINTER ) );
+ aString.SearchAndReplaceAscii( "%s", sPrinter );
+
+ ErrorBox aErrorBox( this, WB_OK | WB_DEF_OK, aString );
+ aErrorBox.SetText( String( PaResId( RID_BXT_ENVIRONMENT ) ) );
+ aErrorBox.Execute();
+ delete m_pPrinter;
+ m_pPrinter = 0;
+ return;
+ }
+ m_pPrinter->StartPage();
+
+ Size aPaperSize=m_pPrinter->GetOutputSize();
+ Point aCenter( aPaperSize.Width()/2-300,
+ aPaperSize.Height() - aPaperSize.Width()/2 );
+ Point aP1( aPaperSize.Width()/48, 0), aP2( aPaperSize.Width()/40, 0 ), aPoint;
+
+ m_pPrinter->DrawRect( Rectangle( Point( 0,0 ), aPaperSize ) );
+ m_pPrinter->DrawRect( Rectangle( Point( 100,100 ),
+ Size( aPaperSize.Width()-200,
+ aPaperSize.Height()-200 ) ) );
+ m_pPrinter->DrawRect( Rectangle( Point( 200,200 ),
+ Size( aPaperSize.Width()-400,
+ aPaperSize.Height()-400 ) ) );
+ m_pPrinter->DrawRect( Rectangle( Point( 300,300 ),
+ Size( aPaperSize.Width()-600,
+ aPaperSize.Height()-600 ) ) );
+
+ Font aFont( m_pPrinter->GetFont() );
+ aFont.SetName( String( RTL_CONSTASCII_USTRINGPARAM( "Courier" ) ) );
+ aFont.SetWeight( WEIGHT_NORMAL );
+ aFont.SetItalic( ITALIC_NONE );
+ m_pPrinter->SetFont( aFont );
+
+ String aPrintText;
+ long nWidth = 0, nMaxWidth = 0;
+ String aToken;
+
+ aToken = String( PaResId( RID_TXT_TESTPAGE_NAME ) );
+ nMaxWidth = ( nWidth = m_pPrinter->GetTextWidth( aToken ) ) > nMaxWidth ? nWidth : nMaxWidth;
+ aPrintText += aToken;
+ aPrintText += '\n';
+ aToken = String( PaResId( RID_TXT_TESTPAGE_MODEL ) );
+ nMaxWidth = ( nWidth = m_pPrinter->GetTextWidth( aToken ) ) > nMaxWidth ? nWidth : nMaxWidth;
+ aPrintText += aToken;
+ aPrintText += '\n';
+ aPrintText.AppendAscii( "PPD" );
+ aPrintText += '\n';
+ aToken = String( PaResId( RID_TXT_TESTPAGE_QUEUE ) );
+ nMaxWidth = ( nWidth = m_pPrinter->GetTextWidth( aToken ) ) > nMaxWidth ? nWidth : nMaxWidth;
+ aPrintText += aToken;
+ aPrintText += '\n';
+ aToken = String( PaResId( RID_TXT_TESTPAGE_COMMENT ) );
+ nMaxWidth = ( nWidth = m_pPrinter->GetTextWidth( aToken ) ) > nMaxWidth ? nWidth : nMaxWidth;
+ aPrintText += aToken;
+ aPrintText += '\n';
+ aToken = String( PaResId( RID_TXT_TESTPAGE_DATE ) );
+ nMaxWidth = ( nWidth = m_pPrinter->GetTextWidth( aToken ) ) > nMaxWidth ? nWidth : nMaxWidth;
+ aPrintText += aToken;
+ aPrintText += '\n';
+ aToken = String( PaResId( RID_TXT_TESTPAGE_TIME ) );
+ nMaxWidth = ( nWidth = m_pPrinter->GetTextWidth( aToken ) ) > nMaxWidth ? nWidth : nMaxWidth;
+ aPrintText += aToken;
+
+ m_pPrinter->DrawText( Rectangle( Point( 1000, 2000 ),
+ Size( aPaperSize.Width() - 2000,
+ aPaperSize.Height() - 4000 ) ),
+ aPrintText,
+ TEXT_DRAW_MULTILINE );
+
+ aPrintText = String( RTL_CONSTASCII_USTRINGPARAM( ": " ) );
+ aPrintText += sPrinter;
+ aPrintText.AppendAscii( "\n: " );
+ aPrintText += pPrintParser->getPrinterName();
+ aPrintText.AppendAscii( "\n: " );
+ INetURLObject aDriverPath( pPrintParser->getFilename(), INET_PROT_FILE, INetURLObject::ENCODE_ALL );
+ aPrintText += aDriverPath.GetName();
+ aPrintText.AppendAscii( "\n: " );
+ aPrintText += String( aInfo.m_aCommand );
+ aPrintText.AppendAscii( "\n: " );
+ aPrintText += String( aInfo.m_aComment );
+ aPrintText.AppendAscii( "\n: " );
+ aPrintText += Application::GetAppInternational().GetLongDate( Date() );
+ aPrintText.AppendAscii( "\n: " );
+ aPrintText += Application::GetAppInternational().GetTime( Time() );
+
+ m_pPrinter->DrawText( Rectangle( Point( 1100 + nMaxWidth, 2000 ),
+ Size( aPaperSize.Width() - 2100 - nMaxWidth,
+ aPaperSize.Height() - 4000 ) ),
+ aPrintText,
+ TEXT_DRAW_MULTILINE );
+
+ m_pPrinter->DrawBitmap( Point( aPaperSize.Width() - 4000, 1000 ),
+ Size( 3000,3000 ),
+ aButterfly );
+ m_pPrinter->SetFillColor();
+ m_pPrinter->DrawRect( Rectangle( Point( aPaperSize.Width() - 4000, 1000 ),
+ Size( 3000,3000 ) ) );
+
+ Color aWhite( 0xff, 0xff, 0xff );
+ Color aBlack( 0, 0, 0 );
+ Color aLightRed( 0xff, 0, 0 );
+ Color aDarkRed( 0x40, 0, 0 );
+ Color aLightBlue( 0, 0, 0xff );
+ Color aDarkBlue( 0,0,0x40 );
+ Color aLightGreen( 0, 0xff, 0 );
+ Color aDarkGreen( 0, 0x40, 0 );
+
+ Gradient aGradient( GRADIENT_LINEAR, aBlack, aWhite );
+ aGradient.SetAngle( 900 );
+ m_pPrinter->DrawGradient( Rectangle( Point( 1000, 5500 ),
+ Size( aPaperSize.Width() - 2000,
+ 500 ) ), aGradient );
+ aGradient.SetStartColor( aDarkRed );
+ aGradient.SetEndColor( aLightBlue );
+ m_pPrinter->DrawGradient( Rectangle( Point( 1000, 6300 ),
+ Size( aPaperSize.Width() - 2000,
+ 500 ) ), aGradient );
+ aGradient.SetStartColor( aDarkBlue );
+ aGradient.SetEndColor( aLightGreen );
+ m_pPrinter->DrawGradient( Rectangle( Point( 1000, 7100 ),
+ Size( aPaperSize.Width() - 2000,
+ 500 ) ), aGradient );
+ aGradient.SetStartColor( aDarkGreen );
+ aGradient.SetEndColor( aLightRed );
+ m_pPrinter->DrawGradient( Rectangle( Point( 1000, 7900 ),
+ Size( aPaperSize.Width() - 2000,
+ 500 ) ), aGradient );
+
+
+
+ LineInfo aLineInfo( LINE_SOLID, 200 );
+ double sind = sin( DELTA*M_PI/180.0 );
+ double cosd = cos( DELTA*M_PI/180.0 );
+ double factor = 1 + (DELTA/1000.0);
+ int n=0;
+ Color aLineColor( 0, 0, 0 );
+ Color aApproachColor( 0, 0, 200 );
+ while ( aP2.X() < aCenter.X() && n++ < 680 )
+ {
+ aLineInfo.SetWidth( n/3 );
+ aLineColor = approachColor( aLineColor, aApproachColor );
+ m_pPrinter->SetLineColor( aLineColor );
+
+ // switch aproach color
+ if( aApproachColor.IsRGBEqual( aLineColor ) )
+ {
+ if( aApproachColor.GetRed() )
+ aApproachColor = Color( 0, 0, 200 );
+ else if( aApproachColor.GetGreen() )
+ aApproachColor = Color( 200, 0, 0 );
+ else
+ aApproachColor = Color( 0, 200, 0 );
+ }
+
+ m_pPrinter->DrawLine( project( aP1 ) + aCenter,
+ project( aP2 ) + aCenter,
+ aLineInfo );
+ aPoint.X() = (((double)aP1.X())*cosd - ((double)aP1.Y())*sind)*factor;
+ aPoint.Y() = (((double)aP1.Y())*cosd + ((double)aP1.X())*sind)*factor;
+ aP1 = aPoint;
+ aPoint.X() = (((double)aP2.X())*cosd - ((double)aP2.Y())*sind)*factor;
+ aPoint.Y() = (((double)aP2.Y())*cosd + ((double)aP2.X())*sind)*factor;
+ aP2 = aPoint;
+ }
+#if defined DEBUG || defined DBG_UTIL
+ fprintf( stderr, "%d lines\n",n );
+#endif
+ m_pPrinter->EndPage();
+ m_pPrinter->EndJob();
+}
+
+void PADialog::AddDevice()
+{
+ AddPrinterDialog aDlg( this );
+
+ if( aDlg.Execute() )
+ UpdateDevice();
+}
+
+void PADialog::RemDevice()
+{
+ String aPrinter( getSelectedDevice() );
+ String aDefPrinter( m_rPIManager.getDefaultPrinter() );
+ // do not remove the default printer
+ if( aPrinter.Equals( aDefPrinter ) )
+ return;
+
+ if( ! m_rPIManager.removePrinter( aPrinter ) )
+ {
+ String aText( PaResId( RID_ERR_PRINTERNOTREMOVEABLE ) );
+ aText.SearchAndReplace( String( RTL_CONSTASCII_USTRINGPARAM( "%s" ) ), aPrinter );
+ ErrorBox aBox( this, WB_OK | WB_DEF_OK, aText );
+ aBox.Execute();
+ return;
+ }
+ m_aPrinters.remove( aPrinter );
+
+ m_aDevicesLB.RemoveEntry( m_aDevicesLB.GetSelectEntryPos() );
+ for( int i=0; i < m_aDevicesLB.GetEntryCount(); i++ )
+ {
+ if( m_aDevicesLB.GetEntry( i ).CompareTo( aDefPrinter, aDefPrinter.Len() ) == COMPARE_EQUAL )
+ {
+ m_aDevicesLB.SelectEntryPos( i, TRUE );
+ UpdateText();
+ break;
+ }
+ }
+
+ m_aDevicesLB.GetFocus();
+
+ if( m_aDevicesLB.GetEntryCount() < 2 )
+ m_aRemPB.Enable( FALSE );
+}
+
+void PADialog::ConfigureDevice()
+{
+ String aPrinter( getSelectedDevice() );
+
+ if( ! aPrinter.Len() )
+ return;
+
+ PrinterInfo aInfo( m_rPIManager.getPrinterInfo( aPrinter ) );
+ RTSDialog aDialog( aInfo, aPrinter, true, this );
+
+ if( aDialog.Execute() )
+ m_rPIManager.changePrinterInfo( aPrinter, aDialog.getSetup() );
+
+ UpdateText();
+}
+
+void PADialog::RenameDevice()
+{
+ rtl_TextEncoding aEncoding = gsl_getSystemTextEncoding();
+
+ String aPrinter( getSelectedDevice() );
+ OUString aOldPrinter( aPrinter );
+ int nSelectEntryPos = m_aDevicesLB.GetSelectEntryPos();
+
+ if( ! aPrinter.Len() )
+ return;
+
+ QueryString aQuery( this,
+ String( PaResId( RID_QRY_PRTNAME ) ),
+ aPrinter );
+ aQuery.SetText( m_aRenameStr );
+ aQuery.Execute();
+
+ if( aPrinter.Len() )
+ {
+ PrinterInfo aInfo( m_rPIManager.getPrinterInfo( aOldPrinter ) );
+ aInfo.m_aPrinterName = aPrinter;
+ if( m_rPIManager.addPrinter( aPrinter, aInfo.m_aDriverName ) )
+ {
+ m_aPrinters.push_back( aPrinter );
+ if( m_rPIManager.removePrinter( aOldPrinter ) )
+ m_aPrinters.remove( aOldPrinter );
+ m_rPIManager.changePrinterInfo( aPrinter, aInfo );
+ if( m_rPIManager.getDefaultPrinter() == aOldPrinter )
+ {
+ m_rPIManager.setDefaultPrinter( aPrinter );
+ UpdateDefPrt();
+ }
+ UpdateDevice();
+ }
+ }
+}
+
+void PADialog::UpdateDevice()
+{
+ rtl_TextEncoding aEncoding = gsl_getSystemTextEncoding();
+
+ m_aDevicesLB.Clear();
+
+ m_rPIManager.listPrinters( m_aPrinters );
+ ::std::list< OUString >::iterator it;
+ for( it = m_aPrinters.begin(); it != m_aPrinters.end(); ++it )
+ {
+ const PrinterInfo& rInfo( m_rPIManager.getPrinterInfo( *it ) );
+ String aEntry( *it );
+ if( *it == m_rPIManager.getDefaultPrinter() )
+ {
+ aEntry.AppendAscii( " (" );
+ aEntry += m_aDefPrt;
+ aEntry.AppendAscii( ")" );
+ }
+ int nPos = m_aDevicesLB.InsertEntry( aEntry );
+ m_aDevicesLB.SetEntryData( nPos, (void*)it->getLength() );
+ if( *it == m_rPIManager.getDefaultPrinter() )
+ {
+ m_aDevicesLB.SelectEntryPos( nPos );
+ UpdateText();
+ }
+ }
+}
+
+
+// ------------------------------------------------------------------
+
+// get a nice icon
+#include <psetupl.xpm>
+
+extern "C"
+void vcl_customIcon1(
+ char **&iconRes1,
+ char **&iconRes2,
+ char **&iconRes3,
+ char **&iconRes4
+ )
+{
+ iconRes1 = L3PSetup_m_pm;
+ iconRes2 = NULL;
+ iconRes3 = NULL;
+ iconRes4 = NULL;
+}