Changeset 324 for branches/kmk


Ignore:
Timestamp:
Mar 27, 2010, 8:32:57 PM (12 years ago)
Author:
dmik
Message:

branches/kmk: DocumentViewer?: Change the cursor type to I-beam when over the input field.

Location:
branches/kmk/Lucide
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • branches/kmk/Lucide/gui/docViewer.cpp

    r309 r324  
    5656typedef LuDocument_LuRectSequence    *PLuRectSequence;
    5757typedef LuDocument_LuLinkMapSequence *PLuLinkMapSequence;
     58typedef LuDocument_LuInputFieldSequence *PLuInputFieldSequence;
    5859
    5960#define LINE_HEIGHT     16
     
    128129    selrects = NULL;
    129130    // links
    130     haveLinks = false;
    131131    links = NULL;
    132132    handPtr = WinLoadPointer( HWND_DESKTOP, _hmod, IDP_HAND );
     
    134134    zoomInPtr = WinLoadPointer( HWND_DESKTOP, _hmod, IDP_ZOOM_IN );
    135135    zoomOutPtr = WinLoadPointer( HWND_DESKTOP, _hmod, IDP_ZOOM_OUT );
     136    textPtr = WinQuerySysPointer( HWND_DESKTOP, SPTR_TEXT, FALSE );
     137    // input fields
     138    inputFields = NULL;
    136139    // search
    137140    foundrects = NULL;
     
    171174        freeRects( foundrects );
    172175        freeLinks();
     176        freeInputFields();
    173177    }
    174178
     
    211215            zoom = 1;
    212216        }
    213         haveLinks = doc->isHaveLinks( ev );
    214217
    215218        pagesizes = new LuSize[ totalpages ];
     
    223226        memset( foundrects, 0, sizeof( PLuRectSequence ) * totalpages );
    224227
    225         links = new PLuLinkMapSequence[ totalpages ];
    226         memset( links, 0, sizeof( PLuLinkMapSequence ) * totalpages );
     228        if ( doc->isHaveLinks( ev ) ) {
     229            links = new PLuLinkMapSequence[ totalpages ];
     230            memset( links, 0, sizeof( PLuLinkMapSequence ) * totalpages );
     231        }
     232
     233        if ( doc->isHaveInputFields( ev ) ) {
     234            inputFields = new PLuInputFieldSequence[ totalpages ];
     235            memset( inputFields, 0, sizeof( PLuInputFieldSequence ) * totalpages );
     236        }
    227237
    228238        selection = new LuRectangle[ totalpages ];
     
    289299    freeLinks();
    290300
    291     doc         = NULL;
    292     totalpages  = 0;
    293     currentpage = 0;
    294     fullwidth   = 0;
    295     fullheight  = 0;
    296     haveLinks   = false;
     301    freeInputFields();
     302
     303    doc             = NULL;
     304    totalpages      = 0;
     305    currentpage     = 0;
     306    fullwidth       = 0;
     307    fullheight      = 0;
    297308
    298309    DosReleaseMutexSem( todrawAccess );
     
    343354}
    344355
     356void DocumentViewer::freeInputFields()
     357{
     358    if ( inputFields != NULL )
     359    {
     360        for ( long i = 0; i < totalpages; i++ ) {
     361            if ( inputFields[ i ] != NULL ) {
     362                LuDocument::freeInputFields( ev, inputFields[ i ] );
     363                inputFields[ i ] = NULL;
     364            }
     365        }
     366
     367        delete inputFields;
     368        inputFields = NULL;
     369    }
     370}
    345371
    346372// switch view to specified page
     
    624650
    625651        if ( links != NULL ) {
    626             if ( ( links[ currentpage ] == NULL ) && haveLinks ) {
     652            if ( links[ currentpage ] == NULL ) {
    627653                links[ currentpage ] = doc->getLinkMapping( ev, currentpage );
     654            }
     655        }
     656
     657        if ( inputFields != NULL ) {
     658            if ( inputFields[ currentpage ] == NULL ) {
     659                inputFields[ currentpage ] = doc->getInputFields( ev, currentpage );
    628660            }
    629661        }
     
    10901122
    10911123            // load links for page if not loaded before
    1092             if ( ( links[ pda->pagenum ] == NULL ) && haveLinks ) {
     1124            if ( links[ pda->pagenum ] == NULL ) {
    10931125                links[ pda->pagenum ] = doc->getLinkMapping( ev, pda->pagenum );
     1126            }
     1127
     1128            // load input fields for page if not loaded before
     1129            if ( inputFields[ pda->pagenum ] == NULL ) {
     1130                inputFields[ pda->pagenum ] = doc->getInputFields( ev, pda->pagenum );
    10941131            }
    10951132        }
     
    13011338
    13021339            // load links for page if not loaded before
    1303             if ( ( links[ pda->pagenum ] == NULL ) && haveLinks ) {
     1340            if ( links[ pda->pagenum ] == NULL ) {
    13041341                links[ pda->pagenum ] = doc->getLinkMapping( ev, pda->pagenum );
     1342            }
     1343
     1344            // load input fields for page if not loaded before
     1345            if ( inputFields[ pda->pagenum ] == NULL ) {
     1346                inputFields[ pda->pagenum ] = doc->getInputFields( ev, pda->pagenum );
    13051347            }
    13061348
     
    17351777            return TRUE;
    17361778        }
    1737         else if ( links != NULL )
     1779        else if ( links != NULL || inputFields != NULL )
    17381780        {
    17391781            long pg = currentpage;
     
    17431785            }
    17441786
    1745             if ( ( pg != -1 ) && ( links[ pg ] != NULL ) )
     1787            if ( links != NULL )
    17461788            {
    1747                 for ( int i = 0; i < links[ pg ]->_length; i++ )
     1789                if ( ( pg != -1 ) && ( links[ pg ] != NULL ) )
    17481790                {
    1749                     RECTL r = {0};
    1750                     docPosToWinPos( pg, &(links[ pg ]->_buffer[i].area), &r );
    1751 
    1752                     POINTL ptl = { xpos, ypos };
    1753                     if ( WinPtInRect( hab, &r, &ptl ) ) {
    1754                         WinSetPointer( HWND_DESKTOP, handPtr );
    1755                         return TRUE;
     1791                    for ( int i = 0; i < links[ pg ]->_length; i++ )
     1792                    {
     1793                        RECTL r = {0};
     1794                        docPosToWinPos( pg, &(links[ pg ]->_buffer[i].area), &r );
     1795
     1796                        POINTL ptl = { xpos, ypos };
     1797                        if ( WinPtInRect( hab, &r, &ptl ) ) {
     1798                            WinSetPointer( HWND_DESKTOP, handPtr );
     1799                            return TRUE;
     1800                        }
     1801                    }
     1802                }
     1803            }
     1804
     1805            if ( inputFields != NULL )
     1806            {
     1807                if ( ( pg != -1 ) && ( inputFields[ pg ] != NULL ) )
     1808                {
     1809                    for ( int i = 0; i < inputFields[ pg ]->_length; i++ )
     1810                    {
     1811                        LuRectangle *rect = inputFields[ pg ]->_buffer[i]->getRectangle( ev );
     1812
     1813                        RECTL r = {0};
     1814                        docPosToWinPos( pg, rect, &r );
     1815
     1816                        POINTL ptl = { xpos, ypos };
     1817                        if ( WinPtInRect( hab, &r, &ptl ) ) {
     1818                            WinSetPointer( HWND_DESKTOP, textPtr );
     1819                            return TRUE;
     1820                        }
    17561821                    }
    17571822                }
  • branches/kmk/Lucide/gui/docViewer.h

    r285 r324  
    120120        void freeRects( LuDocument_LuRectSequence **rects );
    121121        void freeLinks();
     122        void freeInputFields();
    122123        void drawFound( long pagenum, HPS hps, PRECTL r );
    123124        DrawAreas *findDrawAreas( PRECTL r );
     
    204205
    205206        // links
    206         bool haveLinks;
    207207        LuDocument_LuLinkMapSequence **links;
     208
     209        // input fields
     210        LuDocument_LuInputFieldSequence **inputFields;
    208211
    209212        // search
     
    219222        HPOINTER zoomInPtr;
    220223        HPOINTER zoomOutPtr;
     224        HPOINTER textPtr;
    221225};
    222226
  • branches/kmk/Lucide/plugins/lupoppler/lupifield.cpp

    r323 r324  
    5555#include "lupifield.xih"
    5656
     57#include <Page.h>
     58
    5759
    5860SOM_Scope void SOMLINK init_widget(LuPopplerInputField *somSelf,
    5961                                    Environment *ev, somInitCtrl* ctrl,
    60                                    FormWidget* aFormWidget)
     62                                   LuPopplerDocument* aDoc, long aPagenum,
     63                                   Page* aPage, FormWidget* aFormWidget)
    6164{
    6265    LuPopplerInputFieldData *somThis; /* set in BeginInitializer */
     
    6972    /* local LuPopplerInputField initialization code */
    7073
     74    somThis->doc = aDoc;
     75    somThis->pagenum = aPagenum;
     76    somThis->page = aPage;
    7177    somThis->widget = aFormWidget;
    7278    somThis->rect.x1 = 0.;
     
    113119    LuPopplerInputFieldData *somThis = LuPopplerInputFieldGetData(somSelf);
    114120
    115     somThis->widget->getRect(&somThis->rect.x1, &somThis->rect.y1,
    116                              &somThis->rect.x2, &somThis->rect.y2);
     121    somThis->widget->getRect( &somThis->rect.x1, &somThis->rect.y1,
     122                              &somThis->rect.x2, &somThis->rect.y2 );
     123
     124    // see LuPopplerDocument::getLinkMapping()
     125
     126    double height = 0;
     127    somThis->doc->getPageSize( ev, somThis->pagenum, NULL, &height );
     128
     129    somThis->rect.x1 -= somThis->page->getCropBox()->x1;
     130    somThis->rect.x2 -= somThis->page->getCropBox()->x1;
     131    somThis->rect.y1 -= somThis->page->getCropBox()->y1;
     132    somThis->rect.y2 -= somThis->page->getCropBox()->y1;
     133
     134    double y1 = somThis->rect.y1;
     135    double y2 = somThis->rect.y2;
     136    somThis->rect.y1 = height - y2;
     137    somThis->rect.y2 = height - y1;
     138
    117139    return &somThis->rect;
    118140}
  • branches/kmk/Lucide/plugins/lupoppler/lupifield.idl

    r323 r324  
    33
    44#include <luifield.idl>
     5#include <lupoppler.idl>
    56
    6 interface FormWidget; // declared in poppler/Form.h
     7interface Page;         // declared in poppler/Page.h
     8interface FormWidget;   // declared in poppler/Form.h
    79
    810/**
     
    1315interface LuPopplerInputField : LuInputField
    1416{
    15     void init_widget( inout somInitCtrl ctrl, in FormWidget aFormWidget );
     17    void init_widget( inout somInitCtrl ctrl, in LuPopplerDocument aDoc,
     18                      in long aPagenum, in Page aPage,
     19                      in FormWidget aFormWidget );
    1620
    1721#ifdef __SOMIDL__
     
    3034        isReadOnly: override;
    3135
     36        LuPopplerDocument doc;
     37        long pagenum;
     38        Page page;
    3239        FormWidget widget;
    3340        LuRectangle rect;
     
    3542        passthru C_h_before =  ""
    3643            ""
     44            "#include <lupoppler.h>"
    3745            "#include <Form.h>"
    3846            "";
     
    4048        passthru C_xh_before =  ""
    4149            ""
     50            "#include <lupoppler.xh>"
    4251            "#include <Form.h>"
    4352            "";
  • branches/kmk/Lucide/plugins/lupoppler/lupitext.cpp

    r323 r324  
    5858SOM_Scope void SOMLINK init_widgetText(LuPopplerInputText *somSelf,
    5959                                        Environment *ev, somInitCtrl* ctrl,
     60                                       LuPopplerDocument* aDoc,
     61                                       long aPagenum, Page* aPage,
    6062                                       FormWidgetText* aFormWidgetText)
    6163{
     
    6769    LuPopplerInputText_Init_LuInputText_somDefaultInit(somSelf, ctrl);
    6870    LuPopplerInputText_Init_LuPopplerInputField_init_widget(somSelf, ev, ctrl,
     71                                                            aDoc, aPagenum, aPage,
    6972                                                            aFormWidgetText);
    7073
  • branches/kmk/Lucide/plugins/lupoppler/lupitext.idl

    r323 r324  
    1414interface LuPopplerInputText : LuInputText, LuPopplerInputField
    1515{
    16     void init_widgetText( inout somInitCtrl ctrl,
    17                in FormWidgetText aFormWidgetText );
     16    void init_widgetText( inout somInitCtrl ctrl, in LuPopplerDocument aDoc,
     17                          in long aPagenum, in Page aPage,
     18                          in FormWidgetText aFormWidgetText );
    1819
    1920#ifdef __SOMIDL__
  • branches/kmk/Lucide/plugins/lupoppler/lupoppler.cpp

    r321 r324  
    15171517
    15181518    for (int i = 0; i < widgets->getNumWidgets(); ++i) {
    1519         fields->_buffer[i] = new LuPopplerInputField(ev, widgets->getWidget(i));
     1519        fields->_buffer[i] = new LuPopplerInputField( ev, somSelf, pagenum, page,
     1520                                                      widgets->getWidget( i ) );
    15201521    }
    15211522
Note: See TracChangeset for help on using the changeset viewer.