Changeset 162 for trunk/Lucide


Ignore:
Timestamp:
Nov 20, 2006, 7:50:04 PM (15 years ago)
Author:
Eugene Romanenko
Message:

'pring to file' option for postscript output

Location:
trunk/Lucide
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/Lucide/BIN/Lucide.lng

    r161 r162  
    193193PD_PRINT_TYPE=Print type
    194194PD_TYPE_POSTSCRIPT=Post~script
     195PD_PRINT_TO_FILE=Print to file
    195196PD_TYPE_ASIMAGE=As ~image
    196197PD_HIGHER_IMAGE_QUALITY=~Higher image quality (slower and require more memory)
  • trunk/Lucide/SOURCE/gui/Lucide_res.H

    r161 r162  
    150150#define IDC_TYPE_POSTSCRIPT     21
    151151#define IDC_TYPE_ASIMAGE        22
    152 #define IDC_HIGHER_IMAGE_QUALITY        23
    153 #define IDC_PORTRAIT            24
    154 #define IDC_LANDSCAPE           25
    155 #define IDC_MLEFT                       26
    156 #define IDC_MRIGHT                      27
    157 #define IDC_MTOP                        28
    158 #define IDC_MBOTTOM                     29
    159 #define IDC_SELECTED_FORM       30
     152#define IDC_PRINT_TO_FILE       23
     153#define IDC_HIGHER_IMAGE_QUALITY        24
     154#define IDC_PORTRAIT            25
     155#define IDC_LANDSCAPE           26
     156#define IDC_MLEFT                       27
     157#define IDC_MRIGHT                      28
     158#define IDC_MTOP                        29
     159#define IDC_MBOTTOM                     30
     160#define IDC_SELECTED_FORM       31
    160161
    161162
  • trunk/Lucide/SOURCE/gui/dialogs.rc

    r102 r162  
    170170                CONTROL "PD_PRINT_TYPE", -1, 2, 91, 253, 40, WC_STATIC, SS_GROUPBOX | DT_LEFT | DT_TOP | DT_MNEMONIC | WS_VISIBLE | WS_GROUP
    171171                PRESPARAMS PP_FONTNAMESIZE "9.WarpSans"
    172                 CONTROL "PD_TYPE_POSTSCRIPT", IDC_TYPE_POSTSCRIPT, 9, 113, 240, 10, WC_BUTTON, BS_AUTORADIOBUTTON | WS_VISIBLE | WS_GROUP | WS_TABSTOP
     172                CONTROL "PD_TYPE_POSTSCRIPT", IDC_TYPE_POSTSCRIPT, 9, 113, 114, 10, WC_BUTTON, BS_AUTORADIOBUTTON | WS_VISIBLE | WS_GROUP | WS_TABSTOP
    173173                PRESPARAMS PP_FONTNAMESIZE "9.WarpSans"
    174174                CONTROL "PD_TYPE_ASIMAGE", IDC_TYPE_ASIMAGE, 9, 103, 240, 10, WC_BUTTON, BS_AUTORADIOBUTTON | WS_VISIBLE | WS_TABSTOP
    175175                PRESPARAMS PP_FONTNAMESIZE "9.WarpSans"
     176                CONTROL "PD_PRINT_TO_FILE", IDC_PRINT_TO_FILE, 127, 113, 124, 10, WC_BUTTON, BS_AUTOCHECKBOX | WS_VISIBLE | WS_GROUP | WS_TABSTOP
     177                PRESPARAMS PP_FONTNAMESIZE "9.WarpSans"
    176178                CONTROL "PD_HIGHER_IMAGE_QUALITY", IDC_HIGHER_IMAGE_QUALITY, 19, 93, 230, 10, WC_BUTTON, BS_AUTOCHECKBOX | WS_VISIBLE | WS_GROUP | WS_TABSTOP
    177179                PRESPARAMS PP_FONTNAMESIZE "9.WarpSans"
     
    209211                PRESPARAMS PP_FONTNAMESIZE "9.WarpSans"
    210212        END
    211 
    212 END
    213 
     213END
     214
  • trunk/Lucide/SOURCE/gui/print.cpp

    r155 r162  
    309309
    310310    char tmpps[ CCHMAXPATH ] = "";
    311     getTmpDir( tmpps );
    312     strcat( tmpps, "TMPLUCID.PS" );
     311    if ( psetup->psToFile )
     312    {
     313        strcpy( tmpps, title );
     314        char *pointpos = strrchr( tmpps, '.' );
     315        if ( pointpos != NULL ) {
     316            *pointpos = 0;
     317        }
     318        strcat( tmpps, ".ps" );
     319
     320        PFILEDLG fd = new FILEDLG;
     321        memset( fd, 0, sizeof( FILEDLG ) );
     322        fd->cbSize = sizeof( FILEDLG );
     323        fd->fl = FDS_CENTER | FDS_SAVEAS_DIALOG;
     324        strcpy( fd->szFullFile, tmpps );
     325        WinFileDlg( HWND_DESKTOP, hFrame, fd );
     326        if ( fd->lReturn == DID_OK ) {
     327            strcpy( tmpps, fd->szFullFile );
     328            delete fd;
     329        }
     330        else {
     331            delete fd;
     332            return true;
     333        }
     334    }
     335    else {
     336        getTmpDir( tmpps );
     337        strcat( tmpps, "TMPLUCID.PS" );
     338    }
    313339
    314340    boolean rcexp = doc->exportToPostScript( ev, tmpps, psetup->pgfrom-1, psetup->pgto-1,
     
    324350    }
    325351
    326     char *spooling_ps = newstrdupL( PRINT_SPOOLING_POSTSCRIPT );
    327     progressDlg->setText( spooling_ps );
    328     delete spooling_ps;
    329 
    330     // build a devopenstruct for the call to DevOpenDC
    331     dos.pszLogAddress      = psetup->QueueInfo.pszName;              // 1
    332     strcpy( achDriverName, psetup->QueueInfo.pszDriverName );
    333     achDriverName[ strcspn( achDriverName, "." ) ] = '\0';
    334     dos.pszDriverName      = achDriverName;                          // 2
    335     dos.pdriv              = psetup->QueueInfo.pDriverData;          // 3
    336     dos.pszDataType        = "PM_Q_RAW";                             // 4
    337     dos.pszComment         = (PSZ)appName;                           // 5
    338     dos.pszQueueProcName   = NULL;                                   // 6
    339     snprintf( achQueueProcParams, sizeof( achQueueProcParams ), "COP=%d", psetup->copies );
    340     dos.pszQueueProcParams = achQueueProcParams;                     // 7
    341 
    342     HDC hdcPrinter = DevOpenDC( lhab, OD_QUEUED, "*", 7L, (PDEVOPENDATA)&dos, NULLHANDLE );
    343     if ( hdcPrinter == DEV_ERROR ) {
     352    if ( !psetup->psToFile )
     353    {
     354        char *spooling_ps = newstrdupL( PRINT_SPOOLING_POSTSCRIPT );
     355        progressDlg->setText( spooling_ps );
     356        delete spooling_ps;
     357
     358        // build a devopenstruct for the call to DevOpenDC
     359        dos.pszLogAddress      = psetup->QueueInfo.pszName;              // 1
     360        strcpy( achDriverName, psetup->QueueInfo.pszDriverName );
     361        achDriverName[ strcspn( achDriverName, "." ) ] = '\0';
     362        dos.pszDriverName      = achDriverName;                          // 2
     363        dos.pdriv              = psetup->QueueInfo.pDriverData;          // 3
     364        dos.pszDataType        = "PM_Q_RAW";                             // 4
     365        dos.pszComment         = (PSZ)appName;                           // 5
     366        dos.pszQueueProcName   = NULL;                                   // 6
     367        snprintf( achQueueProcParams, sizeof( achQueueProcParams ), "COP=%d", psetup->copies );
     368        dos.pszQueueProcParams = achQueueProcParams;                     // 7
     369
     370        HDC hdcPrinter = DevOpenDC( lhab, OD_QUEUED, "*", 7L, (PDEVOPENDATA)&dos, NULLHANDLE );
     371        if ( hdcPrinter == DEV_ERROR ) {
     372            unlink( tmpps );
     373            return false;
     374        }
     375
     376        // Issue STARTDOC to begin printing
     377        LONG rc = DevEscape( hdcPrinter, DEVESC_STARTDOC, strlen(title), (PBYTE)title, NULL, NULL );
     378        if ( rc == DEVESC_ERROR ) {
     379            DevCloseDC( hdcPrinter );
     380            unlink( tmpps );
     381            return false;
     382        }
     383
     384        FILE *f = fopen( tmpps, "rb" );
     385        if ( f == NULL ) {
     386            DevEscape( hdcPrinter, DEVESC_ABORTDOC, 0L, NULL, NULL, NULL );
     387            DevCloseDC( hdcPrinter );
     388            unlink( tmpps );
     389            return false;
     390        }
     391
     392        bool splerr = false;
     393        void *buf = malloc( PS_PRINT_BUF_SIZE );
     394        int rd = 0;
     395        while ( ( rc != DEVESC_ERROR ) && ( rd = fread( buf, 1, PS_PRINT_BUF_SIZE, f ) ) != 0 )
     396        {
     397            rc = DevEscape( hdcPrinter, DEVESC_RAWDATA, rd, (char *)buf, NULL, NULL );
     398            if ( ( rc == DEVESC_ERROR ) || abortPrinting ) {
     399                splerr = true;
     400                break;
     401            }
     402        }
     403        free( buf );
     404        fclose( f );
    344405        unlink( tmpps );
    345         return false;
    346     }
    347 
    348     // Issue STARTDOC to begin printing
    349     LONG rc = DevEscape( hdcPrinter, DEVESC_STARTDOC, strlen(title), (PBYTE)title, NULL, NULL );
    350     if ( rc == DEVESC_ERROR ) {
     406
     407        DevEscape( hdcPrinter, splerr ? DEVESC_ABORTDOC : DEVESC_ENDDOC,
     408                   0L, NULL, NULL, NULL );
    351409        DevCloseDC( hdcPrinter );
    352         unlink( tmpps );
    353         return false;
    354     }
    355 
    356     FILE *f = fopen( tmpps, "rb" );
    357     if ( f == NULL ) {
    358         DevEscape( hdcPrinter, DEVESC_ABORTDOC, 0L, NULL, NULL, NULL );
    359         DevCloseDC( hdcPrinter );
    360         unlink( tmpps );
    361         return false;
    362     }
    363 
    364     bool splerr = false;
    365     void *buf = malloc( PS_PRINT_BUF_SIZE );
    366     int rd = 0;
    367     while ( ( rc != DEVESC_ERROR ) && ( rd = fread( buf, 1, PS_PRINT_BUF_SIZE, f ) ) != 0 )
    368     {
    369         rc = DevEscape( hdcPrinter, DEVESC_RAWDATA, rd, (char *)buf, NULL, NULL );
    370         if ( ( rc == DEVESC_ERROR ) || abortPrinting ) {
    371             splerr = true;
    372             break;
    373         }
    374     }
    375     free( buf );
    376     fclose( f );
    377     unlink( tmpps );
    378 
    379     DevEscape( hdcPrinter, splerr ? DEVESC_ABORTDOC : DEVESC_ENDDOC,
    380                0L, NULL, NULL, NULL );
    381     DevCloseDC( hdcPrinter );
    382 
    383     if ( splerr && !abortPrinting ) {
    384         return false;
     410
     411        if ( splerr && !abortPrinting ) {
     412            return false;
     413        }
    385414    }
    386415
  • trunk/Lucide/SOURCE/gui/print.h

    r102 r162  
    5656    long margin_right;
    5757    int copies;
     58    bool psToFile;
    5859};
    5960
  • trunk/Lucide/SOURCE/gui/printDlg.cpp

    r138 r162  
    514514                case IDC_TYPE_ASIMAGE:
    515515                {
     516                    BOOL aspsc = WinQueryButtonCheckstate( hwnd, IDC_TYPE_POSTSCRIPT );
    516517                    BOOL asimg = WinQueryButtonCheckstate( hwnd, IDC_TYPE_ASIMAGE );
     518                    WinEnableControl( hwnd, IDC_PRINT_TO_FILE, aspsc );
    517519                    WinEnableControl( hwnd, IDC_HIGHER_IMAGE_QUALITY,
    518520                                      asimg && _this->scalable && !_this->fixed );
     
    595597                        }
    596598                        _this->psetup->higherQuality = WinQueryButtonCheckstate( hwnd, IDC_HIGHER_IMAGE_QUALITY );
     599                        _this->psetup->psToFile = WinQueryButtonCheckstate( hwnd, IDC_PRINT_TO_FILE );
    597600
    598601                        WinDismissDlg( hwnd, DID_OK );
Note: See TracChangeset for help on using the changeset viewer.