14a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// Copyright (c) 2009 The Chromium Authors. All rights reserved. 24a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 34a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// found in the LICENSE file. 44a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 54a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#ifndef CHROME_BROWSER_UI_VIEWS_FRAME_BROWSER_ROOT_VIEW_H_ 64a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#define CHROME_BROWSER_UI_VIEWS_FRAME_BROWSER_ROOT_VIEW_H_ 74a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#pragma once 84a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 94a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#include "views/widget/root_view.h" 104a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 11ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass AbstractTabStripView; 124a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochclass BrowserView; 134a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 14dc0f95d653279beabeb9817299e2902918ba123eKristian Monsennamespace ui { 15dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenclass OSExchangeData; 16dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen} 17dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 184a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// RootView implementation used by BrowserFrame. This forwards drop events to 194a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// the TabStrip. Visually the tabstrip extends to the top of the frame, but in 204a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// actually it doesn't. The tabstrip is only as high as a tab. To enable 214a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// dropping above the tabstrip BrowserRootView forwards drop events to the 224a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// TabStrip. 234a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochclass BrowserRootView : public views::RootView { 244a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch public: 254a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // You must call set_tabstrip before this class will accept drops. 264a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch BrowserRootView(BrowserView* browser_view, views::Widget* widget); 274a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 28ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Overridden from views::View: 294a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch virtual bool GetDropFormats( 304a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch int* formats, 31ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::set<ui::OSExchangeData::CustomFormat>* custom_formats) OVERRIDE; 32ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual bool AreDropTypesRequired() OVERRIDE; 33ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual bool CanDrop(const ui::OSExchangeData& data) OVERRIDE; 34ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void OnDragEntered(const views::DropTargetEvent& event) OVERRIDE; 35ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual int OnDragUpdated(const views::DropTargetEvent& event) OVERRIDE; 36ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void OnDragExited() OVERRIDE; 37ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual int OnPerformDrop(const views::DropTargetEvent& event) OVERRIDE; 38ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void GetAccessibleState(ui::AccessibleViewState* state) OVERRIDE; 394a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 404a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch private: 414a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Returns true if the event should be forwarded to the tabstrip. 424a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch bool ShouldForwardToTabStrip(const views::DropTargetEvent& event); 434a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 444a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Converts the event from the hosts coordinate system to the tabstrips 454a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // coordinate system. 464a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch views::DropTargetEvent* MapEventToTabStrip( 474a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch const views::DropTargetEvent& event, 48dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen const ui::OSExchangeData& data); 494a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 50ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen inline AbstractTabStripView* tabstrip() const; 514a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 524a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Returns true if |data| has string contents and the user can "paste and go". 534a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // If |url| is non-NULL and the user can "paste and go", |url| is set to the 544a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // desired destination. 55dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen bool GetPasteAndGoURL(const ui::OSExchangeData& data, GURL* url); 564a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 574a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // The BrowserView. 584a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch BrowserView* browser_view_; 594a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 604a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // If true, drag and drop events are being forwarded to the tab strip. 614a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // This is used to determine when to send OnDragEntered and OnDragExited 624a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // to the tab strip. 634a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch bool forwarding_to_tab_strip_; 644a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 654a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch DISALLOW_COPY_AND_ASSIGN(BrowserRootView); 664a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch}; 674a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 684a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#endif // CHROME_BROWSER_UI_VIEWS_FRAME_BROWSER_ROOT_VIEW_H_ 69