... actually, "unnest" the rest of the file as well.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28095 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Stephan Aßmus 2008-10-14 17:25:42 +00:00
parent 80e1925251
commit 8eeb005f20
1 changed files with 139 additions and 135 deletions

View File

@ -216,38 +216,40 @@ PadView::MouseUp(BPoint where)
void
PadView::MouseMoved(BPoint where, uint32 transit, const BMessage* dragMessage)
{
if (MainWindow* window = dynamic_cast<MainWindow*>(Window())) {
if (fDragging) {
window->MoveTo(ConvertToScreen(where) - fDragOffset);
} else if (window->AutoRaise()) {
where = ConvertToScreen(where);
BScreen screen(window);
BRect frame = screen.Frame();
BRect windowFrame = window->Frame();
if (where.x == frame.left || where.x == frame.right
|| where.y == frame.top || where.y == frame.bottom) {
BPoint position = window->ScreenPosition();
bool raise = false;
if (fabs(0.5 - position.x) > fabs(0.5 - position.y)) {
// left or right border
if (where.y >= windowFrame.top && where.y <= windowFrame.bottom) {
if (position.x < 0.5 && where.x == frame.left)
raise = true;
else if (position.x > 0.5 && where.x == frame.right)
raise = true;
}
} else {
// top or bottom border
if (where.x >= windowFrame.left && where.x <= windowFrame.right) {
if (position.y < 0.5 && where.y == frame.top)
raise = true;
else if (position.y > 0.5 && where.y == frame.top)
raise = true;
}
MainWindow* window = dynamic_cast<MainWindow*>(Window());
if (window == NULL)
return;
if (fDragging) {
window->MoveTo(ConvertToScreen(where) - fDragOffset);
} else if (window->AutoRaise()) {
where = ConvertToScreen(where);
BScreen screen(window);
BRect frame = screen.Frame();
BRect windowFrame = window->Frame();
if (where.x == frame.left || where.x == frame.right
|| where.y == frame.top || where.y == frame.bottom) {
BPoint position = window->ScreenPosition();
bool raise = false;
if (fabs(0.5 - position.x) > fabs(0.5 - position.y)) {
// left or right border
if (where.y >= windowFrame.top && where.y <= windowFrame.bottom) {
if (position.x < 0.5 && where.x == frame.left)
raise = true;
else if (position.x > 0.5 && where.x == frame.right)
raise = true;
}
} else {
// top or bottom border
if (where.x >= windowFrame.left && where.x <= windowFrame.right) {
if (position.y < 0.5 && where.y == frame.top)
raise = true;
else if (position.y > 0.5 && where.y == frame.top)
raise = true;
}
if (raise)
window->Activate();
}
if (raise)
window->Activate();
}
}
}
@ -280,116 +282,118 @@ PadView::ButtonAt(int32 index) const
void
PadView::DisplayMenu(BPoint where, LaunchButton* button) const
{
if (MainWindow* window = dynamic_cast<MainWindow*>(Window())) {
LaunchButton* nearestButton = button;
if (!nearestButton) {
// find the nearest button
for (int32 i = 0; (nearestButton = ButtonAt(i)); i++) {
if (nearestButton->Frame().top > where.y)
break;
}
MainWindow* window = dynamic_cast<MainWindow*>(Window());
if (window == NULL)
return;
LaunchButton* nearestButton = button;
if (!nearestButton) {
// find the nearest button
for (int32 i = 0; (nearestButton = ButtonAt(i)); i++) {
if (nearestButton->Frame().top > where.y)
break;
}
BPopUpMenu* menu = new BPopUpMenu("launch popup", false, false);
// add button
BMessage* message = new BMessage(MSG_ADD_SLOT);
message->AddPointer("be:source", (void*)nearestButton);
BMenuItem* item = new BMenuItem("Add Button Here", message);
}
BPopUpMenu* menu = new BPopUpMenu("launch popup", false, false);
// add button
BMessage* message = new BMessage(MSG_ADD_SLOT);
message->AddPointer("be:source", (void*)nearestButton);
BMenuItem* item = new BMenuItem("Add Button Here", message);
item->SetTarget(window);
menu->AddItem(item);
// button options
if (button) {
// remove button
message = new BMessage(MSG_CLEAR_SLOT);
message->AddPointer("be:source", (void*)button);
item = new BMenuItem("Clear Button", message);
item->SetTarget(window);
menu->AddItem(item);
// remove button
message = new BMessage(MSG_REMOVE_SLOT);
message->AddPointer("be:source", (void*)button);
item = new BMenuItem("Remove Button", message);
item->SetTarget(window);
menu->AddItem(item);
// button options
if (button) {
// remove button
message = new BMessage(MSG_CLEAR_SLOT);
message->AddPointer("be:source", (void*)button);
item = new BMenuItem("Clear Button", message);
item->SetTarget(window);
menu->AddItem(item);
// remove button
message = new BMessage(MSG_REMOVE_SLOT);
message->AddPointer("be:source", (void*)button);
item = new BMenuItem("Remove Button", message);
item->SetTarget(window);
menu->AddItem(item);
// TODO: disabled because Haiku does not yet support tool tips
// if (button->Ref()) {
// message = new BMessage(MSG_SET_DESCRIPTION);
// message->AddPointer("be:source", (void*)button);
// item = new BMenuItem("Set Description"B_UTF8_ELLIPSIS, message);
// item->SetTarget(window);
// menu->AddItem(item);
// }
}
menu->AddSeparatorItem();
// window settings
BMenu* settingsM = new BMenu("Settings");
settingsM->SetFont(be_plain_font);
const char* toggleLayoutLabel;
if (fButtonLayout->Orientation() == B_HORIZONTAL)
toggleLayoutLabel = "Vertical Layout";
else
toggleLayoutLabel = "Horizontal Layout";
item = new BMenuItem(toggleLayoutLabel, new BMessage(MSG_TOGGLE_LAYOUT));
item->SetTarget(this);
settingsM->AddItem(item);
uint32 what = window->Look() == B_BORDERED_WINDOW_LOOK ? MSG_SHOW_BORDER : MSG_HIDE_BORDER;
item = new BMenuItem("Show Window Border", new BMessage(what));
item->SetTarget(window);
item->SetMarked(what == MSG_HIDE_BORDER);
settingsM->AddItem(item);
item = new BMenuItem("Auto Raise", new BMessage(MSG_TOGGLE_AUTORAISE));
item->SetTarget(window);
item->SetMarked(window->AutoRaise());
settingsM->AddItem(item);
item = new BMenuItem("Show On All Workspaces", new BMessage(MSG_SHOW_ON_ALL_WORKSPACES));
item->SetTarget(window);
item->SetMarked(window->ShowOnAllWorkspaces());
settingsM->AddItem(item);
menu->AddItem(settingsM);
menu->AddSeparatorItem();
// pad commands
BMenu* padM = new BMenu("Pad");
padM->SetFont(be_plain_font);
// new pad
item = new BMenuItem("New", new BMessage(MSG_ADD_WINDOW));
item->SetTarget(be_app);
padM->AddItem(item);
// new pad
item = new BMenuItem("Clone", new BMessage(MSG_ADD_WINDOW));
item->SetTarget(window);
padM->AddItem(item);
padM->AddSeparatorItem();
// close
item = new BMenuItem("Close", new BMessage(B_QUIT_REQUESTED));
item->SetTarget(window);
padM->AddItem(item);
menu->AddItem(padM);
// app commands
BMenu* appM = new BMenu("LaunchBox");
appM->SetFont(be_plain_font);
// about
item = new BMenuItem("About", new BMessage(B_ABOUT_REQUESTED));
item->SetTarget(be_app);
appM->AddItem(item);
// quit
item = new BMenuItem("Quit", new BMessage(B_QUIT_REQUESTED));
item->SetTarget(be_app);
appM->AddItem(item);
menu->AddItem(appM);
// finish popup
menu->SetAsyncAutoDestruct(true);
menu->SetFont(be_plain_font);
where = ConvertToScreen(where);
BRect mouseRect(where, where);
mouseRect.InsetBy(-4.0, -4.0);
menu->Go(where, true, false, mouseRect, true);
// if (button->Ref()) {
// message = new BMessage(MSG_SET_DESCRIPTION);
// message->AddPointer("be:source", (void*)button);
// item = new BMenuItem("Set Description"B_UTF8_ELLIPSIS, message);
// item->SetTarget(window);
// menu->AddItem(item);
// }
}
menu->AddSeparatorItem();
// window settings
BMenu* settingsM = new BMenu("Settings");
settingsM->SetFont(be_plain_font);
const char* toggleLayoutLabel;
if (fButtonLayout->Orientation() == B_HORIZONTAL)
toggleLayoutLabel = "Vertical Layout";
else
toggleLayoutLabel = "Horizontal Layout";
item = new BMenuItem(toggleLayoutLabel, new BMessage(MSG_TOGGLE_LAYOUT));
item->SetTarget(this);
settingsM->AddItem(item);
uint32 what = window->Look() == B_BORDERED_WINDOW_LOOK ? MSG_SHOW_BORDER : MSG_HIDE_BORDER;
item = new BMenuItem("Show Window Border", new BMessage(what));
item->SetTarget(window);
item->SetMarked(what == MSG_HIDE_BORDER);
settingsM->AddItem(item);
item = new BMenuItem("Auto Raise", new BMessage(MSG_TOGGLE_AUTORAISE));
item->SetTarget(window);
item->SetMarked(window->AutoRaise());
settingsM->AddItem(item);
item = new BMenuItem("Show On All Workspaces", new BMessage(MSG_SHOW_ON_ALL_WORKSPACES));
item->SetTarget(window);
item->SetMarked(window->ShowOnAllWorkspaces());
settingsM->AddItem(item);
menu->AddItem(settingsM);
menu->AddSeparatorItem();
// pad commands
BMenu* padM = new BMenu("Pad");
padM->SetFont(be_plain_font);
// new pad
item = new BMenuItem("New", new BMessage(MSG_ADD_WINDOW));
item->SetTarget(be_app);
padM->AddItem(item);
// new pad
item = new BMenuItem("Clone", new BMessage(MSG_ADD_WINDOW));
item->SetTarget(window);
padM->AddItem(item);
padM->AddSeparatorItem();
// close
item = new BMenuItem("Close", new BMessage(B_QUIT_REQUESTED));
item->SetTarget(window);
padM->AddItem(item);
menu->AddItem(padM);
// app commands
BMenu* appM = new BMenu("LaunchBox");
appM->SetFont(be_plain_font);
// about
item = new BMenuItem("About", new BMessage(B_ABOUT_REQUESTED));
item->SetTarget(be_app);
appM->AddItem(item);
// quit
item = new BMenuItem("Quit", new BMessage(B_QUIT_REQUESTED));
item->SetTarget(be_app);
appM->AddItem(item);
menu->AddItem(appM);
// finish popup
menu->SetAsyncAutoDestruct(true);
menu->SetFont(be_plain_font);
where = ConvertToScreen(where);
BRect mouseRect(where, where);
mouseRect.InsetBy(-4.0, -4.0);
menu->Go(where, true, false, mouseRect, true);
}
// SetOrientation