Changeset 91 for trunk/Lucide


Ignore:
Timestamp:
Aug 2, 2006, 3:02:52 PM (15 years ago)
Author:
Eugene Romanenko
Message:

bitmap printing, preliminary postscript printing, export to PS for djvu plugin, other improvements

Location:
trunk/Lucide
Files:
33 edited

Legend:

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

    r90 r91  
    66# Main menu
    77#
    8 MENU_FILE=~File
    9 MENU_OPEN=Open...\tCtrl+O
    10 MENU_SAVE_AS=Save As...
    11 MENU_PAGE_SETUP=Page setup...
    12 MENU_PRINT=Print...
    13 MENU_DOCUMENT_INFO=Document info...
    14 MENU_FONTS_INFO=Fonts info...
    15 MENU_PLUGINS_LIST=Plugins list...
    16 MENU_EXIT=Exit\tCtrl+X
     8MENU_DOCUMENT=~Document
     9MENU_OPEN=~Open...\tCtrl+O
     10MENU_SAVE_AS=~Save As...
     11MENU_PAGE_SETUP=Pa~ge setup...
     12MENU_PRINT=~Print...
     13MENU_DOCUMENT_INFO=~Document info...
     14MENU_FONTS_INFO=Fonts ~info...
     15MENU_PLUGINS_LIST=Plugins ~list...
     16MENU_EXIT=E~xit\tCtrl+X
    1717MENU_EDIT=~Edit
    18 MENU_COPY=Copy\tCtrl+Insert
    19 MENU_SELECT_ALL=Select all\tCtrl+/
    20 MENU_FIND=Find...\tCtrl+F
    21 MENU_FINDAGAIN=Find again\tCtrl+G
    22 MENU_SETTINGS=Settings
    23 MENU_DOCUMENT=~Document
    24 MENU_FIRST_PAGE=First page
    25 MENU_PREV_PAGE=Previous page\t-
    26 MENU_NEXT_PAGE=Next page\t+
    27 MENU_LAST_PAGE=Last page
    28 MENU_GO_TO_PAGE=Go to page...\tCtrl+N
     18MENU_COPY=~Copy\tCtrl+Insert
     19MENU_SELECT_ALL=Select ~all\tCtrl+/
     20MENU_FIND=~Find...\tCtrl+F
     21MENU_FINDAGAIN=Find a~gain\tCtrl+G
     22MENU_SETTINGS=~Settings
     23MENU_FIRST_PAGE=~First page
     24MENU_PREV_PAGE=~Previous page\t-
     25MENU_NEXT_PAGE=~Next page\t+
     26MENU_LAST_PAGE=~Last page
     27MENU_GO_TO_PAGE=~Go to page...\tCtrl+N
    2928MENU_VIEW=~View
    30 MENU_FIT_WINDOW=Fit in window
    31 MENU_ACTUAL_SIZE=Actual size
    32 MENU_FIT_WIDTH=Fit width
    33 MENU_ROTATE_CW=Rotate 90ø CW
    34 MENU_ROTATE_CCW=Rotate 90ø CCW
    35 MENU_SHOW_NAV_PANE=Show navigation pane
    36 MENU_SINGLE_PAGE=Single page
    37 MENU_CONTINUOUS=Continuous
     29MENU_FIT_WINDOW=Fi~t in window
     30MENU_ACTUAL_SIZE=~Actual size
     31MENU_FIT_WIDTH=Fit ~width
     32MENU_ROTATE_CW=~Rotate 90ø CW
     33MENU_ROTATE_CCW=Rotate 90ø ~CCW
     34MENU_SHOW_NAV_PANE=~Show navigation pane
     35MENU_SINGLE_PAGE=~Single page
     36MENU_CONTINUOUS=C~ontinuous
    3837MENU_WINDOW=~Window
    39 MENU_MAXVIEW=Maximized view\tF11
    40 MENU_FULLSCREEN=Fullscreen\tCtrl+L
     38MENU_MAXVIEW=~Maximized view\tF11
     39MENU_FULLSCREEN=~Fullscreen\tCtrl+L
    4140MENU_HELP=~Help
    42 MENU_PRODUCT_INFORMATION=Product Information
     41MENU_PRODUCT_INFORMATION=~Product Information
    4342
    4443#
     
    7574#
    7675PLUGLIST_PLUGINS_LIST=Plugins list
    77 PLUGLIST_CLOSE=Close
     76PLUGLIST_CLOSE=~Close
    7877# List columns titles
    7978PLUGLIST_PLUGIN_NAME=Plugin name
     
    8584#
    8685FONTINFO_FONTINFO=Font info
    87 FONTINFO_CLOSE=Close
     86FONTINFO_CLOSE=~Close
    8887FONTINFO_ENUMERATING=Enumerating fonts, please wait...
    8988# List columns titles
     
    9695#
    9796DOCINFO_DOCUMENT_INFO=Document info
    98 DOCINFO_CLOSE=Close
     97DOCINFO_CLOSE=~Close
    9998# Document info keys
    10099DOCINFO_TITLE=Title:
     
    132131AD_DESCRIPTION=Plugin-based document viewer with support for various file formats
    133132AD_COPYRIGHTS=(c) by Eugene Romanenko, netlabs.org in co-operation with Serenity Systems International
    134 AD_OK=OK
     133AD_OK=~OK
    135134
    136135#
     
    138137#
    139138SD_SETTINGS=Settings
    140 SD_DEFAULT_PAGE_LAYOUT=Default Page Layout
    141 SD_DEFAULT_ZOOM=Default Zoom
     139SD_DEFAULT_PAGE_LAYOUT=Default ~Page Layout
     140SD_DEFAULT_ZOOM=Default ~Zoom
     141SD_SINGLE_PAGE=Single page
     142SD_CONTINUOUS=Continuous
    142143SD_OK=~OK
    143144SD_CANCEL=~Cancel
     
    157158PD_TITLE=Print
    158159PD_PRINTER=Printer
    159 PD_NAME_LABEL=Name
    160 PD_JOB_PROPERTIES=Job properties
     160PD_NAME_LABEL=~Name
     161PD_JOB_PROPERTIES=~Job properties
    161162PD_DRIVER_LABEL=Driver
    162 PD_PRINT_RANGE=Print range
    163 PD_RANGE_ALL=All
    164 PD_RANGE_CURRENT_PAGE=Current page
    165 PD_RANGE_PAGES=Pages
    166 PD_FROM=From
    167 PD_TO=To
     163PD_PRINT_RANGE=Print ~range
     164PD_RANGE_ALL=~All
     165PD_RANGE_CURRENT_PAGE=C~urrent page
     166PD_RANGE_PAGES=Pa~ges
     167PD_FROM=~From
     168PD_TO=~To
    168169PD_PRINT_TYPE=Print type
    169 PD_TYPE_POSTSCRIPT=Postscript
    170 PD_TYPE_ASIMAGE=As image
    171 PD_HIGHER_IMAGE_QUALITY=Higher image quality (slower and require more memory)
    172 PD_BTNPRINT=Print
    173 PD_BTNCANCEL=Cancel
     170PD_TYPE_POSTSCRIPT=Post~script
     171PD_TYPE_ASIMAGE=As ~image
     172PD_HIGHER_IMAGE_QUALITY=~Higher image quality (slower and require more memory)
     173PD_BTNPRINT=~Print
     174PD_BTNCANCEL=~Cancel
     175# other 'print'-related messages
     176PRINT_PRINTING_PAGE_OF=Printing page %d of %d...
     177PRINT_GENERATING_POSTSCRIPT=Generating postscript file...
     178PRINT_SPOOLING_POSTSCRIPT=Spooling postscript data...
     179PRINT_FAILED=Print failed!
  • trunk/Lucide/BIN/Lucide_de.lng

    r89 r91  
    66# Main menu
    77#
    8 MENU_FILE=~Datei
     8MENU_DOCUMENT=~Dokument
    99MENU_OPEN=™ffnen...\tStrg+O
    1010MENU_SAVE_AS=Sichern unter...
     
    2121MENU_FINDAGAIN=Weitersuchen\tStrg+G
    2222MENU_SETTINGS=Einstellungen...
    23 MENU_DOCUMENT=~Dokument
    2423MENU_FIRST_PAGE=Erste Seite
    2524MENU_PREV_PAGE=Vorige Seite\t-
     
    6766MSGS_FILE_LOAD_ERROR=Datei kann nicht gelesen werden!
    6867MSGS_LOADING_DOCUMENT=Lese Dokument, bitte warten...
     68MSGS_WARNING=Warnung!
     69MSGS_OVERWRITE_FILE=Datei existiert bereits. šberschreiben?
     70MSGS_FILE_SAVE_ERROR=Fehler beim Schreiben der Datei!
    6971
    7072#
     
    140142SD_CANCEL=~Abbruch
    141143
     144#
     145# 'Go to page' dialog
     146#
     147GTP_GOTOPAGE=Gehe zu Seite
     148GTP_PAGE=Seite
     149GTP_OF=von %d
     150GTP_OK=~OK
     151GTP_CANCEL=~Abbruch
     152
     153
  • trunk/Lucide/BIN/Lucide_fr.lng

    r89 r91  
    66# Main menu
    77#
    8 MENU_FILE=~Fichier
     8MENU_DOCUMENT=~Document
    99MENU_OPEN=Ouvrir...\tCtrl+O
    1010MENU_SAVE_AS=Enregistrer sous...
     
    2020MENU_FIND=Rechercher...\tCtrl+F
    2121MENU_FINDAGAIN=Poursuivre la recherche\tCtrl+G
    22 MENU_DOCUMENT=~Document
    2322MENU_FIRST_PAGE=PremiŠre page
    2423MENU_PREV_PAGE=Page pr‚c‚dente\t-
  • trunk/Lucide/BIN/Lucide_sv.lng

    r89 r91  
    66# Main menu
    77#
    8 MENU_FILE=~Arkiv
     8MENU_DOCUMENT=~Dokument
    99MENU_OPEN=™ppna...\tCtrl+O
    1010MENU_SAVE_AS=Spara som...
     
    2020MENU_FIND=Finn...\tCtrl+F
    2121MENU_FINDAGAIN=Finn igen\tCtrl+G
    22 MENU_DOCUMENT=~Dokument
    2322MENU_FIRST_PAGE=F”rsta sidan
    2423MENU_PREV_PAGE=F”reg†ende sida\t-
  • trunk/Lucide/SOURCE/gui/aboutDlg.cpp

    r66 r91  
    4141#include <malloc.h>
    4242
    43 #include "lucide.h"
     43#include "globals.h"
    4444#include "luutils.h"
    4545#include "lucide_res.h"
  • trunk/Lucide/SOURCE/gui/docViewer.cpp

    r86 r91  
    6868
    6969// DocumentViewer constructor
    70 DocumentViewer::DocumentViewer( HAB _hab, HWND hWndFrame )
    71 {
    72     hab         = _hab;
     70DocumentViewer::DocumentViewer( HWND hWndFrame )
     71{
    7372    hMainFrame  = hWndFrame;
    7473    sHscrollMax = 0;
     
    9493    realzoom    = 1.0;
    9594    rotation    = 0;
    96     ev          = somGetGlobalEnvironment();
    9795    pixbuf      = NULL;
    9896    spos_x      = 0;
     
    179177
    180178// static, registration of a window class
    181 void DocumentViewer::registerClass( HAB hab )
     179void DocumentViewer::registerClass()
    182180{
    183181    WinRegisterClass( hab, "er.docview", docViewProc, CS_SIZEREDRAW, sizeof( ULONG ) * 2 );
     
    524522        delete buf;
    525523
    526         _this->foundrects[ i ] = _this->doc->searchText( _this->ev, i,
     524        _this->foundrects[ i ] = _this->doc->searchText( ev, i,
    527525                                        (char *)_this->searchString, _this->caseSensitive );
    528526        if ( _this->foundrects[ i ] != NULL )
     
    815813        pbmi.cPlanes = 1;
    816814        pbmi.cBitCount = _this->bpp * 8;
    817         GpiDrawBits( hps, _this->pixbuf->getDataPtr( _this->ev ), &pbmi, 4L,
     815        GpiDrawBits( hps, _this->pixbuf->getDataPtr( ev ), &pbmi, 4L,
    818816                     aptlPoints, lRop, BBO_IGNORE );
    819817
     
    851849                LONG rclx = pda->drawrect.xRight - pda->drawrect.xLeft;
    852850                LONG rcly = pda->drawrect.yTop - pda->drawrect.yBottom;
    853                 _this->pixbuf = new LuPixbuf( _this->ev, rclx, rcly, _this->bpp );
    854                 _this->doc->renderPageToPixbufAsynch( _this->ev, pda->pagenum,
     851                _this->pixbuf = new LuPixbuf( ev, rclx, rcly, _this->bpp );
     852                _this->doc->renderPageToPixbufAsynch( ev, pda->pagenum,
    855853                       pda->startpos.x, pda->startpos.y, rclx, rcly, _this->realzoom,
    856854                       _this->rotation, _this->pixbuf,
     
    877875                    WinReleasePS( hps );
    878876                }
    879                 WinSetRectEmpty( _this->hab, &_this->savedRcl );
     877                WinSetRectEmpty( thab, &_this->savedRcl );
    880878                delete _this->drawareas;
    881879                _this->drawareas = NULL;
  • trunk/Lucide/SOURCE/gui/docViewer.h

    r87 r91  
    5757{
    5858    public:
    59         DocumentViewer( HAB _hab, HWND hWndFrame );
     59        DocumentViewer( HWND hWndFrame );
    6060        virtual ~DocumentViewer();
    6161
     
    8181        void setFullscreen( bool _fullscreen );
    8282
    83         static void registerClass( HAB hab );
     83        static void registerClass();
    8484
    8585        // Internal stuffs
     
    129129
    130130        LuDocument *doc;
    131         HAB hab;
    132131        HWND hMainFrame;
    133132        HWND hWndDocFrame;
     
    149148        HPS hpsBuffer;
    150149        HDC hdcBuffer;
    151         Environment *ev;
    152150        LuPixbuf *pixbuf;
    153151        short bpp;
  • trunk/Lucide/SOURCE/gui/fontsInfoDlg.cpp

    r35 r91  
    4040#include <ludoc.xh>
    4141
     42#include "globals.h"
    4243#include "luutils.h"
    4344#include "fontsInfoDlg.h"
     
    8283void FontsInfoDlg::loadList()
    8384{
    84     Environment *ev = somGetGlobalEnvironment();
    8585    LuDocument_LuFontInfoSequence *fonts = doc->getFontInfo( ev );
    8686
  • trunk/Lucide/SOURCE/gui/indexWindow.cpp

    r85 r91  
    5050
    5151// IndexWindow constructor
    52 IndexWindow::IndexWindow( HAB _hab, HWND hWndFrame )
    53 {
    54     hab         = _hab;
     52IndexWindow::IndexWindow( HWND hWndFrame )
     53{
    5554    hMainFrame  = hWndFrame;
    5655    hWndIndex   = NULLHANDLE;
    5756    doc         = NULL;
    5857    totalpages  = 0;
    59     ev          = somGetGlobalEnvironment();
    6058
    6159    hWndPanel = WinCreateWindow( hWndFrame, WC_ER_SPLITTER, "",
  • trunk/Lucide/SOURCE/gui/indexWindow.h

    r35 r91  
    4949{
    5050    public:
    51         IndexWindow( HAB _hab, HWND hWndFrame );
     51        IndexWindow( HWND hWndFrame );
    5252        virtual ~IndexWindow();
    5353
     
    7070       
    7171        LuDocument *doc;
    72         HAB hab;
    7372        HWND hMainFrame;
    7473        HWND hWndPanel;
    7574        HWND hWndBar;
    7675        HWND hWndIndex;
    77                 Environment *ev;
    7876                long totalpages;
    7977};
  • trunk/Lucide/SOURCE/gui/intern.cpp

    r35 r91  
    4747#include <io.h>
    4848
    49 #include "lucide.h"
     49#include "globals.h"
    5050#include "wwbtn.h"
    5151#include "luutils.h"
  • trunk/Lucide/SOURCE/gui/lucide.cpp

    r90 r91  
    9494
    9595
    96 bool  Lucide::dontSwitchPage = false;
    97 SHORT Lucide::splitterPos    = 100;
    98 bool  Lucide::showIndex      = true;
    99 bool  Lucide::isMaxview      = false;
    100 bool  Lucide::isFullscreen   = false;
    101 LuWindowPos Lucide::winPos   = {0};
     96bool         Lucide::dontSwitchPage                = false;
     97SHORT        Lucide::splitterPos                   = 100;
     98bool         Lucide::showIndex                     = true;
     99bool         Lucide::isMaxview                     = false;
     100bool         Lucide::isFullscreen                  = false;
     101LuWindowPos  Lucide::winPos                        = {0};
     102char         Lucide::docFullName[ CCHMAXPATH ]     = "";
     103char         Lucide::docFileName[ CCHMAXPATHCOMP ] = "";
     104// static data for asynch loading document
     105ProgressDlg *Lucide::loadProgressDlg               = NULL;
     106bool         Lucide::docLoaded                     = false;;
     107char        *Lucide::loadError                     = NULL;
    102108
    103109
     
    328334
    329335
    330 // static data for asynch loading document
    331 ProgressDlg *Lucide::loadProgressDlg       = NULL;
    332 char         Lucide::docName[ CCHMAXPATH ] = "";
    333 bool         Lucide::docLoaded             = false;;
    334 char        *Lucide::loadError             = NULL;
    335 
    336336void Lucide::loadthread( void *p )
    337337{
     
    339339    HMQ thmq = WinCreateMsgQueue( thab, 0 );
    340340
    341     docLoaded = doc->loadFile( ev, docName, NULL, &loadError );
     341    docLoaded = doc->loadFile( ev, docFullName, NULL, &loadError );
    342342    loadProgressDlg->hide();
    343343
     
    379379            else
    380380            {
    381                 strcpy( docName, fn );
     381                strcpy( docFullName, fn );
    382382                docLoaded = false;;
    383383                loadError = NULL;
     
    397397                    char _ex[ _MAX_EXT ];
    398398                    _splitpath( fn, NULL, NULL, _fn, _ex );
    399                     snprintf( t, 2048, "%s%s - %s", _fn, _ex, title );
     399                    strcpy( docFileName, _fn );
     400                    strcat( docFileName, _ex );
     401                    snprintf( t, 2048, "%s - %s", docFileName, title );
    400402                    WinSetWindowText( hWndFrame, t );
    401403                    delete t;
     
    466468    char fil[ _MAX_FNAME ] = "";
    467469    char ext[ _MAX_EXT ] = "";
    468     _splitpath( docName, NULL, NULL, fil, ext );
     470    _splitpath( docFullName, NULL, NULL, fil, ext );
    469471    snprintf( fd->szFullFile, sizeof( fd->szFullFile ),
    470472                "%s%s%s", dirbuf, fil, ext );
     
    642644                    if ( d->showDialog() == DID_OK ) {
    643645                        // print
    644                         //printDocument( doc, d->getCurrentQInfo() );
     646                        PrintSetup *p = new PrintSetup;
     647                        memset( p, 0, sizeof( PrintSetup ) );
     648                        d->getPrintSetup( p );
     649                        printDocument( hWndFrame, doc, Lucide::docFileName, p );
     650                        delete p;
    645651                    }
    646652                    delete d;
     
    842848                                     ID_SPLITTER, NULL, NULL );
    843849
    844     indexWin = new IndexWindow( hab, hWndFrame );
    845 
    846     DocumentViewer::registerClass( hab );
    847 
    848     docViewer = new DocumentViewer( hab, hWndFrame );
     850    indexWin = new IndexWindow( hWndFrame );
     851
     852    DocumentViewer::registerClass();
     853
     854    docViewer = new DocumentViewer( hWndFrame );
    849855
    850856    WinSendMsg( hVertSplitter, SBM_SETWINDOWS,
  • trunk/Lucide/SOURCE/gui/lucide.h

    r89 r91  
    3636#define __LUCIDE_H
    3737
    38 extern const char *appName;
    39 extern const char *appVersion;
    40 extern HAB hab;
    41 extern char deffont[];
    42 extern int deffontlen;
     38#include "globals.h"
     39
    4340
    4441class LuDocument;
     
    6360   
    6461                static ProgressDlg *loadProgressDlg;
    65                 static char docName[ CCHMAXPATH ];
     62                static char docFullName[ CCHMAXPATH ];
    6663                static bool docLoaded;
    6764                static char *loadError;
     
    7673
    7774    public:
     75                static char docFileName[ CCHMAXPATHCOMP ];
    7876        static bool dontSwitchPage;
    7977        static SHORT splitterPos;
  • trunk/Lucide/SOURCE/gui/makefile

    r90 r91  
    11.autodepend
    22
    3 TEST=1
     3TEST=0
    44VERSION=Beta 2.1
    55
  • trunk/Lucide/SOURCE/gui/messages.cpp

    r88 r91  
    3636
    3737
    38 // Some menu item, which used not only in menu
    39 const char *MENU_SINGLE_PAGE = "MENU_SINGLE_PAGE";
    40 const char *MENU_CONTINUOUS  = "MENU_CONTINUOUS";
    41 
    42 
    4338// Toolbar hints
    4439const char *TBHINT_OPEN          = "TBHINT_OPEN";
     
    6661const char *MSGS_OVERWRITE_FILE   = "MSGS_OVERWRITE_FILE";
    6762const char *MSGS_FILE_SAVE_ERROR  = "MSGS_FILE_SAVE_ERROR";
     63
     64// Settings dialog
     65const char *SD_SINGLE_PAGE = "SD_SINGLE_PAGE";
     66const char *SD_CONTINUOUS  = "SD_CONTINUOUS";
    6867
    6968// Plugins List columns titles
     
    9594// 'Go to page' dialog
    9695const char *GTP_OF = "GTP_OF";
     96
     97// Printing, other 'print'-related messages
     98const char *PRINT_PRINTING_PAGE_OF      = "PRINT_PRINTING_PAGE_OF";
     99const char *PRINT_GENERATING_POSTSCRIPT = "PRINT_GENERATING_POSTSCRIPT";
     100const char *PRINT_SPOOLING_POSTSCRIPT   = "PRINT_SPOOLING_POSTSCRIPT";
     101const char *PRINT_FAILED                = "PRINT_FAILED";
     102
  • trunk/Lucide/SOURCE/gui/messages.h

    r88 r91  
    3737
    3838
    39 // Some menu item, which used not only in menu
    40 extern const char *MENU_SINGLE_PAGE;
    41 extern const char *MENU_CONTINUOUS;
    42 
    4339// Toolbar hints
    4440extern const char *TBHINT_OPEN;
     
    6561extern const char *MSGS_OVERWRITE_FILE;
    6662extern const char *MSGS_FILE_SAVE_ERROR;
     63
     64// Settings dialog
     65extern const char *SD_SINGLE_PAGE;
     66extern const char *SD_CONTINUOUS;
    6767
    6868// Plugins List columns titles
     
    9595extern const char *GTP_OF;
    9696
     97// Printing, other 'print'-related messages
     98extern const char *PRINT_PRINTING_PAGE_OF;
     99extern const char *PRINT_GENERATING_POSTSCRIPT;
     100extern const char *PRINT_SPOOLING_POSTSCRIPT;
     101extern const char *PRINT_FAILED;
     102
    97103
    98104#endif // __MESSAGES_H
  • trunk/Lucide/SOURCE/gui/print.cpp

    r90 r91  
    3535#define INCL_WIN
    3636#define INCL_GPI
     37#define INCL_DOS
    3738#define INCL_DEV
    3839#define INCL_ERRORS
     
    4445
    4546#include <string.h>
    46 
     47#include <process.h>
     48#include <stdio.h>
     49#include <io.h>
     50
     51#include "globals.h"
     52#include "progressDlg.h"
    4753#include "print.h"
     54#include "luutils.h"
     55#include "messages.h"
    4856
    4957// OpenWatcom headers doesn't have GpiDrawBits() declaration
     
    5462
    5563#define UNITS_MULTIPLIER    100
    56 
     64#define STD_IMAGE_ZOOM      2.0
     65#define HIGH_IMAGE_ZOOM     3.0
     66#define PS_PRINT_BUF_SIZE   32768
    5767#define TEST_MARGIN         10
    5868
    59 void printPage( LuDocument *doc, long page, HPS hpsPrinter, PHCINFO pcurForm );
    60 void queryCurrentForm( HDC hdcPrinter, PHCINFO pcurForm );
    61 
    62 void printDocument( LuDocument *doc, void *q )
    63 {
    64     PPRQINFO3    pQueueInfo = (PPRQINFO3)q;
     69
     70class LucidePrinting
     71{
     72    public:
     73        LucidePrinting( HWND hWndFrame, LuDocument *_doc,
     74                        const char *_title, PrintSetup *_psetup );
     75        ~LucidePrinting();
     76        void doPrint();
     77
     78    private:
     79        bool queryCurrentForm( HAB lhab, PHCINFO pcurForm );
     80        void printPagePm( long page, HPS hpsPrinter, PHCINFO pcurForm );
     81        bool doPmPrint( HAB lhab );
     82        bool doPsPrint( HAB lhab );
     83
     84        HWND hFrame;
     85        LuDocument *doc;
     86        char *title;
     87        PrintSetup *psetup;
     88        bool abortPrinting;
     89        ProgressDlg *progressDlg;
     90
     91        static void printabort( void *data );
     92        static void printthread( void *data );
     93};
     94
     95
     96void printDocument( HWND hWndFrame, LuDocument *doc, const char *title, PrintSetup *psetup )
     97{
     98    LucidePrinting *p = new LucidePrinting( hWndFrame, doc, title, psetup );
     99    p->doPrint();
     100}
     101
     102
     103LucidePrinting::LucidePrinting( HWND hWndFrame, LuDocument *_doc,
     104                                const char *_title, PrintSetup *_psetup )
     105{
     106    hFrame = hWndFrame;
     107    doc    = _doc;
     108    title  = newstrdup( _title );
     109    psetup = new PrintSetup;
     110    memcpy( psetup, _psetup, sizeof( PrintSetup ) );
     111    abortPrinting = false;
     112    progressDlg = new ProgressDlg( hWndFrame );
     113}
     114
     115LucidePrinting::~LucidePrinting()
     116{
     117    delete title;
     118    delete psetup;
     119    delete progressDlg;
     120}
     121
     122void LucidePrinting::doPrint()
     123{
     124    progressDlg->setBreakFunc( printabort, this );
     125    progressDlg->setText( "" );
     126    progressDlg->show( printthread, this );
     127}
     128
     129bool LucidePrinting::doPmPrint( HAB lhab )
     130{
    65131    CHAR         achDriverName[ DRIVERNAME_LENGTH ] = "";
     132    DEVOPENSTRUC dos   = { 0 };
    66133    SIZEL        sizel = { 0 };
    67     DEVOPENSTRUC dos   = { 0 };
     134
     135    HCINFO curForm = { 0 };
     136    if ( !queryCurrentForm( lhab, &curForm ) ) {
     137        return false;
     138    }
    68139
    69140    // build a devopenstruct for the call to DevOpenDC
    70     dos.pszLogAddress = pQueueInfo->pszName;
    71     strcpy( achDriverName, pQueueInfo->pszDriverName );
     141    dos.pszLogAddress = psetup->QueueInfo.pszName;              // 1
     142    strcpy( achDriverName, psetup->QueueInfo.pszDriverName );
    72143    achDriverName[ strcspn( achDriverName, "." ) ] = '\0';
    73     dos.pszDriverName = achDriverName;
    74     dos.pdriv = pQueueInfo->pDriverData;
    75 
    76     HDC hdcPrinter = DevOpenDC( hab, OD_QUEUED, "*", 3L, (PDEVOPENDATA)&dos, NULLHANDLE );
     144    dos.pszDriverName = achDriverName;                          // 2
     145    dos.pdriv         = psetup->QueueInfo.pDriverData;          // 3
     146    dos.pszDataType   = "PM_Q_STD";                             // 4
     147
     148    HDC hdcPrinter = DevOpenDC( lhab, OD_QUEUED, "*", 4L, (PDEVOPENDATA)&dos, NULLHANDLE );
    77149    if ( hdcPrinter == DEV_ERROR ) {
    78         somPrintf( "DevOpenDC error\n" );
    79         return;
     150        return false;
    80151    }
    81152
    82153    // PS in HiMetric, 0.01 mm
    83     HPS hpsPrinter = GpiCreatePS( hab, hdcPrinter, &sizel, PU_HIMETRIC | GPIA_ASSOC );
     154    HPS hpsPrinter = GpiCreatePS( lhab, hdcPrinter, &sizel, PU_HIMETRIC | GPIA_ASSOC );
    84155    if ( hpsPrinter == DEV_ERROR ) {
    85156        DevCloseDC( hdcPrinter );
    86         somPrintf( "GpiCreatePS error\n" );
    87         return;
    88     }
    89 
    90     HCINFO curForm = { 0 };
    91     queryCurrentForm( hdcPrinter, &curForm );
    92     char *psz = "test";
     157        return false;
     158    }
     159
    93160    // Issue STARTDOC to begin printing
    94     DevEscape( hdcPrinter, DEVESC_STARTDOC, (LONG)strlen(psz), (PBYTE)psz, NULL, NULL );
    95 
    96     somPrintf( "begin!\n" );
    97 
    98     printPage( doc, 0, hpsPrinter, &curForm );
    99 
    100     somPrintf( "end!\n" );
    101 
    102     DevEscape( hdcPrinter, DEVESC_ENDDOC, 0L, NULL, NULL, NULL );
     161    DevEscape( hdcPrinter, DEVESC_STARTDOC, strlen(title), (PBYTE)title, NULL, NULL );
     162
     163    long totalpages = psetup->pgto - psetup->pgfrom + 1;
     164    for ( long pg = psetup->pgfrom; pg <= psetup->pgto; pg++ )
     165    {
     166        char *fmt = newstrdupL( PRINT_PRINTING_PAGE_OF );
     167        char *buf = new char[ 255 ];
     168        snprintf( buf, 255, fmt, pg, totalpages );
     169        progressDlg->setText( buf );
     170        delete fmt;
     171        delete buf;
     172
     173        printPagePm( pg - 1, hpsPrinter, &curForm );
     174
     175        if ( pg != psetup->pgto ) {
     176            DevEscape( hdcPrinter, DEVESC_NEWFRAME, 0L, NULL, NULL, NULL );
     177        }
     178
     179        if ( abortPrinting ) {
     180            break;
     181        }
     182    }
     183
     184    // Issue DEVESC_ENDDOC, or DEVESC_ABORTDOC if printing was aborted
     185    DevEscape( hdcPrinter, abortPrinting ? DEVESC_ABORTDOC : DEVESC_ENDDOC,
     186               0L, NULL, NULL, NULL );
    103187
    104188    // Release PS and DC
     
    106190    GpiDestroyPS( hpsPrinter );
    107191    DevCloseDC( hdcPrinter );
    108 }
    109 
    110 
    111 static void printPage( LuDocument *doc, long page, HPS hpsPrinter, PHCINFO pcurForm )
     192    return true;
     193}
     194
     195
     196void LucidePrinting::printPagePm( long page, HPS hpsPrinter, PHCINFO pcurForm )
    112197{
    113198    long bpp = doc->getBpp( ev );
     
    125210    LONG pheight = ( pcurForm->cy - mTop - mBottom ) * UNITS_MULTIPLIER;
    126211
    127     double zoom = __min( (double)pwidth / w, (double)pheight / h );
    128     if ( zoom > 2.0 ) {
    129         zoom = 2.0;
    130     }
    131 
    132     somPrintf( "Doc pgsz: %g/%g  zoom: %g\n", w, h, zoom );
    133     somPrintf( "Paper %s, pgsz: %d/%d\n", pcurForm->szFormname, pcurForm->cx, pcurForm->cy );
    134     somPrintf( "pw/ph %d/%d\n", pwidth, pheight );
     212    double zoom = 1.0;
     213    if ( doc->isScalable( ev ) )
     214    {
     215        double maxcoeff = psetup->higherQuality ? HIGH_IMAGE_ZOOM : STD_IMAGE_ZOOM;
     216        zoom = __min( (double)pwidth / w, (double)pheight / h );
     217        if ( zoom > maxcoeff ) {
     218            zoom = maxcoeff;
     219        }
     220    }
     221
     222    //somPrintf( "Doc pgsz: %g/%g  zoom: %g\n", w, h, zoom );
     223    //somPrintf( "Paper %s, pgsz: %d/%d\n", pcurForm->szFormname, pcurForm->cx, pcurForm->cy );
     224    //somPrintf( "pw/ph %d/%d\n", pwidth, pheight );
     225
    135226    w *= zoom;
    136227    h *= zoom;
     
    149240    LONG rclx = w;
    150241    LONG rcly = h;
    151     LuPixbuf *pixbuf = new LuPixbuf( ev, rclx, rcly, bpp );
    152     POINTL aptlPoints[4]={ rclDraw.xLeft, rclDraw.yBottom,
    153                            rclDraw.xRight-1, rclDraw.yTop-1,
    154                            0, 0, rclx, rcly };
    155 
    156     doc->renderPageToPixbuf( ev, page, 0, 0, rclx, rcly, zoom, 0, pixbuf );
    157 
    158     LONG lRop = ROP_SRCCOPY;
    159     BITMAPINFO2 pbmi;
    160     pbmi.cbFix = 16L;
    161     pbmi.cx = rclx;
    162     pbmi.cy = rcly;
    163     pbmi.cPlanes = 1;
    164     pbmi.cBitCount = bpp * 8;
    165     GpiDrawBits( hpsPrinter, pixbuf->getDataPtr( ev ), &pbmi, 4L,
    166                  aptlPoints, lRop, BBO_IGNORE );
    167     delete pixbuf;
    168 }
    169 
    170 
    171 static void queryCurrentForm( HDC hdcPrinter, PHCINFO pcurForm )
    172 {
    173     LONG lForms = DevQueryHardcopyCaps( hdcPrinter, 0, 0, NULL );
     242    if ( doc->isRenderIntoPS( ev ) )
     243    {
     244        doc->renderPageToPS( ev, page, 0, 0, rclx, rcly, zoom, 0, hpsPrinter, &rclDraw );
     245    }
     246    else
     247    {
     248        LuPixbuf *pixbuf = new LuPixbuf( ev, rclx, rcly, bpp );
     249        POINTL aptlPoints[4]={ rclDraw.xLeft, rclDraw.yBottom,
     250                               rclDraw.xRight-1, rclDraw.yTop-1,
     251                               0, 0, rclx, rcly };
     252
     253        doc->renderPageToPixbuf( ev, page, 0, 0, rclx, rcly, zoom, 0, pixbuf );
     254
     255        LONG lRop = ROP_SRCCOPY;
     256        BITMAPINFO2 pbmi;
     257        pbmi.cbFix = 16L;
     258        pbmi.cx = rclx;
     259        pbmi.cy = rcly;
     260        pbmi.cPlanes = 1;
     261        pbmi.cBitCount = bpp * 8;
     262        GpiDrawBits( hpsPrinter, pixbuf->getDataPtr( ev ), &pbmi, 4L,
     263                     aptlPoints, lRop, BBO_IGNORE );
     264        delete pixbuf;
     265    }
     266}
     267
     268
     269
     270bool LucidePrinting::doPsPrint( HAB lhab )
     271{
     272    CHAR         achDriverName[ DRIVERNAME_LENGTH ] = "";
     273    DEVOPENSTRUC dos   = { 0 };
     274    SIZEL        sizel = { 0 };
     275
     276    HCINFO curForm = { 0 };
     277    if ( !queryCurrentForm( lhab, &curForm ) ) {
     278        return false;
     279    }
     280
     281    char *generating_ps = newstrdupL( PRINT_GENERATING_POSTSCRIPT );
     282    progressDlg->setText( generating_ps );
     283    delete generating_ps;
     284
     285    // Magrins
     286    LONG mLeft   = __max( TEST_MARGIN, curForm.xLeftClip );
     287    LONG mBottom = __max( TEST_MARGIN, curForm.yBottomClip );
     288    LONG mRight  = __max( TEST_MARGIN, curForm.cx - curForm.xRightClip );
     289    LONG mTop    = __max( TEST_MARGIN, curForm.cy - curForm.yTopClip );
     290
     291    // Count paper page size in 1/72 inches
     292    double pwidth = ( (double)( curForm.cx - mLeft - mRight ) / 25.4 ) * 72.0;
     293    double pheight = ( (double)( curForm.cy - mTop - mBottom ) / 25.4 ) * 72.0;
     294
     295    char *tmpps = "TMPLUCID.PS";
     296    BOOL rc = doc->exportToPostScript( ev, tmpps, psetup->pgfrom-1, psetup->pgto-1,
     297                                       pwidth, pheight, false );
     298    if ( !rc ) {
     299        unlink( tmpps );
     300        return false;
     301    }
     302    if ( abortPrinting ) {
     303        unlink( tmpps );
     304        return true;
     305    }
     306
     307    char *spooling_ps = newstrdupL( PRINT_SPOOLING_POSTSCRIPT );
     308    progressDlg->setText( spooling_ps );
     309    delete spooling_ps;
     310
     311    // build a devopenstruct for the call to SplQmOpen
     312    dos.pszLogAddress = psetup->QueueInfo.pszName;              // 1
     313    strcpy( achDriverName, psetup->QueueInfo.pszDriverName );
     314    achDriverName[ strcspn( achDriverName, "." ) ] = '\0';
     315    dos.pszDriverName = achDriverName;                          // 2
     316    dos.pdriv         = psetup->QueueInfo.pDriverData;          // 3
     317    dos.pszDataType   = "PM_Q_RAW";                             // 4
     318
     319    HSPL hspl = SplQmOpen( "*", 4L, (PQMOPENDATA)&dos );
     320    if ( hspl == SPL_ERROR ) {
     321        unlink( tmpps );
     322        return false;
     323    }
     324
     325    rc = SplQmStartDoc( hspl, title );
     326    if ( !rc ) {
     327        SplQmAbort( hspl );
     328        unlink( tmpps );
     329        return false;
     330    }
     331
     332    FILE *f = fopen( tmpps, "rb" );
     333    if ( f == NULL ) {
     334        SplQmAbort( hspl );
     335        unlink( tmpps );
     336        return false;
     337    }
     338
     339    bool splerr = false;
     340    void *buf = malloc( PS_PRINT_BUF_SIZE );
     341    int rd = 0;
     342    while ( rc && ( rd = fread( buf, 1, PS_PRINT_BUF_SIZE, f ) ) != 0 ) {
     343        rc = SplQmWrite( hspl, rd, buf );
     344        if ( !rc || abortPrinting ) {
     345            splerr = true;
     346            break;
     347        }
     348    }
     349    free( buf );
     350    fclose( f );
     351    unlink( tmpps );
     352
     353    if ( splerr ) {
     354        SplQmAbort( hspl );
     355        if ( !abortPrinting ) {
     356            return false;
     357        }
     358    }
     359    else {
     360        SplQmEndDoc( hspl );
     361        SplQmClose( hspl );
     362    }
     363
     364    return true;
     365}
     366
     367bool LucidePrinting::queryCurrentForm( HAB lhab, PHCINFO pcurForm )
     368{
     369    CHAR         achDriverName[ DRIVERNAME_LENGTH ] = "";
     370    DEVOPENSTRUC dos   = { 0 };
     371    // build a devopenstruct for the call to DevOpenDC
     372    dos.pszLogAddress = psetup->QueueInfo.pszName;              // 1
     373    strcpy( achDriverName, psetup->QueueInfo.pszDriverName );
     374    achDriverName[ strcspn( achDriverName, "." ) ] = '\0';
     375    dos.pszDriverName = achDriverName;                          // 2
     376    dos.pdriv = psetup->QueueInfo.pDriverData;                  // 3
     377
     378    HDC hdcPrinterInfo = DevOpenDC( lhab, OD_INFO, "*", 3L, (PDEVOPENDATA)&dos, NULLHANDLE );
     379    if ( hdcPrinterInfo == DEV_ERROR ) {
     380        return false;
     381    }
     382
     383    //long lTech = 0;
     384    //DevQueryCaps( hdcPrinterInfo, CAPS_TECHNOLOGY, sizeof(long), &lTech );
     385    //somPrintf( "lTech: 0x%x\n", lTech );
     386
     387    LONG lForms = DevQueryHardcopyCaps( hdcPrinterInfo, 0, 0, NULL );
    174388    if ( lForms == DQHC_ERROR ) {
    175         return;
     389        DevCloseDC( hdcPrinterInfo );
     390        return false;
    176391    }
    177392
    178393    HCINFO *forms = new HCINFO[ lForms ];
    179394    memset( forms, 0, sizeof( HCINFO ) * lForms );
    180     lForms = DevQueryHardcopyCaps( hdcPrinter, 0, lForms, forms );
     395    lForms = DevQueryHardcopyCaps( hdcPrinterInfo, 0, lForms, forms );
    181396    if ( lForms == DQHC_ERROR ) {
    182397        delete forms;
    183         return;
     398        DevCloseDC( hdcPrinterInfo );
     399        return false;
    184400    }
    185401
     
    190406        }
    191407    }
     408
    192409    delete forms;
    193 }
    194 
     410    DevCloseDC( hdcPrinterInfo );
     411    return true;
     412}
     413
     414// static method
     415void LucidePrinting::printabort( void *data )
     416{
     417    ((LucidePrinting *)data)->abortPrinting = true;
     418}
     419
     420// static method, thread for asynchronous printing
     421void LucidePrinting::printthread( void *p )
     422{
     423    DosSetPriority( PRTYS_THREAD, PRTYC_IDLETIME, PRTYD_MAXIMUM, 0 );
     424    LucidePrinting *_this = (LucidePrinting *)p;
     425
     426    HAB thab = WinInitialize( 0 );
     427    HMQ thmq = WinCreateMsgQueue( thab, 0 );
     428
     429    bool printOk = false;
     430    if ( _this->psetup->ptype == TypePostScript ) {
     431        printOk = _this->doPsPrint( thab );
     432    }
     433    else {
     434        printOk = _this->doPmPrint( thab );
     435    }
     436    _this->progressDlg->hide();
     437
     438    if ( !printOk )
     439    {
     440        char *printfailed = newstrdupL( PRINT_FAILED );
     441        WinMessageBox( HWND_DESKTOP, _this->hFrame, printfailed, NULL,
     442                       1, MB_OK | MB_ERROR | MB_MOVEABLE );
     443        delete printfailed;
     444    }
     445
     446    WinDestroyMsgQueue( thmq );
     447    WinTerminate( thab );
     448    _endthread();
     449
     450    delete _this;
     451}
     452
  • trunk/Lucide/SOURCE/gui/print.h

    r90 r91  
    3636#define __PRINT_H
    3737
    38 extern HAB hab;
    39 extern Environment *ev;
    4038
    4139#define DEVICENAME_LENGTH   32
     
    5654
    5755class LuDocument;
    58 void printDocument( LuDocument *doc, PrintSetup *psetup );
     56void printDocument( HWND hWndFrame, LuDocument *doc,
     57                    const char *title, PrintSetup *psetup );
    5958
    6059#endif // __PRINT_H
  • trunk/Lucide/SOURCE/gui/printDlg.cpp

    r90 r91  
    4242#include <ludoc.xh>
    4343
     44#include "globals.h"
    4445#include "printDlg.h"
    4546#include "Lucide_res.h"
     
    5152    hFrame      = hWndFrame;
    5253    doc         = _doc;
     54    scalable    = _doc->isScalable( ev );
    5355    currentpage = _currentpage;
    5456    psetup      = new PrintSetup;
     
    243245                case IDC_TYPE_ASIMAGE:
    244246                {
     247                    BOOL asimg = WinQueryButtonCheckstate( hwnd, IDC_TYPE_ASIMAGE );
    245248                    WinEnableControl( hwnd, IDC_HIGHER_IMAGE_QUALITY,
    246                                 WinQueryButtonCheckstate( hwnd, IDC_TYPE_ASIMAGE ) );
     249                                      asimg && _this->scalable );
    247250                }
    248251                break;
     
    283286                                _this->psetup->pgto = tmpVal;
    284287                            }
     288                            if ( _this->psetup->pgfrom > _this->psetup->pgto ) {
     289                                long tmp = _this->psetup->pgfrom;
     290                                _this->psetup->pgfrom = _this->psetup->pgto;
     291                                _this->psetup->pgto = tmp;
     292                            }
    285293                        }
    286294
  • trunk/Lucide/SOURCE/gui/printDlg.h

    r90 r91  
    6060        HWND hFrame;
    6161        LuDocument *doc;
     62        bool scalable;
    6263        long currentpage;
    6364        PPRQINFO3 pQueueInfo;
  • trunk/Lucide/SOURCE/gui/settingsDlg.cpp

    r63 r91  
    104104            // layout
    105105            HWND hLayout = WinWindowFromID( hwnd, IDC_DEFPGLAYOUT );
    106             std::string spage = getLocalizedString( MENU_SINGLE_PAGE );
    107             std::string cont = getLocalizedString( MENU_CONTINUOUS );
     106            std::string spage = getLocalizedString( SD_SINGLE_PAGE );
     107            std::string cont = getLocalizedString( SD_CONTINUOUS );
    108108            WinSendMsg( hLayout, LM_INSERTITEM, MPFROMSHORT(LIT_END),
    109109                        MPFROMP( spage.c_str() ) );
  • trunk/Lucide/SOURCE/plugins/ludjvu/ludjvu.cpp

    r88 r91  
    55 *     SOM incremental update: 2.24
    66 */
     7
    78
    89/*
     
    105106}
    106107
     108
    107109SOM_Scope boolean  SOMLINK loadFile(LuDjvuDocument *somSelf,
    108110                                     Environment *ev, string filename,
     
    132134}
    133135
     136
    134137SOM_Scope short  SOMLINK getBpp(LuDjvuDocument *somSelf,  Environment *ev)
    135138{
    136139    return 3;
    137140}
     141
    138142
    139143SOM_Scope boolean  SOMLINK isScalable(LuDjvuDocument *somSelf,
     
    143147}
    144148
     149
    145150SOM_Scope long  SOMLINK getPageCount(LuDjvuDocument *somSelf,
    146151                                      Environment *ev)
     
    150155    return ddjvu_document_get_pagenum( d->d_document );
    151156}
     157
    152158
    153159SOM_Scope void  SOMLINK getPageSize(LuDjvuDocument *somSelf,
     
    171177    }
    172178}
     179
    173180
    174181SOM_Scope void  SOMLINK renderPageToPixbuf(LuDjvuDocument *somSelf,
     
    235242}
    236243
     244
    237245SOM_Scope boolean  SOMLINK getThumbnailSize(LuDjvuDocument *somSelf,
    238246                                             Environment *ev,
     
    253261    return TRUE;
    254262}
     263
    255264
    256265SOM_Scope LuPixbuf*  SOMLINK getThumbnail(LuDjvuDocument *somSelf,
     
    294303}
    295304
     305
    296306SOM_Scope boolean  SOMLINK isSaveable(LuDjvuDocument *somSelf,
    297307                                       Environment *ev)
     
    303313#endif
    304314}
     315
    305316
    306317SOM_Scope boolean  SOMLINK saveAs(LuDjvuDocument *somSelf,  Environment *ev,
     
    327338#endif
    328339}
     340
     341
     342SOM_Scope boolean  SOMLINK isPostScriptExportable(LuDjvuDocument *somSelf,
     343                                                   Environment *ev)
     344{
     345#ifdef __GNUC__
     346    return TRUE;
     347#else
     348    return FALSE;
     349#endif
     350}
     351
     352
     353SOM_Scope boolean  SOMLINK exportToPostScript(LuDjvuDocument *somSelf,
     354                                               Environment *ev,
     355                                              string filename,
     356                                              long first_page,
     357                                              long last_page,
     358                                              double width, double height,
     359                                              boolean duplex)
     360{
     361#ifdef __GNUC__
     362    LuDjvuDocumentData *somThis = LuDjvuDocumentGetData(somSelf);
     363    DjvuDocument *d = (DjvuDocument *)somThis->data;
     364
     365    FILE *f = NULL;
     366    if ( ( f = fopen( filename, "wb" ) ) == NULL ) {
     367        return FALSE;
     368    }
     369
     370    char pgbuf[ 20 ];
     371    snprintf( pgbuf, 20, "-page=%d-%d", first_page + 1, last_page + 1 );
     372    const char *optv[] = { pgbuf };
     373
     374    ddjvu_job_t *job = ddjvu_document_print( d->d_document, f, 1, optv );
     375    while ( !ddjvu_job_done( job ) ) {
     376        djvu_handle_events( d->d_context );
     377    }
     378    fclose( f );
     379
     380    return TRUE;
     381#else
     382    return FALSE;
     383#endif
     384}
     385
    329386
    330387SOM_Scope void SOMLINK somDefaultInit(LuDjvuDocument *somSelf,
  • trunk/Lucide/SOURCE/plugins/ludjvu/ludjvu.idl

    r88 r91  
    3030        isSaveable: override;
    3131        saveAs: override;
     32        isPostScriptExportable: override;
     33        exportToPostScript: override;
    3234
    3335        somDefaultInit: override, init;
  • trunk/Lucide/SOURCE/plugins/ludjvu/ludjvu.xh

    r88 r91  
    151151typedef boolean   SOMLINK somTP_LuDjvuDocument_isPostScriptExportable(LuDjvuDocument *somSelf, Environment *ev);
    152152typedef somTP_LuDjvuDocument_isPostScriptExportable *somTD_LuDjvuDocument_isPostScriptExportable;
    153 typedef void   SOMLINK somTP_LuDjvuDocument_exportToPostScript(LuDjvuDocument *somSelf, Environment *ev,
     153typedef boolean   SOMLINK somTP_LuDjvuDocument_exportToPostScript(LuDjvuDocument *somSelf, Environment *ev,
    154154                string filename,
    155155                long first_page,
     
    587587
    588588/* method: exportToPostScript */
    589 void   exportToPostScript(Environment *ev,
     589boolean   exportToPostScript(Environment *ev,
    590590                string filename,
    591591                long first_page,
     
    595595                boolean duplex)
    596596{
    597    SOM_ResolveD(this,LuDjvuDocument,LuDocument,exportToPostScript)
     597   return SOM_ResolveD(this,LuDjvuDocument,LuDocument,exportToPostScript)
    598598        (this, ev,filename,first_page,last_page,width,height,duplex);
    599599}
  • trunk/Lucide/SOURCE/plugins/ludjvu/ludjvu.xih

    r88 r91  
    149149  #define _isSaveable somSelf->isSaveable
    150150  #define _saveAs somSelf->saveAs
     151  #define _isPostScriptExportable somSelf->isPostScriptExportable
     152  #define _exportToPostScript somSelf->exportToPostScript
    151153  #define _somDefaultInit somSelf->somDefaultInit
    152154  #define _somDestruct somSelf->somDestruct
     
    596598#define LuDjvuDocument_parents_saveAs(somSelf,ev,filename) (\
    597599   LuDjvuDocument_parent_LuDocument_saveAs(somSelf,ev,filename))
     600
     601/*
     602 * Overridden method: isPostScriptExportable
     603 */
     604SOM_Scope boolean  SOMLINK isPostScriptExportable(LuDjvuDocument *somSelf, Environment *ev);
     605static char *somMN_LuDjvuDocumentisPostScriptExportable = "LuDocument::isPostScriptExportable";
     606static somId somId_LuDjvuDocumentisPostScriptExportable = &somMN_LuDjvuDocumentisPostScriptExportable;
     607#ifdef somId_isPostScriptExportable
     608#undef somId_isPostScriptExportable
     609#else
     610#define somId_isPostScriptExportable somId_LuDjvuDocumentisPostScriptExportable
     611#endif
     612typedef boolean   SOMLINK somTP_xih_LuDjvuDocument_isPostScriptExportable(LuDjvuDocument *somSelf, Environment *ev);
     613typedef somTP_xih_LuDjvuDocument_isPostScriptExportable *somTD_xih_LuDjvuDocument_isPostScriptExportable;
     614/* define the parent method call macro */
     615static somMethodProc* LuDjvuDocument_parent_LuDocument_isPostScriptExportable_resolved;
     616#define LuDjvuDocument_parent_LuDocument_isPostScriptExportable(somSelf,ev) \
     617  ((( somTD_xih_LuDjvuDocument_isPostScriptExportable ) \
     618      LuDjvuDocument_parent_LuDocument_isPostScriptExportable_resolved) \
     619        (somSelf,ev))
     620/* define a variety of (possibly ambiguous) short forms */
     621#ifndef SOMGD_pmc_parent_isPostScriptExportable
     622  #ifdef parent_isPostScriptExportable
     623    #define SOMGD_pmc_parent_isPostScriptExportable
     624    #undef parent_isPostScriptExportable
     625  #else
     626#define parent_isPostScriptExportable LuDjvuDocument_parent_LuDocument_isPostScriptExportable
     627  #endif
     628#endif
     629#ifndef SOMGD_pmc_parent_LuDocument_isPostScriptExportable
     630  #ifdef parent_LuDocument_isPostScriptExportable
     631    #define SOMGD_pmc_parent_LuDocument_isPostScriptExportable
     632    #undef parent_LuDocument_isPostScriptExportable
     633  #else
     634    #define parent_LuDocument_isPostScriptExportable LuDjvuDocument_parent_LuDocument_isPostScriptExportable
     635  #endif
     636#endif
     637#define LuDjvuDocument_parents_isPostScriptExportable(somSelf,ev) (\
     638   LuDjvuDocument_parent_LuDocument_isPostScriptExportable(somSelf,ev))
     639
     640/*
     641 * Overridden method: exportToPostScript
     642 */
     643SOM_Scope boolean  SOMLINK exportToPostScript(LuDjvuDocument *somSelf, Environment *ev,
     644                string filename,
     645                long first_page,
     646                long last_page,
     647                double width,
     648                double height,
     649                boolean duplex);
     650static char *somMN_LuDjvuDocumentexportToPostScript = "LuDocument::exportToPostScript";
     651static somId somId_LuDjvuDocumentexportToPostScript = &somMN_LuDjvuDocumentexportToPostScript;
     652#ifdef somId_exportToPostScript
     653#undef somId_exportToPostScript
     654#else
     655#define somId_exportToPostScript somId_LuDjvuDocumentexportToPostScript
     656#endif
     657typedef boolean   SOMLINK somTP_xih_LuDjvuDocument_exportToPostScript(LuDjvuDocument *somSelf, Environment *ev,
     658                string filename,
     659                long first_page,
     660                long last_page,
     661                double width,
     662                double height,
     663                boolean duplex);
     664typedef somTP_xih_LuDjvuDocument_exportToPostScript *somTD_xih_LuDjvuDocument_exportToPostScript;
     665/* define the parent method call macro */
     666static somMethodProc* LuDjvuDocument_parent_LuDocument_exportToPostScript_resolved;
     667#define LuDjvuDocument_parent_LuDocument_exportToPostScript(somSelf,ev,filename,first_page,last_page,width,height,duplex) \
     668  ((( somTD_xih_LuDjvuDocument_exportToPostScript ) \
     669      LuDjvuDocument_parent_LuDocument_exportToPostScript_resolved) \
     670        (somSelf,ev,filename,first_page,last_page,width,height,duplex))
     671/* define a variety of (possibly ambiguous) short forms */
     672#ifndef SOMGD_pmc_parent_exportToPostScript
     673  #ifdef parent_exportToPostScript
     674    #define SOMGD_pmc_parent_exportToPostScript
     675    #undef parent_exportToPostScript
     676  #else
     677#define parent_exportToPostScript LuDjvuDocument_parent_LuDocument_exportToPostScript
     678  #endif
     679#endif
     680#ifndef SOMGD_pmc_parent_LuDocument_exportToPostScript
     681  #ifdef parent_LuDocument_exportToPostScript
     682    #define SOMGD_pmc_parent_LuDocument_exportToPostScript
     683    #undef parent_LuDocument_exportToPostScript
     684  #else
     685    #define parent_LuDocument_exportToPostScript LuDjvuDocument_parent_LuDocument_exportToPostScript
     686  #endif
     687#endif
     688#define LuDjvuDocument_parents_exportToPostScript(somSelf,ev,filename,first_page,last_page,width,height,duplex) (\
     689   LuDjvuDocument_parent_LuDocument_exportToPostScript(somSelf,ev,filename,first_page,last_page,width,height,duplex))
    598690
    599691/*
     
    653745    {    &somId_LuDjvuDocumentsaveAs,
    654746         (somMethodProc *) saveAs  },
     747    {    &somId_LuDjvuDocumentisPostScriptExportable,
     748         (somMethodProc *) isPostScriptExportable  },
     749    {    &somId_LuDjvuDocumentexportToPostScript,
     750         (somMethodProc *) exportToPostScript  },
    655751    {    &somId_LuDjvuDocumentsomDefaultInit,
    656752         (somMethodProc *) somDefaultInit  },
     
    671767
    672768static somStaticClassInfo LuDjvuDocumentSCI = {
    673     4, 0, 12, 0, 0, 0, /* layout version 4 */
     769    4, 0, 14, 0, 0, 0, /* layout version 4 */
    674770    LuDjvuDocument_MajorVersion, LuDjvuDocument_MinorVersion,
    675771    sizeof(LuDjvuDocumentData), LuDjvuDocument_MaxNoMethods, 1,
     
    717813    LuDocumentNewClass(LuDocument_MajorVersion,LuDocument_MinorVersion);        /* static reference */
    718814    result = (SOMClass*)((void*)somBuildClass(0xFFFFFFFF,&LuDjvuDocumentSCI, somtmajorVersion, somtminorVersion));
     815    LuDjvuDocument_parent_LuDocument_exportToPostScript_resolved =
     816        somParentNumResolve(LuDjvuDocumentCClassData.parentMtab, 1, LuDocumentClassData.exportToPostScript);
     817    LuDjvuDocument_parent_LuDocument_isPostScriptExportable_resolved =
     818        somParentNumResolve(LuDjvuDocumentCClassData.parentMtab, 1, LuDocumentClassData.isPostScriptExportable);
    719819    LuDjvuDocument_parent_LuDocument_saveAs_resolved =
    720820        somParentNumResolve(LuDjvuDocumentCClassData.parentMtab, 1, LuDocumentClassData.saveAs);
  • trunk/Lucide/SOURCE/plugins/ludoc/ludoc.cpp

    r61 r91  
    278278
    279279
    280 SOM_Scope void  SOMLINK exportToPostScript(LuDocument *somSelf, 
     280SOM_Scope boolean SOMLINK exportToPostScript(LuDocument *somSelf,
    281281                                   Environment *ev,
    282282                                   string filename, long first_page,
     
    285285{
    286286    // Abstract method does nothing
     287    return FALSE;
    287288}
    288289
  • trunk/Lucide/SOURCE/plugins/ludoc/ludoc.idl

    r61 r91  
    1313#include <lutypes.h>
    1414
     15/**
     16 * Note: all page numbers is zero-based.
     17 */
    1518
    1619interface LuDocument : SOMObject
     
    308311     *
    309312     * Create a new postscript file and render document to.
    310      **/
    311     void exportToPostScript( in string filename,
     313     * Return value: TRUE if PS document was generated successfully.
     314     **/
     315    boolean exportToPostScript( in string filename,
    312316                     in long first_page, in long last_page,
    313317                     in double width, in double height, in boolean duplex );
  • trunk/Lucide/SOURCE/plugins/ludoc/ludoc.xh

    r88 r91  
    271271typedef boolean   SOMLINK somTP_LuDocument_isPostScriptExportable(LuDocument *somSelf, Environment *ev);
    272272typedef somTP_LuDocument_isPostScriptExportable *somTD_LuDocument_isPostScriptExportable;
    273 typedef void   SOMLINK somTP_LuDocument_exportToPostScript(LuDocument *somSelf, Environment *ev,
     273typedef boolean   SOMLINK somTP_LuDocument_exportToPostScript(LuDocument *somSelf, Environment *ev,
    274274                string filename,
    275275                long first_page,
     
    707707
    708708/* method: exportToPostScript */
    709 void   exportToPostScript(Environment *ev,
     709boolean   exportToPostScript(Environment *ev,
    710710                string filename,
    711711                long first_page,
     
    715715                boolean duplex)
    716716{
    717    SOM_ResolveD(this,LuDocument,LuDocument,exportToPostScript)
     717   return SOM_ResolveD(this,LuDocument,LuDocument,exportToPostScript)
    718718        (this, ev,filename,first_page,last_page,width,height,duplex);
    719719}
  • trunk/Lucide/SOURCE/plugins/ludoc/ludoc.xih

    r61 r91  
    549549 * New Method: exportToPostScript
    550550 */
    551 SOM_Scope void  SOMLINK exportToPostScript(LuDocument *somSelf, Environment *ev,
     551SOM_Scope boolean  SOMLINK exportToPostScript(LuDocument *somSelf, Environment *ev,
    552552                string filename,
    553553                long first_page,
     
    57057020, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, };
    571571
    572 static somMethodInfo exportToPostScriptMethodInfo = {1, 40, &exportToPostScriptFloatMap};
     572static somMethodInfo exportToPostScriptMethodInfo = {11, 40, &exportToPostScriptFloatMap};
    573573
    574574static somApRdInfo exportToPostScriptStubs = {0, 0, &exportToPostScriptMethodInfo};
  • trunk/Lucide/SOURCE/plugins/lupoppler/lupoppler.cpp

    r71 r91  
    678678
    679679
    680 SOM_Scope void SOMLINK exportToPostScript(LuPopplerDocument *somSelf,
     680SOM_Scope boolean SOMLINK exportToPostScript(LuPopplerDocument *somSelf,
    681681                                    Environment *ev, string filename,
    682                                    long first_page, long last_page,
    683                                    double width, double height,
    684                                    boolean duplex)
     682                                    long first_page, long last_page,
     683                                    double width, double height,
     684                                    boolean duplex)
    685685{
    686686    if ( filename == NULL ) {
    687         return;
     687        return FALSE;
    688688    }
    689689    if ( last_page < first_page ) {
    690         return;
     690        return FALSE;
    691691    }
    692692
    693693    LuPopplerDocumentData *somThis = LuPopplerDocumentGetData(somSelf);
    694694    PDFDoc *doc = ((PopplerDocument *)somThis->data)->doc;
    695 
    696695
    697696    PSOutputDev *out = new PSOutputDev( filename, doc->getXRef(),
     
    701700                                        duplex, 0, 0, 0, 0, gFalse );
    702701
    703 
    704     for ( long i = first_page; i < last_page; i++ ) {
     702        if ( !out->isOk() ) {
     703                delete out;
     704        return FALSE;
     705        }
     706
     707    for ( long i = first_page; i <= last_page; i++ ) {
    705708        doc->displayPage( out, i + 1, 72.0, 72.0, 0, gFalse, gTrue, gFalse );
    706709    }
    707710
    708711    delete out;
     712    return TRUE;
    709713}
    710714
  • trunk/Lucide/SOURCE/plugins/lupoppler/lupoppler.xh

    r88 r91  
    151151typedef boolean   SOMLINK somTP_LuPopplerDocument_isPostScriptExportable(LuPopplerDocument *somSelf, Environment *ev);
    152152typedef somTP_LuPopplerDocument_isPostScriptExportable *somTD_LuPopplerDocument_isPostScriptExportable;
    153 typedef void   SOMLINK somTP_LuPopplerDocument_exportToPostScript(LuPopplerDocument *somSelf, Environment *ev,
     153typedef boolean   SOMLINK somTP_LuPopplerDocument_exportToPostScript(LuPopplerDocument *somSelf, Environment *ev,
    154154                string filename,
    155155                long first_page,
     
    587587
    588588/* method: exportToPostScript */
    589 void   exportToPostScript(Environment *ev,
     589boolean   exportToPostScript(Environment *ev,
    590590                string filename,
    591591                long first_page,
     
    595595                boolean duplex)
    596596{
    597    SOM_ResolveD(this,LuPopplerDocument,LuDocument,exportToPostScript)
     597   return SOM_ResolveD(this,LuPopplerDocument,LuDocument,exportToPostScript)
    598598        (this, ev,filename,first_page,last_page,width,height,duplex);
    599599}
  • trunk/Lucide/SOURCE/plugins/lupoppler/lupoppler.xih

    r61 r91  
    909909 * Overridden method: exportToPostScript
    910910 */
    911 SOM_Scope void  SOMLINK exportToPostScript(LuPopplerDocument *somSelf, Environment *ev,
     911SOM_Scope boolean  SOMLINK exportToPostScript(LuPopplerDocument *somSelf, Environment *ev,
    912912                string filename,
    913913                long first_page,
     
    923923#define somId_exportToPostScript somId_LuPopplerDocumentexportToPostScript
    924924#endif
    925 typedef void   SOMLINK somTP_xih_LuPopplerDocument_exportToPostScript(LuPopplerDocument *somSelf, Environment *ev,
     925typedef boolean   SOMLINK somTP_xih_LuPopplerDocument_exportToPostScript(LuPopplerDocument *somSelf, Environment *ev,
    926926                string filename,
    927927                long first_page,
  • trunk/Lucide/readme

    r75 r91  
    1212  --------------------------------------------------------------------------
    1313         PDF                   Scaling, Rotation, Navigation, Text
    14                                selection, Searching, Asynchronous rendering
     14                               selection, Searching, Asynchronous rendering,
     15                               PostScript printing
    1516
    16          DJVU                  Scaling
     17         DJVU                  Scaling, PostScript printing
    1718
    1819         JPG                   -
Note: See TracChangeset for help on using the changeset viewer.