Changeset 93 for trunk/Lucide/SOURCE


Ignore:
Timestamp:
Aug 6, 2006, 5:11:51 PM (15 years ago)
Author:
Eugene Romanenko
Message:

basic printing, postscript and bitmap

Location:
trunk/Lucide/SOURCE/gui
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/Lucide/SOURCE/gui/Lucide_res.H

    r90 r93  
    139139#define IDC_LABELTO         18
    140140#define IDC_PGTO            19
    141 #define IDC_TYPE_POSTSCRIPT     20
     141#define IDC_TYPE_POSTSCRIPT     201
    142142#define IDC_TYPE_ASIMAGE        21
    143143#define IDC_HIGHER_IMAGE_QUALITY        22
  • trunk/Lucide/SOURCE/gui/print.cpp

    r92 r93  
    6161}
    6262
     63#ifndef DEVESC_ERROR
     64#define DEVESC_ERROR        (-1L)
     65#endif
     66
    6367#define UNITS_MULTIPLIER    100
    6468#define STD_IMAGE_ZOOM      2.0
     
    267271
    268272
    269 
    270273bool LucidePrinting::doPsPrint( HAB lhab )
    271274{
     
    301304    strcat( tmpps, "TMPLUCID.PS" );
    302305
    303     BOOL rc = doc->exportToPostScript( ev, tmpps, psetup->pgfrom-1, psetup->pgto-1,
    304                                        pwidth, pheight, false, &abortPrinting );
     306    boolean rcexp = doc->exportToPostScript( ev, tmpps, psetup->pgfrom-1, psetup->pgto-1,
     307                                             pwidth, pheight, false, &abortPrinting );
    305308
    306309    if ( abortPrinting ) {
     
    308311        return true;
    309312    }
    310     if ( !rc ) {
     313    if ( !rcexp ) {
    311314        unlink( tmpps );
    312315        return false;
     
    317320    delete spooling_ps;
    318321
    319     // build a devopenstruct for the call to SplQmOpen
     322    // build a devopenstruct for the call to DevOpenDC
    320323    dos.pszLogAddress = psetup->QueueInfo.pszName;              // 1
    321324    strcpy( achDriverName, psetup->QueueInfo.pszDriverName );
     
    325328    dos.pszDataType   = "PM_Q_RAW";                             // 4
    326329
    327     HSPL hspl = SplQmOpen( "*", 4L, (PQMOPENDATA)&dos );
    328     if ( hspl == SPL_ERROR ) {
     330    HDC hdcPrinter = DevOpenDC( lhab, OD_QUEUED, "*", 4L, (PDEVOPENDATA)&dos, NULLHANDLE );
     331    if ( hdcPrinter == DEV_ERROR ) {
    329332        unlink( tmpps );
    330333        return false;
    331334    }
    332335
    333     rc = SplQmStartDoc( hspl, title );
    334     if ( !rc ) {
    335         SplQmAbort( hspl );
     336    // Issue STARTDOC to begin printing
     337    LONG rc = DevEscape( hdcPrinter, DEVESC_STARTDOC, strlen(title), (PBYTE)title, NULL, NULL );
     338    if ( rc == DEVESC_ERROR ) {
     339        DevCloseDC( hdcPrinter );
    336340        unlink( tmpps );
    337341        return false;
     
    340344    FILE *f = fopen( tmpps, "rb" );
    341345    if ( f == NULL ) {
    342         SplQmAbort( hspl );
     346        DevEscape( hdcPrinter, DEVESC_ABORTDOC, 0L, NULL, NULL, NULL );
     347        DevCloseDC( hdcPrinter );
    343348        unlink( tmpps );
    344349        return false;
     
    346351
    347352    bool splerr = false;
    348     char *pcl_prolog = "\x1b%-12345X@PJL JOB\n@PJL ENTER LANGUAGE = POSTSCRIPT \n";
    349     char *pcl_epilog = "\x1b%-12345X@PJL EOJ\n";
    350 
    351     if ( !( rc = SplQmWrite( hspl, strlen( pcl_prolog ), pcl_prolog ) ) ) {
    352         splerr = true;
    353     }
    354 
    355353    void *buf = malloc( PS_PRINT_BUF_SIZE );
    356354    int rd = 0;
    357     while ( rc && ( rd = fread( buf, 1, PS_PRINT_BUF_SIZE, f ) ) != 0 ) {
    358         rc = SplQmWrite( hspl, rd, buf );
    359         if ( !rc || abortPrinting ) {
     355    while ( ( rc != DEVESC_ERROR ) && ( rd = fread( buf, 1, PS_PRINT_BUF_SIZE, f ) ) != 0 )
     356    {
     357        rc = DevEscape( hdcPrinter, DEVESC_RAWDATA, rd, (char *)buf, NULL, NULL );
     358        if ( ( rc == DEVESC_ERROR ) || abortPrinting ) {
    360359            splerr = true;
    361360            break;
     
    366365    unlink( tmpps );
    367366
    368     if ( !splerr ) {
    369         if ( !( rc = SplQmWrite( hspl, strlen( pcl_epilog ), pcl_epilog ) ) ) {
    370             splerr = true;
    371         }
    372     }
    373 
    374     if ( splerr ) {
    375         SplQmAbort( hspl );
    376         if ( !abortPrinting ) {
    377             return false;
    378         }
    379     }
    380     else {
    381         SplQmEndDoc( hspl );
    382         SplQmClose( hspl );
     367    DevEscape( hdcPrinter, splerr ? DEVESC_ABORTDOC : DEVESC_ENDDOC,
     368               0L, NULL, NULL, NULL );
     369    DevCloseDC( hdcPrinter );
     370
     371    if ( splerr && !abortPrinting ) {
     372        return false;
    383373    }
    384374
    385375    return true;
    386376}
     377
    387378
    388379bool LucidePrinting::queryCurrentForm( HAB lhab, PHCINFO pcurForm )
  • trunk/Lucide/SOURCE/gui/printDlg.cpp

    r91 r93  
    8080    WinEnableControl( hwnd, IDC_JOBPROPERTIES, TRUE );
    8181    WinEnableControl( hwnd, DID_OK, TRUE );
     82
     83    // Set the print type
     84    if ( doc->isPostScriptExportable( ev ) && isPostscriptDevice() ) {
     85        WinEnableControl( hwnd, IDC_TYPE_POSTSCRIPT, TRUE );
     86        WinCheckButton( hwnd, IDC_TYPE_POSTSCRIPT, TRUE );
     87    }
     88    else {
     89        WinEnableControl( hwnd, IDC_TYPE_POSTSCRIPT, FALSE );
     90        WinCheckButton( hwnd, IDC_TYPE_ASIMAGE, TRUE );
     91    }
     92
     93    WinSendMsg( hwnd, WM_CONTROL,
     94                MPFROM2SHORT( IDC_TYPE_POSTSCRIPT, BN_CLICKED ),
     95                MPFROMHWND( WinWindowFromID( hwnd, IDC_TYPE_POSTSCRIPT ) ) );
    8296}
    8397
     
    155169}
    156170
     171bool PrintDlg::isPostscriptDevice()
     172{
     173    char *achDriverName = new char[ DRIVERNAME_LENGTH ];
     174
     175    // build a devopenstruct for the call to DevOpenDC
     176    DEVOPENSTRUC *dos   = new DEVOPENSTRUC;
     177    memset( dos, 0, sizeof( DEVOPENSTRUC ) );
     178    dos->pszLogAddress = psetup->QueueInfo.pszName;              // 1
     179    strcpy( achDriverName, psetup->QueueInfo.pszDriverName );
     180    achDriverName[ strcspn( achDriverName, "." ) ] = '\0';
     181    dos->pszDriverName = achDriverName;                          // 2
     182    dos->pdriv = psetup->QueueInfo.pDriverData;                  // 3
     183
     184    long lTech = 0;
     185    HDC hdcPrinterInfo = DevOpenDC( hab, OD_INFO, "*", 3L, (PDEVOPENDATA)dos, NULLHANDLE );
     186    if ( hdcPrinterInfo != DEV_ERROR ) {
     187        DevQueryCaps( hdcPrinterInfo, CAPS_TECHNOLOGY, sizeof(long), &lTech );
     188        DevCloseDC( hdcPrinterInfo );
     189    }
     190
     191    delete achDriverName;
     192    delete dos;
     193    return ( lTech == CAPS_TECH_POSTSCRIPT );
     194}
    157195
    158196MRESULT EXPENTRY PrintDlg::printDlgProc( HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2 )
     
    176214            localizeDialog( hwnd );
    177215            centerWindow( _this->hFrame, hwnd );
    178 
    179             // Enum printer queues
    180             _this->enumQueues( hwnd );
    181216
    182217            // Print range
     
    194229                               MPFROMLONG( pages ), MPVOID );
    195230
    196             // Set the print type
    197             if ( _this->doc->isPostScriptExportable( ev ) ) {
    198                 WinEnableControl( hwnd, IDC_TYPE_POSTSCRIPT, TRUE );
    199                 WinCheckButton( hwnd, IDC_TYPE_POSTSCRIPT, TRUE );
    200             }
    201             else {
    202                 WinEnableControl( hwnd, IDC_TYPE_POSTSCRIPT, FALSE );
    203                 WinCheckButton( hwnd, IDC_TYPE_ASIMAGE, TRUE );
    204             }
    205             WinSendMsg( hwnd, WM_CONTROL,
    206                         MPFROM2SHORT( IDC_TYPE_POSTSCRIPT, BN_CLICKED ),
    207                         MPFROMHWND( WinWindowFromID( hwnd, IDC_TYPE_POSTSCRIPT ) ) );
    208 
     231            // Enum printer queues
     232            _this->enumQueues( hwnd );
    209233
    210234            return (MRESULT)FALSE;
  • trunk/Lucide/SOURCE/gui/printDlg.h

    r91 r93  
    5656        void showJobProperties();
    5757        void setCurrentQInfo( HWND hwnd, PPRQINFO3 q );
     58        bool isPostscriptDevice();
    5859        static MRESULT EXPENTRY printDlgProc( HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2 );
    5960
Note: See TracChangeset for help on using the changeset viewer.