#ifndef ICON_MENU_ITEM_H
#define ICON_MENU_ITEM_H
#include <MenuItem.h>
#include "Model.h"
#include "Utilities.h"
class BNodeInfo;
namespace BPrivate {
const bigtime_t kSynchMenuInvokeTimeout = 5000000;
class IconMenuItem : public PositionPassingMenuItem {
public:
IconMenuItem(const char* label, BMessage* message, BBitmap* icon,
icon_size which = B_MINI_ICON);
IconMenuItem(const char* label, BMessage* message,
const char* iconType, icon_size which = B_MINI_ICON);
IconMenuItem(const char* label, BMessage* message,
const BNodeInfo* nodeInfo, icon_size which);
IconMenuItem(BMenu*, BMessage*, const char* iconType,
icon_size which = B_MINI_ICON);
IconMenuItem(BMessage* data);
virtual ~IconMenuItem();
static BArchivable* Instantiate(BMessage* data);
virtual status_t Archive(BMessage* data, bool deep = true) const;
virtual void GetContentSize(float* width, float* height);
virtual void DrawContent();
virtual void SetMarked(bool mark);
private:
virtual void SetIcon(BBitmap* icon);
private:
BBitmap* fDeviceIcon;
float fHeightDelta;
icon_size fWhich;
typedef PositionPassingMenuItem _inherited;
};
class ModelMenuItem : public BMenuItem {
public:
ModelMenuItem(const Model*, const char* title, BMessage*,
char shortcut = '\0', uint32 modifiers = 0,
bool drawText = true, bool extraPad = false);
ModelMenuItem(const Model*, BMenu*, bool drawText = true,
bool extraPad = false);
virtual ~ModelMenuItem();
virtual status_t SetEntry(const BEntry*);
virtual void DrawContent();
virtual void Highlight(bool isHighlighted);
virtual void GetContentSize(float* width, float* height);
const Model* TargetModel() const;
protected:
virtual status_t Invoke(BMessage* = NULL);
private:
void DrawIcon();
private:
float _ExtraLeftPadding();
float _ExtraPadding();
void _GetHorizontalItemMarginDelta(float* _leftDelta, float* _rightDelta);
Model fModel;
float fHeightDelta;
bool fDrawText;
bool fExtraPad;
typedef BMenuItem _inherited;
};
inline const Model*
ModelMenuItem::TargetModel() const
{
return &fModel;
}
class SpecialModelMenuItem : public ModelMenuItem {
public:
SpecialModelMenuItem(const Model* model, BMenu* menu);
virtual void DrawContent();
private:
typedef ModelMenuItem _inherited;
};
}
using BPrivate::IconMenuItem;
using BPrivate::ModelMenuItem;
using BPrivate::SpecialModelMenuItem;
#endif