Changeset 26 for trunk


Ignore:
Timestamp:
May 23, 2006, 6:30:04 PM (15 years ago)
Author:
Eugene Romanenko
Message:

remember nav pane position/visibility

Location:
trunk/Lucide/SOURCE/gui
Files:
6 edited

Legend:

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

    r25 r26  
    141141void DocumentViewer::setDocument( LuDocument *_doc )
    142142{
    143     doc         = _doc;
    144     zoom        = 1;
    145     currentpage = 0;
    146     fullwidth   = 0;
    147     fullheight  = 0;
    148 
    149     delete pagesizes;
    150     pagesizes   = NULL;
    151 
    152     delete selection;
    153     selection   = NULL;
    154 
    155     freeRects( foundrects );
    156     delete foundrects;
    157     foundrects  = NULL;
    158 
    159     freeRects( selrects );
    160     delete selrects;
    161     selrects    = NULL;
    162 
    163     freeLinks();
     143    close();
     144    doc = _doc;
    164145
    165146    if ( doc != NULL )
     
    191172}
    192173
     174
     175// closes the document
     176void DocumentViewer::close()
     177{
     178    abortAsynch = true;
     179    DosRequestMutexSem( todrawAccess, SEM_INDEFINITE_WAIT );
     180
     181    delete drawareas;
     182    drawareas = NULL;
     183
     184    delete pagesizes;
     185    pagesizes   = NULL;
     186
     187    delete selection;
     188    selection   = NULL;
     189
     190    freeRects( foundrects );
     191    delete foundrects;
     192    foundrects  = NULL;
     193
     194    freeRects( selrects );
     195    delete selrects;
     196    selrects    = NULL;
     197
     198    freeLinks();
     199
     200    doc         = NULL;
     201    totalpages  = 0;
     202    zoom        = 1;
     203    currentpage = 0;
     204    fullwidth   = 0;
     205    fullheight  = 0;
     206
     207    DosReleaseMutexSem( todrawAccess );
     208}
    193209
    194210// sets the view mode
     
    623639    while ( !_this->termdraw )
    624640    {
     641somPrintf("1\n");
    625642        DosWaitEventSem( _this->haveDraw, SEM_INDEFINITE_WAIT );
    626643        DosResetEventSem( _this->haveDraw, &postCnt );
    627644        _this->abortAsynch = false;
     645somPrintf("2\n");
    628646
    629647        if ( ( _this->drawareas != NULL ) && ( _this->doc != NULL ) )
    630648        {
     649somPrintf("3\n");
    631650            DosRequestMutexSem( _this->todrawAccess, SEM_INDEFINITE_WAIT );
    632651
     
    635654                  _this->drawareaIndex++ )
    636655            {
     656somPrintf("4\n");
    637657                PageDrawArea *pda = &(*_this->drawareas)[ _this->drawareaIndex ];
     658somPrintf("4.1\n");
    638659
    639660                LONG rclx = pda->drawrect.xRight - pda->drawrect.xLeft;
    640661                LONG rcly = pda->drawrect.yTop - pda->drawrect.yBottom;
    641662                _this->pixbuf = new LuPixbuf( _this->ev, rclx, rcly );
     663somPrintf("4.2\n");
    642664                _this->doc->renderPageToPixbufAsynch( _this->ev, pda->pagenum,
    643665                       pda->startpos.x, pda->startpos.y, rclx, rcly, _this->realzoom, 0,
    644666                       _this->pixbuf, asynchCallbackFnDraw, asynchCallbackFnAbort, p );
     667somPrintf("4.3\n");
    645668                delete _this->pixbuf;
    646669                _this->pixbuf = NULL;
     670somPrintf("4.4\n");
    647671
    648672                if ( _this->abortAsynch ) {
    649673                    break;  // TODO: remove completed areas from drawareas
    650674                }
     675somPrintf("5\n");
    651676            }
    652677
    653678            if ( !_this->abortAsynch )
    654679            {
     680somPrintf("6\n");
    655681                HPS hps = WinGetPS( _this->hWndDoc );
    656682                if ( hps != NULLHANDLE ) {
     
    667693                delete _this->drawareas;
    668694                _this->drawareas = NULL;
     695somPrintf("7\n");
    669696            }
    670697
    671698            DosReleaseMutexSem( _this->todrawAccess );
    672699        }
     700somPrintf("8\n");
    673701    }
    674702
  • trunk/Lucide/SOURCE/gui/docViewer.h

    r25 r26  
    3131
    3232        void setDocument( LuDocument *_doc );
     33        void close();
    3334        void goToPage( long page );
    3435        long getCurrentPage() { return currentpage; }
  • trunk/Lucide/SOURCE/gui/lucide.cpp

    r25 r26  
    2323
    2424
     25#define ID_SPLITTER 1
     26
    2527const char *appName = "Lucide";
    26 const char *fwp = "FrameWindowPos";
    27 const char *lvd = "LastViewedDir";
     28const char *fwp     = "FrameWindowPos";
     29const char *lvd     = "LastViewedDir";
     30const char *splpos  = "SplitterPos";
     31const char *showind = "ShowIndex";
    2832
    2933
     
    3438HWND  hWndMenu;
    3539HWND  hToolBar;
     40HWND  hVertSplitter;
    3641
    3742Environment    *ev        = somGetGlobalEnvironment();
     
    4247FindDlg        *findDlg   = NULL;
    4348
    44 bool Lucide::dontSwitchPage = false;
     49bool  Lucide::dontSwitchPage = false;
     50SHORT Lucide::splitterPos    = 100;
     51bool  Lucide::showIndex      = true;
    4552
    4653PFNWP pOldSplProc;
     
    5158}
    5259
    53 static void setOfPages( long pages )
     60void Lucide::setOfPages( long pages )
    5461{
    5562    char *pgfrm = newstrdupL( TB_PAGENUM );
     
    8188}
    8289
    83 void enableZoomMenus()
     90void Lucide::enableZoomMenus()
    8491{
    8592    BOOL scalable = doc->isScalable( ev );
     
    97104
    98105
    99 void setZoomChecks( SHORT cmd, SHORT cbind, double zoom )
     106void Lucide::setZoomChecks( SHORT cmd, SHORT cbind, double zoom )
    100107{
    101108    if ( cmd != -1 )
     
    192199        WinEnableMenuItem( hWndMenu, CM_ROTATE90CW, FALSE );
    193200        WinEnableMenuItem( hWndMenu, CM_ROTATE90CCW, FALSE );
    194         WinEnableMenuItem( hWndMenu, CM_NAVPANE, FALSE );
    195         WinSendMsg( hToolBar, TBM_ENABLEITEM, MPFROMSHORT(CM_NAVPANE), (MPARAM)FALSE );
     201        //WinEnableMenuItem( hWndMenu, CM_NAVPANE, FALSE );
     202        //WinSendMsg( hToolBar, TBM_ENABLEITEM, MPFROMSHORT(CM_NAVPANE), (MPARAM)FALSE );
    196203        WinEnableMenuItem( hWndMenu, CM_SINGLEPAGE, FALSE );
    197204        WinEnableMenuItem( hWndMenu, CM_CONTINUOUS, FALSE );
     
    237244    docViewer->setDocument( _doc );
    238245    indexWin->setDocument( _doc );
    239     Lucide::checkMenus();
     246    checkMenus();
    240247}
    241248
     
    286293            char *error = NULL;
    287294            if ( d->loadFile( ev, (char *)fn, NULL, &error ) ) {
     295                docViewer->close();
    288296                delete doc;
    289297                doc = d;
    290                 Lucide::setDocument( doc );
     298                setDocument( doc );
    291299            }
    292300            else
     
    335343}
    336344
     345void Lucide::checkNavpane()
     346{
     347    if ( Lucide::showIndex )
     348    {
     349        WinSendMsg( hWndMenu, MM_SETITEMATTR, MPFROM2SHORT( CM_NAVPANE, TRUE ),
     350                MPFROM2SHORT( MIA_CHECKED, MIA_CHECKED ) );
     351        WinSendMsg( hToolBar, TBM_SETCHECK, MPFROMSHORT( CM_NAVPANE ), (MPARAM)TRUE );
     352    }
     353    else
     354    {
     355        WinSendMsg( hWndMenu, MM_SETITEMATTR, MPFROM2SHORT( CM_NAVPANE, TRUE ),
     356                MPFROM2SHORT( MIA_CHECKED, FALSE ) );
     357        WinSendMsg( hToolBar, TBM_SETCHECK, MPFROMSHORT( CM_NAVPANE ), (MPARAM)FALSE );
     358    }
     359}
    337360
    338361static MRESULT EXPENTRY splProc( HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2 )
     
    341364    switch ( msg )
    342365    {
     366        case WM_CONTROL:
     367        {
     368            if ( ( SHORT1FROMMP( mp1 ) == ID_SPLITTER ) &&
     369                 ( SHORT2FROMMP( mp1 ) == SBN_POSITIONCHANGED ) )
     370            {
     371                SHORT pos = SHORT1FROMMP( mp2 );
     372                if ( pos > 0 ) {
     373                    Lucide::splitterPos = pos;
     374                    Lucide::showIndex = true;
     375                }
     376                else {
     377                    Lucide::showIndex = false;
     378                }
     379                Lucide::checkNavpane();
     380            }
     381        }
     382        break;
    343383
    344384        case WM_COMMAND:
     
    433473                case CM_CONTINUOUS:
    434474                    Lucide::setViewMode( Continuous );
     475                    return (MRESULT)FALSE;
     476
     477                case CM_NAVPANE:
     478                    {
     479                        Lucide::showIndex = !Lucide::showIndex;
     480                        Lucide::checkNavpane();
     481                        WinSendMsg( hVertSplitter, SBM_SETSPLITTERPOS,
     482                            MPFROMSHORT( Lucide::showIndex ? Lucide::splitterPos : 0 ), MPVOID );
     483                    }
    435484                    return (MRESULT)FALSE;
    436485            }
     
    476525
    477526    // Vertical splitter and his windows - Index and Document view
    478     HWND hVertSplitter = WinCreateWindow( hWndFrame, WC_ER_SPLITTER, "",
    479                                           WS_VISIBLE | SBS_VSPLIT,
    480                                           0, 0, 0, 0, hWndFrame, HWND_TOP,
    481                                           0, NULL, NULL );
     527    hVertSplitter = WinCreateWindow( hWndFrame, WC_ER_SPLITTER, "",
     528                                     WS_VISIBLE | SBS_VSPLIT,
     529                                     0, 0, 0, 0, hWndFrame, HWND_TOP,
     530                                     ID_SPLITTER, NULL, NULL );
    482531
    483532    indexWin = new IndexWindow( hab, hWndFrame );
     
    489538    WinSendMsg( hVertSplitter, SBM_SETWINDOWS,
    490539                MPFROMHWND( indexWin->getHWND() ), MPFROMHWND( docViewer->getHWND() ) );
    491     WinSendMsg( hVertSplitter, SBM_SETSPLITTERPOS, MPFROMSHORT( 80 ), MPVOID );
     540    Lucide::splitterPos = PrfQueryProfileInt( HINI_USERPROFILE, appName, splpos, Lucide::splitterPos );
     541    Lucide::showIndex = PrfQueryProfileInt( HINI_USERPROFILE, appName, showind, Lucide::showIndex );
     542    WinSendMsg( hVertSplitter, SBM_SETSPLITTERPOS,
     543                MPFROMSHORT( Lucide::showIndex ? Lucide::splitterPos : 0 ), MPVOID );
    492544
    493545    // Horizontal splitter and its windows - Toolbar and Vertical splitter
     
    513565    }
    514566
     567    Lucide::checkNavpane();
     568
    515569    // ®ª § âì ®ª­® ¯à®£à ¬¬ë
    516570    if ( !PMRestoreWindowPos( NULL, appName, fwp, hWndFrame,
     
    526580    }
    527581
    528     if ( WinIsWindow( hab, hWndFrame ) ) {
     582    if ( WinIsWindow( hab, hWndFrame ) )
     583    {
     584        char valbuf[ 3 ] = "";
     585        PrfWriteProfileString( HINI_USERPROFILE, appName, splpos,
     586                               itoa( Lucide::splitterPos, valbuf, 10 ) );
     587        PrfWriteProfileString( HINI_USERPROFILE, appName, showind,
     588                               itoa( Lucide::showIndex, valbuf, 10 ) );
    529589        PMStoreWindowPos( NULL, appName, fwp, hWndFrame );
    530590    }
  • trunk/Lucide/SOURCE/gui/lucide.h

    r25 r26  
    1313class Lucide
    1414{
    15         public:
    16                 static bool dontSwitchPage;
    17                
    18                 static void openDocument();
    19                 static void loadDocument( const char *fn );
    20                 static void setDocument( LuDocument *_doc );
    21                 static void checkNavigationMenus();
    22                 static void checkZoomMenus();
    23                 static void checkMenus();
    24                 static void goToPage( long page );
    25                 static void setZoom( double zoom );
    26                 static void enableCopy( bool enable );
     15    private:
     16        static void setOfPages( long pages );
     17        static void enableZoomMenus();
     18        static void setZoomChecks( SHORT cmd, SHORT cbind, double zoom );
     19
     20    public:
     21        static bool dontSwitchPage;
     22        static SHORT splitterPos;
     23        static bool showIndex;
     24       
     25        static void openDocument();
     26        static void loadDocument( const char *fn );
     27        static void setDocument( LuDocument *_doc );
     28        static void checkNavigationMenus();
     29        static void checkZoomMenus();
     30        static void checkMenus();
     31        static void checkNavpane();
     32        static void goToPage( long page );
     33        static void setZoom( double zoom );
     34        static void enableCopy( bool enable );
    2735        static void setViewMode( ViewMode mode );
    2836};
  • trunk/Lucide/SOURCE/gui/pmsplitter.cpp

    r2 r26  
    144144        WinSetWindowULong( hwnd, sizeof( ULONG ), (ULONG)sws );
    145145    }
    146    
     146
    147147    switch ( msg )
    148148    {
     
    178178        case WM_SHOW:
    179179            setWindSize( hwnd, sws );
    180             break; 
     180            break;
    181181
    182182        case WM_PAINT:
     
    272272                }
    273273
     274                SHORT oldpos = sws->splitterPos;
     275
    274276                POINTL ptl = { SHORT1FROMMP( mp1 ), SHORT2FROMMP( mp1 ) };
    275277                TRACKINFO track;
     
    306308                        sws->splitterPos = track.rclTrack.yBottom;
    307309                    }
    308                        
     310
    309311                    setWindSize( hwnd, sws );
     312
     313                    // notify owner
     314                    WinSendMsg( WinQueryWindow( hwnd, QW_OWNER ), WM_CONTROL,
     315                                MPFROM2SHORT( WinQueryWindowUShort( hwnd, QWS_ID ),
     316                                              SBN_POSITIONCHANGED ),
     317                                MPFROM2SHORT( sws->splitterPos, oldpos ) );
    310318                }
    311319            }
     
    315323            return (MRESULT)(FALSE);
    316324    }
    317     return WinDefWindowProc( hwnd, msg, mp1, mp2 ); 
     325    return WinDefWindowProc( hwnd, msg, mp1, mp2 );
    318326}
    319327
  • trunk/Lucide/SOURCE/gui/tb_spl.h

    r2 r26  
    5252// (BOOL)WinSendMsg( hwnd, SBM_SETFIXEDSIZE, MPFROMSHORT( size ), MPVOID );
    5353
     54// Control notification code, splitter pos changed
     55// MP1 - (id, SBN_POSITIONCHANGED)  MP2 - (newpos, oldpos)
     56#define SBN_POSITIONCHANGED     1
    5457
    5558/*****************************************************/
Note: See TracChangeset for help on using the changeset viewer.