1 /*
2  * PROJECT:     PAINT for ReactOS
3  * LICENSE:     LGPL
4  * FILE:        base/applications/mspaint/toolsmodel.h
5  * PURPOSE:     Keep track of tool parameters, notify listeners
6  * PROGRAMMERS: Benedikt Freisen
7  */
8 
9 #pragma once
10 
11 enum TOOLTYPE
12 {
13     TOOL_FREESEL  =  1,
14     TOOL_RECTSEL  =  2,
15     TOOL_RUBBER   =  3,
16     TOOL_FILL     =  4,
17     TOOL_COLOR    =  5,
18     TOOL_ZOOM     =  6,
19     TOOL_PEN      =  7,
20     TOOL_BRUSH    =  8,
21     TOOL_AIRBRUSH =  9,
22     TOOL_TEXT     = 10,
23     TOOL_LINE     = 11,
24     TOOL_BEZIER   = 12,
25     TOOL_RECT     = 13,
26     TOOL_SHAPE    = 14,
27     TOOL_ELLIPSE  = 15,
28     TOOL_RRECT    = 16,
29     TOOL_MAX = TOOL_RRECT,
30 };
31 
32 /* CLASSES **********************************************************/
33 
34 struct ToolBase
35 {
36     TOOLTYPE m_tool;
37     HDC m_hdc;
38     COLORREF m_fg, m_bg;
39     static INT pointSP;
40     static POINT pointStack[256];
41 
42     ToolBase(TOOLTYPE tool) : m_tool(tool), m_hdc(NULL)
43     {
44     }
45 
46     virtual ~ToolBase()
47     {
48     }
49 
50     virtual void OnButtonDown(BOOL bLeftButton, LONG x, LONG y, BOOL bDoubleClick)
51     {
52     }
53 
54     virtual void OnMouseMove(BOOL bLeftButton, LONG x, LONG y)
55     {
56     }
57 
58     virtual void OnButtonUp(BOOL bLeftButton, LONG x, LONG y)
59     {
60     }
61 
62     virtual void OnCancelDraw();
63     virtual void OnFinishDraw();
64 
65     void beginEvent();
66     void endEvent();
67     void reset();
68 
69     static ToolBase* createToolObject(TOOLTYPE type);
70 };
71 
72 class ToolsModel
73 {
74 private:
75     int m_lineWidth;
76     int m_shapeStyle;
77     int m_brushStyle;
78     TOOLTYPE m_activeTool;
79     TOOLTYPE m_oldActiveTool;
80     int m_airBrushWidth;
81     int m_rubberRadius;
82     BOOL m_transpBg;
83     int m_zoom;
84     ToolBase* m_tools[TOOL_MAX + 1];
85     ToolBase *m_pToolObject;
86 
87     ToolBase *GetOrCreateTool(TOOLTYPE nTool);
88 
89 public:
90     ToolsModel();
91     ~ToolsModel();
92     int GetLineWidth() const;
93     void SetLineWidth(int nLineWidth);
94     int GetShapeStyle() const;
95     void SetShapeStyle(int nShapeStyle);
96     int GetBrushStyle() const;
97     void SetBrushStyle(int nBrushStyle);
98     TOOLTYPE GetActiveTool() const;
99     TOOLTYPE GetOldActiveTool() const;
100     void SetActiveTool(TOOLTYPE nActiveTool);
101     int GetAirBrushWidth() const;
102     void SetAirBrushWidth(int nAirBrushWidth);
103     int GetRubberRadius() const;
104     void SetRubberRadius(int nRubberRadius);
105     BOOL IsBackgroundTransparent() const;
106     void SetBackgroundTransparent(BOOL bTransparent);
107     int GetZoom() const;
108     void SetZoom(int nZoom);
109 
110     void OnButtonDown(BOOL bLeftButton, LONG x, LONG y, BOOL bDoubleClick);
111     void OnMouseMove(BOOL bLeftButton, LONG x, LONG y);
112     void OnButtonUp(BOOL bLeftButton, LONG x, LONG y);
113     void OnCancelDraw();
114     void OnFinishDraw();
115 
116     void resetTool();
117     void selectAll();
118 
119     void NotifyToolChanged();
120     void NotifyToolSettingsChanged();
121     void NotifyZoomChanged();
122 };
123