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 
64     void beginEvent();
65     void endEvent();
66     void reset();
67 
68     static ToolBase* createToolObject(TOOLTYPE type);
69 };
70 
71 class ToolsModel
72 {
73 private:
74     int m_lineWidth;
75     int m_shapeStyle;
76     int m_brushStyle;
77     TOOLTYPE m_activeTool;
78     TOOLTYPE m_oldActiveTool;
79     int m_airBrushWidth;
80     int m_rubberRadius;
81     BOOL m_transpBg;
82     int m_zoom;
83     ToolBase* m_tools[TOOL_MAX + 1];
84     ToolBase *m_pToolObject;
85 
86     ToolBase *GetOrCreateTool(TOOLTYPE nTool);
87 
88     void NotifyToolChanged();
89     void NotifyToolSettingsChanged();
90     void NotifyZoomChanged();
91 
92 public:
93     ToolsModel();
94     ~ToolsModel();
95     int GetLineWidth() const;
96     void SetLineWidth(int nLineWidth);
97     int GetShapeStyle() const;
98     void SetShapeStyle(int nShapeStyle);
99     int GetBrushStyle() const;
100     void SetBrushStyle(int nBrushStyle);
101     TOOLTYPE GetActiveTool() const;
102     TOOLTYPE GetOldActiveTool() const;
103     void SetActiveTool(TOOLTYPE nActiveTool);
104     int GetAirBrushWidth() const;
105     void SetAirBrushWidth(int nAirBrushWidth);
106     int GetRubberRadius() const;
107     void SetRubberRadius(int nRubberRadius);
108     BOOL IsBackgroundTransparent() const;
109     void SetBackgroundTransparent(BOOL bTransparent);
110     int GetZoom() const;
111     void SetZoom(int nZoom);
112 
113     void OnButtonDown(BOOL bLeftButton, LONG x, LONG y, BOOL bDoubleClick);
114     void OnMouseMove(BOOL bLeftButton, LONG x, LONG y);
115     void OnButtonUp(BOOL bLeftButton, LONG x, LONG y);
116     void OnCancelDraw();
117 
118     void resetTool();
119     void selectAll();
120 };
121