1/*
2 * Copyright 2007-2010, Haiku. All rights reserved.
3 * Distributed under the terms of the MIT License.
4 *
5 * Authors:
6 *		Stephan A��mus 	<superstippi@gmx.de>
7 *		Fredrik Mod��en 	<fredrik@modeen.se>
8 */
9#ifndef PLAYLIST_WINDOW_H
10#define PLAYLIST_WINDOW_H
11
12
13#include <Entry.h>
14#include <ObjectList.h>
15#include <Window.h>
16
17#include "PlaylistObserver.h"
18#include "ListenerAdapter.h"
19
20
21class BMenuBar;
22class BMenuItem;
23class CommandStack;
24class Controller;
25class Notifier;
26class PlaylistListView;
27class RWLocker;
28class BButton;
29class BFilePanel;
30class BStringView;
31
32
33enum {
34	// file
35	M_PLAYLIST_OPEN = 'open',
36	M_PLAYLIST_SAVE = 'save',
37	M_PLAYLIST_SAVE_AS = 'svas',
38	M_PLAYLIST_SAVE_RESULT = 'psrs',
39
40	// edit
41	M_PLAYLIST_RANDOMIZE = 'rand',
42	M_PLAYLIST_REMOVE = 'rmov',
43	M_PLAYLIST_MOVE_TO_TRASH = 'trsh'
44};
45
46
47class PlaylistWindow : public BWindow {
48public:
49								PlaylistWindow(BRect frame,
50									Playlist* playlist,
51									Controller* controller);
52	virtual						~PlaylistWindow();
53
54	virtual	bool				QuitRequested();
55	virtual	void				MessageReceived(BMessage* message);
56
57private:
58
59	class DurationListener : public PlaylistObserver, public BLooper {
60	public:
61
62								DurationListener(PlaylistWindow& parent);
63								~DurationListener();
64
65			void				MessageReceived(BMessage* message);
66
67			bigtime_t			TotalDuration();
68
69	private:
70			void				_HandleItemAdded(PlaylistItem* item,
71									int32 index);
72			void				_HandleItemRemoved(int32 index);
73
74			BObjectList<bigtime_t>
75								fKnown;
76			bigtime_t			fTotalDuration;
77			PlaylistWindow&		fParent;
78	};
79
80	friend class DurationListener;
81
82			void				_CreateMenu(BRect& frame);
83			void				_ObjectChanged(const Notifier* object);
84			void				_SavePlaylist(const BMessage* filePanelMessage);
85			void				_SavePlaylist(const entry_ref& ref);
86			void				_SavePlaylist(BEntry& origEntry,
87									BEntry& tempEntry, const char* finalName);
88			void				_QueryInitialDurations();
89			void				_UpdateTotalDuration(bigtime_t duration);
90
91			Playlist*			fPlaylist;
92			PlaylistListView*	fListView;
93
94			BView*				fTopView;
95			BMenuItem*			fUndoMI;
96			BMenuItem*			fRedoMI;
97
98			RWLocker*			fLocker;
99			CommandStack*		fCommandStack;
100			ListenerAdapter		fCommandStackListener;
101
102			entry_ref			fSavedPlaylistRef;
103
104			DurationListener*	fDurationListener;
105			BStringView*		fTotalDuration;
106};
107
108
109#endif // PLAYLIST_WINDOW_H
110