2005-07-06 04:43:52 +04:00
|
|
|
/*
|
2009-03-08 17:18:06 +03:00
|
|
|
* Copyright 2001-2009, Haiku Inc.
|
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
|
|
|
|
|
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
|
|
|
|
|
|
|
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 {
|
2005-07-06 04:43:52 +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 *data);
|
|
|
|
virtual ~BShelf();
|
|
|
|
|
|
|
|
virtual status_t Archive(BMessage* data, bool deep = true) const;
|
|
|
|
static BArchivable* Instantiate(BMessage* archive);
|
|
|
|
|
|
|
|
virtual void MessageReceived(BMessage *msg);
|
|
|
|
status_t Save();
|
|
|
|
virtual void SetDirty(bool state);
|
|
|
|
bool IsDirty() const;
|
|
|
|
|
|
|
|
virtual BHandler* ResolveSpecifier(BMessage *msg,
|
|
|
|
int32 index, BMessage *specifier,
|
|
|
|
int32 form, const char *property);
|
|
|
|
virtual status_t GetSupportedSuites(BMessage* data);
|
|
|
|
|
|
|
|
virtual status_t Perform(perform_code d, void *arg);
|
|
|
|
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 *data_io);
|
|
|
|
status_t SetSaveLocation(const entry_ref *ref);
|
|
|
|
BDataIO* SaveLocation(entry_ref *ref) const;
|
|
|
|
|
|
|
|
status_t AddReplicant(BMessage *data, BPoint location);
|
|
|
|
status_t DeleteReplicant(BView *replicant);
|
|
|
|
status_t DeleteReplicant(BMessage *data);
|
|
|
|
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*) 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:
|
2006-08-11 23:26:37 +04:00
|
|
|
friend class BPrivate::ShelfContainerViewFilter;
|
2005-07-06 04:43:52 +04:00
|
|
|
|
|
|
|
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);
|
|
|
|
|
|
|
|
status_t _Archive(BMessage* data) const;
|
|
|
|
void _InitData(BEntry* entry, BDataIO* stream,
|
|
|
|
BView* view, bool allowDrags);
|
2006-08-11 23:26:37 +04:00
|
|
|
status_t _DeleteReplicant(BPrivate::replicant_data* replicant);
|
2006-01-04 00:56:26 +03:00
|
|
|
status_t _AddReplicant(BMessage* data,
|
2005-07-06 04:43:52 +04:00
|
|
|
BPoint* location, uint32 uniqueID);
|
2007-12-28 14:07:28 +03:00
|
|
|
BView *_GetReplicant(BMessage *data, BView *view, const BPoint &point,
|
|
|
|
BDragger *&dragger, BDragger::relation &relation);
|
2007-12-28 13:49:04 +03:00
|
|
|
_BZombieReplicantView_ *_CreateZombie(BMessage *data, BDragger *&dragger);
|
2007-07-30 18:21:41 +04:00
|
|
|
|
2007-12-28 13:49:04 +03:00
|
|
|
status_t _GetProperty(BMessage* message, BMessage* reply);
|
|
|
|
static void _GetReplicantData(BMessage *message, BView *view, BView *&replicant,
|
|
|
|
BDragger *&dragger, BDragger::relation &relation);
|
2007-07-30 18:21:41 +04:00
|
|
|
static BArchivable* _InstantiateObject(BMessage *archive, image_id *image);
|
2005-07-06 04:43:52 +04:00
|
|
|
|
|
|
|
private:
|
|
|
|
BView* fContainerView;
|
|
|
|
BDataIO* fStream;
|
|
|
|
BEntry* fEntry;
|
|
|
|
BList fReplicants;
|
2006-08-11 23:26:37 +04:00
|
|
|
BPrivate::ShelfContainerViewFilter* fFilter;
|
2005-07-06 04:43:52 +04:00
|
|
|
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 */
|