source: trunk/Lucide/SOURCE/gui/docViewer.h @ 26

Last change on this file since 26 was 26, checked in by Eugene Romanenko, 15 years ago

remember nav pane position/visibility

File size: 4.6 KB
Line 
1#ifndef __DOCVIEWER_H
2#define __DOCVIEWER_H
3
4#include <vector>
5
6#include <ludoc.xh>
7#include "lucide.h"
8
9class ProgressDlg;
10
11struct LuSize  { double x, y; };
12
13struct PageDrawArea
14{
15    long   pagenum;
16    LuSize startpos;
17    RECTL  drawrect;
18};
19
20typedef std::vector<PageDrawArea> DrawAreas;
21
22class DocumentViewer
23{
24    public:
25        DocumentViewer( HAB _hab, HWND hWndFrame );
26        virtual ~DocumentViewer();
27
28        void setViewMode( ViewMode mode );
29
30        HWND getHWND() { return hWndDocFrame; }
31
32        void setDocument( LuDocument *_doc );
33        void close();
34        void goToPage( long page );
35        long getCurrentPage() { return currentpage; }
36        void setZoom( double _zoom );
37        double getZoom() { return zoom; }
38        double getRealZoom() { return realzoom; }
39        void copyToClipbrd();
40        void searchDocument( const char *_searchString, bool _caseSensitive,
41                             bool _continueSearch );
42
43        static void registerClass( HAB hab );
44
45        // Internal stuffs
46    private:
47
48        void drawPage();
49        void adjustSize();
50
51        MRESULT vertScroll( HWND hwnd, MPARAM mp2, HRGN hrgn );
52        MRESULT horizScroll( HWND hwnd, MPARAM mp2, HRGN hrgn );
53        MRESULT wmDragOver( PDRAGINFO dragInfo );
54                void wmDrop( PDRAGINFO dragInfo );
55                void wmSize( HWND hwnd, MPARAM mp2 );
56        void wmPaint( HWND hwnd );
57        void wmPaintCont( HWND hwnd );
58        void wmPaintAsynch( HWND hwnd );
59        void wmPaintContAsynch( HWND hwnd );
60        void wmButton1Down( HWND hwnd, SHORT xpos, SHORT ypos );
61        void wmButton1Up();
62        BOOL wmMouseMove( HWND hwnd, SHORT xpos, SHORT ypos );
63        BOOL wmClick( HWND hwnd, SHORT xpos, SHORT ypos );
64        BOOL wmChar( HWND hwnd, MPARAM mp1, MPARAM mp2 );
65        void winPosToDocPos( PPOINTL startpoint, PPOINTL endpoint, LuRectangle *r );
66        void winPosToDocPos( PageDrawArea *pda, LuRectangle *r );
67        void docPosToWinPos( long pagenum, LuRectangle *r, PRECTL rcl, bool useZoom = true );
68        HRGN rectsToRegion( long pagenum, HPS hps, LuDocument_LuRectSequence *rects, bool useZoom );
69        void drawSelection( long pagenum, HPS hps, PRECTL r );
70        void scrollToPos( HWND hwnd, HRGN hrgn, LONG xpos, LONG ypos, bool withSelection );
71        void freeRects( LuDocument_LuRectSequence **rects );
72        void freeLinks();
73        void drawFound( long pagenum, HPS hps, PRECTL r );
74        DrawAreas *findDrawAreas( PRECTL r );
75        void determineCurrentPage();
76        long posToPagenum( LONG yPosWin, double *pageRest );
77        double pagenumToPos( long pagenum );
78
79        static MRESULT EXPENTRY docViewProc( HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2 );
80        static void searchthread( void *p );
81        static void searchabort( void *p );
82        static void drawthread( void *p );
83        static long _System asynchCallbackFnDraw( void *data );
84        static long _System asynchCallbackFnAbort( void *data );
85
86        LuDocument *doc;
87        HAB hab;
88        HWND hMainFrame;
89        HWND hWndDocFrame;
90        HWND hWndDoc;
91        HWND hWndHscroll;
92        HWND hWndVscroll;
93        SHORT sHscrollMax;
94        SHORT sVscrollMax;
95        SHORT sHscrollPos;
96        SHORT sVscrollPos;
97        LONG  sVscrollInc;
98        LONG  sHscrollInc;
99        ULONG realVscrollMax;
100        LONG  cxClient;
101        LONG  cyClient;
102        LONG  spos_x;
103        LONG  spos_y;
104        HPS hpsBuffer;
105        HDC hdcBuffer;
106        Environment *ev;
107        LuPixbuf *pixbuf;
108        double width, height, zoom, realzoom, fullwidth, fullheight;
109        long totalpages, currentpage;
110        ProgressDlg *progressDlg;
111        DrawAreas *drawareas;
112        int drawareaIndex;
113
114        // continuous view
115        bool continuous;
116        LuSize *pagesizes;
117        SHORT VScrollStep;
118        RECTL savedRcl;
119
120        // asynch draw
121        bool enableAsynchDraw;
122        HMTX todrawAccess;
123        HEV  haveDraw;
124        bool abortAsynch;
125        bool termdraw;
126        TID  drawThreadId;
127
128        // selection
129        bool mousePressed;
130        POINTL selectionStart;
131        POINTL selectionEnd;
132        LuRectangle *selection;
133        LuDocument_LuRectSequence **selrects;
134
135        // links
136        LuDocument_LuLinkMapSequence **links;
137        HPOINTER handptr;
138
139        // search
140        LuDocument_LuRectSequence **foundrects;
141        char *searchString;
142        bool caseSensitive;
143        bool continueSearch;
144        bool abortSearch;
145};
146
147#endif // __DOCVIEWER_H
148
Note: See TracBrowser for help on using the repository browser.