1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
|
// Copyright 2019 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_UI_TABS_TAB_GROUP_MODEL_H_
#define CHROME_BROWSER_UI_TABS_TAB_GROUP_MODEL_H_
#include <stddef.h>
#include <stdint.h>
#include <map>
#include <memory>
#include <optional>
#include <vector>
#include "base/memory/raw_ptr.h"
#include "base/types/pass_key.h"
class TabGroup;
class TabStripModel;
namespace tab_groups {
enum class TabGroupColorId;
class TabGroupId;
} // namespace tab_groups
// A model for all tab groups with at least one tab in the tabstrip. Keeps a map
// of tab_groups::TabGroupIds and TabGroups and provides an API for maintaining
// it. It is owned and used primarily by TabStripModel, which handles
// tab-to-group correspondences and any groupedness state changes on tabs.
// TabStipModel then notifies TabStrip of any groupedness state changes that
// need to be reflected in the view.
class TabGroupModel {
public:
TabGroupModel();
~TabGroupModel();
// Returns whether a tab group with the given |id| exists.
bool ContainsTabGroup(const tab_groups::TabGroupId& id) const;
// Returns the tab group with the given |id|. The group must exist.
TabGroup* GetTabGroup(const tab_groups::TabGroupId& id) const;
// Registers a tab group. It will initially be empty,
// but the expectation is that at least one tab will be
// added to it immediately.
void AddTabGroup(TabGroup* group, base::PassKey<TabStripModel>);
// Removes the tab group from the registry. Should be
// called whenever the group becomes empty.
void RemoveTabGroup(const tab_groups::TabGroupId& id,
base::PassKey<TabStripModel>);
// Returns the least-used color in the color set, breaking ties toward the
// first color in the set. Used to initialize a new group's color, which
// should be as distinct from the other groups as possible.
tab_groups::TabGroupColorId GetNextColor(base::PassKey<TabStripModel>) const;
std::vector<tab_groups::TabGroupId> ListTabGroups() const;
private:
std::map<tab_groups::TabGroupId, raw_ptr<TabGroup>> groups_;
// Used to maintain insertion order of TabGroupsIds added to the
// TabGroupModel.
std::vector<tab_groups::TabGroupId> group_ids_;
};
#endif // CHROME_BROWSER_UI_TABS_TAB_GROUP_MODEL_H_
|