1804c69caSStephan Aßmus /* 2804c69caSStephan Aßmus * Copyright 2006-2011, Haiku. 3804c69caSStephan Aßmus * Distributed under the terms of the MIT License. 4804c69caSStephan Aßmus * 5804c69caSStephan Aßmus * Authors: 6804c69caSStephan Aßmus * Stephan Aßmus <superstippi@gmx.de> 7804c69caSStephan Aßmus */ 8804c69caSStephan Aßmus #ifndef ICON_BUTTON_H 9804c69caSStephan Aßmus #define ICON_BUTTON_H 10804c69caSStephan Aßmus 11804c69caSStephan Aßmus 12804c69caSStephan Aßmus //! GUI class that loads an image from disk and shows it as clickable button. 13804c69caSStephan Aßmus 14804c69caSStephan Aßmus 15a1e3c32dSAxel Dörfler #include <Control.h> 16804c69caSStephan Aßmus #include <String.h> 17804c69caSStephan Aßmus 18804c69caSStephan Aßmus 19804c69caSStephan Aßmus class BBitmap; 20804c69caSStephan Aßmus class BMimeType; 21804c69caSStephan Aßmus 22804c69caSStephan Aßmus 23804c69caSStephan Aßmus namespace BPrivate { 24804c69caSStephan Aßmus 25804c69caSStephan Aßmus 26a1e3c32dSAxel Dörfler class BIconButton : public BControl { 27804c69caSStephan Aßmus public: 28804c69caSStephan Aßmus BIconButton(const char* name, 29804c69caSStephan Aßmus const char* label = NULL, 30804c69caSStephan Aßmus BMessage* message = NULL, 31804c69caSStephan Aßmus BHandler* target = NULL); 32804c69caSStephan Aßmus virtual ~BIconButton(); 33804c69caSStephan Aßmus 34804c69caSStephan Aßmus // BView interface 35804c69caSStephan Aßmus virtual void MessageReceived(BMessage* message); 36804c69caSStephan Aßmus virtual void AttachedToWindow(); 37804c69caSStephan Aßmus 38804c69caSStephan Aßmus virtual void Draw(BRect updateRect); 39804c69caSStephan Aßmus virtual bool ShouldDrawBorder() const; 40804c69caSStephan Aßmus virtual void DrawBorder(BRect& frame, 41804c69caSStephan Aßmus const BRect& updateRect, 42804c69caSStephan Aßmus const rgb_color& backgroundColor, 43804c69caSStephan Aßmus uint32 controlLookFlags); 44804c69caSStephan Aßmus virtual void DrawBackground(BRect& frame, 45804c69caSStephan Aßmus const BRect& updateRect, 46804c69caSStephan Aßmus const rgb_color& backgroundColor, 47804c69caSStephan Aßmus uint32 controlLookFlags); 48804c69caSStephan Aßmus 49804c69caSStephan Aßmus virtual void MouseDown(BPoint where); 50804c69caSStephan Aßmus virtual void MouseUp(BPoint where); 51804c69caSStephan Aßmus virtual void MouseMoved(BPoint where, uint32 transit, 52804c69caSStephan Aßmus const BMessage* message); 53804c69caSStephan Aßmus virtual void GetPreferredSize(float* width, 54804c69caSStephan Aßmus float* height); 55804c69caSStephan Aßmus virtual BSize MinSize(); 56804c69caSStephan Aßmus virtual BSize MaxSize(); 57804c69caSStephan Aßmus 58804c69caSStephan Aßmus 59804c69caSStephan Aßmus // BInvoker interface 60804c69caSStephan Aßmus virtual status_t Invoke(BMessage* message = NULL); 61804c69caSStephan Aßmus 62a1e3c32dSAxel Dörfler // BControl interface 63a1e3c32dSAxel Dörfler virtual void SetValue(int32 value); 64a1e3c32dSAxel Dörfler virtual void SetEnabled(bool enable); 65a1e3c32dSAxel Dörfler 66804c69caSStephan Aßmus // BIconButton 67804c69caSStephan Aßmus bool IsValid() const; 68804c69caSStephan Aßmus 69804c69caSStephan Aßmus void SetPressed(bool pressed); 70804c69caSStephan Aßmus bool IsPressed() const; 71804c69caSStephan Aßmus 72804c69caSStephan Aßmus status_t SetIcon(int32 resourceID); 73804c69caSStephan Aßmus status_t SetIcon(const char* pathToBitmap); 74*be436742SIngo Weinhold virtual status_t SetIcon(const BBitmap* bitmap, 75*be436742SIngo Weinhold uint32 flags = 0); 76804c69caSStephan Aßmus status_t SetIcon(const BMimeType* fileType, 77804c69caSStephan Aßmus bool small = true); 78804c69caSStephan Aßmus status_t SetIcon(const unsigned char* bitsFromQuickRes, 79804c69caSStephan Aßmus uint32 width, uint32 height, 80804c69caSStephan Aßmus color_space format, 81804c69caSStephan Aßmus bool convertToBW = false); 82804c69caSStephan Aßmus void ClearIcon(); 83804c69caSStephan Aßmus void TrimIcon(bool keepAspect = true); 84804c69caSStephan Aßmus 85804c69caSStephan Aßmus BBitmap* Bitmap() const; 86804c69caSStephan Aßmus // caller has to delete the returned bitmap 87804c69caSStephan Aßmus 88804c69caSStephan Aßmus protected: 89a1e3c32dSAxel Dörfler bool IsInside() const; 90a1e3c32dSAxel Dörfler void SetInside(bool inside); 91804c69caSStephan Aßmus 92804c69caSStephan Aßmus private: 93804c69caSStephan Aßmus BBitmap* _ConvertToRGB32(const BBitmap* bitmap) const; 94804c69caSStephan Aßmus status_t _MakeBitmaps(const BBitmap* bitmap); 95804c69caSStephan Aßmus void _DeleteBitmaps(); 96804c69caSStephan Aßmus void _SendMessage() const; 97804c69caSStephan Aßmus void _Update(); 98a1e3c32dSAxel Dörfler void _SetTracking(bool state); 99a1e3c32dSAxel Dörfler void _SetFlags(uint32 flags, bool set); 100a1e3c32dSAxel Dörfler bool _HasFlags(uint32 flags) const; 101804c69caSStephan Aßmus 102804c69caSStephan Aßmus private: 103804c69caSStephan Aßmus uint32 fButtonState; 104804c69caSStephan Aßmus BBitmap* fNormalBitmap; 105804c69caSStephan Aßmus BBitmap* fDisabledBitmap; 106804c69caSStephan Aßmus BBitmap* fClickedBitmap; 107804c69caSStephan Aßmus BBitmap* fDisabledClickedBitmap; 108804c69caSStephan Aßmus 109804c69caSStephan Aßmus BHandler* fTargetCache; 110804c69caSStephan Aßmus }; 111804c69caSStephan Aßmus 112804c69caSStephan Aßmus 113804c69caSStephan Aßmus } // namespac BPrivate 114804c69caSStephan Aßmus 115804c69caSStephan Aßmus 116804c69caSStephan Aßmus using BPrivate::BIconButton; 117804c69caSStephan Aßmus 118804c69caSStephan Aßmus 119804c69caSStephan Aßmus #endif // ICON_BUTTON_H 120