1*128277c9SStephan Aßmus /* 2*128277c9SStephan Aßmus * Copyright 2006, Haiku. 3*128277c9SStephan Aßmus * Distributed under the terms of the MIT License. 4*128277c9SStephan Aßmus * 5*128277c9SStephan Aßmus * Authors: 6*128277c9SStephan Aßmus * Stephan Aßmus <superstippi@gmx.de> 7*128277c9SStephan Aßmus */ 8*128277c9SStephan Aßmus 9*128277c9SStephan Aßmus /** gui class that loads an image from disk and shows it 10*128277c9SStephan Aßmus as clickable button */ 11*128277c9SStephan Aßmus 12*128277c9SStephan Aßmus // TODO: inherit from BControl? 13*128277c9SStephan Aßmus 14*128277c9SStephan Aßmus #ifndef ICON_BUTTON_H 15*128277c9SStephan Aßmus #define ICON_BUTTON_H 16*128277c9SStephan Aßmus 17*128277c9SStephan Aßmus #include <layout.h> 18*128277c9SStephan Aßmus 19*128277c9SStephan Aßmus #include <Invoker.h> 20*128277c9SStephan Aßmus #include <String.h> 21*128277c9SStephan Aßmus #include <View.h> 22*128277c9SStephan Aßmus 23*128277c9SStephan Aßmus class BBitmap; 24*128277c9SStephan Aßmus class BMimeType; 25*128277c9SStephan Aßmus 26*128277c9SStephan Aßmus class IconButton : public MView, public BView, public BInvoker { 27*128277c9SStephan Aßmus public: 28*128277c9SStephan Aßmus IconButton(const char* name, 29*128277c9SStephan Aßmus uint32 id, 30*128277c9SStephan Aßmus const char* label = NULL, 31*128277c9SStephan Aßmus BMessage* message = NULL, 32*128277c9SStephan Aßmus BHandler* target = NULL); 33*128277c9SStephan Aßmus virtual ~IconButton(); 34*128277c9SStephan Aßmus 35*128277c9SStephan Aßmus // BHandler 36*128277c9SStephan Aßmus virtual void MessageReceived(BMessage* message); 37*128277c9SStephan Aßmus 38*128277c9SStephan Aßmus // BView 39*128277c9SStephan Aßmus virtual void AttachedToWindow(); 40*128277c9SStephan Aßmus virtual void Draw(BRect updateRect); 41*128277c9SStephan Aßmus virtual void MouseDown(BPoint where); 42*128277c9SStephan Aßmus virtual void MouseUp(BPoint where); 43*128277c9SStephan Aßmus virtual void MouseMoved(BPoint where, uint32 transit, 44*128277c9SStephan Aßmus const BMessage* message); 45*128277c9SStephan Aßmus virtual void GetPreferredSize(float* width, 46*128277c9SStephan Aßmus float* height); 47*128277c9SStephan Aßmus 48*128277c9SStephan Aßmus // BInvoker 49*128277c9SStephan Aßmus virtual status_t Invoke(BMessage* message = NULL); 50*128277c9SStephan Aßmus 51*128277c9SStephan Aßmus // MView 52*128277c9SStephan Aßmus virtual minimax layoutprefs(); 53*128277c9SStephan Aßmus virtual BRect layout(BRect rect); 54*128277c9SStephan Aßmus 55*128277c9SStephan Aßmus // IconButton 56*128277c9SStephan Aßmus bool IsValid() const; 57*128277c9SStephan Aßmus 58*128277c9SStephan Aßmus virtual int32 Value() const; 59*128277c9SStephan Aßmus virtual void SetValue(int32 value); 60*128277c9SStephan Aßmus 61*128277c9SStephan Aßmus bool IsEnabled() const; 62*128277c9SStephan Aßmus void SetEnabled(bool enable); 63*128277c9SStephan Aßmus 64*128277c9SStephan Aßmus void SetPressed(bool pressed); 65*128277c9SStephan Aßmus bool IsPressed() const; ID()66*128277c9SStephan Aßmus uint32 ID() const 67*128277c9SStephan Aßmus { return fID; } 68*128277c9SStephan Aßmus 69*128277c9SStephan Aßmus status_t SetIcon(const char* pathToBitmap); 70*128277c9SStephan Aßmus status_t SetIcon(const BBitmap* bitmap); 71*128277c9SStephan Aßmus status_t SetIcon(const BMimeType* fileType, 72*128277c9SStephan Aßmus bool small = true); 73*128277c9SStephan Aßmus status_t SetIcon(const unsigned char* bitsFromQuickRes, 74*128277c9SStephan Aßmus uint32 width, uint32 height, 75*128277c9SStephan Aßmus color_space format, 76*128277c9SStephan Aßmus bool convertToBW = false); 77*128277c9SStephan Aßmus void ClearIcon(); 78*128277c9SStephan Aßmus 79*128277c9SStephan Aßmus BBitmap* Bitmap() const; // caller has to delete the returned bitmap 80*128277c9SStephan Aßmus 81*128277c9SStephan Aßmus virtual bool DrawBorder() const; 82*128277c9SStephan Aßmus virtual void DrawNormalBorder(BRect r, rgb_color background, 83*128277c9SStephan Aßmus rgb_color shadow, 84*128277c9SStephan Aßmus rgb_color darkShadow, 85*128277c9SStephan Aßmus rgb_color lightShadow, 86*128277c9SStephan Aßmus rgb_color light); 87*128277c9SStephan Aßmus virtual void DrawPressedBorder(BRect r, rgb_color background, 88*128277c9SStephan Aßmus rgb_color shadow, 89*128277c9SStephan Aßmus rgb_color darkShadow, 90*128277c9SStephan Aßmus rgb_color lightShadow, 91*128277c9SStephan Aßmus rgb_color light); 92*128277c9SStephan Aßmus 93*128277c9SStephan Aßmus protected: 94*128277c9SStephan Aßmus enum { 95*128277c9SStephan Aßmus STATE_NONE = 0x0000, 96*128277c9SStephan Aßmus STATE_TRACKING = 0x0001, 97*128277c9SStephan Aßmus STATE_PRESSED = 0x0002, 98*128277c9SStephan Aßmus STATE_ENABLED = 0x0004, 99*128277c9SStephan Aßmus STATE_INSIDE = 0x0008, 100*128277c9SStephan Aßmus STATE_FORCE_PRESSED = 0x0010, 101*128277c9SStephan Aßmus }; 102*128277c9SStephan Aßmus 103*128277c9SStephan Aßmus void _AddFlags(uint32 flags); 104*128277c9SStephan Aßmus void _ClearFlags(uint32 flags); 105*128277c9SStephan Aßmus bool _HasFlags(uint32 flags) const; 106*128277c9SStephan Aßmus 107*128277c9SStephan Aßmus void _DrawFrame(BRect frame, 108*128277c9SStephan Aßmus rgb_color col1, 109*128277c9SStephan Aßmus rgb_color col2, 110*128277c9SStephan Aßmus rgb_color col3, 111*128277c9SStephan Aßmus rgb_color col4); 112*128277c9SStephan Aßmus 113*128277c9SStephan Aßmus // private: 114*128277c9SStephan Aßmus BBitmap* _ConvertToRGB32(const BBitmap* bitmap) const; 115*128277c9SStephan Aßmus status_t _MakeBitmaps(const BBitmap* bitmap); 116*128277c9SStephan Aßmus void _DeleteBitmaps(); 117*128277c9SStephan Aßmus void _SendMessage() const; 118*128277c9SStephan Aßmus void _Update(); 119*128277c9SStephan Aßmus 120*128277c9SStephan Aßmus uint32 fButtonState; 121*128277c9SStephan Aßmus int32 fID; 122*128277c9SStephan Aßmus BBitmap* fNormalBitmap; 123*128277c9SStephan Aßmus BBitmap* fDisabledBitmap; 124*128277c9SStephan Aßmus BBitmap* fClickedBitmap; 125*128277c9SStephan Aßmus BBitmap* fDisabledClickedBitmap; 126*128277c9SStephan Aßmus BString fLabel; 127*128277c9SStephan Aßmus 128*128277c9SStephan Aßmus BHandler* fTargetCache; 129*128277c9SStephan Aßmus }; 130*128277c9SStephan Aßmus 131*128277c9SStephan Aßmus #endif // ICON_BUTTON_H 132