Preferences dialog is progressing...
This commit is contained in:
parent
aac9a222b3
commit
454762c7eb
|
@ -14,7 +14,8 @@ class BBitmap;
|
||||||
|
|
||||||
#include <SupportDefs.h>
|
#include <SupportDefs.h>
|
||||||
#include <String.h>
|
#include <String.h>
|
||||||
#include "KeyMap.h"
|
|
||||||
|
#include <libsupport/KeyMap.h>
|
||||||
|
|
||||||
class ImageCache
|
class ImageCache
|
||||||
{
|
{
|
||||||
|
|
|
@ -9,7 +9,8 @@
|
||||||
#include <Path.h>
|
#include <Path.h>
|
||||||
#include <String.h>
|
#include <String.h>
|
||||||
|
|
||||||
#include "KeyMap.h"
|
#include <libs/libsupport/KeyMap.h>
|
||||||
|
|
||||||
#include "CayaProtocol.h"
|
#include "CayaProtocol.h"
|
||||||
|
|
||||||
class BBitmap;
|
class BBitmap;
|
||||||
|
|
|
@ -44,8 +44,7 @@ const float kDividerWidth = 1.0f;
|
||||||
|
|
||||||
ProtocolSettings::ProtocolSettings(CayaProtocol* cayap)
|
ProtocolSettings::ProtocolSettings(CayaProtocol* cayap)
|
||||||
: fProtocol(cayap),
|
: fProtocol(cayap),
|
||||||
fTemplate(new BMessage()),
|
fTemplate(new BMessage())
|
||||||
fSettings(new BMessage())
|
|
||||||
{
|
{
|
||||||
_Init();
|
_Init();
|
||||||
}
|
}
|
||||||
|
@ -54,7 +53,6 @@ ProtocolSettings::ProtocolSettings(CayaProtocol* cayap)
|
||||||
ProtocolSettings::~ProtocolSettings()
|
ProtocolSettings::~ProtocolSettings()
|
||||||
{
|
{
|
||||||
delete fTemplate;
|
delete fTemplate;
|
||||||
delete fSettings;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -65,19 +63,27 @@ ProtocolSettings::InitCheck() const
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
BList*
|
CayaProtocol*
|
||||||
|
ProtocolSettings::Protocol() const
|
||||||
|
{
|
||||||
|
return fProtocol;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
List<BString>
|
||||||
ProtocolSettings::Accounts() const
|
ProtocolSettings::Accounts() const
|
||||||
{
|
{
|
||||||
|
List<BString> list;
|
||||||
|
|
||||||
BPath path;
|
BPath path;
|
||||||
if (find_directory(B_USER_SETTINGS_DIRECTORY, &path) != B_OK)
|
if (find_directory(B_USER_SETTINGS_DIRECTORY, &path) != B_OK)
|
||||||
return NULL;
|
return list;
|
||||||
|
|
||||||
path.Append("Caya/Protocols");
|
path.Append("Caya/Protocols");
|
||||||
path.Append(fProtocol->GetSignature());
|
path.Append(fProtocol->GetSignature());
|
||||||
if (create_directory(path.Path(), 0755) != B_OK)
|
if (create_directory(path.Path(), 0755) != B_OK)
|
||||||
return NULL;
|
return list;
|
||||||
|
|
||||||
BList* list = new BList();
|
|
||||||
BDirectory dir(path.Path());
|
BDirectory dir(path.Path());
|
||||||
BEntry entry;
|
BEntry entry;
|
||||||
while (dir.GetNextEntry(&entry) == B_OK) {
|
while (dir.GetNextEntry(&entry) == B_OK) {
|
||||||
|
@ -86,10 +92,8 @@ ProtocolSettings::Accounts() const
|
||||||
|
|
||||||
if (msg.Unflatten(&file) == B_OK) {
|
if (msg.Unflatten(&file) == B_OK) {
|
||||||
char buffer[B_PATH_NAME_LENGTH];
|
char buffer[B_PATH_NAME_LENGTH];
|
||||||
if (entry.GetName(buffer) == B_OK) {
|
if (entry.GetName(buffer) == B_OK)
|
||||||
BString* string = new BString(buffer);
|
list.AddItem(BString(buffer));
|
||||||
list->AddItem(string);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -98,85 +102,26 @@ ProtocolSettings::Accounts() const
|
||||||
|
|
||||||
|
|
||||||
status_t
|
status_t
|
||||||
ProtocolSettings::Load(const char* account)
|
ProtocolSettings::LoadTemplate(BView* parent)
|
||||||
{
|
{
|
||||||
status_t ret = B_ERROR;
|
return Load(NULL, parent);
|
||||||
|
|
||||||
// Find user's settings path
|
|
||||||
BPath path;
|
|
||||||
if ((ret = find_directory(B_USER_SETTINGS_DIRECTORY, &path)) != B_OK)
|
|
||||||
return ret;
|
|
||||||
|
|
||||||
// Create path
|
|
||||||
path.Append("Caya/Protocols");
|
|
||||||
path.Append(fProtocol->GetSignature());
|
|
||||||
if ((ret = create_directory(path.Path(), 0755)) != B_OK)
|
|
||||||
return ret;
|
|
||||||
|
|
||||||
// Load settings file
|
|
||||||
path.Append(account);
|
|
||||||
BFile file(path.Path(), B_READ_ONLY);
|
|
||||||
return fSettings->Unflatten(&file);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
status_t
|
status_t
|
||||||
ProtocolSettings::Save(const char* account)
|
ProtocolSettings::Load(const char* account, BView* parent)
|
||||||
{
|
|
||||||
status_t ret = B_ERROR;
|
|
||||||
|
|
||||||
// Find user's settings path
|
|
||||||
BPath path;
|
|
||||||
if ((ret = find_directory(B_USER_SETTINGS_DIRECTORY, &path)) != B_OK)
|
|
||||||
return ret;
|
|
||||||
|
|
||||||
// Create path
|
|
||||||
path.Append("Caya/Protocols");
|
|
||||||
path.Append(fProtocol->GetSignature());
|
|
||||||
if ((ret = create_directory(path.Path(), 0755)) != B_OK)
|
|
||||||
return ret;
|
|
||||||
|
|
||||||
// Load settings file
|
|
||||||
path.Append(account);
|
|
||||||
BFile file(path.Path(), B_CREATE_FILE | B_ERASE_FILE | B_WRITE_ONLY);
|
|
||||||
return fSettings->Flatten(&file);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
status_t
|
|
||||||
ProtocolSettings::Delete(const char* account)
|
|
||||||
{
|
|
||||||
status_t ret = B_ERROR;
|
|
||||||
|
|
||||||
// Find user's settings path
|
|
||||||
BPath path;
|
|
||||||
if ((ret = find_directory(B_USER_SETTINGS_DIRECTORY, &path)) != B_OK)
|
|
||||||
return ret;
|
|
||||||
|
|
||||||
// Create path
|
|
||||||
path.Append("Caya/Protocols");
|
|
||||||
path.Append(fProtocol->GetSignature());
|
|
||||||
if ((ret = create_directory(path.Path(), 0755)) != B_OK)
|
|
||||||
return ret;
|
|
||||||
path.Append(account);
|
|
||||||
|
|
||||||
// Delete settings file
|
|
||||||
BEntry entry(path.Path());
|
|
||||||
if ((ret = entry.Remove()) != B_OK)
|
|
||||||
return ret;
|
|
||||||
|
|
||||||
delete fSettings;
|
|
||||||
fSettings = new BMessage();
|
|
||||||
return B_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void
|
|
||||||
ProtocolSettings::BuildGUI(BView* parent)
|
|
||||||
{
|
{
|
||||||
if (!parent)
|
if (!parent)
|
||||||
debugger("Couldn't build protocol's settings GUI on a NULL parent!");
|
debugger("Couldn't build protocol's settings GUI on a NULL parent!");
|
||||||
|
|
||||||
|
BMessage* settings = NULL;
|
||||||
|
|
||||||
|
if (account) {
|
||||||
|
status_t ret = _Load(account, &settings);
|
||||||
|
if (ret != B_OK)
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
BMessage curr;
|
BMessage curr;
|
||||||
float inset = ceilf(be_plain_font->Size() * 0.7f);
|
float inset = ceilf(be_plain_font->Size() * 0.7f);
|
||||||
|
|
||||||
|
@ -215,17 +160,21 @@ ProtocolSettings::BuildGUI(BView* parent)
|
||||||
menu->AddItem(item);
|
menu->AddItem(item);
|
||||||
}
|
}
|
||||||
|
|
||||||
value = fSettings->FindString(name);
|
if (settings) {
|
||||||
|
value = settings->FindString(name);
|
||||||
if (value)
|
if (value)
|
||||||
menu->FindItem(value)->SetMarked(true);
|
menu->FindItem(value)->SetMarked(true);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
// It's a free-text setting
|
// It's a free-text setting
|
||||||
if (curr.FindBool("multi_line", &multiLine) != B_OK)
|
if (curr.FindBool("multi_line", &multiLine) != B_OK)
|
||||||
multiLine = false;
|
multiLine = false;
|
||||||
|
|
||||||
value = fSettings->FindString(name);
|
if (settings) {
|
||||||
|
value = settings->FindString(name);
|
||||||
if (!value)
|
if (!value)
|
||||||
value = curr.FindString("default");
|
value = curr.FindString("default");
|
||||||
|
}
|
||||||
|
|
||||||
if (curr.FindBool("is_secret",&secret) != B_OK)
|
if (curr.FindBool("is_secret",&secret) != B_OK)
|
||||||
secret = false;
|
secret = false;
|
||||||
|
@ -240,7 +189,10 @@ ProtocolSettings::BuildGUI(BView* parent)
|
||||||
menu = new BPopUpMenu(name);
|
menu = new BPopUpMenu(name);
|
||||||
|
|
||||||
int32 def = 0;
|
int32 def = 0;
|
||||||
status_t hasValue = fSettings->FindInt32(name, 0, &def);
|
status_t hasValue = B_ERROR;
|
||||||
|
|
||||||
|
if (settings)
|
||||||
|
settings->FindInt32(name, 0, &def);
|
||||||
|
|
||||||
if (hasValue != B_OK)
|
if (hasValue != B_OK)
|
||||||
hasValue = curr.FindInt32("default", 0, &def);
|
hasValue = curr.FindInt32("default", 0, &def);
|
||||||
|
@ -262,7 +214,7 @@ ProtocolSettings::BuildGUI(BView* parent)
|
||||||
// It's a free-text (but number) setting
|
// It's a free-text (but number) setting
|
||||||
int32 v = 0;
|
int32 v = 0;
|
||||||
|
|
||||||
if (fSettings->FindInt32(name, &v) == B_OK) {
|
if (settings && settings->FindInt32(name, &v) == B_OK) {
|
||||||
sprintf(temp,"%ld", v);
|
sprintf(temp,"%ld", v);
|
||||||
value = temp;
|
value = temp;
|
||||||
} else if (curr.FindInt32("default", &v) == B_OK) {
|
} else if (curr.FindInt32("default", &v) == B_OK) {
|
||||||
|
@ -278,7 +230,7 @@ ProtocolSettings::BuildGUI(BView* parent)
|
||||||
case B_BOOL_TYPE: {
|
case B_BOOL_TYPE: {
|
||||||
bool active;
|
bool active;
|
||||||
|
|
||||||
if (fSettings->FindBool(name, &active) != B_OK) {
|
if (settings && settings->FindBool(name, &active) != B_OK) {
|
||||||
if (curr.FindBool("default", &active) != B_OK)
|
if (curr.FindBool("default", &active) != B_OK)
|
||||||
active = false;
|
active = false;
|
||||||
}
|
}
|
||||||
|
@ -329,15 +281,19 @@ ProtocolSettings::BuildGUI(BView* parent)
|
||||||
|
|
||||||
layout.AddGlue();
|
layout.AddGlue();
|
||||||
parent->AddChild(layout);
|
parent->AddChild(layout);
|
||||||
|
|
||||||
|
return B_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
status_t
|
status_t
|
||||||
ProtocolSettings::SaveGUI(BView* parent)
|
ProtocolSettings::Save(const char* account, BView* parent)
|
||||||
{
|
{
|
||||||
if (!parent)
|
if (!parent)
|
||||||
debugger("Couldn't save protocol's settings GUI on a NULL parent!");
|
debugger("Couldn't save protocol's settings GUI on a NULL parent!");
|
||||||
|
|
||||||
|
BMessage* settings = new BMessage();
|
||||||
|
|
||||||
BMessage cur;
|
BMessage cur;
|
||||||
for (int32 i = 0; fTemplate->FindMessage("setting", i, &cur) == B_OK; i++) {
|
for (int32 i = 0; fTemplate->FindMessage("setting", i, &cur) == B_OK; i++) {
|
||||||
const char* name = cur.FindString("name");
|
const char* name = cur.FindString("name");
|
||||||
|
@ -359,10 +315,10 @@ ProtocolSettings::SaveGUI(BView* parent)
|
||||||
if (textControl) {
|
if (textControl) {
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case B_STRING_TYPE:
|
case B_STRING_TYPE:
|
||||||
fSettings->AddString(name, textControl->Text());
|
settings->AddString(name, textControl->Text());
|
||||||
break;
|
break;
|
||||||
case B_INT32_TYPE:
|
case B_INT32_TYPE:
|
||||||
fSettings->AddInt32(name, atoi(textControl->Text()));
|
settings->AddInt32(name, atoi(textControl->Text()));
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return B_ERROR;
|
return B_ERROR;
|
||||||
|
@ -378,10 +334,10 @@ ProtocolSettings::SaveGUI(BView* parent)
|
||||||
|
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case B_STRING_TYPE:
|
case B_STRING_TYPE:
|
||||||
fSettings->AddString(name, item->Label());
|
settings->AddString(name, item->Label());
|
||||||
break;
|
break;
|
||||||
case B_INT32_TYPE:
|
case B_INT32_TYPE:
|
||||||
fSettings->AddInt32(name, atoi(item->Label()));
|
settings->AddInt32(name, atoi(item->Label()));
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return B_ERROR;
|
return B_ERROR;
|
||||||
|
@ -391,15 +347,40 @@ ProtocolSettings::SaveGUI(BView* parent)
|
||||||
BCheckBox* checkBox
|
BCheckBox* checkBox
|
||||||
= dynamic_cast<BCheckBox*>(view);
|
= dynamic_cast<BCheckBox*>(view);
|
||||||
if (checkBox)
|
if (checkBox)
|
||||||
fSettings->AddBool(name, (checkBox->Value() == B_CONTROL_ON));
|
settings->AddBool(name, (checkBox->Value() == B_CONTROL_ON));
|
||||||
|
|
||||||
NotifyingTextView* textView
|
NotifyingTextView* textView
|
||||||
= dynamic_cast<NotifyingTextView*>(view);
|
= dynamic_cast<NotifyingTextView*>(view);
|
||||||
if (textView)
|
if (textView)
|
||||||
fSettings->AddString(name, textView->Text());
|
settings->AddString(name, textView->Text());
|
||||||
}
|
}
|
||||||
|
|
||||||
fSettings->PrintToStream();
|
return _Save(account, settings);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
status_t
|
||||||
|
ProtocolSettings::Delete(const char* account)
|
||||||
|
{
|
||||||
|
status_t ret = B_ERROR;
|
||||||
|
|
||||||
|
// Find user's settings path
|
||||||
|
BPath path;
|
||||||
|
if ((ret = find_directory(B_USER_SETTINGS_DIRECTORY, &path)) != B_OK)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
// Create path
|
||||||
|
path.Append("Caya/Protocols");
|
||||||
|
path.Append(fProtocol->GetSignature());
|
||||||
|
if ((ret = create_directory(path.Path(), 0755)) != B_OK)
|
||||||
|
return ret;
|
||||||
|
path.Append(account);
|
||||||
|
|
||||||
|
// Delete settings file
|
||||||
|
BEntry entry(path.Path());
|
||||||
|
if ((ret = entry.Remove()) != B_OK)
|
||||||
|
return ret;
|
||||||
|
|
||||||
return B_OK;
|
return B_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -433,3 +414,60 @@ ProtocolSettings::_Init()
|
||||||
// Load protocol's settings template
|
// Load protocol's settings template
|
||||||
fTemplate->Unflatten((const char*)data);
|
fTemplate->Unflatten((const char*)data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
status_t
|
||||||
|
ProtocolSettings::_Load(const char* account, BMessage** settings)
|
||||||
|
{
|
||||||
|
*settings = NULL;
|
||||||
|
|
||||||
|
if (!account || !settings)
|
||||||
|
return B_BAD_VALUE;
|
||||||
|
|
||||||
|
status_t ret = B_ERROR;
|
||||||
|
|
||||||
|
// Find user's settings path
|
||||||
|
BPath path;
|
||||||
|
if ((ret = find_directory(B_USER_SETTINGS_DIRECTORY, &path)) != B_OK)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
// Create path
|
||||||
|
path.Append("Caya/Protocols");
|
||||||
|
path.Append(fProtocol->GetSignature());
|
||||||
|
if ((ret = create_directory(path.Path(), 0755)) != B_OK)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
// Load settings file
|
||||||
|
path.Append(account);
|
||||||
|
BFile file(path.Path(), B_READ_ONLY);
|
||||||
|
BMessage* msg = new BMessage();
|
||||||
|
ret = msg->Unflatten(&file);
|
||||||
|
*settings = msg;
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
status_t
|
||||||
|
ProtocolSettings::_Save(const char* account, BMessage* settings)
|
||||||
|
{
|
||||||
|
if (!account || !settings)
|
||||||
|
return B_BAD_VALUE;
|
||||||
|
|
||||||
|
status_t ret = B_ERROR;
|
||||||
|
|
||||||
|
// Find user's settings path
|
||||||
|
BPath path;
|
||||||
|
if ((ret = find_directory(B_USER_SETTINGS_DIRECTORY, &path)) != B_OK)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
// Create path
|
||||||
|
path.Append("Caya/Protocols");
|
||||||
|
path.Append(fProtocol->GetSignature());
|
||||||
|
if ((ret = create_directory(path.Path(), 0755)) != B_OK)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
// Load settings file
|
||||||
|
path.Append(account);
|
||||||
|
BFile file(path.Path(), B_CREATE_FILE | B_ERASE_FILE | B_WRITE_ONLY);
|
||||||
|
return settings->Flatten(&file);
|
||||||
|
}
|
||||||
|
|
|
@ -6,6 +6,8 @@
|
||||||
#ifndef _PROTOCOL_SETTINGS_H
|
#ifndef _PROTOCOL_SETTINGS_H
|
||||||
#define _PROTOCOL_SETTINGS_H
|
#define _PROTOCOL_SETTINGS_H
|
||||||
|
|
||||||
|
#include <libsupport/List.h>
|
||||||
|
|
||||||
class BMessage;
|
class BMessage;
|
||||||
class CayaProtocol;
|
class CayaProtocol;
|
||||||
|
|
||||||
|
@ -16,23 +18,23 @@ public:
|
||||||
|
|
||||||
status_t InitCheck() const;
|
status_t InitCheck() const;
|
||||||
|
|
||||||
BList* Accounts() const;
|
CayaProtocol* Protocol() const;
|
||||||
|
List<BString> Accounts() const;
|
||||||
|
|
||||||
status_t Load(const char* account);
|
status_t LoadTemplate(BView* parent);
|
||||||
status_t Save(const char* account);
|
status_t Load(const char* account, BView* parent);
|
||||||
|
status_t Save(const char* account, BView* parent);
|
||||||
status_t Delete(const char* account);
|
status_t Delete(const char* account);
|
||||||
|
|
||||||
void BuildGUI(BView* parent);
|
|
||||||
status_t SaveGUI(BView* parent);
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
status_t fStatus;
|
status_t fStatus;
|
||||||
CayaProtocol* fProtocol;
|
CayaProtocol* fProtocol;
|
||||||
BString fAccount;
|
BString fAccount;
|
||||||
BMessage* fTemplate;
|
BMessage* fTemplate;
|
||||||
BMessage* fSettings;
|
|
||||||
|
|
||||||
void _Init();
|
void _Init();
|
||||||
|
status_t _Load(const char* account, BMessage** settings);
|
||||||
|
status_t _Save(const char* account, BMessage* settings);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // _PROTOCOL_SETTINGS_H
|
#endif // _PROTOCOL_SETTINGS_H
|
||||||
|
|
|
@ -8,9 +8,10 @@
|
||||||
#include <Message.h>
|
#include <Message.h>
|
||||||
#include <MessageFilter.h>
|
#include <MessageFilter.h>
|
||||||
|
|
||||||
|
#include <libsupport/KeyMap.h>
|
||||||
|
|
||||||
#include "CayaConstants.h"
|
#include "CayaConstants.h"
|
||||||
#include "ContactLinker.h"
|
#include "ContactLinker.h"
|
||||||
#include "KeyMap.h"
|
|
||||||
|
|
||||||
class MainWindow;
|
class MainWindow;
|
||||||
class RosterItem;
|
class RosterItem;
|
||||||
|
|
|
@ -20,7 +20,6 @@ AccountListItem::AccountListItem(CayaProtocol* cayap, const char* account)
|
||||||
fBaselineOffset(0)
|
fBaselineOffset(0)
|
||||||
{
|
{
|
||||||
fSettings = new ProtocolSettings(cayap);
|
fSettings = new ProtocolSettings(cayap);
|
||||||
fSettings->Load(account);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
#include <GroupLayout.h>
|
#include <GroupLayout.h>
|
||||||
#include <GroupLayoutBuilder.h>
|
#include <GroupLayoutBuilder.h>
|
||||||
#include <ListView.h>
|
#include <ListView.h>
|
||||||
#include <Menu.h>
|
#include <PopUpMenu.h>
|
||||||
#include <MenuField.h>
|
#include <MenuField.h>
|
||||||
#include <ScrollView.h>
|
#include <ScrollView.h>
|
||||||
#include <TextControl.h>
|
#include <TextControl.h>
|
||||||
|
@ -21,6 +21,7 @@
|
||||||
#include <libinterface/BitmapMenuItem.h>
|
#include <libinterface/BitmapMenuItem.h>
|
||||||
#include <libinterface/Divider.h>
|
#include <libinterface/Divider.h>
|
||||||
#include <libinterface/NotifyingTextView.h>
|
#include <libinterface/NotifyingTextView.h>
|
||||||
|
#include <libinterface/ToolButton.h>
|
||||||
|
|
||||||
#include "AccountListItem.h"
|
#include "AccountListItem.h"
|
||||||
#include "CayaProtocol.h"
|
#include "CayaProtocol.h"
|
||||||
|
@ -35,6 +36,7 @@ const uint32 kSelect = 'SELT';
|
||||||
|
|
||||||
const uint32 kCancel = 'CANC';
|
const uint32 kCancel = 'CANC';
|
||||||
const uint32 kOK = 'SAVE';
|
const uint32 kOK = 'SAVE';
|
||||||
|
|
||||||
const uint32 kChanged = 'CHGD';
|
const uint32 kChanged = 'CHGD';
|
||||||
|
|
||||||
|
|
||||||
|
@ -100,21 +102,22 @@ public:
|
||||||
B_AUTO_UPDATE_SIZE_LIMITS | B_CLOSE_ON_ESCAPE)
|
B_AUTO_UPDATE_SIZE_LIMITS | B_CLOSE_ON_ESCAPE)
|
||||||
{
|
{
|
||||||
fSettings = new ProtocolSettings(cayap);
|
fSettings = new ProtocolSettings(cayap);
|
||||||
if (account)
|
|
||||||
fSettings->Load(account);
|
|
||||||
|
|
||||||
fAccountName = new BTextControl("accountName", "Account name:", NULL, NULL);
|
fAccountName = new BTextControl("accountName", "Account name:", NULL, NULL);
|
||||||
fAccountName->SetFont(be_bold_font);
|
fAccountName->SetFont(be_bold_font);
|
||||||
fAccountName->MakeFocus();
|
|
||||||
if (account) {
|
if (account) {
|
||||||
fAccountName->SetText(account);
|
fAccountName->SetText(account);
|
||||||
fAccountName->SetEnabled(false);
|
fAccountName->SetEnabled(false);
|
||||||
}
|
} else
|
||||||
|
fAccountName->MakeFocus(true);
|
||||||
|
|
||||||
Divider* divider = new Divider("divider", B_WILL_DRAW);
|
Divider* divider = new Divider("divider", B_WILL_DRAW);
|
||||||
|
|
||||||
fTop = new AccountView("top");
|
fTop = new AccountView("top");
|
||||||
fSettings->BuildGUI(fTop);
|
if (account)
|
||||||
|
fSettings->Load(account, fTop);
|
||||||
|
else
|
||||||
|
fSettings->LoadTemplate(fTop);
|
||||||
|
|
||||||
BButton* cancel = new BButton("Cancel", new BMessage(kCancel));
|
BButton* cancel = new BButton("Cancel", new BMessage(kCancel));
|
||||||
BButton* ok = new BButton("OK", new BMessage(kOK));
|
BButton* ok = new BButton("OK", new BMessage(kOK));
|
||||||
|
@ -142,8 +145,7 @@ public:
|
||||||
{
|
{
|
||||||
switch (msg->what) {
|
switch (msg->what) {
|
||||||
case kOK:
|
case kOK:
|
||||||
if (fSettings->SaveGUI(fTop) == B_OK)
|
if (fSettings->Save(fAccountName->Text(), fTop) == B_OK)
|
||||||
if (fSettings->Save(fAccountName->Text()) == B_OK)
|
|
||||||
Close();
|
Close();
|
||||||
// TODO: Error!
|
// TODO: Error!
|
||||||
break;
|
break;
|
||||||
|
@ -177,20 +179,14 @@ PreferencesAccounts::PreferencesAccounts()
|
||||||
|
|
||||||
BList* protocols = ProtocolManager::Get()->GetProtocols();
|
BList* protocols = ProtocolManager::Get()->GetProtocols();
|
||||||
|
|
||||||
fProtosMenu = new BMenu("Add");
|
fProtosMenu = new BPopUpMenu(NULL, true);
|
||||||
for (int32 i = 0; i < protocols->CountItems(); i++) {
|
for (int32 i = 0; i < protocols->CountItems(); i++) {
|
||||||
CayaProtocol* cayap
|
CayaProtocol* cayap
|
||||||
= reinterpret_cast<CayaProtocol*>(protocols->ItemAtFast(i));
|
= reinterpret_cast<CayaProtocol*>(protocols->ItemAtFast(i));
|
||||||
ProtocolSettings* settings = new ProtocolSettings(cayap);
|
ProtocolSettings* settings = new ProtocolSettings(cayap);
|
||||||
BList* accounts = settings->Accounts();
|
|
||||||
|
|
||||||
// Add accounts to list view
|
// Add accounts to list view
|
||||||
for (int32 j = 0; j < accounts->CountItems(); j++) {
|
_LoadListView(settings);
|
||||||
BString* account = reinterpret_cast<BString*>(accounts->ItemAtFast(j));
|
|
||||||
AccountListItem* listItem = new AccountListItem(cayap,
|
|
||||||
account->String());
|
|
||||||
fListView->AddItem(listItem);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Add menu items
|
// Add menu items
|
||||||
BMessage* msg = new BMessage(kAddAccount);
|
BMessage* msg = new BMessage(kAddAccount);
|
||||||
|
@ -201,13 +197,13 @@ PreferencesAccounts::PreferencesAccounts()
|
||||||
ProtocolManager::Get()->GetProtocolIcon(cayap->GetSignature()));
|
ProtocolManager::Get()->GetProtocolIcon(cayap->GetSignature()));
|
||||||
fProtosMenu->AddItem(item);
|
fProtosMenu->AddItem(item);
|
||||||
|
|
||||||
delete accounts;
|
|
||||||
delete settings;
|
delete settings;
|
||||||
}
|
}
|
||||||
|
|
||||||
BMenuField* proto = new BMenuField("addAccountField", NULL, fProtosMenu);
|
ToolButton* proto = new ToolButton("+", NULL);
|
||||||
fDelButton = new BButton(" - ", new BMessage(kDelAccount));
|
proto->SetMenu(fProtosMenu);
|
||||||
fEditButton = new BButton("Edit...", new BMessage(kEditAccount));
|
fDelButton = new ToolButton("-", new BMessage(kDelAccount));
|
||||||
|
fEditButton = new ToolButton("Edit...", new BMessage(kEditAccount));
|
||||||
fDelButton->SetEnabled(false);
|
fDelButton->SetEnabled(false);
|
||||||
fEditButton->SetEnabled(false);
|
fEditButton->SetEnabled(false);
|
||||||
|
|
||||||
|
@ -255,6 +251,9 @@ PreferencesAccounts::MessageReceived(BMessage* msg)
|
||||||
if (msg->FindPointer("protocol", &protocol) == B_OK) {
|
if (msg->FindPointer("protocol", &protocol) == B_OK) {
|
||||||
CayaProtocol* cayap = (CayaProtocol*) protocol;
|
CayaProtocol* cayap = (CayaProtocol*) protocol;
|
||||||
|
|
||||||
|
BLooper* looper = new BLooper();
|
||||||
|
looper->AddHandler(this);
|
||||||
|
|
||||||
AccountDialog* dialog = new AccountDialog("Add account", cayap);
|
AccountDialog* dialog = new AccountDialog("Add account", cayap);
|
||||||
dialog->Show();
|
dialog->Show();
|
||||||
}
|
}
|
||||||
|
@ -272,6 +271,9 @@ PreferencesAccounts::MessageReceived(BMessage* msg)
|
||||||
CayaProtocol* cayap = item->Protocol();
|
CayaProtocol* cayap = item->Protocol();
|
||||||
const char* account = item->Account();
|
const char* account = item->Account();
|
||||||
|
|
||||||
|
BLooper* looper = new BLooper();
|
||||||
|
looper->AddHandler(this);
|
||||||
|
|
||||||
AccountDialog* dialog = new AccountDialog("Edit account", cayap, account);
|
AccountDialog* dialog = new AccountDialog("Edit account", cayap, account);
|
||||||
dialog->Show();
|
dialog->Show();
|
||||||
}
|
}
|
||||||
|
@ -298,3 +300,21 @@ PreferencesAccounts::MessageReceived(BMessage* msg)
|
||||||
BView::MessageReceived(msg);
|
BView::MessageReceived(msg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
PreferencesAccounts::_LoadListView(ProtocolSettings* settings)
|
||||||
|
{
|
||||||
|
if (!settings)
|
||||||
|
return;
|
||||||
|
|
||||||
|
List<BString> accounts = settings->Accounts();
|
||||||
|
|
||||||
|
// Add accounts to list view
|
||||||
|
for (uint32 i = 0; i < accounts.CountItems(); i++) {
|
||||||
|
BString account = accounts.ItemAt(i);
|
||||||
|
AccountListItem* listItem = new AccountListItem(
|
||||||
|
settings->Protocol(), account.String());
|
||||||
|
fListView->AddItem(listItem);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -7,9 +7,12 @@
|
||||||
|
|
||||||
#include <View.h>
|
#include <View.h>
|
||||||
|
|
||||||
class BListView;
|
|
||||||
class BMenu;
|
|
||||||
class BButton;
|
class BButton;
|
||||||
|
class BListView;
|
||||||
|
class BPopUpMenu;
|
||||||
|
|
||||||
|
class ToolButton;
|
||||||
|
class ProtocolSettings;
|
||||||
|
|
||||||
class PreferencesAccounts : public BView {
|
class PreferencesAccounts : public BView {
|
||||||
public:
|
public:
|
||||||
|
@ -20,9 +23,12 @@ public:
|
||||||
|
|
||||||
private:
|
private:
|
||||||
BListView* fListView;
|
BListView* fListView;
|
||||||
BMenu* fProtosMenu;
|
BPopUpMenu* fProtosMenu;
|
||||||
BButton* fDelButton;
|
ToolButton* fDelButton;
|
||||||
BButton* fEditButton;
|
ToolButton* fEditButton;
|
||||||
|
|
||||||
|
|
||||||
|
void _LoadListView(ProtocolSettings* settings);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // _PREFERENCES_ACCOUNTS_H
|
#endif // _PREFERENCES_ACCOUNTS_H
|
||||||
|
|
|
@ -300,6 +300,30 @@ ToolButton::Perform(perform_code code, void* data)
|
||||||
((perform_data_preferred_size*)data)->return_value
|
((perform_data_preferred_size*)data)->return_value
|
||||||
= ToolButton::PreferredSize();
|
= ToolButton::PreferredSize();
|
||||||
return B_OK;
|
return B_OK;
|
||||||
|
case PERFORM_CODE_LAYOUT_ALIGNMENT:
|
||||||
|
((perform_data_layout_alignment*)data)->return_value
|
||||||
|
= ToolButton::LayoutAlignment();
|
||||||
|
return B_OK;
|
||||||
|
case PERFORM_CODE_HAS_HEIGHT_FOR_WIDTH:
|
||||||
|
((perform_data_has_height_for_width*)data)->return_value
|
||||||
|
= ToolButton::HasHeightForWidth();
|
||||||
|
return B_OK;
|
||||||
|
case PERFORM_CODE_GET_HEIGHT_FOR_WIDTH: {
|
||||||
|
perform_data_get_height_for_width* _data
|
||||||
|
= (perform_data_get_height_for_width*)data;
|
||||||
|
ToolButton::GetHeightForWidth(_data->width, &_data->min, &_data->max,
|
||||||
|
&_data->preferred);
|
||||||
|
return B_OK;
|
||||||
|
}
|
||||||
|
case PERFORM_CODE_INVALIDATE_LAYOUT: {
|
||||||
|
perform_data_invalidate_layout* _data
|
||||||
|
= (perform_data_invalidate_layout*)_data;
|
||||||
|
ToolButton::InvalidateLayout(_data->descendants);
|
||||||
|
return B_OK;
|
||||||
|
}
|
||||||
|
case PERFORM_CODE_DO_LAYOUT:
|
||||||
|
ToolButton::DoLayout();
|
||||||
|
return B_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
return BControl::Perform(code, data);
|
return BControl::Perform(code, data);
|
||||||
|
@ -375,7 +399,7 @@ ToolButton::_ValidatePreferredSize()
|
||||||
GetFontHeight(&fontHeight);
|
GetFontHeight(&fontHeight);
|
||||||
|
|
||||||
fPreferredSize.height
|
fPreferredSize.height
|
||||||
= ceilf((fontHeight.ascent + fontHeight.descent) * 1.8)
|
= ceilf((fontHeight.ascent + fontHeight.descent) * 1.5)
|
||||||
+ (fBitmap ? kToolbarIconSize + 4.0f : 0);
|
+ (fBitmap ? kToolbarIconSize + 4.0f : 0);
|
||||||
|
|
||||||
ResetLayoutInvalidation();
|
ResetLayoutInvalidation();
|
||||||
|
|
Ŝarĝante…
Reference in New Issue