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

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

text selection in continuous view fully works

File size: 4.5 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 goToPage( long page );
34        long getCurrentPage() { return currentpage; }
35        void setZoom( double _zoom );
36        double getZoom() { return zoom; }
37        double getRealZoom() { return realzoom; }
38        void copyToClipbrd();
39        void searchDocument( const char *_searchString, bool _caseSensitive,
40                             bool _continueSearch );
41
42        static void registerClass( HAB hab );
43
44        // Internal stuffs
45    private:
46
47        void drawPage();
48        void adjustSize();
49
50        MRESULT vertScroll( HWND hwnd, MPARAM mp2, HRGN hrgn );
51        MRESULT horizScroll( HWND hwnd, MPARAM mp2, HRGN hrgn );
52        void wmSize( HWND hwnd, MPARAM mp2 );
53        void wmPaint( HWND hwnd );
54        void wmPaintCont( HWND hwnd );
55        void wmPaintAsynch( HWND hwnd );
56        void wmPaintContAsynch( HWND hwnd );
57        void wmButton1Down( HWND hwnd, SHORT xpos, SHORT ypos );
58        void wmButton1Up();
59        BOOL wmMouseMove( HWND hwnd, SHORT xpos, SHORT ypos );
60        BOOL wmClick( HWND hwnd, SHORT xpos, SHORT ypos );
61        BOOL wmChar( HWND hwnd, MPARAM mp1, MPARAM mp2 );
62        void winPosToDocPos( PPOINTL startpoint, PPOINTL endpoint, LuRectangle *r );
63        void winPosToDocPos( PageDrawArea *pda, LuRectangle *r );
64        void docPosToWinPos( long pagenum, LuRectangle *r, PRECTL rcl, bool useZoom = true );
65        HRGN rectsToRegion( long pagenum, HPS hps, LuDocument_LuRectSequence *rects, bool useZoom );
66        void drawSelection( long pagenum, HPS hps, PRECTL r );
67        void scrollToPos( HWND hwnd, HRGN hrgn, LONG xpos, LONG ypos, bool withSelection );
68        void freeRects( LuDocument_LuRectSequence **rects );
69        void freeLinks();
70        void drawFound( long pagenum, HPS hps, PRECTL r );
71        DrawAreas *findDrawAreas( PRECTL r );
72        void determineCurrentPage();
73        long posToPagenum( LONG yPosWin, double *pageRest );
74        double pagenumToPos( long pagenum );
75
76        static MRESULT EXPENTRY docViewProc( HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2 );
77        static void searchthread( void *p );
78        static void searchabort( void *p );
79        static void drawthread( void *p );
80        static long _System asynchCallbackFnDraw( void *data );
81        static long _System asynchCallbackFnAbort( void *data );
82
83        LuDocument *doc;
84        HAB hab;
85        HWND hMainFrame;
86        HWND hWndDocFrame;
87        HWND hWndDoc;
88        HWND hWndHscroll;
89        HWND hWndVscroll;
90        SHORT sHscrollMax;
91        SHORT sVscrollMax;
92        SHORT sHscrollPos;
93        SHORT sVscrollPos;
94        LONG  sVscrollInc;
95        LONG  sHscrollInc;
96        ULONG realVscrollMax;
97        LONG  cxClient;
98        LONG  cyClient;
99        LONG  spos_x;
100        LONG  spos_y;
101        HPS hpsBuffer;
102        HDC hdcBuffer;
103        Environment *ev;
104        LuPixbuf *pixbuf;
105        double width, height, zoom, realzoom, fullwidth, fullheight;
106        long totalpages, currentpage;
107        ProgressDlg *progressDlg;
108        DrawAreas *drawareas;
109        int drawareaIndex;
110
111        // continuous view
112        bool continuous;
113        LuSize *pagesizes;
114        SHORT VScrollStep;
115        RECTL savedRcl;
116
117        // asynch draw
118        bool enableAsynchDraw;
119        HMTX todrawAccess;
120        HEV  haveDraw;
121        bool abortAsynch;
122        bool termdraw;
123        TID  drawThreadId;
124
125        // selection
126        bool mousePressed;
127        POINTL selectionStart;
128        POINTL selectionEnd;
129        LuRectangle *selection;
130        LuDocument_LuRectSequence **selrects;
131
132        // links
133        LuDocument_LuLinkMapSequence **links;
134        HPOINTER handptr;
135
136        // search
137        LuDocument_LuRectSequence **foundrects;
138        char *searchString;
139        bool caseSensitive;
140        bool continueSearch;
141        bool abortSearch;
142};
143
144#endif // __DOCVIEWER_H
145
Note: See TracBrowser for help on using the repository browser.