diff options
author | tfarina@chromium.org <tfarina@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-10-25 18:42:25 +0000 |
---|---|---|
committer | tfarina@chromium.org <tfarina@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-10-25 18:42:25 +0000 |
commit | 3d2fdb0f19bd403c6e2fec6edd802ed43f2479a5 (patch) | |
tree | 427cda8d2368934904f6d9c8f23621c02debe395 /views | |
parent | 9cf240d27e787dcfbd4d4310e4c782a8d0938739 (diff) | |
download | chromium_src-3d2fdb0f19bd403c6e2fec6edd802ed43f2479a5.zip chromium_src-3d2fdb0f19bd403c6e2fec6edd802ed43f2479a5.tar.gz chromium_src-3d2fdb0f19bd403c6e2fec6edd802ed43f2479a5.tar.bz2 |
views: Factor out SingleSplitView Observer into SingleSplitViewListener.
R=sky@chromium.org
Review URL: http://codereview.chromium.org/8351007
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@107168 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'views')
-rw-r--r-- | views/controls/single_split_view.cc | 9 | ||||
-rw-r--r-- | views/controls/single_split_view.h | 31 | ||||
-rw-r--r-- | views/controls/single_split_view_listener.h | 29 | ||||
-rw-r--r-- | views/controls/single_split_view_unittest.cc | 3 | ||||
-rw-r--r-- | views/views.gyp | 1 |
5 files changed, 47 insertions, 26 deletions
diff --git a/views/controls/single_split_view.cc b/views/controls/single_split_view.cc index d67e113..79df3fd 100644 --- a/views/controls/single_split_view.cc +++ b/views/controls/single_split_view.cc @@ -12,6 +12,7 @@ #include "ui/base/accessibility/accessible_view_state.h" #include "ui/gfx/canvas.h" #include "views/background.h" +#include "views/controls/single_split_view_listener.h" #if defined(TOOLKIT_USES_GTK) #include "ui/gfx/gtk_util.h" @@ -33,11 +34,11 @@ static const int kDividerSize = 4; SingleSplitView::SingleSplitView(View* leading, View* trailing, Orientation orientation, - Observer* observer) + SingleSplitViewListener* listener) : is_horizontal_(orientation == HORIZONTAL_SPLIT), divider_offset_(-1), resize_leading_on_bounds_change_(true), - observer_(observer) { + listener_(listener) { AddChildView(leading); AddChildView(trailing); #if defined(OS_WIN) @@ -186,7 +187,7 @@ bool SingleSplitView::OnMouseDragged(const MouseEvent& event) { if (new_size != divider_offset_) { set_divider_offset(new_size); - if (!observer_ || observer_->SplitHandleMoved(this)) + if (!listener_ || listener_->SplitHandleMoved(this)) Layout(); } return true; @@ -198,7 +199,7 @@ void SingleSplitView::OnMouseCaptureLost() { if (drag_info_.initial_divider_offset != divider_offset_) { set_divider_offset(drag_info_.initial_divider_offset); - if (!observer_ || observer_->SplitHandleMoved(this)) + if (!listener_ || listener_->SplitHandleMoved(this)) Layout(); } } diff --git a/views/controls/single_split_view.h b/views/controls/single_split_view.h index 6d4fc6b..7cb8540 100644 --- a/views/controls/single_split_view.h +++ b/views/controls/single_split_view.h @@ -11,11 +11,13 @@ namespace views { +class SingleSplitViewListener; + // SingleSplitView lays out two views next to each other, either horizontally // or vertically. A splitter exists between the two views that the user can // drag around to resize the views. -// Observer's SplitHandleMoved notification helps to monitor user initiated -// layout changes. +// SingleSplitViewListener's SplitHandleMoved notification helps to monitor user +// initiated layout changes. class VIEWS_EXPORT SingleSplitView : public View { public: enum Orientation { @@ -23,24 +25,12 @@ class VIEWS_EXPORT SingleSplitView : public View { VERTICAL_SPLIT }; - // Internal class name static const char kViewClassName[]; - class Observer { - public: - // Invoked when split handle is moved by the user. |source|'s divider_offset - // is already set to the new value, but Layout has not happened yet. - // Returns false if the layout has been handled by the observer, returns - // true if |source| should do it by itself. - virtual bool SplitHandleMoved(SingleSplitView* source) = 0; - protected: - virtual ~Observer() {} - }; - SingleSplitView(View* leading, View* trailing, Orientation orientation, - Observer* observer); + SingleSplitViewListener* listener); virtual void Layout() OVERRIDE; virtual std::string GetClassName() const OVERRIDE; @@ -95,10 +85,9 @@ class VIEWS_EXPORT SingleSplitView : public View { // Calculates the new |divider_offset| based on the changes of split view // bounds. - int CalculateDividerOffset( - int divider_offset, - const gfx::Rect& previous_bounds, - const gfx::Rect& new_bounds) const; + int CalculateDividerOffset(int divider_offset, + const gfx::Rect& previous_bounds, + const gfx::Rect& new_bounds) const; // Returns divider offset within primary axis size range for given split // view |bounds|. @@ -131,8 +120,8 @@ class VIEWS_EXPORT SingleSplitView : public View { bool resize_leading_on_bounds_change_; - // Observer to notify about user initiated handle movements. Not own by us. - Observer* observer_; + // Listener to notify about user initiated handle movements. Not owned. + SingleSplitViewListener* listener_; // The accessible name of this view. string16 accessible_name_; diff --git a/views/controls/single_split_view_listener.h b/views/controls/single_split_view_listener.h new file mode 100644 index 0000000..6d38aad --- /dev/null +++ b/views/controls/single_split_view_listener.h @@ -0,0 +1,29 @@ +// 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 VIEWS_CONTROLS_SINGLE_SPLIT_VIEW_LISTENER_H_ +#define VIEWS_CONTROLS_SINGLE_SPLIT_VIEW_LISTENER_H_ +#pragma once + +namespace views { + +class SingleSplitView; + +// An interface implemented by objects that want to be notified when the +// splitter moves. +class SingleSplitViewListener { + public: + // Invoked when split handle is moved by the user. |sender|'s divider_offset + // is already set to the new value, but Layout has not happened yet. + // Returns false if the layout has been handled by the listener, returns + // true if |sender| should do it by itself. + virtual bool SplitHandleMoved(SingleSplitView* sender) = 0; + + protected: + virtual ~SingleSplitViewListener() {} +}; + +} // namespace views + +#endif // VIEWS_CONTROLS_SINGLE_SPLIT_VIEW_LISTENER_H_ diff --git a/views/controls/single_split_view_unittest.cc b/views/controls/single_split_view_unittest.cc index c3375d8..28a9aa0 100644 --- a/views/controls/single_split_view_unittest.cc +++ b/views/controls/single_split_view_unittest.cc @@ -6,6 +6,7 @@ #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" #include "views/controls/single_split_view.h" +#include "views/controls/single_split_view_listener.h" using ::testing::_; using ::testing::Return; @@ -43,7 +44,7 @@ static void VerifySplitViewLayout(const views::SingleSplitView& split) { } } -class MockObserver : public views::SingleSplitView::Observer { +class MockObserver : public views::SingleSplitViewListener { public: MOCK_METHOD1(SplitHandleMoved, bool(views::SingleSplitView*)); }; diff --git a/views/views.gyp b/views/views.gyp index 98f3d64..467d196 100644 --- a/views/views.gyp +++ b/views/views.gyp @@ -207,6 +207,7 @@ 'controls/separator.h', 'controls/single_split_view.cc', 'controls/single_split_view.h', + 'controls/single_split_view_listener.h', 'controls/tabbed_pane/native_tabbed_pane_gtk.cc', 'controls/tabbed_pane/native_tabbed_pane_gtk.h', 'controls/tabbed_pane/native_tabbed_pane_win.cc', |