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