Ignore:
Timestamp:
Jul 30, 2006, 6:06:48 PM (15 years ago)
Author:
Eugene Romanenko
Message:

intermediate commit, incomplete printing procedures

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Lucide/SOURCE/gui/printDlg.cpp

    r89 r90  
    4646#include "luutils.h"
    4747
    48 extern HAB hab;
    49 
    50 #define DEVICENAME_LENGTH   32
    51 #define DRIVERNAME_LENGTH   128
    52 
    53 struct PrintDlgInternalData
    54 {
    55     PPRQINFO3 pQueueInfo;
    56     PPRQINFO3 pCurQueue;
    57 };
    58 
    59 
    60 PrintDlg::PrintDlg( HWND hWndFrame, LuDocument *_doc )
    61 {
    62     hFrame = hWndFrame;
    63     doc    = _doc;
    64     data   = new PrintDlgInternalData;
    65     memset( data, 0, sizeof( PrintDlgInternalData ) );
     48
     49PrintDlg::PrintDlg( HWND hWndFrame, LuDocument *_doc, long _currentpage )
     50{
     51    hFrame      = hWndFrame;
     52    doc         = _doc;
     53    currentpage = _currentpage;
     54    psetup      = new PrintSetup;
     55    memset( psetup, 0, sizeof( PrintSetup ) );
    6656}
    6757
    6858PrintDlg::~PrintDlg()
    6959{
    70     if ( data->pQueueInfo != NULL ) {
    71         free( data->pQueueInfo );
    72     }
    73     delete data;
     60    delete psetup;
    7461}
    7562
     
    8067}
    8168
    82 
    83 void PrintDlg::setCurrentQInfo( HWND hwnd, void *i )
    84 {
    85     data->pCurQueue = (PPRQINFO3)i;
    86     WinSetDlgItemText( hwnd, IDC_PNAME, data->pCurQueue->pszComment );
    87     WinSetDlgItemText( hwnd, IDC_PDESCRIPTION, data->pCurQueue->pszDriverName );
     69void PrintDlg::getPrintSetup( PrintSetup *p ) {
     70    memcpy( p, psetup, sizeof( PrintSetup ) );
     71}
     72
     73void PrintDlg::setCurrentQInfo( HWND hwnd, PPRQINFO3 q )
     74{
     75    memcpy( &(psetup->QueueInfo), q, sizeof( PRQINFO3 ) );
     76    WinSetDlgItemText( hwnd, IDC_PNAME, psetup->QueueInfo.pszComment );
     77    WinSetDlgItemText( hwnd, IDC_PDESCRIPTION, psetup->QueueInfo.pszDriverName );
    8878    WinEnableControl( hwnd, IDC_JOBPROPERTIES, TRUE );
    8979    WinEnableControl( hwnd, DID_OK, TRUE );
     
    9787                              &cTotal, &cbNeeded, NULL );
    9888    if ( cTotal == 0L ) {
    99         // TODO: 'no printers installed' message
    100     }
    101 
    102     data->pQueueInfo = (PPRQINFO3)malloc( cbNeeded );
    103 
    104     se = SplEnumQueue( NULL, 3, data->pQueueInfo, cbNeeded, &cReturned,
     89        // TODO: 'no printers installed' message  (?)
     90    }
     91
     92    pQueueInfo = (PPRQINFO3)malloc( cbNeeded );
     93
     94    se = SplEnumQueue( NULL, 3, pQueueInfo, cbNeeded, &cReturned,
    10595                       &cTotal, &cbNeeded, NULL );
    10696    if ( se != NO_ERROR ) {
    10797        // TODO: error message
    108         free( data->pQueueInfo );
    109         data->pQueueInfo = NULL;
     98        free( pQueueInfo );
     99        pQueueInfo = NULL;
    110100        return;
    111101    }
     
    115105    {
    116106        sEntry = (SHORT)WinSendMsg( list, LM_INSERTITEM, MPFROMSHORT(LIT_END),
    117                                     MPFROMP( data->pQueueInfo[i].pszComment ) );
     107                                    MPFROMP( pQueueInfo[i].pszComment ) );
    118108        WinSendMsg( list, LM_SETITEMHANDLE,
    119                     MPFROMSHORT(sEntry), MPFROMP( &(data->pQueueInfo[i]) ) );
    120 
    121         if ( data->pQueueInfo[i].fsType & PRQ3_TYPE_APPDEFAULT ) {
    122             setCurrentQInfo( hwnd, &( data->pQueueInfo[i] ) );
     109                    MPFROMSHORT(sEntry), MPFROMP( &(pQueueInfo[i]) ) );
     110
     111        if ( pQueueInfo[i].fsType & PRQ3_TYPE_APPDEFAULT ) {
     112            setCurrentQInfo( hwnd, &( pQueueInfo[i] ) );
    123113        }
    124114    }
     
    128118void PrintDlg::showJobProperties()
    129119{
    130     if ( data->pCurQueue == NULL ) {
     120    if ( psetup->QueueInfo.pszName[0] == 0 ) {
    131121        return;
    132122    }
     
    137127    // The pszDriverName is of the form DRIVER.DEVICE (e.g.,
    138128    // LASERJET.HP LaserJet IID) so we need to separate it at the dot
    139     int i = strcspn( data->pCurQueue->pszDriverName, "." );
     129    int i = strcspn( psetup->QueueInfo.pszDriverName, "." );
    140130    if ( i > 0 ) {
    141         strncpy( achDriverName, data->pCurQueue->pszDriverName, i );
     131        strncpy( achDriverName, psetup->QueueInfo.pszDriverName, i );
    142132        achDriverName[ i ] = '\0';
    143         strcpy( achDeviceName, &( data->pCurQueue->pszDriverName[ i + 1 ] ) );
     133        strcpy( achDeviceName, &( psetup->QueueInfo.pszDriverName[ i + 1 ] ) );
    144134    }
    145135    else {
    146         strcpy( achDriverName, data->pCurQueue->pszDriverName );
     136        strcpy( achDriverName, psetup->QueueInfo.pszDriverName );
    147137        *achDeviceName = '\0';
    148138    }
     
    151141    // We will use the first in the comma separated list.  We would
    152142    // need an expanded dialog for the user to be more specific.
    153     char *pszTemp = strchr( data->pCurQueue->pszPrinters, ',' );
     143    char *pszTemp = strchr( psetup->QueueInfo.pszPrinters, ',' );
    154144    if ( pszTemp != NULL ) {
    155145        // Strip off comma and trailing printer names
    156         *pszTemp = '\0' ;
     146        *pszTemp = '\0';
    157147    }
    158148
    159149    // Post the job properties dialog for the printer to allow the
    160150    // user to modify the options
    161     DevPostDeviceModes( hab, data->pCurQueue->pDriverData, achDriverName,
    162                         achDeviceName, data->pCurQueue->pszPrinters, DPDM_POSTJOBPROP );
     151    DevPostDeviceModes( hab, psetup->QueueInfo.pDriverData, achDriverName,
     152                        achDeviceName, psetup->QueueInfo.pszPrinters, DPDM_POSTJOBPROP );
    163153}
    164154
     
    184174            localizeDialog( hwnd );
    185175            centerWindow( _this->hFrame, hwnd );
     176
     177            // Enum printer queues
    186178            _this->enumQueues( hwnd );
     179
     180            // Print range
     181            WinCheckButton( hwnd, IDC_RANGEALL, TRUE );
     182
     183            // Set the print range spins
     184            long pages = _this->doc->getPageCount( ev );
     185            WinSendDlgItemMsg( hwnd, IDC_PGFROM, SPBM_SETLIMITS,
     186                               MPFROMLONG( pages ), MPFROMLONG( 1 ) );
     187            WinSendDlgItemMsg( hwnd, IDC_PGFROM, SPBM_SETCURRENTVALUE,
     188                               MPFROMLONG( 1 ), MPVOID );
     189            WinSendDlgItemMsg( hwnd, IDC_PGTO, SPBM_SETLIMITS,
     190                               MPFROMLONG( pages ), MPFROMLONG( 1 ) );
     191            WinSendDlgItemMsg( hwnd, IDC_PGTO, SPBM_SETCURRENTVALUE,
     192                               MPFROMLONG( pages ), MPVOID );
     193
     194            // Set the print type
     195            if ( _this->doc->isPostScriptExportable( ev ) ) {
     196                WinEnableControl( hwnd, IDC_TYPE_POSTSCRIPT, TRUE );
     197                WinCheckButton( hwnd, IDC_TYPE_POSTSCRIPT, TRUE );
     198            }
     199            else {
     200                WinEnableControl( hwnd, IDC_TYPE_POSTSCRIPT, FALSE );
     201                WinCheckButton( hwnd, IDC_TYPE_ASIMAGE, TRUE );
     202            }
     203            WinSendMsg( hwnd, WM_CONTROL,
     204                        MPFROM2SHORT( IDC_TYPE_POSTSCRIPT, BN_CLICKED ),
     205                        MPFROMHWND( WinWindowFromID( hwnd, IDC_TYPE_POSTSCRIPT ) ) );
     206
     207
    187208            return (MRESULT)FALSE;
    188209        }
     
    190211        case WM_CONTROL:
    191212        {
    192             if ( (SHORT1FROMMP(mp1) == IDC_PNAME) && (SHORT2FROMMP(mp1) == CBN_ENTER) )
     213            switch ( SHORT1FROMMP(mp1) )
    193214            {
    194                 SHORT rc = (SHORT)WinSendDlgItemMsg( hwnd, IDC_PNAME, LM_QUERYSELECTION,
    195                                                      MPFROMSHORT( LIT_CURSOR ), MPVOID );
    196                 if ( rc != LIT_NONE ) {
    197                     MRESULT r = WinSendDlgItemMsg( hwnd, IDC_PNAME, LM_QUERYITEMHANDLE,
    198                                                    MPFROMSHORT( rc ), MPVOID );
    199                     _this->setCurrentQInfo( hwnd, r );
     215                case IDC_PNAME:
     216                {
     217                    if ( SHORT2FROMMP(mp1) == CBN_ENTER )
     218                    {
     219                        SHORT rc = (SHORT)WinSendDlgItemMsg( hwnd, IDC_PNAME, LM_QUERYSELECTION,
     220                                                             MPFROMSHORT( LIT_CURSOR ), MPVOID );
     221                        if ( rc != LIT_NONE ) {
     222                            MRESULT r = WinSendDlgItemMsg( hwnd, IDC_PNAME, LM_QUERYITEMHANDLE,
     223                                                           MPFROMSHORT( rc ), MPVOID );
     224                            _this->setCurrentQInfo( hwnd, (PPRQINFO3)r );
     225                        }
     226                    }
    200227                }
     228                break;
     229
     230                case IDC_RANGEALL:
     231                case IDC_RANGECURRENT:
     232                case IDC_RANGEPAGES:
     233                {
     234                    BOOL en = WinQueryButtonCheckstate( hwnd, IDC_RANGEPAGES );
     235                    WinEnableControl( hwnd, IDC_LABELFROM, en );
     236                    WinEnableControl( hwnd, IDC_PGFROM, en );
     237                    WinEnableControl( hwnd, IDC_LABELTO, en );
     238                    WinEnableControl( hwnd, IDC_PGTO, en );
     239                }
     240                break;
     241
     242                case IDC_TYPE_POSTSCRIPT:
     243                case IDC_TYPE_ASIMAGE:
     244                {
     245                    WinEnableControl( hwnd, IDC_HIGHER_IMAGE_QUALITY,
     246                                WinQueryButtonCheckstate( hwnd, IDC_TYPE_ASIMAGE ) );
     247                }
     248                break;
     249
    201250            }
    202251        }
     
    212261                case DID_OK:
    213262                    {
    214                         // do
     263                        _this->psetup->range = RangeAll;
     264                        _this->psetup->pgfrom = 1;
     265                        _this->psetup->pgto = _this->doc->getPageCount( ev );
     266
     267                        if ( WinQueryButtonCheckstate( hwnd, IDC_RANGECURRENT ) ) {
     268                            _this->psetup->range = RangeCurrent;
     269                            _this->psetup->pgfrom = _this->currentpage;
     270                            _this->psetup->pgto = _this->currentpage;
     271                        }
     272
     273                        if ( WinQueryButtonCheckstate( hwnd, IDC_RANGEPAGES ) )
     274                        {
     275                            _this->psetup->range = RangePages;
     276                            LONG tmpVal = 0;
     277                            BOOL rc = (BOOL)WinSendDlgItemMsg( hwnd, IDC_PGFROM, SPBM_QUERYVALUE, MPFROMP( &tmpVal ), MPFROM2SHORT( 0, SPBQ_UPDATEIFVALID ) );
     278                            if ( rc && ( tmpVal > 0 ) ) {
     279                                _this->psetup->pgfrom = tmpVal;
     280                            }
     281                            rc = (BOOL)WinSendDlgItemMsg( hwnd, IDC_PGTO, SPBM_QUERYVALUE, MPFROMP( &tmpVal ), MPFROM2SHORT( 0, SPBQ_UPDATEIFVALID ) );
     282                            if ( rc && ( tmpVal > 0 ) ) {
     283                                _this->psetup->pgto = tmpVal;
     284                            }
     285                        }
     286
     287                        _this->psetup->ptype = TypePostScript;
     288                        if ( WinQueryButtonCheckstate( hwnd, IDC_TYPE_ASIMAGE ) ) {
     289                            _this->psetup->ptype = TypeAsImage;
     290                        }
     291                        _this->psetup->higherQuality = WinQueryButtonCheckstate( hwnd, IDC_HIGHER_IMAGE_QUALITY );
     292
    215293                        WinDismissDlg( hwnd, DID_OK );
    216294                    }
Note: See TracChangeset for help on using the changeset viewer.