mirror-chatterino2/src/messages/Selection.hpp

85 lines
1.8 KiB
C++
Raw Normal View History

2018-01-04 23:50:30 +01:00
#pragma once
#include <utility>
2018-01-04 23:50:30 +01:00
namespace chatterino {
2018-01-04 23:50:30 +01:00
struct SelectionItem {
int messageIndex;
int charIndex;
SelectionItem()
{
2018-01-16 00:26:04 +01:00
this->messageIndex = 0;
this->charIndex = 0;
2018-01-04 23:50:30 +01:00
}
SelectionItem(int _messageIndex, int _charIndex)
{
this->messageIndex = _messageIndex;
2018-01-16 00:26:04 +01:00
2018-01-04 23:50:30 +01:00
this->charIndex = _charIndex;
}
2018-01-16 00:26:04 +01:00
bool operator<(const SelectionItem &b) const
{
if (this->messageIndex < b.messageIndex) {
return true;
}
2018-08-06 21:17:03 +02:00
if (this->messageIndex == b.messageIndex &&
this->charIndex < b.charIndex) {
2018-01-16 00:26:04 +01:00
return true;
}
return false;
}
bool operator>(const SelectionItem &b) const
2018-01-04 23:50:30 +01:00
{
2018-08-11 14:20:53 +02:00
return this->operator!=(b) && b.operator<(*this);
2018-01-04 23:50:30 +01:00
}
2018-01-16 00:26:04 +01:00
bool operator==(const SelectionItem &b) const
2018-01-04 23:50:30 +01:00
{
2018-08-06 21:17:03 +02:00
return this->messageIndex == b.messageIndex &&
this->charIndex == b.charIndex;
2018-01-04 23:50:30 +01:00
}
bool operator!=(const SelectionItem &b) const
{
return this->operator==(b);
}
2018-01-04 23:50:30 +01:00
};
struct Selection {
SelectionItem start;
SelectionItem end;
SelectionItem selectionMin;
SelectionItem selectionMax;
2018-01-04 23:50:30 +01:00
Selection() = default;
2018-01-04 23:50:30 +01:00
Selection(const SelectionItem &start, const SelectionItem &end)
: start(start)
, end(end)
, selectionMin(start)
, selectionMax(end)
2018-01-04 23:50:30 +01:00
{
if (selectionMin > selectionMax) {
std::swap(this->selectionMin, this->selectionMax);
2018-01-04 23:50:30 +01:00
}
}
bool isEmpty() const
{
2018-01-16 00:26:04 +01:00
return this->start == this->end;
2018-01-04 23:50:30 +01:00
}
bool isSingleMessage() const
{
2018-08-06 21:17:03 +02:00
return this->selectionMin.messageIndex ==
this->selectionMax.messageIndex;
2018-01-04 23:50:30 +01:00
}
};
2018-01-16 00:26:04 +01:00
} // namespace chatterino