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

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

intermediate commit, text selection in continuous view nearly works

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