1/*
2 * Copyright 2009-2010, Philippe Houdoin, phoudoin@haiku-os.org. All rights reserved.
3 * Copyright 2016, Rene Gollent, rene@gollent.com.
4 * Distributed under the terms of the MIT License.
5 */
6#ifndef TEAMS_WINDOW_H
7#define TEAMS_WINDOW_H
8
9
10#include <Window.h>
11
12#include <util/DoublyLinkedList.h>
13
14
15class BButton;
16class BListView;
17class BFile;
18class BFilePanel;
19class BMenuField;
20class BMessage;
21class SettingsManager;
22class TargetHostInterface;
23class TeamsListView;
24
25
26class TeamsWindow : public BWindow {
27public:
28	class Listener;
29
30								TeamsWindow(SettingsManager* settingsManager);
31	virtual						~TeamsWindow();
32
33	static	TeamsWindow*		Create(SettingsManager* settingsManager);
34									// throws
35
36	virtual	void				Zoom(BPoint origin, float width, float height);
37	virtual void				MessageReceived(BMessage* message);
38	virtual bool				QuitRequested();
39
40			void				AddListener(Listener* listener);
41			void				RemoveListener(Listener* listener);
42
43private:
44			typedef DoublyLinkedList<Listener> ListenerList;
45
46private:
47			void				_Init();
48			status_t			_OpenSettings(BFile& file, uint32 mode);
49			status_t			_LoadSettings(BMessage& settings);
50			status_t			_SaveSettings();
51
52			void				_NotifySelectedInterfaceChanged(
53									TargetHostInterface* interface);
54
55private:
56			team_id				fCurrentTeam;
57			TargetHostInterface* fTargetHostInterface;
58			TeamsListView*		fTeamsListView;
59			BButton*			fAttachTeamButton;
60			BButton*			fCreateTeamButton;
61			BButton*			fCreateConnectionButton;
62			BButton*			fLoadCoreButton;
63			BMenuField*			fConnectionField;
64			BFilePanel*			fCoreSelectionPanel;
65			SettingsManager*	fSettingsManager;
66			ListenerList		fListeners;
67};
68
69
70class TeamsWindow::Listener : public DoublyLinkedListLinkImpl<Listener>
71{
72public:
73	virtual						~Listener();
74
75	virtual	void				SelectedInterfaceChanged(
76									TargetHostInterface* interface) = 0;
77};
78
79
80#endif	// TEAMS_WINDOW_H
81