xref: /haiku/src/apps/sudoku/SudokuView.h (revision d9cebac2b77547b7064f22497514eecd2d047160)
1 /*
2  * Copyright 2007, Axel Dörfler, axeld@pinc-software.de. All rights reserved.
3  * Distributed under the terms of the MIT License.
4  */
5 #ifndef SUDOKU_VIEW_H
6 #define SUDOKU_VIEW_H
7 
8 
9 #include <View.h>
10 
11 class SudokuField;
12 struct entry_ref;
13 
14 
15 enum {
16 	kMarkValidHints = 0x01,
17 	kMarkInvalid = 0x02,
18 };
19 
20 
21 class SudokuView : public BView {
22 public:
23 	SudokuView(BRect frame, const char* name, const BMessage& settings,
24 		uint32 resizingMode);
25 	virtual ~SudokuView();
26 
27 	status_t SaveState(BMessage& state);
28 
29 	status_t SetTo(entry_ref& ref);
30 	status_t SetTo(const char* data);
31 	status_t SetTo(SudokuField* field);
32 
33 	status_t SaveTo(entry_ref& ref, bool asText);
34 
35 	void ClearChanged();
36 	void ClearAll();
37 
38 	void SetHintFlags(uint32 flags);
39 	uint32 HintFlags() const { return fHintFlags; }
40 
41 	SudokuField* Field() { return fField; }
42 
43 	void SetEditable(bool editable);
44 	bool Editable() const { return fEditable; }
45 
46 protected:
47 	virtual void AttachedToWindow();
48 
49 	virtual void FrameResized(float width, float height);
50 	virtual void MouseDown(BPoint where);
51 	virtual void MouseMoved(BPoint where, uint32 transit,
52 		const BMessage* dragMessage);
53 	virtual void KeyDown(const char *bytes, int32 numBytes);
54 
55 	virtual void MessageReceived(BMessage* message);
56 
57 	virtual void Draw(BRect updateRect);
58 
59 private:
60 	status_t _FilterString(const char* data, size_t dataLength, char* buffer,
61 		uint32& out, bool& ignore);
62 	void _SetText(char* text, uint32 value);
63 	char _BaseCharacter();
64 	bool _ValidCharacter(char c);
65 	BPoint _LeftTop(uint32 x, uint32 y);
66 	BRect _Frame(uint32, uint32 y);
67 	void _InvalidateHintField(uint32 x, uint32 y, uint32 hintX, uint32 hintY);
68 	void _InvalidateField(uint32 x, uint32 y);
69 	void _InvalidateKeyboardFocus(uint32 x, uint32 y);
70 	void _InsertKey(char rawKey, int32 modifiers);
71 	void _RemoveHint();
72 	bool _GetHintFieldFor(BPoint where, uint32 x, uint32 y,
73 		uint32& hintX, uint32& hintY);
74 	bool _GetFieldFor(BPoint where, uint32& x, uint32& y);
75 	void _FitFont(BFont& font, float width, float height);
76 	void _DrawKeyboardFocus();
77 	void _DrawHints(uint32 x, uint32 y);
78 
79 	rgb_color		fBackgroundColor;
80 	SudokuField*	fField;
81 	uint32			fBlockSize;
82 	float			fWidth, fHeight, fBaseline;
83 	BFont			fFieldFont;
84 	BFont			fHintFont;
85 	float			fHintHeight, fHintWidth, fHintBaseline;
86 	uint32			fShowHintX, fShowHintY;
87 	uint32			fLastHintValue;
88 	uint32			fLastField;
89 	uint32			fKeyboardX, fKeyboardY;
90 	uint32			fHintFlags;
91 	bool			fShowKeyboardFocus;
92 	bool			fShowCursor;
93 	bool			fEditable;
94 };
95 
96 static const uint32 kMsgSudokuSolved = 'susl';
97 static const uint32 kMsgSolveSudoku = 'slvs';
98 static const uint32 kMsgSolveSingle = 'slsg';
99 
100 #endif	// SUDOKU_VIEW_H
101