Home | History | Annotate | Download | only in tabs
      1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include "chrome/browser/ui/gtk/tabs/drag_data.h"
      6 
      7 #include "chrome/browser/ui/gtk/tabs/tab_gtk.h"
      8 #include "chrome/browser/ui/tabs/tab_strip_model.h"
      9 #include "content/public/browser/web_contents.h"
     10 #include "content/public/browser/web_contents_delegate.h"
     11 
     12 using content::WebContents;
     13 
     14 DraggedTabData::DraggedTabData()
     15     : tab_(NULL),
     16       contents_(NULL),
     17       original_delegate_(NULL),
     18       source_model_index_(-1),
     19       pinned_(false),
     20       mini_(false) {
     21 }
     22 
     23 DraggedTabData::DraggedTabData(TabGtk* tab,
     24                                WebContents* contents,
     25                                content::WebContentsDelegate* original_delegate,
     26                                int source_model_index,
     27                                bool pinned,
     28                                bool mini)
     29     : tab_(tab),
     30       contents_(contents),
     31       original_delegate_(original_delegate),
     32       source_model_index_(source_model_index),
     33       pinned_(pinned),
     34       mini_(mini) {
     35 }
     36 
     37 DraggedTabData::~DraggedTabData() {
     38 }
     39 
     40 void DraggedTabData::ResetDelegate() {
     41   contents_->SetDelegate(original_delegate_);
     42 }
     43 
     44 DragData::DragData(std::vector<DraggedTabData> drag_data, int source_tab_index)
     45     : drag_data_(drag_data),
     46       source_tab_index_(source_tab_index),
     47       non_mini_tab_count_(0),
     48       mini_tab_count_(0) {
     49   GetNumberOfMiniNonMiniTabs(0, drag_data_.size(),
     50                              &mini_tab_count_, &non_mini_tab_count_);
     51 }
     52 
     53 DragData::~DragData() {
     54 }
     55 
     56 std::vector<TabGtk*> DragData::GetDraggedTabs() const {
     57   std::vector<TabGtk*> tabs;
     58   for (size_t i = 0; i < drag_data_.size(); ++i) {
     59     if (drag_data_[i].tab_)
     60       tabs.push_back(drag_data_[i].tab_);
     61   }
     62   return tabs;
     63 }
     64 
     65 std::vector<WebContents*> DragData::GetDraggedTabsContents() const {
     66   std::vector<WebContents*> web_contentses;
     67   for (size_t i = 0; i < drag_data_.size(); ++i) {
     68     if (drag_data_[i].contents_)
     69       web_contentses.push_back(drag_data_[i].contents_);
     70   }
     71   return web_contentses;
     72 }
     73 
     74 void DragData::GetNumberOfMiniNonMiniTabs(
     75     int from, int to, int* mini, int* non_mini) const {
     76   DCHECK(to <= static_cast<int>(drag_data_.size()));
     77 
     78   *mini = 0;
     79   *non_mini = 0;
     80   for (int i = from; i < to; ++i) {
     81     if (drag_data_[i].mini_)
     82       (*mini)++;
     83     else
     84       (*non_mini)++;
     85   }
     86 }
     87 
     88 int DragData::GetAddTypesForDraggedTabAt(size_t index) {
     89   int add_types = TabStripModel::ADD_NONE;
     90   if (get(index)->pinned_)
     91     add_types |= TabStripModel::ADD_PINNED;
     92   if (static_cast<int>(index) == source_tab_index_)
     93     add_types |= TabStripModel::ADD_ACTIVE;
     94   return add_types;
     95 }
     96 
     97 WebContents* DragData::GetSourceWebContents() {
     98   return GetSourceTabData()->contents_;
     99 }
    100 
    101 DraggedTabData* DragData::GetSourceTabData() {
    102   return get(source_tab_index_);
    103 }
    104