#ifndef _QUERY_POSE_VIEW_H
#define _QUERY_POSE_VIEW_H
#include "EntryIterator.h"
#include "PoseView.h"
class BQuery;
namespace BPrivate {
class BQueryContainerWindow;
class QueryEntryListCollection;
class QueryRefFilter;
class BQueryPoseView : public BPoseView {
public:
BQueryPoseView(Model*);
virtual ~BQueryPoseView();
virtual void MessageReceived(BMessage* message);
virtual void AdoptSystemColors();
virtual bool HasSystemColors() const;
const char* SearchForType() const;
BQueryContainerWindow* ContainerWindow() const;
bool ActiveOnDevice(dev_t) const;
void Refresh();
protected:
virtual void RestoreState(AttributeStreamNode*);
virtual void RestoreState(const BMessage&);
virtual void SavePoseLocations(BRect* = NULL);
virtual void SetupDefaultColumnsIfNeeded();
virtual void SetViewMode(uint32);
virtual void OpenParent();
virtual void EditQueries();
virtual EntryListBase* InitDirentIterator(const entry_ref*);
virtual void ReturnDirentIterator(EntryListBase* iterator);
virtual uint32 WatchNewNodeMask();
virtual bool AttributeChanged(const BMessage*);
virtual void AddPosesCompleted();
private:
mutable BString fSearchForMimeType;
QueryRefFilter* fRefFilter;
QueryEntryListCollection* fQueryListContainer;
bool fCreateOldPoseList;
typedef BPoseView _inherited;
};
class QueryRefFilter : public BRefFilter {
public:
QueryRefFilter();
virtual ~QueryRefFilter();
void SetQueryListContainer(QueryEntryListCollection* container)
{
fQueryListContainer = container;
}
virtual bool Filter(const entry_ref* ref, BNode* node, stat_beos* st,
const char* filetype);
private:
QueryEntryListCollection* fQueryListContainer;
};
class QueryEntryListCollection : public EntryListBase {
class QueryListRep {
public:
QueryListRep()
:
fQueryList(5),
fShowResultsFromTrash(false),
fQueryListIndex(-1),
fDynamicDateQuery(false),
fRefreshEveryHour(false),
fRefreshEveryMinute(false)
{
}
~QueryListRep()
{
}
BObjectList<BQuery, true> fQueryList;
BStringList fPathFilters;
bool fShowResultsFromTrash;
int32 fQueryListIndex;
bool fDynamicDateQuery;
bool fRefreshEveryHour;
bool fRefreshEveryMinute;
};
public:
QueryEntryListCollection(Model*, BHandler* = NULL,
PoseList* oldPoseList = NULL);
virtual ~QueryEntryListCollection();
BObjectList<BQuery, true>* QueryList() const
{
return &fQueryListRep->fQueryList;
}
PoseList* OldPoseList() const
{
return fOldPoseList;
}
void ClearOldPoseList();
virtual status_t GetNextEntry(BEntry* entry, bool traverse = false);
virtual status_t GetNextRef(entry_ref* ref);
virtual int32 GetNextDirents(struct dirent* buffer, size_t length,
int32 count = INT_MAX);
virtual status_t Rewind();
virtual int32 CountEntries();
bool PathFilter(const entry_ref*) const;
bool ShowResultsFromTrash() const;
bool DynamicDateQuery() const;
bool DynamicDateRefreshEveryHour() const;
bool DynamicDateRefreshEveryMinute() const;
private:
QueryEntryListCollection(const QueryEntryListCollection&);
status_t FetchOneQuery(const BQuery*, BHandler* target,
BObjectList<BQuery, true>*, BVolume*);
QueryListRep* fQueryListRep;
PoseList* fOldPoseList;
};
}
using namespace BPrivate;
#endif