Incoming and outgoing protocols can be disabled/enabled using a right click menu in the account list view. Fixes #7384.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41078 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -66,6 +66,7 @@ const char *kWebsite = "http://www.haiku-os.org";
|
|||||||
const rgb_color kLinkColor = { 40, 40, 180, 255 };
|
const rgb_color kLinkColor = { 40, 40, 180, 255 };
|
||||||
|
|
||||||
|
|
||||||
|
const uint32 kMsgAccountsRightClicked = 'arcl';
|
||||||
const uint32 kMsgAccountSelected = 'acsl';
|
const uint32 kMsgAccountSelected = 'acsl';
|
||||||
const uint32 kMsgAddAccount = 'adac';
|
const uint32 kMsgAddAccount = 'adac';
|
||||||
const uint32 kMsgRemoveAccount = 'rmac';
|
const uint32 kMsgRemoveAccount = 'rmac';
|
||||||
@@ -133,19 +134,54 @@ AccountItem::ConfigPanel()
|
|||||||
|
|
||||||
|
|
||||||
class AccountsListView : public BListView {
|
class AccountsListView : public BListView {
|
||||||
public:
|
public:
|
||||||
AccountsListView(BRect rect) : BListView(rect,NULL,B_SINGLE_SELECTION_LIST,B_FOLLOW_ALL) {}
|
AccountsListView(BRect rect, BHandler* target)
|
||||||
virtual void KeyDown(const char *bytes, int32 numBytes) {
|
:
|
||||||
if (numBytes != 1)
|
BListView(rect, NULL, B_SINGLE_SELECTION_LIST, B_FOLLOW_ALL),
|
||||||
return;
|
fTarget(target)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
if ((*bytes == B_DELETE) || (*bytes == B_BACKSPACE))
|
void
|
||||||
Window()->PostMessage(kMsgRemoveAccount);
|
KeyDown(const char *bytes, int32 numBytes)
|
||||||
|
{
|
||||||
|
if (numBytes != 1)
|
||||||
|
return;
|
||||||
|
|
||||||
BListView::KeyDown(bytes,numBytes);
|
if ((*bytes == B_DELETE) || (*bytes == B_BACKSPACE))
|
||||||
}
|
Window()->PostMessage(kMsgRemoveAccount);
|
||||||
|
|
||||||
|
BListView::KeyDown(bytes,numBytes);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
MouseDown(BPoint point)
|
||||||
|
{
|
||||||
|
BListView::MouseDown(point);
|
||||||
|
|
||||||
|
BPoint dummy;
|
||||||
|
uint32 buttons;
|
||||||
|
GetMouse(&dummy, &buttons);
|
||||||
|
if (buttons != B_SECONDARY_MOUSE_BUTTON)
|
||||||
|
return;
|
||||||
|
|
||||||
|
int32 index = IndexOf(point);
|
||||||
|
if (index < 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
BMessage message(kMsgAccountsRightClicked);
|
||||||
|
ConvertToScreen(&point);
|
||||||
|
message.AddPoint("point", point);
|
||||||
|
message.AddInt32("index", index);
|
||||||
|
BMessenger messenger(fTarget);
|
||||||
|
messenger.SendMessage(&message);
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
BHandler* fTarget;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
class BitmapView : public BView
|
class BitmapView : public BView
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@@ -338,7 +374,7 @@ ConfigWindow::ConfigWindow()
|
|||||||
rect = view->Bounds().InsetByCopy(8, 8);
|
rect = view->Bounds().InsetByCopy(8, 8);
|
||||||
rect.right = 140 - B_V_SCROLL_BAR_WIDTH;
|
rect.right = 140 - B_V_SCROLL_BAR_WIDTH;
|
||||||
rect.bottom -= height + 12;
|
rect.bottom -= height + 12;
|
||||||
fAccountsListView = new AccountsListView(rect);
|
fAccountsListView = new AccountsListView(rect, this);
|
||||||
view->AddChild(new BScrollView(NULL, fAccountsListView, B_FOLLOW_ALL, 0,
|
view->AddChild(new BScrollView(NULL, fAccountsListView, B_FOLLOW_ALL, 0,
|
||||||
false, true));
|
false, true));
|
||||||
rect.right += B_V_SCROLL_BAR_WIDTH;
|
rect.right += B_V_SCROLL_BAR_WIDTH;
|
||||||
@@ -721,6 +757,59 @@ ConfigWindow::MessageReceived(BMessage *msg)
|
|||||||
|
|
||||||
AutoConfigWindow *autoConfigWindow = NULL;
|
AutoConfigWindow *autoConfigWindow = NULL;
|
||||||
switch (msg->what) {
|
switch (msg->what) {
|
||||||
|
case kMsgAccountsRightClicked:
|
||||||
|
{
|
||||||
|
BPoint point;
|
||||||
|
msg->FindPoint("point", &point);
|
||||||
|
int32 index = msg->FindInt32("index");
|
||||||
|
AccountItem* clickedItem = dynamic_cast<AccountItem*>(
|
||||||
|
fAccountsListView->ItemAt(index));
|
||||||
|
if (clickedItem == NULL || clickedItem->GetType() != ACCOUNT_ITEM)
|
||||||
|
break;
|
||||||
|
|
||||||
|
BPopUpMenu rightClickMenu("accounts", false, false);
|
||||||
|
|
||||||
|
BMenuItem* inMenuItem = new BMenuItem("Incoming", NULL);
|
||||||
|
BMenuItem* outMenuItem = new BMenuItem("Outgoing", NULL);
|
||||||
|
rightClickMenu.AddItem(inMenuItem);
|
||||||
|
rightClickMenu.AddItem(outMenuItem);
|
||||||
|
|
||||||
|
BMailAccountSettings* settings = clickedItem->GetAccount();
|
||||||
|
if (settings->IsInboundEnabled())
|
||||||
|
inMenuItem->SetMarked(true);
|
||||||
|
if (settings->IsOutboundEnabled())
|
||||||
|
outMenuItem->SetMarked(true);
|
||||||
|
|
||||||
|
BMenuItem* selectedItem = rightClickMenu.Go(point);
|
||||||
|
if (selectedItem == NULL)
|
||||||
|
break;
|
||||||
|
if (selectedItem == inMenuItem) {
|
||||||
|
AccountItem* item = dynamic_cast<AccountItem*>(
|
||||||
|
fAccountsListView->ItemAt(index + 1));
|
||||||
|
if (item == NULL)
|
||||||
|
break;
|
||||||
|
if (settings->IsInboundEnabled()) {
|
||||||
|
settings->SetInboundEnabled(false);
|
||||||
|
item->SetEnabled(false);
|
||||||
|
} else {
|
||||||
|
settings->SetInboundEnabled(true);
|
||||||
|
item->SetEnabled(true);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
AccountItem* item = dynamic_cast<AccountItem*>(
|
||||||
|
fAccountsListView->ItemAt(index + 2));
|
||||||
|
if (item == NULL)
|
||||||
|
break;
|
||||||
|
if (settings->IsOutboundEnabled()) {
|
||||||
|
settings->SetOutboundEnabled(false);
|
||||||
|
item->SetEnabled(false);
|
||||||
|
} else {
|
||||||
|
settings->SetOutboundEnabled(true);
|
||||||
|
item->SetEnabled(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
case kMsgAccountSelected:
|
case kMsgAccountSelected:
|
||||||
{
|
{
|
||||||
int32 index;
|
int32 index;
|
||||||
@@ -787,6 +876,7 @@ ConfigWindow::MessageReceived(BMessage *msg)
|
|||||||
_SaveSettings();
|
_SaveSettings();
|
||||||
AccountUpdated(fLastSelectedAccount);
|
AccountUpdated(fLastSelectedAccount);
|
||||||
_MakeHowToView();
|
_MakeHowToView();
|
||||||
|
fAccountsListView->DeselectAll();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
@@ -929,10 +1019,14 @@ ConfigWindow::_AddAccountToView(BMailAccountSettings* account)
|
|||||||
|
|
||||||
item = new AccountItem(B_TRANSLATE(" · Incoming"), account, INBOUND_ITEM);
|
item = new AccountItem(B_TRANSLATE(" · Incoming"), account, INBOUND_ITEM);
|
||||||
fAccountsListView->AddItem(item);
|
fAccountsListView->AddItem(item);
|
||||||
|
if (!account->IsInboundEnabled())
|
||||||
|
item->SetEnabled(false);
|
||||||
|
|
||||||
item = new AccountItem(B_TRANSLATE(" · Outgoing"), account,
|
item = new AccountItem(B_TRANSLATE(" · Outgoing"), account,
|
||||||
OUTBOUND_ITEM);
|
OUTBOUND_ITEM);
|
||||||
fAccountsListView->AddItem(item);
|
fAccountsListView->AddItem(item);
|
||||||
|
if (!account->IsOutboundEnabled())
|
||||||
|
item->SetEnabled(false);
|
||||||
|
|
||||||
item = new AccountItem(B_TRANSLATE(" · E-mail filters"), account,
|
item = new AccountItem(B_TRANSLATE(" · E-mail filters"), account,
|
||||||
FILTER_ITEM);
|
FILTER_ITEM);
|
||||||
|
|||||||
Reference in New Issue
Block a user