⛏️ index : haiku.git

// ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
//
//	Copyright (c) 2004, Haiku
//
//  This software is part of the Haiku distribution and is covered 
//  by the Haiku license.
//
//
//  File:			MouseSettings.h
//  Authors:		JΓ©rΓ΄me Duval,
//					Andrew McCall (mccall@digitalparadise.co.uk),
//					Axel DΓΆrfler (axeld@pinc-software.de)
//  Description:	Input Server
//  Created:		August 29, 2004
//
// ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~

#ifndef MOUSE_SETTINGS_H_
#define MOUSE_SETTINGS_H_

#include <Archivable.h>
#include <InterfaceDefs.h>
#include <kb_mouse_settings.h>
#include <Path.h>
#include <String.h>
#include <SupportDefs.h>

#include <map>


class MouseSettings {
	public:
		MouseSettings();
		MouseSettings(const mouse_settings* originalSettings);
		~MouseSettings();

		void Defaults();
		void Dump();

		int32 MouseType() const { return fSettings.type; }
		void SetMouseType(int32 type);

		bigtime_t ClickSpeed() const;
		void SetClickSpeed(bigtime_t click_speed);

		int32 MouseSpeed() const { return fSettings.accel.speed; }
		void SetMouseSpeed(int32 speed);

		int32 AccelerationFactor() const
			{ return fSettings.accel.accel_factor; }
		void SetAccelerationFactor(int32 factor);

		uint32 Mapping(int32 index) const;
		void Mapping(mouse_map &map) const;
		void SetMapping(int32 index, uint32 button);
		void SetMapping(mouse_map &map);

		mode_mouse MouseMode() const { return fMode; }
		void SetMouseMode(mode_mouse mode);

		mode_focus_follows_mouse FocusFollowsMouseMode() const
			{ return fFocusFollowsMouseMode; }
		void SetFocusFollowsMouseMode(mode_focus_follows_mouse mode);

		bool AcceptFirstClick() const { return fAcceptFirstClick; }
		void SetAcceptFirstClick(bool acceptFirstClick);

		const mouse_settings* GetSettings() { return &fSettings; }

	private:
		void _EnsureValidMapping();

	private:
		mouse_settings	fSettings;

		// FIXME all these extra settings are not specific to each mouse.
		// They should be moved into MultipleMouseSettings directly
		mode_mouse		fMode;
		mode_focus_follows_mouse	fFocusFollowsMouseMode;
		bool			fAcceptFirstClick;
};


class MultipleMouseSettings: public BArchivable {
	public:
		MultipleMouseSettings();
		~MultipleMouseSettings();

		status_t Archive(BMessage* into, bool deep = false) const;

		void Defaults();
		void Dump();
		status_t SaveSettings();


		MouseSettings* AddMouseSettings(BString mouse_name);
		MouseSettings* GetMouseSettings(BString mouse_name);

	private:
		static status_t GetSettingsPath(BPath &path);
		void RetrieveSettings();

		typedef std::map<BString, MouseSettings*> mouse_settings_object;
		mouse_settings_object  fMouseSettingsObject;
};

#endif	// MOUSE_SETTINGS_H