1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef CHROME_BROWSER_CHROMEOS_SYSTEM_INPUT_DEVICE_SETTINGS_H_
6 #define CHROME_BROWSER_CHROMEOS_SYSTEM_INPUT_DEVICE_SETTINGS_H_
11 #include "base/callback.h"
12 #include "base/logging.h"
19 // Objects of this class are intended to store values of type T, but might have
20 // "unset" state. Object will be in "unset" state until Set is called first
30 Optional
& operator=(const Optional
& other
) {
32 value_
= other
.value_
;
33 is_set_
= other
.is_set_
;
38 void Set(const T
& value
) {
52 // Tries to update |this| with |update|. If |update| is unset or has same
53 // value as |this| method returns false. Otherwise |this| takes value of
54 // |update| and returns true.
55 bool Update(const Optional
& update
) {
56 if (update
.is_set_
&& (!is_set_
|| value_
!= update
.value_
)) {
57 value_
= update
.value_
;
69 } // namespace internal
71 // Min/max possible pointer sensitivity values. Defined in CrOS inputcontrol
72 // scripts (see kTpControl/kMouseControl in the source file).
73 const int kMinPointerSensitivity
= 1;
74 const int kMaxPointerSensitivity
= 5;
76 // Auxiliary class used to update several touchpad settings at a time. User
77 // should set any number of settings and pass object to UpdateTouchpadSettings
78 // method of InputDeviceSettings.
79 // Objects of this class have no default values for settings, so it is error
80 // to call Get* method before calling corresponding Set* method at least
82 class TouchpadSettings
{
85 TouchpadSettings
& operator=(const TouchpadSettings
& other
);
87 void SetSensitivity(int value
);
88 int GetSensitivity() const;
90 void SetTapToClick(bool enabled
);
91 bool GetTapToClick() const;
93 void SetThreeFingerClick(bool enabled
);
94 bool GetThreeFingerClick() const;
96 void SetTapDragging(bool enabled
);
97 bool GetTapDragging() const;
99 void SetNaturalScroll(bool enabled
);
100 bool GetNaturalScroll() const;
102 // Updates |this| with |settings|. If at least one setting was updated returns
104 // |argv| is filled with arguments of script, that should be launched in order
105 // to apply update. This argument is optional and could be NULL.
106 bool Update(const TouchpadSettings
& settings
, std::vector
<std::string
>* argv
);
109 internal::Optional
<int> sensitivity_
;
110 internal::Optional
<bool> tap_to_click_
;
111 internal::Optional
<bool> three_finger_click_
;
112 internal::Optional
<bool> tap_dragging_
;
113 internal::Optional
<bool> natural_scroll_
;
116 // Auxiliary class used to update several mouse settings at a time. User
117 // should set any number of settings and pass object to UpdateMouseSettings
118 // method of InputDeviceSettings.
119 // Objects of this class have no default values for settings, so it is error
120 // to call Get* method before calling corresponding Set* method at least
122 class MouseSettings
{
125 MouseSettings
& operator=(const MouseSettings
& other
);
127 void SetSensitivity(int value
);
128 int GetSensitivity() const;
130 void SetPrimaryButtonRight(bool right
);
131 bool GetPrimaryButtonRight() const;
133 // Updates |this| with |settings|. If at least one setting was updated returns
135 // |argv| is filled with arguments of script, that should be launched in order
136 // to apply update. This argument is optional and could be NULL.
137 bool Update(const MouseSettings
& update
, std::vector
<std::string
>* argv
);
140 internal::Optional
<int> sensitivity_
;
141 internal::Optional
<bool> primary_button_right_
;
144 class InputDeviceSettings
{
146 typedef base::Callback
<void(bool)> DeviceExistsCallback
;
148 virtual ~InputDeviceSettings() {}
150 // Returns current instance of InputDeviceSettings.
151 static InputDeviceSettings
* Get();
153 // Replaces current instance with |test_settings|. Takes ownership of
154 // |test_settings|. Default implementation could be returned back by passing
155 // NULL to this method.
156 static void SetSettingsForTesting(InputDeviceSettings
* test_settings
);
158 // Calls |callback| asynchronously after determining if a touchpad is
160 virtual void TouchpadExists(const DeviceExistsCallback
& callback
) = 0;
162 // Updates several touchpad settings at a time. Updates only settings that
163 // are set in |settings| object. It is more efficient to use this method to
164 // update several settings then calling Set* methods one by one.
165 virtual void UpdateTouchpadSettings(const TouchpadSettings
& settings
) = 0;
167 // Sets the touchpad sensitivity in the range [kMinPointerSensitivity,
168 // kMaxPointerSensitivity].
169 virtual void SetTouchpadSensitivity(int value
) = 0;
171 // Turns tap to click on/off.
172 virtual void SetTapToClick(bool enabled
) = 0;
174 // Switch for three-finger click.
175 virtual void SetThreeFingerClick(bool enabled
) = 0;
177 // Turns tap-dragging on/off.
178 virtual void SetTapDragging(bool enabled
) = 0;
180 // Turns natural scrolling on/off for all devices except wheel mice
181 virtual void SetNaturalScroll(bool enabled
) = 0;
183 // Calls |callback| asynchronously after determining if a mouse is connected.
184 virtual void MouseExists(const DeviceExistsCallback
& callback
) = 0;
186 // Updates several mouse settings at a time. Updates only settings that
187 // are set in |settings| object. It is more efficient to use this method to
188 // update several settings then calling Set* methods one by one.
189 virtual void UpdateMouseSettings(const MouseSettings
& settings
) = 0;
191 // Sets the mouse sensitivity in the range [kMinPointerSensitivity,
192 // kMaxPointerSensitivity].
193 virtual void SetMouseSensitivity(int value
) = 0;
195 // Sets the primary mouse button to the right button if |right| is true.
196 virtual void SetPrimaryButtonRight(bool right
) = 0;
198 // Returns true if UI should implement enhanced keyboard support for cases
199 // where other input devices like mouse are absent.
200 virtual bool ForceKeyboardDrivenUINavigation() = 0;
202 // Reapplies previously set touchpad settings.
203 virtual void ReapplyTouchpadSettings() = 0;
205 // Reapplies previously set mouse settings.
206 virtual void ReapplyMouseSettings() = 0;
209 } // namespace system
210 } // namespace chromeos
212 #endif // CHROME_BROWSER_CHROMEOS_SYSTEM_INPUT_DEVICE_SETTINGS_H_