// Copyright (c) 2006-2008 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 CHROME_BROWSER_BOOKMARKS_BOOKMARK_DROP_INFO_H_ #define CHROME_BROWSER_BOOKMARKS_BOOKMARK_DROP_INFO_H_ #pragma once #include "base/basictypes.h" #include "base/timer.h" #include "chrome/browser/bookmarks/bookmark_node_data.h" #include "ui/gfx/native_widget_types.h" namespace views { class DropTargetEvent; } // BookmarkDropInfo is a pure virtual class that provides auto-scrolling // behavior and a handful of fields used for managing a bookmark drop. // BookmarkDropInfo is used by both BookmarkTableView and // BookmarksFolderTreeView. class BookmarkDropInfo { public: BookmarkDropInfo(gfx::NativeWindow hwnd, int top_margin); virtual ~BookmarkDropInfo(); // Invoke this from OnDragUpdated. It resets source_operations, // is_control_down, last_y and updates the autoscroll timer as necessary. void Update(const views::DropTargetEvent& event); // Data from the drag. void SetData(const BookmarkNodeData& data) { data_ = data; } BookmarkNodeData& data() { return data_; } // Value of event.GetSourceOperations when Update was last invoked. int source_operations() const { return source_operations_; } // Whether the control key was down last time Update was invoked. bool is_control_down() const { return is_control_down_; } // Y position of the event last passed to Update. int last_y() { return last_y_; } // The drop operation that should occur. This is not updated by // BookmarkDropInfo, but provided for subclasses. void set_drop_operation(int drop_operation) { drop_operation_ = drop_operation; } int drop_operation() const { return drop_operation_; } protected: // Invoked if we autoscroll. When invoked subclasses need to determine // whether the drop is valid again as what is under the mouse has likely // scrolled. virtual void Scrolled() = 0; private: // Invoked from the timer. Scrolls up/down a line. void Scroll(); BookmarkNodeData data_; int source_operations_; bool is_control_down_; int last_y_; int drop_operation_; gfx::NativeWindow wnd_; // Margin in addition to views::kAutoscrollSize that the mouse is allowed to // be over before we autoscroll. int top_margin_; // When autoscrolling this determines if we're scrolling up or down. bool scroll_up_; // Used when autoscrolling. base::RepeatingTimer<BookmarkDropInfo> scroll_timer_; DISALLOW_COPY_AND_ASSIGN(BookmarkDropInfo); }; #endif // CHROME_BROWSER_BOOKMARKS_BOOKMARK_DROP_INFO_H_