xlnt
selection.hpp
1 // Copyright (c) 2014-2022 Thomas Fussell
2 // Copyright (c) 2024 xlnt-community
3 //
4 // Permission is hereby granted, free of charge, to any person obtaining a copy
5 // of this software and associated documentation files (the "Software"), to deal
6 // in the Software without restriction, including without limitation the rights
7 // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8 // copies of the Software, and to permit persons to whom the Software is
9 // furnished to do so, subject to the following conditions:
10 //
11 // The above copyright notice and this permission notice shall be included in
12 // all copies or substantial portions of the Software.
13 //
14 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17 // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19 // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20 // THE SOFTWARE
21 //
22 // @license: http://www.opensource.org/licenses/mit-license.php
23 // @author: see AUTHORS file
24 
25 #pragma once
26 
27 #include <xlnt/xlnt_config.hpp>
28 #include <xlnt/cell/cell_reference.hpp>
29 #include <xlnt/worksheet/pane.hpp>
30 #include <xlnt/worksheet/range_reference.hpp>
31 
32 namespace xlnt {
33 
37 class XLNT_API selection
38 {
39 public:
43  explicit selection() = default;
44 
49  explicit selection(pane_corner quadrant, cell_reference active_cell)
50  : active_cell_(active_cell), sqref_(range_reference(active_cell, active_cell)), pane_(quadrant)
51  {
52  }
53 
58  explicit selection(pane_corner quadrant, cell_reference active_cell, range_reference selected)
59  : active_cell_(active_cell), sqref_(selected), pane_(quadrant)
60  {
61  }
62 
66  bool has_active_cell() const
67  {
68  return active_cell_.is_set();
69  }
70 
75  {
76  return active_cell_.get();
77  }
78 
82  void active_cell(const cell_reference &ref)
83  {
84  active_cell_ = ref;
85  }
86 
90  bool has_sqref() const
91  {
92  return sqref_.is_set();
93  }
94 
99  {
100  return sqref_.get();
101  }
102 
106  void sqref(const range_reference &ref)
107  {
108  sqref_ = ref;
109  }
110 
114  void sqref(const std::string &ref)
115  {
116  sqref(range_reference(ref));
117  }
118 
123  {
124  return pane_;
125  }
126 
130  void pane(pane_corner corner)
131  {
132  pane_ = corner;
133  }
134 
139  bool operator==(const selection &rhs) const
140  {
141  return active_cell_ == rhs.active_cell_
142  && sqref_ == rhs.sqref_
143  && pane_ == rhs.pane_;
144  }
145 
146 private:
150  optional<cell_reference> active_cell_;
151 
157 
161  pane_corner pane_ = pane_corner::top_left;
162 };
163 
164 } // namespace xlnt
void sqref(const range_reference &ref)
Sets the range encompassed by this selection.
Definition: selection.hpp:106
bool has_sqref() const
Returns true if this selection has a defined sqref.
Definition: selection.hpp:90
pane_corner pane() const
Returns the sheet quadrant of this selection.
Definition: selection.hpp:122
void pane(pane_corner corner)
Sets the sheet quadrant of this selection to corner.
Definition: selection.hpp:130
The selected area of a worksheet.
Definition: selection.hpp:37
Enumerates the possible types a cell can be determined by it&#39;s current value.
Definition: cell.hpp:37
selection(pane_corner quadrant, cell_reference active_cell, range_reference selected)
ctor with selected range sqref must contain active_cell
Definition: selection.hpp:58
range_reference sqref() const
Returns the range encompassed by this selection.
Definition: selection.hpp:98
An object used to refer to a cell. References have two parts, the column and the row. In Excel, the reference string A1 refers to the top-left-most cell. A cell_reference can be initialized from a string of this form or a 1-indexed ordered pair of the form column, row.
Definition: cell_reference.hpp:60
void active_cell(const cell_reference &ref)
Sets the active cell to that pointed to by ref.
Definition: selection.hpp:82
pane_corner
Enumeration of the four quadrants of a worksheet
Definition: pane.hpp:47
Many settings in xlnt are allowed to not have a value set. This class encapsulates a value which may ...
Definition: format.hpp:44
bool has_active_cell() const
Returns true if this selection has a defined active cell.
Definition: selection.hpp:66
bool operator==(const selection &rhs) const
Returns true if this selection is equal to rhs based on its active cell, sqref, and pane...
Definition: selection.hpp:139
selection(pane_corner quadrant, cell_reference active_cell)
ctor when no range selected sqref == active_cell
Definition: selection.hpp:49
void sqref(const std::string &ref)
Sets the range encompassed by this selection.
Definition: selection.hpp:114
A range_reference describes a rectangular area of a worksheet with positive width and height defined ...
Definition: range_reference.hpp:36
cell_reference active_cell() const
Returns the cell reference of the active cell.
Definition: selection.hpp:74