#ifndef _TEXT_WIDGET_H
#define _TEXT_WIDGET_H
#include "Model.h"
#include "WidgetAttributeText.h"
namespace BPrivate {
class BPose;
class BPoseView;
class BColumn;
struct MouseUpParams {
BPose* pose;
BRect bounds;
BPoseView* poseView;
};
class BTextWidget {
public:
BTextWidget(Model*, BColumn*, BPoseView*);
virtual ~BTextWidget();
void Draw(BRect widgetRect, BRect widgetTextRect, BPoseView*, bool selected,
uint32 clipboardMode);
void Draw(BRect widgetRect, BRect widgetTextRect, BPoseView*, BView* drawView, bool selected,
uint32 clipboardMode, BPoint offset);
void MouseUp(BRect bounds, BPoseView*, BPose*, BPoint mouseLoc);
BRect CalcRect(BPoint poseLoc, const BColumn*, const BPoseView*);
BRect CalcClickRect(BPoint poseLoc, const BColumn*, const BPoseView*);
BRect ColumnRect(BPoint poseLoc, const BColumn*, const BPoseView*);
BRect CalcOldRect(BPoint poseLoc, const BColumn*, const BPoseView*);
void StartEdit(BRect bounds, BPoseView*, BPose*);
void StopEdit(bool saveChanges, BPoint loc, BPoseView*, BPose*,
int32 index);
void SelectAll(BPoseView* view);
void CheckAndUpdate(BPoint, const BColumn*, BPoseView*, bool visible);
uint32 AttrHash() const;
bool IsEditable() const;
void SetEditable(bool);
bool IsVisible() const;
void SetVisible(bool);
bool IsActive() const;
void SetActive(bool);
const char* Text(const BPoseView* view) const;
float TextWidth(const BPoseView*) const;
float PreferredWidth(const BPoseView*) const;
int Compare(const BTextWidget&, BPoseView*) const;
void CheckExpiration();
void CancelWait();
float MaxWidth() { return fMaxWidth; };
void SetMaxWidth(float maxWidth) { fMaxWidth = maxWidth; };
private:
BRect CalcRectCommon(BPoint poseLoc, const BColumn*, const BPoseView*,
float width);
WidgetAttributeText* fText;
uint32 fAttrHash;
alignment fAlignment;
bool fEditable : 1;
bool fVisible : 1;
bool fActive : 1;
bool fSymLink : 1;
float fMaxWidth;
bigtime_t fLastClickedTime;
struct MouseUpParams fParams;
};
inline uint32
BTextWidget::AttrHash() const
{
return fAttrHash;
}
inline void
BTextWidget::SetEditable(bool on)
{
fEditable = on;
}
inline bool
BTextWidget::IsEditable() const
{
return fEditable && fText->IsEditable();
}
inline bool
BTextWidget::IsVisible() const
{
return fVisible;
}
inline void
BTextWidget::SetVisible(bool on)
{
fVisible = on;
}
inline bool
BTextWidget::IsActive() const
{
return fActive;
}
inline void
BTextWidget::SetActive(bool on)
{
fActive = on;
}
inline void
BTextWidget::Draw(BRect widgetRect, BRect widgetTextRect, BPoseView* view, bool selected,
uint32 clipboardMode)
{
Draw(widgetRect, widgetTextRect, view, (BView*)view, selected, clipboardMode, B_ORIGIN);
}
}
using namespace BPrivate;
#endif