* Added small symbol buttons to tab container view. Currently only "New tab" is
added and works. * Added "Open location" shortcut Cmd-L as in Firefox. * Moved "Show downloads" shortcut to Cmd-J, again as in Firefox. It uses Cmd-D for "Bookmark this page". Though I have no idea why we simply shouldn't use Cmd-D for Downloads and Cmd-B for Bookmark this page. git-svn-id: http://svn.haiku-os.org/webpositive/webkit/trunk@229 94f232f2-1747-11df-bad5-a5bfde151594
This commit is contained in:
@@ -62,6 +62,7 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
|
OPEN_LOCATION = 'open',
|
||||||
GO_BACK = 'goba',
|
GO_BACK = 'goba',
|
||||||
GO_FORWARD = 'gofo',
|
GO_FORWARD = 'gofo',
|
||||||
STOP = 'stop',
|
STOP = 'stop',
|
||||||
@@ -95,7 +96,11 @@ LauncherWindow::LauncherWindow(BRect frame, const BMessenger& downloadListener,
|
|||||||
B_AUTO_UPDATE_SIZE_LIMITS | B_ASYNCHRONOUS_CONTROLS)
|
B_AUTO_UPDATE_SIZE_LIMITS | B_ASYNCHRONOUS_CONTROLS)
|
||||||
, m_downloadListener(downloadListener)
|
, m_downloadListener(downloadListener)
|
||||||
{
|
{
|
||||||
m_tabManager = new TabManager(BMessenger(this));
|
BMessage* newTabMessage = new BMessage(NEW_TAB);
|
||||||
|
newTabMessage->AddString("url", "");
|
||||||
|
newTabMessage->AddPointer("window", this);
|
||||||
|
newTabMessage->AddBool("select", true);
|
||||||
|
m_tabManager = new TabManager(BMessenger(this), newTabMessage);
|
||||||
|
|
||||||
if (toolbarPolicy == HaveToolbar) {
|
if (toolbarPolicy == HaveToolbar) {
|
||||||
// Menu
|
// Menu
|
||||||
@@ -106,18 +111,15 @@ LauncherWindow::LauncherWindow(BRect frame, const BMessenger& downloadListener,
|
|||||||
BMenuItem* newItem = new BMenuItem("New window", newWindowMessage, 'N');
|
BMenuItem* newItem = new BMenuItem("New window", newWindowMessage, 'N');
|
||||||
menu->AddItem(newItem);
|
menu->AddItem(newItem);
|
||||||
newItem->SetTarget(be_app);
|
newItem->SetTarget(be_app);
|
||||||
BMessage* newTabMessage = new BMessage(NEW_TAB);
|
newItem = new BMenuItem("New tab", new BMessage(*newTabMessage), 'T');
|
||||||
newTabMessage->AddString("url", "");
|
|
||||||
newTabMessage->AddPointer("window", this);
|
|
||||||
newTabMessage->AddBool("select", true);
|
|
||||||
newItem = new BMenuItem("New tab", newTabMessage, 'T');
|
|
||||||
menu->AddItem(newItem);
|
menu->AddItem(newItem);
|
||||||
newItem->SetTarget(be_app);
|
newItem->SetTarget(be_app);
|
||||||
|
menu->AddItem(new BMenuItem("Open location", new BMessage(OPEN_LOCATION), 'L'));
|
||||||
menu->AddSeparatorItem();
|
menu->AddSeparatorItem();
|
||||||
menu->AddItem(new BMenuItem("Close window", new BMessage(B_QUIT_REQUESTED), 'W', B_SHIFT_KEY));
|
menu->AddItem(new BMenuItem("Close window", new BMessage(B_QUIT_REQUESTED), 'W', B_SHIFT_KEY));
|
||||||
menu->AddItem(new BMenuItem("Close tab", new BMessage(CLOSE_TAB), 'W'));
|
menu->AddItem(new BMenuItem("Close tab", new BMessage(CLOSE_TAB), 'W'));
|
||||||
menu->AddSeparatorItem();
|
menu->AddSeparatorItem();
|
||||||
menu->AddItem(new BMenuItem("Show downloads", new BMessage(SHOW_DOWNLOAD_WINDOW), 'D'));
|
menu->AddItem(new BMenuItem("Show downloads", new BMessage(SHOW_DOWNLOAD_WINDOW), 'J'));
|
||||||
menu->AddSeparatorItem();
|
menu->AddSeparatorItem();
|
||||||
BMenuItem* quitItem = new BMenuItem("Quit", new BMessage(B_QUIT_REQUESTED), 'Q');
|
BMenuItem* quitItem = new BMenuItem("Quit", new BMessage(B_QUIT_REQUESTED), 'Q');
|
||||||
menu->AddItem(quitItem);
|
menu->AddItem(quitItem);
|
||||||
@@ -253,6 +255,14 @@ LauncherWindow::~LauncherWindow()
|
|||||||
void LauncherWindow::MessageReceived(BMessage* message)
|
void LauncherWindow::MessageReceived(BMessage* message)
|
||||||
{
|
{
|
||||||
switch (message->what) {
|
switch (message->what) {
|
||||||
|
case OPEN_LOCATION:
|
||||||
|
if (m_url) {
|
||||||
|
if (m_url->TextView()->IsFocus())
|
||||||
|
m_url->TextView()->SelectAll();
|
||||||
|
else
|
||||||
|
m_url->MakeFocus(true);
|
||||||
|
}
|
||||||
|
break;
|
||||||
case RELOAD:
|
case RELOAD:
|
||||||
CurrentWebView()->LoadURL(m_url->Text());
|
CurrentWebView()->LoadURL(m_url->Text());
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -29,7 +29,9 @@
|
|||||||
#include "WebTabView.h"
|
#include "WebTabView.h"
|
||||||
|
|
||||||
#include "WebView.h"
|
#include "WebView.h"
|
||||||
|
#include <Application.h>
|
||||||
#include <AbstractLayoutItem.h>
|
#include <AbstractLayoutItem.h>
|
||||||
|
#include <Button.h>
|
||||||
#include <CardLayout.h>
|
#include <CardLayout.h>
|
||||||
#include <ControlLook.h>
|
#include <ControlLook.h>
|
||||||
#include <GroupView.h>
|
#include <GroupView.h>
|
||||||
@@ -884,11 +886,149 @@ TabManagerController::CloseTab(int32 index)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// #pragma mark - TabButton
|
||||||
|
|
||||||
|
|
||||||
|
class TabButton : public BButton {
|
||||||
|
public:
|
||||||
|
TabButton(BMessage* message)
|
||||||
|
: BButton("", message)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual BSize MinSize()
|
||||||
|
{
|
||||||
|
return BSize(12, 12);
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual BSize MaxSize()
|
||||||
|
{
|
||||||
|
return BSize(B_SIZE_UNLIMITED, B_SIZE_UNLIMITED);
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual BSize PreferredSize()
|
||||||
|
{
|
||||||
|
return MinSize();
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual void Draw(BRect updateRect)
|
||||||
|
{
|
||||||
|
BRect bounds(Bounds());
|
||||||
|
rgb_color base = ui_color(B_PANEL_BACKGROUND_COLOR);
|
||||||
|
SetHighColor(tint_color(base, B_DARKEN_2_TINT));
|
||||||
|
StrokeLine(bounds.LeftBottom(), bounds.RightBottom());
|
||||||
|
bounds.bottom--;
|
||||||
|
uint32 flags = be_control_look->Flags(this);
|
||||||
|
uint32 borders = BControlLook::B_TOP_BORDER
|
||||||
|
| BControlLook::B_BOTTOM_BORDER;
|
||||||
|
be_control_look->DrawInactiveTab(this, bounds, updateRect, base,
|
||||||
|
flags, borders);
|
||||||
|
if (IsEnabled()) {
|
||||||
|
rgb_color button = tint_color(base, 1.07);
|
||||||
|
be_control_look->DrawButtonBackground(this, bounds, updateRect,
|
||||||
|
button, flags, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
bounds.left = (bounds.left + bounds.right) / 2 - 6;
|
||||||
|
bounds.top = (bounds.top + bounds.bottom) / 2 - 6;
|
||||||
|
bounds.right = bounds.left + 12;
|
||||||
|
bounds.bottom = bounds.top + 12;
|
||||||
|
DrawSymbol(bounds, updateRect, base);
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual void DrawSymbol(BRect frame, const BRect& updateRect,
|
||||||
|
const rgb_color& base)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class ScrollLeftTabButton : public TabButton {
|
||||||
|
public:
|
||||||
|
ScrollLeftTabButton(BMessage* message)
|
||||||
|
: TabButton(message)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual void DrawSymbol(BRect frame, const BRect& updateRect,
|
||||||
|
const rgb_color& base)
|
||||||
|
{
|
||||||
|
be_control_look->DrawArrowShape(this, frame, updateRect,
|
||||||
|
base, BControlLook::B_LEFT_ARROW, 0, B_DARKEN_4_TINT);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class ScrollRightTabButton : public TabButton {
|
||||||
|
public:
|
||||||
|
ScrollRightTabButton(BMessage* message)
|
||||||
|
: TabButton(message)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual void DrawSymbol(BRect frame, const BRect& updateRect,
|
||||||
|
const rgb_color& base)
|
||||||
|
{
|
||||||
|
be_control_look->DrawArrowShape(this, frame, updateRect,
|
||||||
|
base, BControlLook::B_RIGHT_ARROW, 0, B_DARKEN_4_TINT);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class NewTabButton : public TabButton {
|
||||||
|
public:
|
||||||
|
NewTabButton(BMessage* message)
|
||||||
|
: TabButton(message)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual BSize MinSize()
|
||||||
|
{
|
||||||
|
return BSize(18, 12);
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual void DrawSymbol(BRect frame, const BRect& updateRect,
|
||||||
|
const rgb_color& base)
|
||||||
|
{
|
||||||
|
SetHighColor(tint_color(base, B_DARKEN_4_TINT));
|
||||||
|
float inset = 3;
|
||||||
|
frame.InsetBy(2, 2);
|
||||||
|
frame.top++;
|
||||||
|
frame.left++;
|
||||||
|
FillRoundRect(BRect(frame.left, frame.top + inset,
|
||||||
|
frame.right, frame.bottom - inset), 1, 1);
|
||||||
|
FillRoundRect(BRect(frame.left + inset, frame.top,
|
||||||
|
frame.right - inset, frame.bottom), 1, 1);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class TabMenuTabButton : public TabButton {
|
||||||
|
public:
|
||||||
|
TabMenuTabButton(BMessage* message)
|
||||||
|
: TabButton(message)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual BSize MinSize()
|
||||||
|
{
|
||||||
|
return BSize(18, 12);
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual void DrawSymbol(BRect frame, const BRect& updateRect,
|
||||||
|
const rgb_color& base)
|
||||||
|
{
|
||||||
|
be_control_look->DrawArrowShape(this, frame, updateRect,
|
||||||
|
base, BControlLook::B_DOWN_ARROW, 0, B_DARKEN_4_TINT);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
// #pragma mark - TabManager
|
// #pragma mark - TabManager
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
TabManager::TabManager(const BMessenger& target)
|
TabManager::TabManager(const BMessenger& target, BMessage* newTabMessage)
|
||||||
:
|
:
|
||||||
fTarget(target)
|
fTarget(target)
|
||||||
{
|
{
|
||||||
@@ -900,6 +1040,12 @@ TabManager::TabManager(const BMessenger& target)
|
|||||||
fTabContainerGroup = new BGroupView(B_HORIZONTAL);
|
fTabContainerGroup = new BGroupView(B_HORIZONTAL);
|
||||||
fTabContainerGroup->GroupLayout()->SetInsets(0, 5, 0, 0);
|
fTabContainerGroup->GroupLayout()->SetInsets(0, 5, 0, 0);
|
||||||
fTabContainerGroup->GroupLayout()->AddView(fTabContainerView);
|
fTabContainerGroup->GroupLayout()->AddView(fTabContainerView);
|
||||||
|
// fTabContainerGroup->GroupLayout()->AddView(new ScrollLeftTabButton(NULL), 0.0f);
|
||||||
|
// fTabContainerGroup->GroupLayout()->AddView(new ScrollRightTabButton(NULL), 0.0f);
|
||||||
|
NewTabButton* newTabButton = new NewTabButton(newTabMessage);
|
||||||
|
newTabButton->SetTarget(be_app);
|
||||||
|
fTabContainerGroup->GroupLayout()->AddView(newTabButton, 0.0f);
|
||||||
|
// fTabContainerGroup->GroupLayout()->AddView(new TabMenuTabButton(NULL), 0.0f);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -42,7 +42,8 @@ class TabContainerView;
|
|||||||
|
|
||||||
class TabManager {
|
class TabManager {
|
||||||
public:
|
public:
|
||||||
TabManager(const BMessenger& target);
|
TabManager(const BMessenger& target,
|
||||||
|
BMessage* newTabMessage);
|
||||||
virtual ~TabManager();
|
virtual ~TabManager();
|
||||||
|
|
||||||
void SetTarget(const BMessenger& target);
|
void SetTarget(const BMessenger& target);
|
||||||
|
|||||||
Reference in New Issue
Block a user