1/*
2 * Copyright 2013 Haiku, Inc. All rights reserved.
3 * Distributed under the terms of the MIT License.
4 *
5 * Authors:
6 *		Ingo Weinhold, ingo_weinhold@gmx.de
7 */
8#ifndef _VIRTUAL_DIRECTORY_POSE_VIEW_H
9#define _VIRTUAL_DIRECTORY_POSE_VIEW_H
10
11
12#include <StringList.h>
13
14#include "PoseView.h"
15
16
17namespace BPrivate {
18
19class VirtualDirectoryEntryList;
20
21
22class VirtualDirectoryPoseView : public BPoseView {
23public:
24								VirtualDirectoryPoseView(Model* model);
25	virtual						~VirtualDirectoryPoseView();
26
27	virtual	void				MessageReceived(BMessage* message);
28
29protected:
30	virtual	void				AttachedToWindow();
31	virtual	void				RestoreState(AttributeStreamNode* node);
32	virtual	void				RestoreState(const BMessage& message);
33	virtual	void				SavePoseLocations(BRect* frameIfDesktop = NULL);
34	virtual	void				SetViewMode(uint32 newMode);
35	virtual	EntryListBase*		InitDirentIterator(const entry_ref* ref);
36
37	virtual	void				StartWatching();
38	virtual	void				StopWatching();
39
40	virtual	bool				FSNotification(const BMessage* message);
41
42private:
43			typedef BPoseView _inherited;
44
45private:
46			bool				_EntryCreated(const BMessage* message);
47			bool				_EntryRemoved(const BMessage* message);
48			bool				_EntryMoved(const BMessage* message);
49			bool				_NodeStatChanged(const BMessage* message);
50
51			void				_DispatchEntryCreatedOrRemovedMessage(
52									int32 opcode, const node_ref& nodeRef,
53									const entry_ref& entryRef,
54									const char* path = NULL,
55									bool dispatchToSuperClass = true);
56
57			bool				_GetEntry(const char* name, entry_ref& _ref,
58									struct stat* _st = NULL);
59
60			status_t			_UpdateDirectoryPaths();
61									// manager must be locked
62
63private:
64			BStringList			fDirectoryPaths;
65			node_ref			fRootDefinitionFileRef;
66			bigtime_t			fFileChangeTime;
67			bool				fIsRoot;
68};
69
70
71} // namespace BPrivate
72
73
74#endif	// _VIRTUAL_DIRECTORY_POSE_VIEW_H
75