* Asthetical improvements with the new tab view.
* Actually set the target on the tab view, so that we change urls when switching tabs. * Move all New/Close items to the top-level, since I find it slightly too awkward to reach them otherwise. * Misc coding style fixes. git-svn-id: http://svn.haiku-os.org/webpositive/webkit/trunk@157 94f232f2-1747-11df-bad5-a5bfde151594
This commit is contained in:
@@ -95,9 +95,10 @@ LauncherWindow::LauncherWindow(BRect frame, const BMessenger& downloadListener,
|
|||||||
B_AUTO_UPDATE_SIZE_LIMITS | B_ASYNCHRONOUS_CONTROLS)
|
B_AUTO_UPDATE_SIZE_LIMITS | B_ASYNCHRONOUS_CONTROLS)
|
||||||
{
|
{
|
||||||
m_tabView = new WebTabView("tabview", BMessenger(this));
|
m_tabView = new WebTabView("tabview", BMessenger(this));
|
||||||
WebView *webView = new WebView("web_view");
|
WebView* webView = new WebView("web_view");
|
||||||
m_tabView->AddTab(webView);
|
m_tabView->AddTab(webView);
|
||||||
m_tabView->TabAt(0L)->SetLabel("New Tab");
|
m_tabView->TabAt(0L)->SetLabel("New Tab");
|
||||||
|
m_tabView->setTarget(BMessenger(this));
|
||||||
setCurrentWebView(webView);
|
setCurrentWebView(webView);
|
||||||
|
|
||||||
if (toolbarPolicy == HaveToolbar) {
|
if (toolbarPolicy == HaveToolbar) {
|
||||||
@@ -106,20 +107,17 @@ LauncherWindow::LauncherWindow(BRect frame, const BMessenger& downloadListener,
|
|||||||
BMenu* menu = new BMenu("Window");
|
BMenu* menu = new BMenu("Window");
|
||||||
BMessage* newWindowMessage = new BMessage(NEW_WINDOW);
|
BMessage* newWindowMessage = new BMessage(NEW_WINDOW);
|
||||||
newWindowMessage->AddString("url", "");
|
newWindowMessage->AddString("url", "");
|
||||||
BMenu *newMenu = new BMenu("New");
|
BMenuItem* newItem = new BMenuItem("New window", newWindowMessage, 'N');
|
||||||
BMenuItem* newItem = new BMenuItem("Window", newWindowMessage, 'N');
|
menu->AddItem(newItem);
|
||||||
newMenu->AddItem(newItem);
|
|
||||||
newItem->SetTarget(be_app);
|
newItem->SetTarget(be_app);
|
||||||
newItem = new BMenuItem("Tab", new BMessage(NEW_TAB), 'T');
|
newItem = new BMenuItem("New tab", new BMessage(NEW_TAB), 'T');
|
||||||
newMenu->AddItem(newItem);
|
menu->AddItem(newItem);
|
||||||
newItem->SetTarget(this);
|
newItem->SetTarget(this);
|
||||||
menu->AddItem(newMenu);
|
|
||||||
BMenu *closeMenu = new BMenu("Close");
|
|
||||||
closeMenu->AddItem(new BMenuItem("Window", new BMessage(B_QUIT_REQUESTED), 'W'));
|
|
||||||
closeMenu->AddItem(new BMenuItem("Tab", new BMessage(CLOSE_TAB), 'W', B_SHIFT_KEY));
|
|
||||||
menu->AddItem(closeMenu);
|
|
||||||
menu->AddSeparatorItem();
|
menu->AddSeparatorItem();
|
||||||
menu->AddItem(new BMenuItem("Show Downloads", new BMessage(SHOW_DOWNLOAD_WINDOW), 'D'));
|
menu->AddItem(new BMenuItem("Close window", new BMessage(B_QUIT_REQUESTED), 'W'));
|
||||||
|
menu->AddItem(new BMenuItem("Close tab", new BMessage(CLOSE_TAB), 'W', B_SHIFT_KEY));
|
||||||
|
menu->AddSeparatorItem();
|
||||||
|
menu->AddItem(new BMenuItem("Show downloads", new BMessage(SHOW_DOWNLOAD_WINDOW), 'D'));
|
||||||
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);
|
||||||
@@ -152,7 +150,7 @@ LauncherWindow::LauncherWindow(BRect frame, const BMessenger& downloadListener,
|
|||||||
m_statusText = new BStringView("status", "");
|
m_statusText = new BStringView("status", "");
|
||||||
m_statusText->SetAlignment(B_ALIGN_LEFT);
|
m_statusText->SetAlignment(B_ALIGN_LEFT);
|
||||||
m_statusText->SetExplicitMaxSize(BSize(B_SIZE_UNLIMITED, B_SIZE_UNSET));
|
m_statusText->SetExplicitMaxSize(BSize(B_SIZE_UNLIMITED, B_SIZE_UNSET));
|
||||||
m_statusText->SetExplicitMinSize(BSize(150, 16));
|
m_statusText->SetExplicitMinSize(BSize(150, 15));
|
||||||
// Prevent the window from growing to fit a long status message...
|
// Prevent the window from growing to fit a long status message...
|
||||||
BFont font(be_plain_font);
|
BFont font(be_plain_font);
|
||||||
font.SetSize(ceilf(font.Size() * 0.8));
|
font.SetSize(ceilf(font.Size() * 0.8));
|
||||||
@@ -171,7 +169,7 @@ LauncherWindow::LauncherWindow(BRect frame, const BMessenger& downloadListener,
|
|||||||
new BMessage(TEXT_FIND_NEXT));
|
new BMessage(TEXT_FIND_NEXT));
|
||||||
m_findCaseSensitiveCheckBox = new BCheckBox("Match case");
|
m_findCaseSensitiveCheckBox = new BCheckBox("Match case");
|
||||||
BView* findGroup = BGroupLayoutBuilder(B_VERTICAL)
|
BView* findGroup = BGroupLayoutBuilder(B_VERTICAL)
|
||||||
.Add(new BSeparatorView(B_HORIZONTAL, B_PLAIN_BORDER))
|
// .Add(new BSeparatorView(B_HORIZONTAL, B_PLAIN_BORDER))
|
||||||
.Add(BGroupLayoutBuilder(B_HORIZONTAL, kElementSpacing)
|
.Add(BGroupLayoutBuilder(B_HORIZONTAL, kElementSpacing)
|
||||||
.Add(m_findTextControl)
|
.Add(m_findTextControl)
|
||||||
.Add(new BButton("Previous", new BMessage(TEXT_FIND_PREVIOUS)))
|
.Add(new BButton("Previous", new BMessage(TEXT_FIND_PREVIOUS)))
|
||||||
@@ -193,10 +191,10 @@ LauncherWindow::LauncherWindow(BRect frame, const BMessenger& downloadListener,
|
|||||||
.Add(button, 3, 0)
|
.Add(button, 3, 0)
|
||||||
.SetInsets(kInsetSpacing, kInsetSpacing, kInsetSpacing, kInsetSpacing)
|
.SetInsets(kInsetSpacing, kInsetSpacing, kInsetSpacing, kInsetSpacing)
|
||||||
)
|
)
|
||||||
.Add(new BSeparatorView(B_HORIZONTAL, B_PLAIN_BORDER))
|
// .Add(new BSeparatorView(B_HORIZONTAL, B_PLAIN_BORDER))
|
||||||
.Add(m_tabView)
|
.Add(m_tabView)
|
||||||
.Add(findGroup)
|
.Add(findGroup)
|
||||||
.Add(new BSeparatorView(B_HORIZONTAL, B_PLAIN_BORDER))
|
// .Add(new BSeparatorView(B_HORIZONTAL, B_PLAIN_BORDER))
|
||||||
.Add(BGroupLayoutBuilder(B_HORIZONTAL, kElementSpacing)
|
.Add(BGroupLayoutBuilder(B_HORIZONTAL, kElementSpacing)
|
||||||
.Add(m_statusText)
|
.Add(m_statusText)
|
||||||
.Add(m_loadingProgressBar, 0.2)
|
.Add(m_loadingProgressBar, 0.2)
|
||||||
@@ -328,30 +326,26 @@ void LauncherWindow::MessageReceived(BMessage* message)
|
|||||||
be_app->PostMessage(message);
|
be_app->PostMessage(message);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case NEW_TAB:
|
case NEW_TAB: {
|
||||||
{
|
|
||||||
BMessage reply;
|
BMessage reply;
|
||||||
be_app_messenger.SendMessage(CREATE_WEBVIEW, &reply);
|
be_app_messenger.SendMessage(CREATE_WEBVIEW, &reply);
|
||||||
WebView *view = NULL;
|
WebView *view = NULL;
|
||||||
reply.FindPointer("view", reinterpret_cast<void **>(&view));
|
reply.FindPointer("view", reinterpret_cast<void **>(&view));
|
||||||
m_tabView->AddTab(view);
|
m_tabView->AddTab(view);
|
||||||
m_tabView->TabAt(m_tabView->CountTabs() - 1)->SetLabel("New Tab");
|
m_tabView->TabAt(m_tabView->CountTabs() - 1)->SetLabel("New tab");
|
||||||
m_tabView->Select(m_tabView->CountTabs() - 1);
|
m_tabView->Select(m_tabView->CountTabs() - 1);
|
||||||
navigationCapabilitiesChanged(false, false, false, currentWebView());
|
navigationCapabilitiesChanged(false, false, false, currentWebView());
|
||||||
m_url->MakeFocus(true);
|
m_url->MakeFocus(true);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case CLOSE_TAB:
|
case CLOSE_TAB: {
|
||||||
{
|
if (m_tabView->CountTabs() > 0)
|
||||||
if (m_tabView->CountTabs() > 0) {
|
|
||||||
delete m_tabView->RemoveTab(m_tabView->FocusTab());
|
delete m_tabView->RemoveTab(m_tabView->FocusTab());
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case TAB_CHANGED:
|
case TAB_CHANGED: {
|
||||||
{
|
|
||||||
int32 index = message->FindInt32("index");
|
int32 index = message->FindInt32("index");
|
||||||
setCurrentWebView(dynamic_cast<WebView *>(
|
setCurrentWebView(dynamic_cast<WebView *>(
|
||||||
m_tabView->ViewForTab(index)));
|
m_tabView->ViewForTab(index)));
|
||||||
@@ -377,9 +371,8 @@ bool LauncherWindow::QuitRequested()
|
|||||||
|
|
||||||
// Do this here, so WebKit tear down happens earlier.
|
// Do this here, so WebKit tear down happens earlier.
|
||||||
// TODO: Iterator over all WebViews, if there are more then one...
|
// TODO: Iterator over all WebViews, if there are more then one...
|
||||||
while (m_tabView->CountTabs() > 0) {
|
while (m_tabView->CountTabs() > 0)
|
||||||
delete m_tabView->RemoveTab(0L);
|
delete m_tabView->RemoveTab(0L);
|
||||||
}
|
|
||||||
setCurrentWebView(0);
|
setCurrentWebView(0);
|
||||||
|
|
||||||
BMessage message(WINDOW_CLOSED);
|
BMessage message(WINDOW_CLOSED);
|
||||||
@@ -533,8 +526,7 @@ void LauncherWindow::setResizable(bool flag, WebView* view)
|
|||||||
|
|
||||||
void LauncherWindow::titleChanged(const BString& title, WebView* view)
|
void LauncherWindow::titleChanged(const BString& title, WebView* view)
|
||||||
{
|
{
|
||||||
for (int32 i = 0; i < m_tabView->CountTabs(); i++)
|
for (int32 i = 0; i < m_tabView->CountTabs(); i++) {
|
||||||
{
|
|
||||||
if (m_tabView->ViewForTab(i) == view) {
|
if (m_tabView->ViewForTab(i) == view) {
|
||||||
m_tabView->TabAt(i)->SetLabel(title);
|
m_tabView->TabAt(i)->SetLabel(title);
|
||||||
m_tabView->DrawTabs();
|
m_tabView->DrawTabs();
|
||||||
|
|||||||
@@ -39,8 +39,8 @@ class BLayoutItem;
|
|||||||
class BMenu;
|
class BMenu;
|
||||||
class BStatusBar;
|
class BStatusBar;
|
||||||
class BStringView;
|
class BStringView;
|
||||||
class BTabView;
|
|
||||||
class BTextControl;
|
class BTextControl;
|
||||||
|
class WebTabView;
|
||||||
class WebView;
|
class WebView;
|
||||||
|
|
||||||
enum ToolbarPolicy {
|
enum ToolbarPolicy {
|
||||||
@@ -99,7 +99,7 @@ private:
|
|||||||
BLayoutItem* m_findGroup;
|
BLayoutItem* m_findGroup;
|
||||||
BTextControl* m_findTextControl;
|
BTextControl* m_findTextControl;
|
||||||
BCheckBox* m_findCaseSensitiveCheckBox;
|
BCheckBox* m_findCaseSensitiveCheckBox;
|
||||||
BTabView* m_tabView;
|
WebTabView* m_tabView;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // LauncherWindow_h
|
#endif // LauncherWindow_h
|
||||||
|
|||||||
@@ -27,18 +27,21 @@
|
|||||||
|
|
||||||
#include "WebTabView.h"
|
#include "WebTabView.h"
|
||||||
|
|
||||||
|
#include <GroupLayout.h>
|
||||||
|
|
||||||
WebTabView::WebTabView(const char *name, const BMessenger& target)
|
WebTabView::WebTabView(const char *name, const BMessenger& target)
|
||||||
: BTabView(name)
|
: BTabView(name)
|
||||||
, m_target(target)
|
, m_target(target)
|
||||||
{
|
{
|
||||||
|
if (BGroupLayout* layout = dynamic_cast<BGroupLayout*>(GetLayout()))
|
||||||
|
layout->SetInsets(2, 2 + TabHeight() - 1, 2, 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
WebTabView::~WebTabView(void)
|
WebTabView::~WebTabView(void)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void WebTabView::Select(int32 tab)
|
||||||
WebTabView::Select(int32 tab)
|
|
||||||
{
|
{
|
||||||
BTabView::Select(tab);
|
BTabView::Select(tab);
|
||||||
BMessage message(TAB_CHANGED);
|
BMessage message(TAB_CHANGED);
|
||||||
@@ -46,12 +49,12 @@ WebTabView::Select(int32 tab)
|
|||||||
m_target.SendMessage(&message);
|
m_target.SendMessage(&message);
|
||||||
}
|
}
|
||||||
|
|
||||||
const BMessenger& WebTabView::Target(void) const
|
const BMessenger& WebTabView::target() const
|
||||||
{
|
{
|
||||||
return m_target;
|
return m_target;
|
||||||
}
|
}
|
||||||
|
|
||||||
void WebTabView::SetTarget(const BMessenger& target)
|
void WebTabView::setTarget(const BMessenger& target)
|
||||||
{
|
{
|
||||||
m_target = target;
|
m_target = target;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -41,8 +41,8 @@ public:
|
|||||||
virtual ~WebTabView(void);
|
virtual ~WebTabView(void);
|
||||||
virtual void Select(int32 tab);
|
virtual void Select(int32 tab);
|
||||||
|
|
||||||
const BMessenger& Target(void) const;
|
const BMessenger& target() const;
|
||||||
void SetTarget(const BMessenger& target);
|
void setTarget(const BMessenger& target);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
BMessenger m_target;
|
BMessenger m_target;
|
||||||
|
|||||||
Reference in New Issue
Block a user