/* * Copyright 2001-2009, Haiku, Inc. All rights reserved. * Distributed under the terms of the MIT License. */ #ifndef _SHELF_H #define _SHELF_H #include #include #include #include class BDataIO; class BPoint; class BView; class BEntry; class _BZombieReplicantView_; struct entry_ref; namespace BPrivate { struct replicant_data; class ShelfContainerViewFilter; }; class BShelf : public BHandler { public: BShelf(BView* view, bool allowDrags = true, const char* shelfType = NULL); BShelf(const entry_ref* ref, BView* view, bool allowDrags = true, const char* shelfType = NULL); BShelf(BDataIO* stream, BView* view, bool allowDrags = true, const char* shelfType = NULL); BShelf(BMessage* archive); virtual ~BShelf(); static BArchivable* Instantiate(BMessage* archive); virtual status_t Archive(BMessage* archive, bool deep = true) const; virtual void MessageReceived(BMessage* message); status_t Save(); virtual void SetDirty(bool state); bool IsDirty() const; virtual BHandler* ResolveSpecifier(BMessage* message, int32 index, BMessage* specifier, int32 form, const char* property); virtual status_t GetSupportedSuites(BMessage* data); virtual status_t Perform(perform_code code, void* data); bool AllowsDragging() const; void SetAllowsDragging(bool state); bool AllowsZombies() const; void SetAllowsZombies(bool state); bool DisplaysZombies() const; void SetDisplaysZombies(bool state); bool IsTypeEnforced() const; void SetTypeEnforced(bool state); status_t SetSaveLocation(BDataIO* stream); status_t SetSaveLocation(const entry_ref* ref); BDataIO* SaveLocation(entry_ref* ref) const; status_t AddReplicant(BMessage* archive, BPoint location); status_t DeleteReplicant(BView* replicant); status_t DeleteReplicant(BMessage* archive); status_t DeleteReplicant(int32 index); int32 CountReplicants() const; BMessage* ReplicantAt(int32 index, BView** view = NULL, uint32* uid = NULL, status_t* perr = NULL) const; int32 IndexOf(const BView* replicantView) const; int32 IndexOf(const BMessage* archive) const; int32 IndexOf(uint32 id) const; protected: virtual bool CanAcceptReplicantMessage( BMessage* archive) const; virtual bool CanAcceptReplicantView(BRect, BView*, BMessage*) const; virtual BPoint AdjustReplicantBy(BRect, BMessage*) const; virtual void ReplicantDeleted(int32 index, const BMessage* archive, const BView *replicant); private: // FBC padding and forbidden methods virtual void _ReservedShelf2(); virtual void _ReservedShelf3(); virtual void _ReservedShelf4(); virtual void _ReservedShelf5(); virtual void _ReservedShelf6(); virtual void _ReservedShelf7(); virtual void _ReservedShelf8(); BShelf(const BShelf& other); BShelf& operator=(const BShelf& other); private: friend class BPrivate::ShelfContainerViewFilter; status_t _Archive(BMessage* data) const; void _InitData(BEntry* entry, BDataIO* stream, BView* view, bool allowDrags); status_t _DeleteReplicant( BPrivate::replicant_data* replicant); status_t _AddReplicant(BMessage* data, BPoint* location, uint32 uniqueID); BView* _GetReplicant(BMessage* data, BView* view, const BPoint& point, BDragger*& dragger, BDragger::relation& relation); _BZombieReplicantView_* _CreateZombie(BMessage *data, BDragger *&dragger); status_t _GetProperty(BMessage* message, BMessage* reply); static void _GetReplicantData(BMessage* message, BView* view, BView*& replicant, BDragger*& dragger, BDragger::relation& relation); static BArchivable* _InstantiateObject(BMessage* archive, image_id* image); private: BView* fContainerView; BDataIO* fStream; BEntry* fEntry; BList fReplicants; BPrivate::ShelfContainerViewFilter* fFilter; uint32 fGenCount; bool fAllowDragging; bool fDirty; bool fDisplayZombies; bool fAllowZombies; bool fTypeEnforced; uint32 _reserved[8]; }; #endif /* _SHELF_H */