1// ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
2//
3//	Copyright (c) 2004, Haiku
4//
5//  This software is part of the Haiku distribution and is covered
6//  by the Haiku license.
7//
8//
9//  File:			MouseSettings.h
10//  Authors:		J��r��me Duval,
11//					Andrew McCall (mccall@digitalparadise.co.uk),
12//					Axel D��rfler (axeld@pinc-software.de)
13//  Description:	Input Server
14//  Created:		August 29, 2004
15//
16// ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
17
18#ifndef MOUSE_SETTINGS_H_
19#define MOUSE_SETTINGS_H_
20
21#include <Archivable.h>
22#include <InterfaceDefs.h>
23#include <kb_mouse_settings.h>
24#include <Path.h>
25#include <String.h>
26#include <SupportDefs.h>
27
28#include <map>
29
30
31class MouseSettings {
32	public:
33		MouseSettings();
34		MouseSettings(mouse_settings* originalSettings);
35		~MouseSettings();
36
37		void Defaults();
38		void Dump();
39
40		int32 MouseType() const { return fSettings.type; }
41		void SetMouseType(int32 type);
42
43		bigtime_t ClickSpeed() const;
44		void SetClickSpeed(bigtime_t click_speed);
45
46		int32 MouseSpeed() const { return fSettings.accel.speed; }
47		void SetMouseSpeed(int32 speed);
48
49		int32 AccelerationFactor() const
50			{ return fSettings.accel.accel_factor; }
51		void SetAccelerationFactor(int32 factor);
52
53		uint32 Mapping(int32 index) const;
54		void Mapping(mouse_map &map) const;
55		void SetMapping(int32 index, uint32 button);
56		void SetMapping(mouse_map &map);
57
58		mode_mouse MouseMode() const { return fMode; }
59		void SetMouseMode(mode_mouse mode);
60
61		mode_focus_follows_mouse FocusFollowsMouseMode() const
62			{ return fFocusFollowsMouseMode; }
63		void SetFocusFollowsMouseMode(mode_focus_follows_mouse mode);
64
65		bool AcceptFirstClick() const { return fAcceptFirstClick; }
66		void SetAcceptFirstClick(bool acceptFirstClick);
67
68		void RetrieveSettings();
69		status_t SaveSettings();
70
71		const mouse_settings* GetSettings() { return &fSettings; }
72
73	private:
74		static status_t GetSettingsPath(BPath &path);
75
76		mouse_settings	fSettings, fOriginalSettings;
77
78		// FIXME all these extra settings are not specific to each mouse.
79		// They should be moved into MultipleMouseSettings directly
80		mode_mouse		fMode, fOriginalMode;
81		mode_focus_follows_mouse	fFocusFollowsMouseMode;
82		mode_focus_follows_mouse	fOriginalFocusFollowsMouseMode;
83		bool			fAcceptFirstClick;
84		bool			fOriginalAcceptFirstClick;
85};
86
87
88class MultipleMouseSettings: public BArchivable {
89	public:
90		MultipleMouseSettings();
91		~MultipleMouseSettings();
92
93		status_t Archive(BMessage* into, bool deep = false) const;
94
95		void Defaults();
96		void Dump();
97		status_t SaveSettings();
98
99
100		MouseSettings* AddMouseSettings(BString mouse_name);
101		MouseSettings* GetMouseSettings(BString mouse_name);
102
103	private:
104		static status_t GetSettingsPath(BPath &path);
105		void RetrieveSettings();
106
107		MouseSettings*	fDeprecatedMouseSettings;
108
109		typedef std::map<BString, MouseSettings*> mouse_settings_object;
110		mouse_settings_object  fMouseSettingsObject;
111};
112
113#endif	// MOUSE_SETTINGS_H
114