patch by Andrea Anzani (with a few style modification by me) which
enables tab (as BTab) switching via mouse wheel. Thanks! git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24214 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
parent
495949fc2c
commit
69fac0cee0
|
@ -508,37 +508,68 @@ BTabView::DetachedFromWindow()
|
||||||
void
|
void
|
||||||
BTabView::MessageReceived(BMessage *message)
|
BTabView::MessageReceived(BMessage *message)
|
||||||
{
|
{
|
||||||
if (message->what == B_GET_PROPERTY || message->what == B_SET_PROPERTY) {
|
switch (message->what) {
|
||||||
BMessage reply(B_REPLY);
|
case B_GET_PROPERTY:
|
||||||
bool handled = false;
|
case B_SET_PROPERTY:
|
||||||
|
{
|
||||||
|
BMessage reply(B_REPLY);
|
||||||
|
bool handled = false;
|
||||||
|
|
||||||
BMessage specifier;
|
BMessage specifier;
|
||||||
int32 index;
|
int32 index;
|
||||||
int32 form;
|
int32 form;
|
||||||
const char *property;
|
const char *property;
|
||||||
if (message->GetCurrentSpecifier(&index, &specifier, &form, &property) == B_OK) {
|
if (message->GetCurrentSpecifier(&index, &specifier, &form, &property) == B_OK) {
|
||||||
if (strcmp(property, "Selection") == 0) {
|
if (strcmp(property, "Selection") == 0) {
|
||||||
if (message->what == B_GET_PROPERTY) {
|
if (message->what == B_GET_PROPERTY) {
|
||||||
reply.AddInt32("result", fSelection);
|
reply.AddInt32("result", fSelection);
|
||||||
handled = true;
|
|
||||||
} else {
|
|
||||||
// B_GET_PROPERTY
|
|
||||||
int32 selection;
|
|
||||||
if (message->FindInt32("data", &selection) == B_OK) {
|
|
||||||
Select(selection);
|
|
||||||
reply.AddInt32("error", B_OK);
|
|
||||||
handled = true;
|
handled = true;
|
||||||
|
} else {
|
||||||
|
// B_GET_PROPERTY
|
||||||
|
int32 selection;
|
||||||
|
if (message->FindInt32("data", &selection) == B_OK) {
|
||||||
|
Select(selection);
|
||||||
|
reply.AddInt32("error", B_OK);
|
||||||
|
handled = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (handled)
|
||||||
|
message->SendReply(&reply);
|
||||||
|
else
|
||||||
|
BView::MessageReceived(message);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (handled) {
|
case B_MOUSE_WHEEL_CHANGED:
|
||||||
message->SendReply(&reply);
|
{
|
||||||
return;
|
float deltaX = 0.0f;
|
||||||
|
float deltaY = 0.0f;
|
||||||
|
message->FindFloat("be:wheel_delta_x", &deltaX);
|
||||||
|
message->FindFloat("be:wheel_delta_y", &deltaY);
|
||||||
|
|
||||||
|
if (deltaX == 0.0f && deltaY == 0.0f)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (deltaY == 0.0f)
|
||||||
|
deltaY = deltaX;
|
||||||
|
|
||||||
|
int32 selection = Selection();
|
||||||
|
int32 numTabs = CountTabs();
|
||||||
|
if (deltaY > 0 && selection < numTabs - 1) {
|
||||||
|
//move to the right tab.
|
||||||
|
Select(Selection() + 1);
|
||||||
|
} else if (deltaY < 0 && selection > 0 && numTabs > 1) {
|
||||||
|
//move to the left tab.
|
||||||
|
Select(selection - 1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
default:
|
||||||
|
BView::MessageReceived(message);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
BView::MessageReceived(message);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue