blob: e2d960e2edede6709cf322635d3953df88abe43f [file] [log] [blame]
// 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 CHROME_BROWSER_UI_COCOA_TABS_TAB_STRIP_DRAG_CONTROLLER_H_
#define CHROME_BROWSER_UI_COCOA_TABS_TAB_STRIP_DRAG_CONTROLLER_H_
#import <Cocoa/Cocoa.h>
#include <map>
@class TabController;
@class TabStripController;
@class TabWindowController;
////////////////////////////////////////////////////////////////////////////////
// This protocol is used to carry mouse events to the TabStripDragController,
// which manages the logic for actually dragging tabs.
@protocol TabDraggingEventTarget
// Returns YES if the tab represented by the controller can be dragged.
- (BOOL)tabCanBeDragged:(TabController*)tab;
// Initiates a dragging session with a mouseDown event. The tab controller
// passed here is the one used for the rest of the dragging session.
- (void)maybeStartDrag:(NSEvent*)event forTab:(TabController*)tab;
@end
////////////////////////////////////////////////////////////////////////////////
// This controller is owned by the TabStripController and is used to delegate
// all the logic for tab dragging from the TabView's events.
@interface TabStripDragController : NSObject<TabDraggingEventTarget> {
@private
TabStripController* tabStrip_; // Weak; owns this.
// These are released on mouseUp:
BOOL moveWindowOnDrag_; // Set if the only tab of a window is dragged.
BOOL tabWasDragged_; // Has the tab been dragged?
BOOL draggingWithinTabStrip_; // Did drag stay in the current tab strip?
BOOL chromeIsVisible_;
NSTimeInterval tearTime_; // Time since tear happened
NSPoint tearOrigin_; // Origin of the tear rect
NSPoint dragOrigin_; // Origin point of the drag
TabWindowController* sourceController_; // weak. controller starting the drag
NSWindow* sourceWindow_; // Weak. The window starting the drag.
NSRect sourceWindowFrame_;
NSRect sourceTabFrame_;
TabController* draggedTab_; // Weak. The tab controller being dragged.
TabWindowController* draggedController_; // Weak. Controller being dragged.
NSWindow* dragWindow_; // Weak. The window being dragged
NSWindow* dragOverlay_; // Weak. The overlay being dragged
TabWindowController* targetController_; // weak. Controller being targeted
}
// Designated initializer.
- (id)initWithTabStripController:(TabStripController*)controller;
// TabDraggingEventTarget methods are also implemented.
@end
#endif // CHROME_BROWSER_UI_COCOA_TABS_TAB_STRIP_DRAG_CONTROLLER_H_