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

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

implemented D&D into view window

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