1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef UI_VIEWS_WINDOW_CLIENT_VIEW_H_ 6 #define UI_VIEWS_WINDOW_CLIENT_VIEW_H_ 7 8 #include "ui/views/view.h" 9 10 namespace views { 11 12 class DialogClientView; 13 class Widget; 14 15 /////////////////////////////////////////////////////////////////////////////// 16 // ClientView 17 // 18 // A ClientView is a View subclass that is used to occupy the "client area" 19 // of a widget. It provides basic information to the widget that contains it 20 // such as non-client hit testing information, sizing etc. Sub-classes of 21 // ClientView are used to create more elaborate contents, e.g. 22 // "DialogClientView". 23 class VIEWS_EXPORT ClientView : public View { 24 public: 25 // Internal class name 26 static const char kViewClassName[]; 27 28 // Constructs a ClientView object for the specified widget with the specified 29 // contents. Since this object is created during the process of creating 30 // |widget|, |contents_view| must be valid if you want the initial size of 31 // the widget to be based on |contents_view|'s preferred size. 32 ClientView(Widget* widget, View* contents_view); ~ClientView()33 virtual ~ClientView() {} 34 35 // Manual RTTI ftw. 36 virtual DialogClientView* AsDialogClientView(); 37 virtual const DialogClientView* AsDialogClientView() const; 38 39 // Returns true to signal that the Widget can be closed. Specialized 40 // ClientView subclasses can override this default behavior to allow the 41 // close to be blocked until the user corrects mistakes, accepts a warning 42 // dialog, etc. 43 virtual bool CanClose(); 44 45 // Notification that the widget is closing. 46 virtual void WidgetClosing(); 47 48 // Tests to see if the specified point (in view coordinates) is within the 49 // bounds of this view. If so, it returns HTCLIENT in this default 50 // implementation. If it is outside the bounds of this view, this must return 51 // HTNOWHERE to tell the caller to do further processing to determine where 52 // in the non-client area it is (if it is). 53 // Subclasses of ClientView can extend this logic by overriding this method 54 // to detect if regions within the client area count as parts of the "non- 55 // client" area. A good example of this is the size box at the bottom right 56 // corner of resizable dialog boxes. 57 virtual int NonClientHitTest(const gfx::Point& point); 58 59 // Overridden from View: 60 virtual gfx::Size GetPreferredSize() const OVERRIDE; 61 virtual gfx::Size GetMinimumSize() const OVERRIDE; 62 virtual gfx::Size GetMaximumSize() const OVERRIDE; 63 virtual void Layout() OVERRIDE; 64 virtual const char* GetClassName() const OVERRIDE; 65 66 protected: 67 // Overridden from View: 68 virtual void GetAccessibleState(ui::AXViewState* state) OVERRIDE; 69 virtual void OnBoundsChanged(const gfx::Rect& previous_bounds) OVERRIDE; 70 virtual void ViewHierarchyChanged( 71 const ViewHierarchyChangedDetails& details) OVERRIDE; 72 73 // Accessors for private data members. contents_view()74 View* contents_view() const { return contents_view_; } set_contents_view(View * contents_view)75 void set_contents_view(View* contents_view) { 76 contents_view_ = contents_view; 77 } 78 79 private: 80 // The View that this ClientView contains. 81 View* contents_view_; 82 }; 83 84 } // namespace views 85 86 #endif // UI_VIEWS_WINDOW_CLIENT_VIEW_H_ 87