blob: 9520da5b7fd79a1e5e1a6b066ea4f58232cd4627 [file] [log] [blame]
// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/tabs/public/tab_group_tab_collection.h"
#include <memory>
#include <optional>
#include "components/tab_groups/tab_group_id.h"
#include "components/tabs/public/tab_collection_storage.h"
#include "components/tabs/public/tab_group.h"
namespace tabs {
TabGroupTabCollection::TabGroupTabCollection(
TabGroup::Factory& group_factory,
tab_groups::TabGroupId group_id,
tab_groups::TabGroupVisualData visual_data)
: TabCollection(TabCollection::Type::GROUP,
{TabCollection::Type::SPLIT},
/*supports_tabs=*/true),
group_(group_factory.Create(this, group_id, visual_data)) {}
TabGroupTabCollection::~TabGroupTabCollection() = default;
const tab_groups::TabGroupId& TabGroupTabCollection::GetTabGroupId() const {
return group_->id();
}
std::pair<std::vector<int>, std::vector<int>>
TabGroupTabCollection::SeparateTabsByVisualPosition(
const std::vector<int>& indices) {
std::vector<int> left_of_group;
std::vector<int> right_of_group;
const size_t midpoint = ChildCount() / 2;
for (int index : indices) {
size_t direct_index = GetDirectChildIndexOfCollectionContainingTab(
GetTabAtIndexRecursive(index))
.value();
if (direct_index < midpoint) {
left_of_group.push_back(index);
} else {
right_of_group.push_back(index);
}
}
return {left_of_group, right_of_group};
}
} // namespace tabs