| OLD | NEW |
| (Empty) |
| 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 #ifndef UI_BASE_MODELS_LIST_SELECTION_MODEL_H_ | |
| 6 #define UI_BASE_MODELS_LIST_SELECTION_MODEL_H_ | |
| 7 | |
| 8 #include <vector> | |
| 9 | |
| 10 #include "base/basictypes.h" | |
| 11 #include "ui/base/ui_base_export.h" | |
| 12 | |
| 13 namespace ui { | |
| 14 | |
| 15 // Selection model represented as a list of ints. Used by the TabStrip. In | |
| 16 // addition to the set of selected indices ListSelectionModel maintains the | |
| 17 // following: | |
| 18 // active: the index of the currently visible tab in the tab strip. | |
| 19 // anchor: the index of the last tab the user clicked on. Extending the | |
| 20 // selection extends it from this index. | |
| 21 // | |
| 22 // Typically there is only one selected item, in which case the anchor and | |
| 23 // active index correspond to the same thing. | |
| 24 class UI_BASE_EXPORT ListSelectionModel { | |
| 25 public: | |
| 26 typedef std::vector<int> SelectedIndices; | |
| 27 | |
| 28 // Used to identify no selection. | |
| 29 static const int kUnselectedIndex; | |
| 30 | |
| 31 ListSelectionModel(); | |
| 32 ~ListSelectionModel(); | |
| 33 | |
| 34 // See class description for details of the anchor. | |
| 35 void set_anchor(int anchor) { anchor_ = anchor; } | |
| 36 int anchor() const { return anchor_; } | |
| 37 | |
| 38 // See class description for details of active. | |
| 39 void set_active(int active) { active_ = active; } | |
| 40 int active() const { return active_; } | |
| 41 | |
| 42 // True if nothing is selected. | |
| 43 bool empty() const { return selected_indices_.empty(); } | |
| 44 | |
| 45 // Number of selected indices. | |
| 46 size_t size() const { return selected_indices_.size(); } | |
| 47 | |
| 48 // Increments all indices >= |index|. For example, if the selection consists | |
| 49 // of [0, 1, 5] and this is invoked with 1, it results in [0, 2, 6]. This also | |
| 50 // updates the anchor and active indices. | |
| 51 // This is used when a new tab is inserted into the tabstrip. | |
| 52 void IncrementFrom(int index); | |
| 53 | |
| 54 // Shifts all indices > |index| down by 1. If |index| is selected, it is | |
| 55 // removed. For example, if the selection consists of [0, 1, 5] and this is | |
| 56 // invoked with 1, it results in [0, 4]. This is used when a tab is removed | |
| 57 // from the tabstrip. | |
| 58 void DecrementFrom(int index); | |
| 59 | |
| 60 // Sets the anchor, active and selection to |index|. | |
| 61 void SetSelectedIndex(int index); | |
| 62 | |
| 63 // Returns true if |index| is selected. | |
| 64 bool IsSelected(int index) const; | |
| 65 | |
| 66 // Adds |index| to the selection. This does not change the active or anchor | |
| 67 // indices. | |
| 68 void AddIndexToSelection(int index); | |
| 69 | |
| 70 // Removes |index| from the selection. This does not change the active or | |
| 71 // anchor indices. | |
| 72 void RemoveIndexFromSelection(int index); | |
| 73 | |
| 74 // Extends the selection from the anchor to |index|. If the anchor is empty, | |
| 75 // this sets the anchor, selection and active indices to |index|. | |
| 76 void SetSelectionFromAnchorTo(int index); | |
| 77 | |
| 78 // Makes sure the indices from the anchor to |index| are selected. This only | |
| 79 // adds to the selection. | |
| 80 void AddSelectionFromAnchorTo(int index); | |
| 81 | |
| 82 // Invoked when an item moves. |from| is the original index, and |to| the | |
| 83 // target index. | |
| 84 // NOTE: this matches the TabStripModel API. If moving to a greater index, | |
| 85 // |to| should be the index *after* removing |from|. For example, consider | |
| 86 // three tabs 'A B C', to move A to the end of the list, this should be | |
| 87 // invoked with '0, 2'. | |
| 88 void Move(int from, int to); | |
| 89 | |
| 90 // Sets the anchor and active to kUnselectedIndex, and removes all the | |
| 91 // selected indices. | |
| 92 void Clear(); | |
| 93 | |
| 94 // Returns the selected indices. The selection is always ordered in acending | |
| 95 // order. | |
| 96 const SelectedIndices& selected_indices() const { return selected_indices_; } | |
| 97 | |
| 98 // Copies the selection from |source| to this. | |
| 99 void Copy(const ListSelectionModel& source); | |
| 100 | |
| 101 // Compares this selection with |rhs|. | |
| 102 bool Equals(const ListSelectionModel& rhs) const; | |
| 103 | |
| 104 private: | |
| 105 SelectedIndices selected_indices_; | |
| 106 | |
| 107 int active_; | |
| 108 | |
| 109 int anchor_; | |
| 110 | |
| 111 DISALLOW_COPY_AND_ASSIGN(ListSelectionModel); | |
| 112 }; | |
| 113 | |
| 114 } // namespace ui | |
| 115 | |
| 116 #endif // UI_BASE_MODELS_LIST_SELECTION_MODEL_H_ | |
| OLD | NEW |