2005-07-06 04:43:52 +04:00
|
|
|
/*
|
2009-08-27 15:12:41 +04:00
|
|
|
* Copyright 2001-2009, Haiku, Inc. All rights reserved.
|
2005-07-06 04:43:52 +04:00
|
|
|
* Distributed under the terms of the MIT License.
|
|
|
|
*/
|
2002-10-23 17:54:44 +04:00
|
|
|
#ifndef _SHELF_H
|
|
|
|
#define _SHELF_H
|
|
|
|
|
2009-08-27 15:12:41 +04:00
|
|
|
|
2007-12-28 13:49:04 +03:00
|
|
|
#include <Dragger.h>
|
2002-10-23 17:54:44 +04:00
|
|
|
#include <Handler.h>
|
|
|
|
#include <List.h>
|
2009-03-08 17:18:06 +03:00
|
|
|
#include <Locker.h>
|
2002-10-23 17:54:44 +04:00
|
|
|
|
2009-08-27 15:12:41 +04:00
|
|
|
|
2002-10-23 17:54:44 +04:00
|
|
|
class BDataIO;
|
2007-10-16 00:13:55 +04:00
|
|
|
class BPoint;
|
2002-10-23 17:54:44 +04:00
|
|
|
class BView;
|
|
|
|
class BEntry;
|
2007-12-28 13:49:04 +03:00
|
|
|
class _BZombieReplicantView_;
|
2005-07-06 04:43:52 +04:00
|
|
|
struct entry_ref;
|
2002-10-23 17:54:44 +04:00
|
|
|
|
2006-08-11 23:26:37 +04:00
|
|
|
namespace BPrivate {
|
|
|
|
class replicant_data;
|
|
|
|
class ShelfContainerViewFilter;
|
|
|
|
};
|
|
|
|
|
2002-10-23 17:54:44 +04:00
|
|
|
|
|
|
|
class BShelf : public BHandler {
|
2009-08-27 15:12:41 +04:00
|
|
|
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];
|
2002-10-23 17:54:44 +04:00
|
|
|
};
|
|
|
|
|
2005-07-06 04:43:52 +04:00
|
|
|
#endif /* _SHELF_H */
|