⛏️ index : haiku.git

/*
 * Copyright 2006-2009, Haiku, Inc. All Rights Reserved.
 * Distributed under the terms of the MIT License.
 *
 * Authors:
 *		Axel DΓΆrfler, axeld@pinc-software.de
 *		Dario Casalinuovo
 */
#ifndef NETWORK_STATUS_VIEW_H
#define NETWORK_STATUS_VIEW_H


#include <Notification.h>
#include <ObjectList.h>
#include <View.h>

#include <map>


class BMessageRunner;
class BNetworkInterface;


enum {
	kStatusUnknown = 0,
	kStatusNoLink,
	kStatusLinkNoConfig,
	kStatusConnecting,
	kStatusReady,

	kStatusCount
};


class NetworkStatusView : public BView {
	public:
		NetworkStatusView(BRect frame, int32 resizingMode,
			bool inDeskbar = false);
		NetworkStatusView(BMessage* archive);
		virtual	~NetworkStatusView();

		static	NetworkStatusView* Instantiate(BMessage* archive);
		virtual	status_t Archive(BMessage* archive, bool deep = true) const;

		virtual	void	AttachedToWindow();
		virtual	void	DetachedFromWindow();

		virtual	void	MessageReceived(BMessage* message);
		virtual void	FrameResized(float width, float height);
		virtual	void	MouseDown(BPoint where);
		virtual	void	Draw(BRect updateRect);

	private:
		void			_AboutRequested();
		void			_Quit();
		void			_Init();
		void			_UpdateBitmaps();
		void			_ShowConfiguration(BMessage* message);
		int32			_DetermineInterfaceStatus(
							const BNetworkInterface& interface);
		void			_Update(bool force = false);
		void			_OpenNetworksPreferences();

		std::map<BString, int32>
						fInterfaceStatuses;
		bool			fInDeskbar;
		BBitmap*		fTrayIcons[kStatusCount];
		BBitmap*		fNotifyIcons[kStatusCount];
};

#endif	// NETWORK_STATUS_VIEW_H