⛏️ index : haiku.git

#ifndef BMPVIEW_H
#define BMPVIEW_H

#include <Bitmap.h>
#include <Message.h>
#include <Invoker.h>
#include <PopUpMenu.h>
#include <String.h>
#include <View.h>

enum
{
	M_BITMAP_ADDED = 'mbma',
	M_BITMAP_REMOVED = 'mbmr'
};

class BitmapView : public BView, public BInvoker
{
public:
	BitmapView(BRect frame, const char *name, BMessage *mod, BBitmap *bitmap, 
				const char *label = NULL, border_style = B_PLAIN_BORDER,
				int32 resize = B_FOLLOW_LEFT | B_FOLLOW_TOP, int32 flags = B_WILL_DRAW);
	~BitmapView(void);
	virtual void AttachedToWindow(void);
	
	virtual void Draw(BRect rect);
	virtual void MessageReceived(BMessage *msg);
	virtual void MouseDown(BPoint pt);
	virtual void FrameResized(float w, float h);
	
	virtual void SetBitmap(BBitmap *bitmap);
	BBitmap *GetBitmap(void) const { return fBitmap; }

	bool IsEnabled(void) const { return fEnabled; }
	virtual void SetEnabled(bool value);
	
//	const char *Label(void) const { return fLabel.String(); }
//	virtual void SetLabel(const char *label);
	
	border_style Style(void) const { return fBorderStyle; }
	virtual void SetStyle(border_style style);
	
	bool IsFixedSize(void) const { return fFixedSize; }
	void SetFixedSize(bool isfixed);
	
	bool AcceptsDrops(void) const { return fAcceptDrops; }
	virtual void SetAcceptDrops(bool accept);
	
	bool AcceptsPaste(void) const { return fAcceptPaste; }
	virtual void SetAcceptPaste(bool accept);
	
	bool ConstrainsDrops(void) const { return fConstrainDrops; }
	virtual void SetConstrainDrops(bool value);
	
	void MaxBitmapSize(float *width, float *height) const;
	virtual void SetMaxBitmapSize(const float &width, const float &height);
	
	bool IsBitmapRemovable(void) const { return fRemovableBitmap; }
	void SetBitmapRemovable(bool isremovable);
	
	void RemoveBitmap(void);
	void PasteBitmap(void);
	
private:
	void CalculateBitmapRect(void);
	void ConstrainBitmap(void);
	
	bool ClipboardHasBitmap(void);
	BBitmap *BitmapFromClipboard(void);
	
	float fNoPhotoWidths[4];
	BPoint fNoPhotoOffsets[4];
	
	BBitmap *fBitmap;
	BRect fBitmapRect;
	bool fEnabled;
	BString fLabel;
	border_style fBorderStyle;
	bool fFixedSize;
	bool fAcceptDrops;
	bool fAcceptPaste;
	bool fConstrainDrops;
	float fMaxWidth, fMaxHeight;
	bool fRemovableBitmap;
	BPopUpMenu *fPopUpMenu;
	uint32 fMouseButtons;
	BMenuItem *fPasteItem;
	BMenuItem *fRemoveItem;
};

BRect ScaleRectToFit(const BRect &from, const BRect &to);

#endif