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