15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/window/client_view.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/logging.h" 8a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ui/accessibility/ax_view_state.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/hit_test.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/widget/widget.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/widget/widget_delegate.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace views { 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char ClientView::kViewClassName[] = 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "ui/views/window/ClientView"; 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/////////////////////////////////////////////////////////////////////////////// 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// ClientView, public: 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ClientView::ClientView(Widget* widget, View* contents_view) 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : contents_view_(contents_view) { 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int ClientView::NonClientHitTest(const gfx::Point& point) { 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return bounds().Contains(point) ? HTCLIENT : HTNOWHERE; 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DialogClientView* ClientView::AsDialogClientView() { 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const DialogClientView* ClientView::AsDialogClientView() const { 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ClientView::CanClose() { 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ClientView::WidgetClosing() { 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/////////////////////////////////////////////////////////////////////////////// 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// ClientView, View overrides: 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 48cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)gfx::Size ClientView::GetPreferredSize() const { 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |contents_view_| is allowed to be NULL up until the point where this view 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // is attached to a Container. 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return contents_view_ ? contents_view_->GetPreferredSize() : gfx::Size(); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 54cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)gfx::Size ClientView::GetMaximumSize() const { 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |contents_view_| is allowed to be NULL up until the point where this view 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // is attached to a Container. 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return contents_view_ ? contents_view_->GetMaximumSize() : gfx::Size(); 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 60cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)gfx::Size ClientView::GetMinimumSize() const { 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |contents_view_| is allowed to be NULL up until the point where this view 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // is attached to a Container. 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return contents_view_ ? contents_view_->GetMinimumSize() : gfx::Size(); 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ClientView::Layout() { 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |contents_view_| is allowed to be NULL up until the point where this view 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // is attached to a Container. 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (contents_view_) 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) contents_view_->SetBounds(0, 0, width(), height()); 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 73b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)const char* ClientView::GetClassName() const { 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return kViewClassName; 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 77a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void ClientView::GetAccessibleState(ui::AXViewState* state) { 78a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) state->role = ui::AX_ROLE_CLIENT; 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ClientView::OnBoundsChanged(const gfx::Rect& previous_bounds) { 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Overridden to do nothing. The NonClientView manually calls Layout on the 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ClientView when it is itself laid out, see comment in 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // NonClientView::Layout. 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 87a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)void ClientView::ViewHierarchyChanged( 88a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) const ViewHierarchyChangedDetails& details) { 89a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) if (details.is_add && details.child == this) { 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(GetWidget()); 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(contents_view_); // |contents_view_| must be valid now! 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Insert |contents_view_| at index 0 so it is first in the focus chain. 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // (the OK/Cancel buttons are inserted before contents_view_) 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddChildViewAt(contents_view_, 0); 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace views 99