1116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Copyright 2014 The Chromium Authors. All rights reserved.
2116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Use of this source code is governed by a BSD-style license that can be
3116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// found in the LICENSE file.
4116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
5116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "mojo/examples/window_manager/debug_panel.h"
6116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
7116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/strings/stringprintf.h"
8116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/strings/utf_string_conversions.h"
96e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "mojo/services/public/cpp/view_manager/view.h"
10116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "mojo/views/native_widget_view_manager.h"
11116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "ui/gfx/text_constants.h"
12116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "ui/views/background.h"
13116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "ui/views/controls/button/blue_button.h"
14116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "ui/views/controls/button/radio_button.h"
15116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "ui/views/widget/widget.h"
16116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
17116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace mojo {
18116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace examples {
19116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
20116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace {
21116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
22116680a4aac90f2aa7413d9095a592090648e557Ben Murdochconst int kControlBorderInset = 5;
23116680a4aac90f2aa7413d9095a592090648e557Ben Murdochconst int kNavigationTargetGroupId = 1;
24116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
25116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}  // namespace
26116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
276e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)DebugPanel::DebugPanel(Delegate* delegate, View* view)
28116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    : delegate_(delegate),
296e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      view_(view),
30116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      navigation_target_label_(new views::Label(
31116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch          base::ASCIIToUTF16("Navigation target:"))),
32116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      navigation_target_new_(new views::RadioButton(
33116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch          base::ASCIIToUTF16("New window"), kNavigationTargetGroupId)),
34116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      navigation_target_source_(new views::RadioButton(
35116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch          base::ASCIIToUTF16("Source window"), kNavigationTargetGroupId)),
36116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      navigation_target_default_(new views::RadioButton(
37116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch          base::ASCIIToUTF16("Default"), kNavigationTargetGroupId)),
38116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      colored_square_(new views::BlueButton(
39116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch          this, base::ASCIIToUTF16("Local nav test"))),
40116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      close_last_(new views::BlueButton(
41116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch          this, base::ASCIIToUTF16("Close last window"))),
42116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      cross_app_(new views::BlueButton(
43116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch          this, base::ASCIIToUTF16("Cross-app nav test"))) {
44116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  navigation_target_label_->SetHorizontalAlignment(gfx::ALIGN_LEFT);
45116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  navigation_target_default_->SetChecked(true);
46116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
47116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  views::WidgetDelegateView* widget_delegate = new views::WidgetDelegateView();
48116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  widget_delegate->GetContentsView()->set_background(
49116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      views::Background::CreateSolidBackground(0xFFDDDDDD));
50116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  widget_delegate->GetContentsView()->AddChildView(navigation_target_label_);
51116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  widget_delegate->GetContentsView()->AddChildView(navigation_target_default_);
52116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  widget_delegate->GetContentsView()->AddChildView(navigation_target_new_);
53116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  widget_delegate->GetContentsView()->AddChildView(navigation_target_source_);
54116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  widget_delegate->GetContentsView()->AddChildView(colored_square_);
55116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  widget_delegate->GetContentsView()->AddChildView(close_last_);
56116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  widget_delegate->GetContentsView()->AddChildView(cross_app_);
57116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  widget_delegate->GetContentsView()->SetLayoutManager(this);
58116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
59116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  views::Widget* widget = new views::Widget();
60116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  views::Widget::InitParams params(
61116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      views::Widget::InitParams::TYPE_WINDOW_FRAMELESS);
626e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  params.native_widget = new NativeWidgetViewManager(widget, view);
63116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  params.delegate = widget_delegate;
646e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  params.bounds = gfx::Rect(view->bounds().size());
65116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  widget->Init(params);
66116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  widget->Show();
67116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
68116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
69116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDebugPanel::~DebugPanel() {
70116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
71116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
72116680a4aac90f2aa7413d9095a592090648e557Ben Murdochgfx::Size DebugPanel::GetPreferredSize(const views::View* view) const {
73116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  return gfx::Size();
74116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
75116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)Target DebugPanel::navigation_target() const {
77116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  if (navigation_target_new_->checked())
785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return TARGET_NEW_NODE;
79116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  if (navigation_target_source_->checked())
805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return TARGET_SOURCE_NODE;
815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  return TARGET_DEFAULT;
82116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
83116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
84116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid DebugPanel::Layout(views::View* view) {
85116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  int y = kControlBorderInset;
86116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  int w = view->width() - kControlBorderInset * 2;
87116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
88116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  navigation_target_label_->SetBounds(
89116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      kControlBorderInset, y, w,
90116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      navigation_target_label_->GetPreferredSize().height());
91116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  y += navigation_target_label_->height();
92116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
93116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  views::RadioButton* radios[] = {
94116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    navigation_target_default_,
95116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    navigation_target_new_,
96116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    navigation_target_source_,
97116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  };
98116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  for (size_t i = 0; i < ARRAYSIZE_UNSAFE(radios); ++i) {
99116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    radios[i]->SetBounds(kControlBorderInset, y, w,
100116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                         radios[i]->GetPreferredSize().height());
101116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    y += radios[i]->height();
102116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  }
103116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
104116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  y += kControlBorderInset;
105116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  views::Button* buttons[] = {
106116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    colored_square_,
107116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    close_last_,
108116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    cross_app_,
109116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  };
110116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  for (size_t i = 0; i < ARRAYSIZE_UNSAFE(buttons); ++i) {
111116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    buttons[i]->SetBounds(kControlBorderInset, y, w,
112116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                          buttons[i]->GetPreferredSize().height());
113116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    y += buttons[i]->height();
114116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  }
115116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
116116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
117116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid DebugPanel::ButtonPressed(views::Button* sender, const ui::Event& event) {
118116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  if (sender == colored_square_) {
1191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    Navigate("mojo://mojo_embedded_app/");
120116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  } else if (sender == close_last_) {
121116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    delegate_->CloseTopWindow();
122116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  } else if (sender == cross_app_) {
123116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    Navigate("http://www.aaronboodman.com/z_dropbox/test.html");
124116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  }
125116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
126116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
127116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid DebugPanel::Navigate(const std::string& url) {
1281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  URLRequestPtr request(URLRequest::New());
1291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  request->url = url;
1301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  delegate_->RequestNavigate(view_->id(), TARGET_NEW_NODE, request.Pass());
131116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
132116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
133116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}  // namespace examples
134116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}  // namespace mojo
135