Cleanup of the mouse settings class:
- style guide updates - the settings are now retrieved from the current settings, rather than from the (possibly) corrupt settings file - removed InitCheck() as it doesn't serve any useful purpose (if the settings file is corrupt, the application should not fail anyway; it could just issue a warning), as the settings are now retrieved from the current settings - renamed WindowCorner() to WindowPosition() - added the possibility to read/write a settings file that's incompatible to R5 to store all possible mouse mappings (not activated, though). We should probably better save all mappings at the end of the file for compatibility. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@5942 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
parent
e586f3a680
commit
dae6d05bbd
@ -6,11 +6,13 @@
|
||||
// by the OpenBeOS license.
|
||||
//
|
||||
//
|
||||
// File: MouseSettings.h
|
||||
// Author: Jérôme Duval, Andrew McCall (mccall@digitalparadise.co.uk)
|
||||
// Description: Media Preferences
|
||||
// Created : December 10, 2003
|
||||
//
|
||||
// File: MouseSettings.h
|
||||
// Authors: Jérôme Duval,
|
||||
// Andrew McCall (mccall@digitalparadise.co.uk),
|
||||
// Axel Dörfler (axeld@pinc-software.de)
|
||||
// Description: Mouse Preferences
|
||||
// Created: December 10, 2003
|
||||
//
|
||||
// ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
|
||||
|
||||
#include <Application.h>
|
||||
@ -23,85 +25,105 @@
|
||||
#include "MouseSettings.h"
|
||||
#include "MouseMessages.h"
|
||||
|
||||
const char kMouseSettingsFile[] = "Mouse_settings";
|
||||
|
||||
// The R5 settings file differs from that of OpenBeOS;
|
||||
// the latter maps 16 different mouse buttons
|
||||
#define R5_COMPATIBLE 1
|
||||
|
||||
static const char kMouseSettingsFile[] = "Mouse_settings";
|
||||
|
||||
|
||||
MouseSettings::MouseSettings()
|
||||
{
|
||||
fInitCheck = B_OK;
|
||||
BPath path;
|
||||
|
||||
if (find_directory(B_USER_SETTINGS_DIRECTORY,&path) == B_OK) {
|
||||
path.Append(kMouseSettingsFile);
|
||||
BFile file(path.Path(), B_READ_ONLY);
|
||||
if (file.InitCheck() == B_OK) {
|
||||
// Now read in the data
|
||||
// we have to do this because mouse_map counts 16 buttons in OBOS
|
||||
if ((file.Read(&fSettings.type, sizeof(fSettings.type)) != sizeof(fSettings.type))
|
||||
||(file.Read(&fSettings.map, (3*sizeof(int32))) != (3*sizeof(int32)))
|
||||
|| (file.Read(&fSettings.accel, sizeof(fSettings.accel)) != sizeof(fSettings.accel))
|
||||
|| (file.Read(&fSettings.click_speed, sizeof(fSettings.click_speed)) != sizeof(fSettings.click_speed))) {
|
||||
if (get_mouse_type((int32*)&fSettings.type) != B_OK)
|
||||
fInitCheck = B_ERROR;
|
||||
if (get_mouse_map(&fSettings.map) != B_OK)
|
||||
fInitCheck = B_ERROR;
|
||||
if (get_mouse_speed(&fSettings.accel.speed) != B_OK)
|
||||
fInitCheck = B_ERROR;
|
||||
if (get_click_speed(&fSettings.click_speed) != B_OK)
|
||||
fInitCheck = B_ERROR;
|
||||
}
|
||||
|
||||
if (file.Read(&fCorner, sizeof(BPoint)) != sizeof(BPoint)) {
|
||||
fCorner.x=50;
|
||||
fCorner.y=50;
|
||||
}
|
||||
} else {
|
||||
if (get_mouse_type((int32*)&fSettings.type) != B_OK)
|
||||
fInitCheck = B_ERROR;
|
||||
if (get_mouse_map(&fSettings.map) != B_OK)
|
||||
fInitCheck = B_ERROR;
|
||||
if (get_mouse_speed(&fSettings.accel.speed) != B_OK)
|
||||
fInitCheck = B_ERROR;
|
||||
if (get_click_speed(&fSettings.click_speed) != B_OK)
|
||||
fInitCheck = B_ERROR;
|
||||
fCorner.x=50;
|
||||
fCorner.y=50;
|
||||
}
|
||||
} else
|
||||
fInitCheck = B_ERROR;
|
||||
RetrieveSettings();
|
||||
}
|
||||
|
||||
MouseSettings::~MouseSettings()
|
||||
{
|
||||
BPath path;
|
||||
|
||||
if (find_directory(B_USER_SETTINGS_DIRECTORY,&path) < B_OK)
|
||||
return;
|
||||
MouseSettings::~MouseSettings()
|
||||
{
|
||||
SaveSettings();
|
||||
}
|
||||
|
||||
|
||||
status_t
|
||||
MouseSettings::GetSettingsPath(BPath &path)
|
||||
{
|
||||
status_t status = find_directory(B_USER_SETTINGS_DIRECTORY, &path);
|
||||
if (status < B_OK)
|
||||
return status;
|
||||
|
||||
path.Append(kMouseSettingsFile);
|
||||
return B_OK;
|
||||
}
|
||||
|
||||
BFile file(path.Path(), B_READ_WRITE | B_CREATE_FILE | B_ERASE_FILE);
|
||||
if (file.InitCheck() == B_OK) {
|
||||
|
||||
void
|
||||
MouseSettings::RetrieveSettings()
|
||||
{
|
||||
// retrieve current values
|
||||
|
||||
get_mouse_map(&fSettings.map);
|
||||
get_click_speed(&fSettings.click_speed);
|
||||
get_mouse_acceleration(&fSettings.accel.accel_factor);
|
||||
get_mouse_type(&fSettings.type);
|
||||
|
||||
// also try to load the window position from disk
|
||||
|
||||
BPath path;
|
||||
if (GetSettingsPath(path) < B_OK)
|
||||
return;
|
||||
|
||||
BFile file(path.Path(), B_READ_ONLY);
|
||||
if (file.InitCheck() < B_OK)
|
||||
return;
|
||||
|
||||
#if R5_COMPATIBLE
|
||||
const off_t kOffset = sizeof(mouse_settings) - sizeof(mouse_map) + sizeof(int32) * 3;
|
||||
// we have to do this because mouse_map counts 16 buttons in OBOS
|
||||
file.Write(&fSettings.type, sizeof(fSettings.type));
|
||||
file.Write(&fSettings.map, 3*sizeof(int32));
|
||||
file.Write(&fSettings.accel, sizeof(fSettings.accel));
|
||||
file.Write(&fSettings.click_speed, sizeof(fSettings.click_speed));
|
||||
file.Write(&fCorner, sizeof(BPoint));
|
||||
#else
|
||||
const off_t kOffset = sizeof(mouse_settings);
|
||||
#endif
|
||||
|
||||
if (file.ReadAt(kOffset, &fWindowPosition, sizeof(BPoint)) != sizeof(BPoint)) {
|
||||
// set default window position (invalid positions will be
|
||||
// corrected by the application; the window will be centered
|
||||
// in this case)
|
||||
fWindowPosition.x = -1;
|
||||
fWindowPosition.y = -1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
status_t
|
||||
MouseSettings::InitCheck()
|
||||
status_t
|
||||
MouseSettings::SaveSettings()
|
||||
{
|
||||
return fInitCheck;
|
||||
BPath path;
|
||||
status_t status = GetSettingsPath(path);
|
||||
if (status < B_OK)
|
||||
return status;
|
||||
|
||||
BFile file(path.Path(), B_READ_WRITE | B_CREATE_FILE | B_ERASE_FILE);
|
||||
if (status < B_OK)
|
||||
return status;
|
||||
|
||||
// we have to do this because mouse_map counts 16 buttons in OBOS
|
||||
#if R5_COMPATIBLE
|
||||
file.Write(&fSettings.type, sizeof(fSettings.type));
|
||||
file.Write(&fSettings.map, 3*sizeof(int32));
|
||||
file.Write(&fSettings.accel, sizeof(fSettings.accel));
|
||||
file.Write(&fSettings.click_speed, sizeof(fSettings.click_speed));
|
||||
#else
|
||||
file.Write(fSettings, sizeof(fSettings));
|
||||
#endif
|
||||
|
||||
file.Write(&fWindowPosition, sizeof(BPoint));
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
MouseSettings::SetWindowCorner(BPoint corner)
|
||||
MouseSettings::SetWindowPosition(BPoint corner)
|
||||
{
|
||||
fCorner = corner;
|
||||
fWindowPosition = corner;
|
||||
}
|
||||
|
||||
|
||||
@ -112,6 +134,14 @@ MouseSettings::SetMouseType(int32 type)
|
||||
}
|
||||
|
||||
|
||||
bigtime_t
|
||||
MouseSettings::ClickSpeed() const
|
||||
{
|
||||
return -(fSettings.click_speed - 1000000);
|
||||
// -1000000 to correct the Sliders 0-100000 scale
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
MouseSettings::SetClickSpeed(bigtime_t click_speed)
|
||||
{
|
||||
@ -122,5 +152,5 @@ MouseSettings::SetClickSpeed(bigtime_t click_speed)
|
||||
void
|
||||
MouseSettings::SetMouseSpeed(int32 accel)
|
||||
{
|
||||
fSettings.accel.speed=accel;
|
||||
fSettings.accel.speed = accel;
|
||||
}
|
||||
|
@ -32,25 +32,33 @@ typedef struct {
|
||||
bigtime_t click_speed;
|
||||
} mouse_settings;
|
||||
|
||||
class MouseSettings{
|
||||
public :
|
||||
MouseSettings();
|
||||
~MouseSettings();
|
||||
status_t InitCheck();
|
||||
|
||||
BPoint WindowCorner() const { return fCorner; }
|
||||
void SetWindowCorner(BPoint corner);
|
||||
int32 MouseType() const { return fSettings.type; }
|
||||
void SetMouseType(int32 type);
|
||||
bigtime_t ClickSpeed() const { return -(fSettings.click_speed-1000000); } // -1000000 to correct the Sliders 0-100000 scale
|
||||
void SetClickSpeed(bigtime_t click_speed);
|
||||
int32 MouseSpeed() const { return fSettings.accel.speed; }
|
||||
void SetMouseSpeed(int32 speed);
|
||||
|
||||
private:
|
||||
status_t fInitCheck;
|
||||
BPoint fCorner;
|
||||
mouse_settings fSettings;
|
||||
|
||||
class MouseSettings {
|
||||
public:
|
||||
MouseSettings();
|
||||
~MouseSettings();
|
||||
|
||||
status_t InitCheck();
|
||||
|
||||
BPoint WindowPosition() const { return fWindowPosition; }
|
||||
void SetWindowPosition(BPoint corner);
|
||||
|
||||
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);
|
||||
|
||||
private:
|
||||
static status_t GetSettingsPath(BPath &path);
|
||||
void RetrieveSettings();
|
||||
status_t SaveSettings();
|
||||
|
||||
mouse_settings fSettings, fOriginalSettings;
|
||||
BPoint fWindowPosition;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user