Changeset 649


Ignore:
Timestamp:
Sep 21, 2018, 11:11:30 PM (3 years ago)
Author:
Gregg Young
Message:

Initial attempt to get Choice fields working in PDF fill in forms. It is disabled (doesn't work either).

Location:
trunk/Lucide
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/Lucide/gui/docViewer.cpp

    r645 r649  
    4444#include <luibutton.xh>
    4545#include <luitext.xh>
     46#include <luichoice.xh>
    4647#include "lucide.h"
    4748#include "docViewer.h"
     
    8182#define DOC_ID_ENTRY    0
    8283#define DOC_ID_MLE      1
     84#define DOC_ID_COMBO    2
    8385
    8486void PageInputFields::fillCache( int i )
     
    107109            break;
    108110        }
    109         case LuInputField_Choice:
     111        case LuInputField_Choice: {
     112            //LuInputChoice *choice = static_cast<LuInputChoice *>( field );
     113            //entry.supported = true;
     114            break;
     115        }
    110116        case LuInputField_Signature:
    111117        default:
     
    151157    hWndEntry   = NULLHANDLE;
    152158    hWndMLE     = NULLHANDLE;
     159    hWndList    = NULLHANDLE;
    153160    textField   = NULL;
    154161    textFieldPage = 0;
    155162    textFieldIndex = 0;
     163    choiceField   = NULL;
     164    choiceFieldPage = 0;
     165    choiceFieldIndex = 0;
    156166    doc         = NULL;
    157167    totalpages  = 0;
     
    234244                                 ES_AUTOSCROLL | ES_MARGIN,
    235245                                 0, 0, 0, 0, hWndDoc,
    236                                  HWND_TOP, DOC_ID_ENTRY, NULL, NULL );
     246                                HWND_TOP, DOC_ID_ENTRY, NULL, NULL );
     247
     248    hWndList = WinCreateWindow( hWndDoc, WC_COMBOBOX, NULL,
     249                                 ES_AUTOSCROLL | ES_MARGIN,
     250                                 0, 0, 0, 0, hWndDoc,
     251                                 HWND_TOP, DOC_ID_COMBO, NULL, NULL );
    237252
    238253    hWndMLE = WinCreateWindow( hWndDoc, WC_MLE, NULL,
     
    14871502    }
    14881503    return ( ( ypos * realzoom ) + ( pagenum * VERT_SPACE ) );
     1504}
     1505
     1506void DocumentViewer::showChoiceField( long page, long index, PRECTL r )
     1507{
     1508    // save the previous changes if any
     1509    //if ( choiceField != NULL )
     1510    //    hideChoiceField();
     1511    choiceField =
     1512        static_cast<LuInputChoice *>( inputFields[ page ].fields->_buffer[ index ] );
     1513    choiceFieldPage = page;
     1514    choiceFieldIndex = index;
     1515
     1516    positionChoiceField( r );
     1517
     1518    HWND hwnd = hWndList;
     1519
     1520    const char *contents = choiceField->getChoiceText( ev );
     1521    char *str = uniUtf8ToSys( contents, NULL, NULL );
     1522    WinSetWindowText( hwnd, str );
     1523    //WinSendMsg( hwnd, LM_INSERTITEM, MPFROMLONG( 65520 ), NULL ); ??
     1524    delete[] str;
     1525
     1526    WinShowWindow( hwnd, TRUE );
     1527    WinSetFocus( HWND_DESKTOP, hwnd );
     1528}
     1529
     1530void DocumentViewer::positionChoiceField( PRECTL r )
     1531{
     1532    if ( choiceField == NULL )
     1533        return;
     1534
     1535    RECTL r2;
     1536    if ( r == NULL ) {
     1537        LuRectangle *rect = choiceField->getRectangle( ev );
     1538        docPosToWinPos( choiceFieldPage, rect, &r2 );
     1539    } else {
     1540        r2 = *r;
     1541    }
     1542
     1543    static LONG ulDpi = 0;
     1544    if ( ulDpi == 0 ) {
     1545        // DPI is constant beteen reboots
     1546        HPS hps = WinGetScreenPS( HWND_DESKTOP );
     1547        DevQueryCaps( GpiQueryDevice( hps ), CAPS_HORIZONTAL_FONT_RES,
     1548                      1, &ulDpi );
     1549        WinReleasePS( hps );
     1550    }
     1551
     1552    LONG points = -1;
     1553    HWND hwnd = hWndList;
     1554        // reduce the rectangle to compensate for the border
     1555        r2.xLeft += 3;
     1556        r2.yBottom += 3;
     1557        r2.xRight -= 3;
     1558        r2.yTop -= 3;
     1559        // set the font size to match the field height
     1560        points = ( r2.yTop - r2.yBottom ) * 72 / 120 - 2;
     1561        if ( points < 1 )
     1562            points = 1;
     1563
     1564
     1565    if (points >= 0 ) {
     1566        char font[ 32 ];
     1567        sprintf( font, "%d.Helvetica Bold", points );
     1568        WinSetPresParam( hWndList, PP_FONTNAMESIZE, strlen( font ) + 1, font );
     1569    }
     1570
     1571    WinSetWindowPos( hwnd, HWND_TOP,
     1572                     r2.xLeft, r2.yBottom,
     1573                     r2.xRight - r2.xLeft,
     1574                     r2.yTop - r2.yBottom,
     1575                     SWP_MOVE | SWP_SIZE | SWP_ZORDER );
    14891576}
    14901577
     
    23412428                                    showTextField( pg, i, &r );
    23422429                                    break;
     2430                                }
     2431                                case LuInputField_Choice:
     2432                                  {
     2433                                    //showChoiceField( pg, i, &r );
     2434                                    break;
    23432435                                }
    23442436                                default:
  • trunk/Lucide/gui/docViewer.h

    r645 r649  
    4343class ProgressDlg;
    4444class LuInputText;
     45class LuInputChoice;
    4546
    4647struct LuSize  { double x, y; };
     
    152153        void positionTextField( PRECTL r = NULL );
    153154        void hideTextField( bool apply = true, PPOINTL ptl = NULL );
     155        void showChoiceField( long page, long index, PRECTL r = NULL );
     156        void positionChoiceField( PRECTL r = NULL );
     157        void hideChoiceField( bool apply = true, PPOINTL ptl = NULL );
    154158
    155159        static MRESULT EXPENTRY docViewProc( HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2 );
     
    168172        HWND hWndEntry;
    169173        HWND hWndMLE;
     174        HWND hWndList;
    170175        LuInputText *textField;
     176        LuInputChoice *choiceField;
    171177        long textFieldPage;
    172178        long textFieldIndex;
     179        long choiceFieldPage;
     180        long choiceFieldIndex;
    173181        PFNWP oldFrameProc;
    174182        HWND hWndHscroll;
  • trunk/Lucide/plugins/lupoppler/lupichoice.cpp

    r492 r649  
    4747#include "lupichoice.xih"
    4848
     49SOM_Scope void SOMLINK init_widgetChoice(LuPopplerInputChoice *somSelf,
     50                                          Environment *ev, somInitCtrl* ctrl,
     51                                         LuPopplerDocument* aDoc,
     52                                         long aPagenum, Page* aPage,
     53                                         FormWidgetChoice* aFormWidgetChoice)
     54{
     55    LuPopplerInputChoiceData *somThis = NULL; /* set in BeginInitializer */
     56    somInitCtrl globalCtrl;
     57    somBooleanVector myMask;
     58    LuPopplerInputChoice_BeginInitializer_init_widgetChoice;
     59
     60    LuPopplerInputChoice_Init_LuPopplerInputField_init_widget(somSelf, ev, ctrl,
     61                                                              aDoc, aPagenum, aPage,
     62                                                              aFormWidgetChoice);
     63    LuPopplerInputChoice_Init_LuInputChoice_somDefaultInit(somSelf, ctrl);
     64
     65    /* local LuPopplerInputField initialization code */
     66
     67    somThis->widget = aFormWidgetChoice;
     68}
     69
     70
     71SOM_Scope void SOMLINK somDestruct(LuPopplerInputChoice *somSelf,
     72                                   octet doFree, som3DestructCtrl* ctrl)
     73{
     74    LuPopplerInputChoiceData *somThis; /* set in BeginDestructor */
     75    somDestructCtrl globalCtrl;
     76    somBooleanVector myMask;
     77    LuPopplerInputChoice_BeginDestructor;
     78
     79    /* local LuPopplerInputField deinitialization code */
     80
     81    LuPopplerInputChoice_EndDestructor;
     82}
    4983
    5084SOM_Scope long  SOMLINK getCount(LuPopplerInputChoice *somSelf,
  • trunk/Lucide/plugins/lupoppler/lupichoice.idl

    r367 r649  
    33
    44#include <luichoice.idl>
     5#include <lupifield.idl>
     6
     7interface FormWidgetChoice; // declared in poppler/Form.h
    58
    69/**
     
    912 * This interface exposes the FormWidgetChoice poppler class.
    1013 */
    11 interface LuPopplerInputChoice : LuInputChoice
     14interface LuPopplerInputChoice : LuPopplerInputField, LuInputChoice
    1215{
     16     void init_widgetChoice( inout somInitCtrl ctrl, in LuPopplerDocument aDoc,
     17                            in long aPagenum, in Page aPage,
     18                            in FormWidgetChoice aFormWidgetChoice );
    1319
    1420#ifdef __SOMIDL__
     
    1622    implementation
    1723    {
     24        releaseorder: init_widgetChoice;
     25
     26        init_widgetChoice: init;
     27        somDestruct: override;
     28
    1829        getCount: override;
    1930        getChoice: override;
     
    3546        boolean mIsMultiSelectable;
    3647        boolean mIsSpellCheckable;
     48
     49        FormWidgetChoice widget;
     50
     51        passthru C_h_before =  ""
     52            ""
     53            "#include <poppler/Form.h>"
     54            "";
     55
     56        passthru C_xh_before =  ""
     57            ""
     58            "#include <poppler/Form.h>"
     59            "";
     60
    3761    };
    3862
  • trunk/Lucide/plugins/lupoppler/lupoppler.cpp

    r647 r649  
    6363#include "lupibutton.xih"
    6464#include "lupitext.xih"
     65#include "lupichoice.xih"
    6566#include "cpconv.h"
    6667
     
    11501151    memset( info, 0, sizeof( LuDocumentInfo ) );
    11511152
    1152     Object objdict;
    1153     doc->getDocInfo( &objdict );
     1153    Object objdict = doc->getDocInfo();
    11541154    if ( objdict.isDict() )
    11551155    {
    11561156        Dict *d = objdict.getDict();
    1157         Object obj;
    1158 
    1159         if ( d->lookup( "Title", &obj )->isString() ) {
     1157        Object obj = d->lookup( "Title");
     1158
     1159        if ( obj.isString() ) {
    11601160            info->title = propcnv( obj.getString(), document->objUniBe, document->objSys );
    11611161            info->fields_mask |= LU_DOCUMENT_INFO_TITLE;
    11621162        }
    1163         obj.free();
    1164         if ( d->lookup( "Author", &obj )->isString() ) {
     1163        obj = d->lookup("Author");
     1164        if ( obj.isString() ) {
    11651165            info->author = propcnv( obj.getString(), document->objUniBe, document->objSys );
    11661166            info->fields_mask |= LU_DOCUMENT_INFO_AUTHOR;
    11671167        }
    1168         obj.free();
    1169         if ( d->lookup( "Subject", &obj )->isString() ) {
     1168        obj = d->lookup("Subject");
     1169        if ( obj.isString() ) {
    11701170            info->subject = propcnv( obj.getString(), document->objUniBe, document->objSys );
    11711171            info->fields_mask |= LU_DOCUMENT_INFO_SUBJECT;
    11721172        }
    1173         obj.free();
    1174         if ( d->lookup( "Keywords", &obj )->isString() ) {
     1173        obj = d->lookup("Keywords");
     1174        if ( obj.isString() ) {
    11751175            info->keywords = propcnv( obj.getString(), document->objUniBe, document->objSys );
    11761176            info->fields_mask |= LU_DOCUMENT_INFO_KEYWORDS;
    11771177        }
    1178         obj.free();
    1179         if ( d->lookup( "Creator", &obj )->isString() ) {
     1178        obj = d->lookup("Creator");
     1179        if ( obj.isString() ) {
    11801180            info->creator = propcnv( obj.getString(), document->objUniBe, document->objSys );
    11811181            info->fields_mask |= LU_DOCUMENT_INFO_CREATOR;
    11821182        }
    1183         obj.free();
    1184         if ( d->lookup( "Producer", &obj )->isString() ) {
     1183        obj = d->lookup("Producer");
     1184        if ( obj.isString() ) {
    11851185            info->producer = propcnv( obj.getString(), document->objUniBe, document->objSys );
    11861186            info->fields_mask |= LU_DOCUMENT_INFO_PRODUCER;
    11871187        }
    1188         obj.free();
    1189         if ( d->lookup( "CreationDate", &obj )->isString() ) {
     1188        obj = d->lookup("CreationDate");
     1189        if ( obj.isString() ) {
    11901190            char *d = propcnv( obj.getString(), document->objUniBe, document->objSys );
    11911191            info->creation_date = propToDate( d );
     
    11951195            SOMFree( d );
    11961196        }
    1197         obj.free();
    1198         if ( d->lookup( "ModDate", &obj )->isString() ) {
     1197        obj = d->lookup("ModDate");
     1198        if ( obj.isString() ) {
    11991199            char *d = propcnv( obj.getString(), document->objUniBe, document->objSys );
    12001200            info->modified_date = propToDate( d );
     
    12041204            SOMFree( d );
    12051205        }
    1206         obj.free();
    12071206    }
    12081207
     
    12641263    boolean retval = FALSE;
    12651264
    1266     page->getThumb( &thumb );
     1265    thumb = page->getThumb();
    12671266    if ( thumb.isNull() )
    12681267    {
    1269         thumb.free();
     1268        //thumb.free();
    12701269        return FALSE;
    12711270    }
     
    12881287    }
    12891288
    1290     thumb.free();
     1289    //thumb.free();
    12911290
    12921291    return retval;
     
    14861485                        static_cast< FormWidgetText * >( widget ) ) );
    14871486                break;
    1488 #if 0
     1487#if 1
    14891488            case formChoice:
    14901489                fields->_buffer[ i ] = static_cast< LuPopplerInputField * >(
    1491                     new LuPopplerInputChoice( ev, somSelf, pagenum, page,
     1490                       new LuPopplerInputChoice( ev, somSelf, pagenum, page,
    14921491                        static_cast< FormWidgetChoice * >( widget ) ) );
    14931492                break;
Note: See TracChangeset for help on using the changeset viewer.