| Index: ui/views/view.h
|
| ===================================================================
|
| --- ui/views/view.h (revision 0)
|
| +++ ui/views/view.h (revision 0)
|
| @@ -0,0 +1,393 @@
|
| +// Copyright (c) 2011 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.
|
| +
|
| +#ifndef UI_VIEWS_VIEW_H_
|
| +#define UI_VIEWS_VIEW_H_
|
| +
|
| +#include <vector>
|
| +
|
| +#include "base/logging.h"
|
| +#include "base/scoped_ptr.h"
|
| +#include "gfx/rect.h"
|
| +#include "ui/views/events/event.h"
|
| +
|
| +namespace gfx {
|
| +class Canvas;
|
| +class Point;
|
| +class Rect;
|
| +class Size;
|
| +}
|
| +
|
| +namespace ui {
|
| +namespace internal {
|
| +class RootView;
|
| +}
|
| +class Accelerator;
|
| +class Border;
|
| +class ContextMenuController;
|
| +class DragController;
|
| +class FocusManager;
|
| +class FocusTraversable;
|
| +class LayoutManager;
|
| +class ThemeProvider;
|
| +class Widget;
|
| +
|
| +////////////////////////////////////////////////////////////////////////////////
|
| +// View class
|
| +//
|
| +// View encapsulates rendering, layout and event handling for rectangles within
|
| +// a view hierarchy.
|
| +//
|
| +// Client code typically subclasses View and overrides virtual methods to
|
| +// handle painting, child view positioning and handle certain types of events.
|
| +//
|
| +// Views are owned by their parent View unless specified otherwise. This means
|
| +// that in most cases Views are automatically destroyed when the window that
|
| +// contains them is destroyed.
|
| +//
|
| +// TODO(beng): consider the visibility of many of these methods.
|
| +// consider making RootView a friend and making many private or
|
| +// protected.
|
| +class View {
|
| + public:
|
| + typedef std::vector<View*> ViewVector;
|
| +
|
| + // Creation and lifetime -----------------------------------------------------
|
| + View();
|
| + virtual ~View();
|
| +
|
| + // By default a View is owned by its parent unless specified otherwise here.
|
| + bool parent_owned() const { return parent_owned_; }
|
| + void set_parent_owned(bool parent_owned) { parent_owned_ = parent_owned; }
|
| +
|
| + void set_drag_controller(DragController* drag_controller) {
|
| + drag_controller_ = drag_controller;
|
| + }
|
| +
|
| + // Size and disposition ------------------------------------------------------
|
| +
|
| + void SetBounds(int x, int y, int width, int height);
|
| + void SetBoundsRect(const gfx::Rect& bounds);
|
| + void SetSize(const gfx::Size& size);
|
| + void SetPosition(const gfx::Point& position);
|
| + gfx::Rect bounds() const { return bounds_; }
|
| + gfx::Rect GetVisibleBounds() const;
|
| + int x() const { return bounds_.x(); }
|
| + int y() const { return bounds_.y(); }
|
| + int width() const { return bounds_.width(); }
|
| + int height() const { return bounds_.height(); }
|
| +
|
| + // Owned by the view.
|
| + void SetBorder(Border* border);
|
| + Border* border() { return border_.get(); }
|
| +
|
| + // Returns the bounds of the content area of the view, i.e. the rectangle
|
| + // enclosed by the view's border.
|
| + gfx::Rect GetContentsBounds() const;
|
| +
|
| + // Override to be notified when the bounds of a view have changed.
|
| + virtual void OnBoundsChanged();
|
| +
|
| + virtual gfx::Size GetPreferredSize() const;
|
| + virtual gfx::Size GetMinimumSize() const;
|
| +
|
| + void SetLayoutManager(LayoutManager* layout_manager);
|
| + virtual void Layout();
|
| +
|
| + // If a View is not visible, it will not be rendered, focused, etc.
|
| + bool visible() const { return visible_; }
|
| + void SetVisible(bool visible);
|
| +
|
| + // Disabled Views will not receive mouse press/release events, nor can they be
|
| + // focused.
|
| + bool enabled() const { return enabled_; }
|
| + void SetEnabled(bool enabled);
|
| +
|
| + // Coordinate conversion -----------------------------------------------------
|
| +
|
| + // Converts a point from the coordinate system of |source| to |target|.
|
| + static void ConvertPointToView(View* source, View* target, gfx::Point* point);
|
| +
|
| + // Converts a point from the coordinate system of |source| to the screen.
|
| + // If |source| is not attached to a Widget that is in screen space, |point| is
|
| + // not modified.
|
| + static void ConvertPointToScreen(View* source, gfx::Point* point);
|
| +
|
| + // Converts a point from the coordinate system of |source| to the Widget that
|
| + // most closely contains it.
|
| + static void ConvertPointToWidget(View* source, gfx::Point* point);
|
| +
|
| + // Tree operations -----------------------------------------------------------
|
| +
|
| + // Returns the Widget that contains this View, or NULL if it is not contained
|
| + // within a Widget.
|
| + virtual Widget* GetWidget() const;
|
| +
|
| + // Adds a View as a child of this one, optionally at |index|.
|
| + void AddChildView(View* view);
|
| + void AddChildViewAt(View* view, size_t index);
|
| +
|
| + // Removes a View as a child of this View. Does not delete the child.
|
| + View* RemoveChildView(View* view);
|
| +
|
| + // Removes all View children of this View. Deletes the children if
|
| + // |delete_children| is true.
|
| + void RemoveAllChildViews(bool delete_children);
|
| +
|
| + // Returns the View at the specified |index|.
|
| + View* GetChildViewAt(size_t index);
|
| +
|
| + // Returns the number of child views.
|
| + size_t child_count() const { return children_.size(); }
|
| +
|
| + // Returns the parent View, or NULL if this View has no parent.
|
| + View* parent() const { return parent_; }
|
| +
|
| + // Returns true if |child| is contained within this View's hierarchy, even as
|
| + // an indirect descendant. Will return true if child is also this View.
|
| + bool Contains(View* child);
|
| +
|
| + // Returns the visible View that most closely contains the specified point.
|
| + // |point| is in this View's coordinates.
|
| + // This function is used by the event processing system in the Widget to
|
| + // locate views for event targeting. Override this function if you wish to
|
| + // specify a view other than the one most closely enclosing |point| to receive
|
| + // notifications for events within it.
|
| + // TODO(beng): This is [ab]used primarily for event handling. Should be
|
| + // renamed to something like GetViewForEvent().
|
| + virtual View* GetViewForPoint(const gfx::Point& point) const;
|
| +
|
| + // Returns true if the specified point is contained within this View or its
|
| + // hit test mask. |point| is in this View's coordinates.
|
| + bool HitTest(const gfx::Point& point) const;
|
| +
|
| + int id() const { return id_; }
|
| + void set_id(int id) { id_ = id; }
|
| + int group() const { return group_; }
|
| + void set_group(int group) { group_ = group; }
|
| +
|
| + // Returns the View within this View's hierarchy whose id matches that
|
| + // specified.
|
| + View* GetViewById(int id) const;
|
| +
|
| + // Populates a ViewVector with the Views within this View's hierarchy that
|
| + // match the specified group id.
|
| + void GetViewsWithGroup(int group, ViewVector* vec) const;
|
| +
|
| + // Called on every view in the hierarchy when a view is added or removed.
|
| + virtual void OnViewAdded(View* parent, View* child);
|
| + virtual void OnViewRemoved(View* parent, View* child);
|
| +
|
| + // Called on a View when it is added or removed from a Widget.
|
| + virtual void OnViewAddedToWidget();
|
| + virtual void OnViewRemovedFromWidget();
|
| +
|
| + // Accelerators --------------------------------------------------------------
|
| +
|
| + // Accelerator Registration.
|
| + void AddAccelerator(const Accelerator& accelerator);
|
| + void RemoveAccelerator(const Accelerator& accelerator);
|
| + void RemoveAllAccelerators();
|
| +
|
| + virtual bool OnAcceleratorPressed(const Accelerator& accelerator);
|
| +
|
| + // Focus ---------------------------------------------------------------------
|
| +
|
| + // Manager.
|
| + FocusManager* GetFocusManager() const;
|
| +
|
| + // Traversal.
|
| + virtual FocusTraversable* GetFocusTraversable() const;
|
| + View* GetNextFocusableView() const;
|
| + View* GetPreviousFocusableView() const;
|
| +
|
| + // Attributes.
|
| + virtual bool SkipDefaultKeyEventProcessing(const KeyEvent& event) const;
|
| + void set_focusable(bool focusable) { focusable_ = focusable; }
|
| + bool IsFocusable() const;
|
| +
|
| + bool HasFocus() const;
|
| + void RequestFocus();
|
| +
|
| + virtual void OnFocus(/* const FocusEvent& event */);
|
| + virtual void OnBlur();
|
| +
|
| + // Input ---------------------------------------------------------------------
|
| +
|
| + virtual bool OnKeyPressed(const KeyEvent& event);
|
| + virtual bool OnKeyReleased(const KeyEvent& event);
|
| + virtual bool OnMouseWheel(const MouseWheelEvent& event);
|
| + // To receive OnMouseDragged() or OnMouseReleased() events, overriding classes
|
| + // must return true from this function.
|
| + virtual bool OnMousePressed(const MouseEvent& event);
|
| + virtual bool OnMouseDragged(const MouseEvent& event);
|
| + virtual void OnMouseReleased(const MouseEvent& event);
|
| + virtual void OnMouseCaptureLost();
|
| + virtual void OnMouseMoved(const MouseEvent& event);
|
| + virtual void OnMouseEntered(const MouseEvent& event);
|
| + virtual void OnMouseExited(const MouseEvent& event);
|
| +
|
| + virtual gfx::NativeCursor GetCursorForPoint(const gfx::Point& point);
|
| +
|
| + // Painting ------------------------------------------------------------------
|
| +
|
| + // Add all or part of a View's bounds to the enclosing Widget's invalid
|
| + // rectangle. This will result in those areas being re-painted on the next
|
| + // update.
|
| + void Invalidate();
|
| + virtual void InvalidateRect(const gfx::Rect& invalid_rect);
|
| +
|
| + // Called by the framework to paint a View. Performs translation and clipping
|
| + // for View coordinates and language direction as required, allows the View
|
| + // to paint itself via the various OnPaint*() event handlers and then paints
|
| + // the hierarchy beneath it.
|
| + // TODO(beng): Make private?
|
| + void Paint(gfx::Canvas* canvas);
|
| +
|
| + // Responsible for calling Paint() on child Views. Override to control the
|
| + // order child Views are painted.
|
| + virtual void PaintChildren(gfx::Canvas* canvas);
|
| +
|
| + // Override to provide rendering in any part of the View's bounds. Typically
|
| + // this is the "contents" of the view. If you override this method you will
|
| + // have to call the subsequent OnPaint*() methods manually.
|
| + virtual void OnPaint(gfx::Canvas* canvas);
|
| +
|
| + // Override to paint a background before any content is drawn. Typically this
|
| + // is done if you are satisfied with a default OnPaint handler but wish to
|
| + // supply a different background.
|
| + virtual void OnPaintBackground(gfx::Canvas* canvas);
|
| +
|
| + // Override to paint a border not specified by SetBorder().
|
| + virtual void OnPaintBorder(gfx::Canvas* canvas);
|
| +
|
| + // Override to paint a focus border (usually a dotted rectangle) around
|
| + // relevant contents.
|
| + virtual void OnPaintFocusBorder(gfx::Canvas* canvas);
|
| +
|
| + // Context menus -------------------------------------------------------------
|
| +
|
| + void set_context_menu_controller(
|
| + ContextMenuController* context_menu_controller) {
|
| + context_menu_controller_ = context_menu_controller;
|
| + }
|
| +
|
| + // Resources -----------------------------------------------------------------
|
| +
|
| + ThemeProvider* GetThemeProvider() const;
|
| +
|
| + private:
|
| + friend internal::RootView;
|
| +
|
| + // State collected during a MousePressed event to detect possible drag
|
| + // operations.
|
| + struct DragInfo {
|
| + // Sets possible_drag to false and start_x/y to 0. This is invoked by
|
| + // RootView prior to invoke MousePressed().
|
| + void Reset();
|
| +
|
| + // Sets possible_drag to true and start_pt to the specified point.
|
| + // This is invoked by the target view if it detects the press may generate
|
| + // a drag.
|
| + void PossibleDrag(const gfx::Point& point);
|
| +
|
| + // Whether the press may generate a drag.
|
| + bool possible_drag;
|
| +
|
| + // Position of the mouse press in screen coordinates.
|
| + gfx::Point press_point;
|
| + };
|
| +
|
| + // Drag & Drop ---------------------------------------------------------------
|
| + int GetDragOperations(const gfx::Point& point);
|
| + void WriteDragData(const gfx::Point& point, OSExchangeData* data);
|
| + void StartShellDrag(const MouseEvent& event, const gfx::Point& press_point);
|
| +
|
| + // RootView API --------------------------------------------------------------
|
| + // These methods are designed to be called by the RootView. The RootView
|
| + // should limit its interaction with the View to these methods and the public
|
| + // API.
|
| + bool MousePressed(const MouseEvent& event, DragInfo* drag_info);
|
| + bool MouseDragged(const MouseEvent& event, DragInfo* drag_info);
|
| + void MouseReleased(const MouseEvent& event);
|
| +
|
| + // Tree operations -----------------------------------------------------------
|
| + void NotifyHierarchyChanged(View* parent, View* child, bool is_add);
|
| + void NotifyHierarchyChangedUp(View* parent, View* child, bool is_add);
|
| + void NotifyHierarchyChangedDown(View* parent, View* child, bool is_add,
|
| + bool has_widget);
|
| + void CallViewNotification(View* target,
|
| + View* parent,
|
| + View* child,
|
| + bool is_add,
|
| + bool has_widget);
|
| +
|
| + // The View's parent view. This is set and reset when the View is added and
|
| + // removed from a hierarchy.
|
| + View* parent_;
|
| +
|
| + // The View's children.
|
| + ViewVector children_;
|
| +
|
| + // True if the hierarchy (i.e. the parent View) is responsible for deleting
|
| + // this View. Default is true.
|
| + bool parent_owned_;
|
| +
|
| + // The bounds of the View, in its parent's coordinates.
|
| + gfx::Rect bounds_;
|
| +
|
| + scoped_ptr<Border> border_;
|
| +
|
| + // Whether or not this View is visible. The view still participates in layout
|
| + // but will not be painted.
|
| + bool visible_;
|
| +
|
| + // Whether or not this View is enabled. When disabled, the event system will
|
| + // not propagate un-handled events beyond the View in the hierarchy.
|
| + bool enabled_;
|
| +
|
| + // An identifier for this View. Caller must guarantee uniqueness.
|
| + int id_;
|
| +
|
| + // An identifier for a group of potentially related Views.
|
| + int group_;
|
| +
|
| + // True if this View is focusable by the FocusManager.
|
| + bool focusable_;
|
| +
|
| + // An optional helper that handles layout for child views.
|
| + scoped_ptr<LayoutManager> layout_manager_;
|
| +
|
| + // Shows the context menu.
|
| + ContextMenuController* context_menu_controller_;
|
| +
|
| + // Delegate for drag and drop related functionality.
|
| + DragController* drag_controller_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(View);
|
| +};
|
| +
|
| +} // namespace ui
|
| +
|
| +#endif // UI_VIEWS_VIEW_H_
|
| +
|
| +/*
|
| +
|
| +TODO(beng):
|
| +- focus
|
| +- accessibility
|
| +- scrolling
|
| +- cursors
|
| +- tooltips
|
| +- rtl
|
| +- l10n
|
| +- mousewheel
|
| +- more on painting
|
| +- layer stuff
|
| +- investigate why assorted notifications are necessary
|
| +- native_widget_views
|
| +- native_widget_gtk
|
| +- pick a name
|
| +
|
| +*/
|
|
|
| Property changes on: ui\views\view.h
|
| ___________________________________________________________________
|
| Added: svn:eol-style
|
| + LF
|
|
|
|
|