blob: 87412d50db66183a9257ea7333eabfb4c5672be4 [file] [log] [blame]
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "examples/window_manager/debug_panel.h"
#include "base/strings/stringprintf.h"
#include "base/strings/utf_string_conversions.h"
#include "mojo/services/view_manager/public/cpp/view.h"
#include "mojo/views/native_widget_view_manager.h"
#include "ui/gfx/text_constants.h"
#include "ui/views/background.h"
#include "ui/views/controls/button/blue_button.h"
#include "ui/views/controls/button/radio_button.h"
#include "ui/views/widget/widget.h"
namespace mojo {
namespace examples {
namespace {
const int kControlBorderInset = 5;
const int kNavigationTargetGroupId = 1;
} // namespace
DebugPanel::DebugPanel(Delegate* delegate, Shell* shell, View* view)
: delegate_(delegate),
view_(view),
navigation_target_label_(
new views::Label(base::ASCIIToUTF16("Navigation target:"))),
navigation_target_new_(
new views::RadioButton(base::ASCIIToUTF16("New window"),
kNavigationTargetGroupId)),
navigation_target_source_(
new views::RadioButton(base::ASCIIToUTF16("Source window"),
kNavigationTargetGroupId)),
navigation_target_default_(
new views::RadioButton(base::ASCIIToUTF16("Default"),
kNavigationTargetGroupId)),
colored_square_(
new views::BlueButton(this, base::ASCIIToUTF16("Local nav test"))),
close_last_(
new views::BlueButton(this, base::ASCIIToUTF16("Close last window"))),
cross_app_(
new views::BlueButton(this,
base::ASCIIToUTF16("Cross-app nav test"))) {
navigation_target_label_->SetHorizontalAlignment(gfx::ALIGN_LEFT);
navigation_target_default_->SetChecked(true);
views::WidgetDelegateView* widget_delegate = new views::WidgetDelegateView();
widget_delegate->GetContentsView()->set_background(
views::Background::CreateSolidBackground(0xFFDDDDDD));
widget_delegate->GetContentsView()->AddChildView(navigation_target_label_);
widget_delegate->GetContentsView()->AddChildView(navigation_target_default_);
widget_delegate->GetContentsView()->AddChildView(navigation_target_new_);
widget_delegate->GetContentsView()->AddChildView(navigation_target_source_);
widget_delegate->GetContentsView()->AddChildView(colored_square_);
widget_delegate->GetContentsView()->AddChildView(close_last_);
widget_delegate->GetContentsView()->AddChildView(cross_app_);
widget_delegate->GetContentsView()->SetLayoutManager(this);
views::Widget* widget = new views::Widget();
views::Widget::InitParams params(
views::Widget::InitParams::TYPE_WINDOW_FRAMELESS);
params.native_widget = new NativeWidgetViewManager(widget, shell, view);
params.delegate = widget_delegate;
params.bounds = gfx::Rect(0, 0, view->bounds().width, view->bounds().height);
widget->Init(params);
widget->Show();
}
DebugPanel::~DebugPanel() {
}
gfx::Size DebugPanel::GetPreferredSize(const views::View* view) const {
return gfx::Size();
}
Target DebugPanel::navigation_target() const {
if (navigation_target_new_->checked())
return TARGET_NEW_NODE;
if (navigation_target_source_->checked())
return TARGET_SOURCE_NODE;
return TARGET_DEFAULT;
}
void DebugPanel::Layout(views::View* view) {
int y = kControlBorderInset;
int w = view->width() - kControlBorderInset * 2;
navigation_target_label_->SetBounds(
kControlBorderInset, y, w,
navigation_target_label_->GetPreferredSize().height());
y += navigation_target_label_->height();
views::RadioButton* radios[] = {
navigation_target_default_,
navigation_target_new_,
navigation_target_source_,
};
for (size_t i = 0; i < arraysize(radios); ++i) {
radios[i]->SetBounds(kControlBorderInset, y, w,
radios[i]->GetPreferredSize().height());
y += radios[i]->height();
}
y += kControlBorderInset;
views::Button* buttons[] = {
colored_square_,
close_last_,
cross_app_,
};
for (size_t i = 0; i < arraysize(buttons); ++i) {
buttons[i]->SetBounds(kControlBorderInset, y, w,
buttons[i]->GetPreferredSize().height());
y += buttons[i]->height();
}
}
void DebugPanel::ButtonPressed(views::Button* sender, const ui::Event& event) {
if (sender == colored_square_) {
Navigate("mojo:embedded_app");
} else if (sender == close_last_) {
delegate_->CloseTopWindow();
} else if (sender == cross_app_) {
Navigate("http://www.aaronboodman.com/z_dropbox/test.html");
}
}
void DebugPanel::Navigate(const std::string& url) {
URLRequestPtr request(URLRequest::New());
request->url = url;
delegate_->RequestNavigate(view_->id(), TARGET_NEW_NODE, request.Pass());
}
} // namespace examples
} // namespace mojo