* Add Behavior tab in Preferences with options in ticket #476

* Implement enabled ones
* Add canditate preferences
* Implement singleton-like preferences class CayaPreferences. These are working but they are not stored in file at closing
This commit is contained in:
urnenfeld 2010-05-19 18:05:30 +00:00
parent 8d1c0d1a9d
commit 818c28d43d
7 changed files with 209 additions and 6 deletions

View File

@ -17,6 +17,7 @@
#include "RosterItem.h" #include "RosterItem.h"
#include "WindowsManager.h" #include "WindowsManager.h"
#include "CayaPreferences.h"
ContactLinker::ContactLinker(BString id, BMessenger msgn) ContactLinker::ContactLinker(BString id, BMessenger msgn)
: fChatWindow(NULL), : fChatWindow(NULL),
@ -64,9 +65,14 @@ ContactLinker::ShowWindow()
{ {
if (fChatWindow == NULL) if (fChatWindow == NULL)
CreateChatWindow(); CreateChatWindow();
if (CayaPreferences::Item()->MoveToCurrentWorkspace)
fChatWindow->SetWorkspaces(B_CURRENT_WORKSPACE); fChatWindow->SetWorkspaces(B_CURRENT_WORKSPACE);
if (fChatWindow->IsHidden()) if (fChatWindow->IsHidden())
fChatWindow->Show(); fChatWindow->Show();
if (CayaPreferences::Item()->ActivateWindow)
fChatWindow->Activate(true); fChatWindow->Activate(true);
} }

View File

@ -42,6 +42,7 @@ Application Caya :
AccountView.cpp AccountView.cpp
PreferencesDialog.cpp PreferencesDialog.cpp
PreferencesAccounts.cpp PreferencesAccounts.cpp
PreferencesBehavior.cpp
# views # views
ContactPopUp.cpp ContactPopUp.cpp

View File

@ -0,0 +1,28 @@
/*
* Copyright 2010, Oliver Ruiz Dorantes. All rights reserved.
* Distributed under the terms of the MIT License.
*/
#ifndef _CAYA_PREFERENCES_H
#define _CAYA_PREFERENCES_H
#include "PreferencesContainer.h"
typedef struct CayaPreferencesData
{
bool MoveToCurrentWorkspace;
bool ActivateWindow;
// Add here as much fields as desired
CayaPreferencesData()
:
MoveToCurrentWorkspace(true),
ActivateWindow(true)
// Add here its default values
{ }
};
typedef PreferencesContainer<CayaPreferencesData> CayaPreferences;
#endif // _CAYA_PREFERENCES_H

View File

@ -0,0 +1,98 @@
/*
* Copyright 2010, Oliver Ruiz Dorantes. All rights reserved.
* Distributed under the terms of the MIT License.
*/
#include <Button.h>
#include <CheckBox.h>
#include <ControlLook.h>
#include <GroupLayout.h>
#include <GroupLayoutBuilder.h>
#include <ScrollView.h>
#include <StringView.h>
#include "CayaProtocol.h"
#include "PreferencesBehavior.h"
#include "CayaPreferences.h"
#include "ProtocolManager.h"
#include "ProtocolSettings.h"
#include "MainWindow.h"
#include "TheApp.h"
const uint32 kToCurrentWorkspace = 'CBcw';
const uint32 kActivateChatWindow = 'CBac';
PreferencesBehavior::PreferencesBehavior()
: BView("Behavior", B_WILL_DRAW)
{
fOnIncomming = new BStringView("onIncomming", "On incomming message ... ");
fOnIncomming->SetExplicitAlignment(BAlignment(B_ALIGN_LEFT, B_ALIGN_MIDDLE));
fOnIncomming->SetFont(be_bold_font);
fToCurrentWorkspace = new BCheckBox("ToCurrentWorkspace",
"Move window to current workspace",
new BMessage(kToCurrentWorkspace));
fActivateChatWindow = new BCheckBox("ActivateChatWindow",
"Get focus ",
new BMessage(kActivateChatWindow));
fPlaySoundOnMessageReceived = new BCheckBox("PlaySoundOnMessageReceived",
"Play sound event", NULL);
fPlaySoundOnMessageReceived->SetEnabled(false); // not implemented
fHideEmoticons = new BCheckBox("HideEmoticons",
"Hide Emoticons", NULL);
fHideEmoticons->SetEnabled(false); // not implemented
fMarkUnreadWindow = new BCheckBox("MarkUnreadWindow",
"Mark unread window chat", NULL);
fMarkUnreadWindow->SetEnabled(false); // not implemented
const float spacing = be_control_look->DefaultItemSpacing();
SetLayout(new BGroupLayout(B_HORIZONTAL, spacing));
AddChild(BGroupLayoutBuilder(B_VERTICAL)
.Add(fOnIncomming)
.AddGroup(B_VERTICAL, spacing)
.Add(fToCurrentWorkspace)
.Add(fActivateChatWindow)
.Add(fMarkUnreadWindow)
.Add(fPlaySoundOnMessageReceived)
.SetInsets(spacing * 2, spacing, spacing * 5, spacing)
.End()
.Add(fHideEmoticons)
.SetInsets(spacing, spacing, spacing, spacing)
.End()
);
}
void
PreferencesBehavior::AttachedToWindow()
{
fToCurrentWorkspace->SetTarget(this);
fActivateChatWindow->SetTarget(this);
fToCurrentWorkspace->SetValue(CayaPreferences::Item()->MoveToCurrentWorkspace);
fActivateChatWindow->SetValue(CayaPreferences::Item()->ActivateWindow);
}
void
PreferencesBehavior::MessageReceived(BMessage* message)
{
switch (message->what) {
case kToCurrentWorkspace:
CayaPreferences::Item()->MoveToCurrentWorkspace = fToCurrentWorkspace->Value();
break;
case kActivateChatWindow:
CayaPreferences::Item()->ActivateWindow = fActivateChatWindow->Value();
break;
default:
BView::MessageReceived(message);
}
}

View File

@ -0,0 +1,32 @@
/*
* Copyright 2010, Oliver Ruiz Dorantes. All rights reserved.
* Distributed under the terms of the MIT License.
*/
#ifndef _PREFERENCES_BEHAVIOR_H
#define _PREFERENCES_BEHAVIOR_H
#include <View.h>
class BCheckBox;
class BStringView;
class PreferencesBehavior : public BView {
public:
PreferencesBehavior();
virtual void AttachedToWindow();
virtual void MessageReceived(BMessage* msg);
private:
BStringView* fOnIncomming;
BCheckBox* fToCurrentWorkspace;
BCheckBox* fActivateChatWindow;
BCheckBox* fPlaySoundOnMessageReceived;
BCheckBox* fMarkUnreadWindow;
BCheckBox* fHideEmoticons;
};
#endif // _PREFERENCES_BEHAVIOR_H

View File

@ -0,0 +1,36 @@
/*
* Copyright 2010, Oliver Ruiz Dorantes. All rights reserved.
* Distributed under the terms of the MIT License.
*/
#ifndef _PREFERENCES_CONTAINER_H
#define _PREFERENCES_CONTAINER_H
#include <libsupport/Singleton.h>
// TODO: added to main singleton class?
template<typename T> T* Singleton<T>::fInstance = 0;
template<class SettingsType>
class PreferencesContainer : public Singleton<PreferencesContainer<SettingsType> > {
public:
static const char* fFilename;
static SettingsType*
Item()
{
return &Get()->fSettings;
}
// TODO:
// status_t Save();
// status_t Load();
private:
SettingsType fSettings;
};
#endif // _PREFERENCES_CONTAINER_H

View File

@ -14,6 +14,7 @@
#include "PreferencesDialog.h" #include "PreferencesDialog.h"
#include "PreferencesAccounts.h" #include "PreferencesAccounts.h"
#include "PreferencesBehavior.h"
const uint32 kApply = 'SAVE'; const uint32 kApply = 'SAVE';
@ -24,6 +25,7 @@ PreferencesDialog::PreferencesDialog()
{ {
BTabView* tabView = new BTabView("tabView", B_WIDTH_AS_USUAL); BTabView* tabView = new BTabView("tabView", B_WIDTH_AS_USUAL);
tabView->AddTab(new PreferencesAccounts()); tabView->AddTab(new PreferencesAccounts());
tabView->AddTab(new PreferencesBehavior());
BButton* ok = new BButton("OK", new BMessage(kApply)); BButton* ok = new BButton("OK", new BMessage(kApply));