RedPanda-CPP/RedPandaIDE/qsynedit/MiscClasses.cpp

336 lines
6.5 KiB
C++

/*
* Copyright (C) 2020-2022 Roy Qu (royqh1979@gmail.com)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
#include "MiscClasses.h"
#include "algorithm"
SynGutter::SynGutter(QObject *parent):
QObject(parent)
{
mFont = QFont("Courier New",10);
mColor= Qt::lightGray;
mBorderColor = Qt::transparent;
mTextColor = Qt::black;
mShowLineNumbers = true;
mDigitCount = 1;
mLeadingZeros = false;
mLeftOffset = 16;
mRightOffset = 2;
mVisible = true;
mUseFontStyle = true;
mAutoSize = true;
mAutoSizeDigitCount = mDigitCount;
mBorderStyle = SynGutterBorderStyle::Middle;
mLineNumberStart = 1;
mGradient = false;
mGradientStartColor = Qt::transparent;
mGradientEndColor = Qt::transparent;
mGradientSteps = 48;
}
QFont SynGutter::font() const
{
return mFont;
}
void SynGutter::setFont(const QFont &font)
{
if (mFont != font) {
mFont = font;
setChanged();
}
}
bool SynGutter::autoSize() const
{
return mAutoSize;
}
void SynGutter::setAutoSize(bool value)
{
if (mAutoSize != value) {
mAutoSize = value;
setChanged();
}
}
void SynGutter::setChanged()
{
emit changed();
}
const QColor &SynGutter::activeLineTextColor() const
{
return mActiveLineTextColor;
}
void SynGutter::setActiveLineTextColor(const QColor &newActiveLineTextColor)
{
mActiveLineTextColor = newActiveLineTextColor;
}
QColor SynGutter::textColor() const
{
return mTextColor;
}
void SynGutter::setTextColor(const QColor &value)
{
if (mTextColor!=value) {
mTextColor = value;
setChanged();
}
}
void SynGutter::autoSizeDigitCount(int linesCount)
{
if (mVisible && mAutoSize && mShowLineNumbers) {
linesCount += (mLineNumberStart - 1);
}
int nDigits = std::max(QString::number(linesCount).length(), mDigitCount);
if (mAutoSizeDigitCount!=nDigits) {
mAutoSizeDigitCount = nDigits;
setChanged();
}
}
QString SynGutter::formatLineNumber(int line)
{
line += (mLineNumberStart - 1);
QString result = QString::number(line);
if (mLeadingZeros) {
return QString(mAutoSizeDigitCount - result.length(),'0') + result;
} else {
return result;
}
}
int SynGutter::realGutterWidth(int charWidth)
{
if (!mVisible) {
return 0;
}
if (mShowLineNumbers) {
return mLeftOffset + mRightOffset + mAutoSizeDigitCount * charWidth + 2;
}
return mLeftOffset + mRightOffset;
}
bool SynGutter::visible() const
{
return mVisible;
}
void SynGutter::setVisible(bool visible)
{
if (mVisible!=visible) {
mVisible = visible;
setChanged();
}
}
bool SynGutter::useFontStyle() const
{
return mUseFontStyle;
}
void SynGutter::setUseFontStyle(bool useFontStyle)
{
if (mUseFontStyle!=useFontStyle) {
mUseFontStyle = useFontStyle;
setChanged();
}
}
bool SynGutter::showLineNumbers() const
{
return mShowLineNumbers;
}
void SynGutter::setShowLineNumbers(bool showLineNumbers)
{
if (mShowLineNumbers!=showLineNumbers) {
mShowLineNumbers = showLineNumbers;
setChanged();
}
}
int SynGutter::rightOffset() const
{
return mRightOffset;
}
void SynGutter::setRightOffset(int rightOffset)
{
int value = std::max(0, rightOffset);
if (mRightOffset != value) {
mRightOffset = value;
setChanged();
}
}
int SynGutter::lineNumberStart() const
{
return mLineNumberStart;
}
void SynGutter::setLineNumberStart(int lineNumberStart)
{
int value = std::max(0,lineNumberStart);
if (mLineNumberStart!=value) {
mLineNumberStart = value;
setChanged();
}
}
bool SynGutter::zeroStart()
{
return mLineNumberStart == 0;
}
int SynGutter::leftOffset() const
{
return mLeftOffset;
}
void SynGutter::setLeftOffset(int leftOffset)
{
int value = std::max(0,leftOffset);
if (mLeftOffset != value) {
mLeftOffset = value;
setChanged();
}
}
bool SynGutter::leadingZeros() const
{
return mLeadingZeros;
}
void SynGutter::setLeadingZeros(bool value)
{
if (mLeadingZeros!=value) {
mLeadingZeros = value;
setChanged();
}
}
int SynGutter::gradientSteps() const
{
return mGradientSteps;
}
void SynGutter::setGradientSteps(int value)
{
if (mGradientSteps!=value) {
mGradientSteps = value;
if (mGradientSteps<2)
mGradientSteps = 2;
setChanged();
}
}
QColor SynGutter::gradientEndColor() const
{
return mGradientEndColor;
}
void SynGutter::setGradientEndColor(const QColor &value)
{
if (mGradientEndColor!=value) {
mGradientEndColor = value;
setChanged();
}
}
QColor SynGutter::gradientStartColor() const
{
return mGradientStartColor;
}
void SynGutter::setGradientStartColor(const QColor &value)
{
if (mGradientStartColor!=value) {
mGradientStartColor = value;
setChanged();
}
}
bool SynGutter::gradient() const
{
return mGradient;
}
void SynGutter::setGradient(bool value)
{
if (mGradient!=value){
mGradient = value;
setChanged();
}
}
SynGutterBorderStyle SynGutter::borderStyle() const
{
return mBorderStyle;
}
void SynGutter::setBorderStyle(const SynGutterBorderStyle &value)
{
if (mBorderStyle!=value) {
mBorderStyle = value;
setChanged();
}
}
int SynGutter::digitCount() const
{
return mDigitCount;
}
void SynGutter::setDigitCount(int value)
{
if (mDigitCount != value ) {
mDigitCount = value;
setChanged();
}
}
QColor SynGutter::color() const
{
return mColor;
}
void SynGutter::setColor(const QColor &value)
{
if (mColor!=value) {
mColor = value;
setChanged();
}
}
QColor SynGutter::borderColor() const
{
return mBorderColor;
}
void SynGutter::setBorderColor(const QColor &value)
{
if (mBorderColor!=value) {
mBorderColor = value;
setChanged();
}
}