File indexing completed on 2024-04-28 05:50:54
0001 /* 0002 SPDX-FileCopyrightText: 2007-2008 Robert Knight <robertknight@gmail.com> 0003 SPDX-FileCopyrightText: 2012 Jekyll Wu <adaptee@gmail.com> 0004 0005 SPDX-License-Identifier: GPL-2.0-or-later 0006 */ 0007 0008 // Own 0009 #include "widgets/HistorySizeWidget.h" 0010 0011 // Qt 0012 #include <QAbstractButton> 0013 #include <QButtonGroup> 0014 #include <QWhatsThis> 0015 0016 #include <KLocalizedString> 0017 0018 // Konsole 0019 #include "ui_HistorySizeWidget.h" 0020 0021 using namespace Konsole; 0022 0023 HistorySizeWidget::HistorySizeWidget(QWidget *parent) 0024 : QWidget(parent) 0025 , _ui(nullptr) 0026 { 0027 _ui = new Ui::HistorySizeWidget(); 0028 _ui->setupUi(this); 0029 0030 // focus and select the spinner automatically when appropriate 0031 _ui->fixedSizeHistoryButton->setFocusProxy(_ui->historyLineSpinner); 0032 connect(_ui->fixedSizeHistoryButton, &QRadioButton::clicked, _ui->historyLineSpinner, &KPluralHandlingSpinBox::selectAll); 0033 0034 auto modeGroup = new QButtonGroup(this); 0035 modeGroup->addButton(_ui->noHistoryButton); 0036 modeGroup->addButton(_ui->fixedSizeHistoryButton); 0037 modeGroup->addButton(_ui->unlimitedHistoryButton); 0038 connect(modeGroup, static_cast<void (QButtonGroup::*)(QAbstractButton *)>(&QButtonGroup::buttonClicked), this, &Konsole::HistorySizeWidget::buttonClicked); 0039 0040 _ui->historyLineSpinner->setSuffix(ki18ncp("@label:textbox Unit of scrollback", " line", " lines")); 0041 setLineCount(HistorySizeWidget::DefaultLineCount); 0042 0043 connect(_ui->historyLineSpinner, 0044 static_cast<void (KPluralHandlingSpinBox::*)(int)>(&KPluralHandlingSpinBox::valueChanged), 0045 this, 0046 &Konsole::HistorySizeWidget::historySizeChanged); 0047 0048 auto warningButtonSizePolicy = _ui->fixedSizeHistoryWarningButton->sizePolicy(); 0049 warningButtonSizePolicy.setRetainSizeWhenHidden(true); 0050 0051 _ui->fixedSizeHistoryWarningButton->setSizePolicy(warningButtonSizePolicy); 0052 _ui->fixedSizeHistoryWarningButton->hide(); 0053 connect(_ui->fixedSizeHistoryButton, &QAbstractButton::toggled, _ui->historyLineSpinner, &QWidget::setEnabled); 0054 connect(_ui->fixedSizeHistoryButton, &QAbstractButton::toggled, _ui->fixedSizeHistoryWarningButton, &QWidget::setVisible); 0055 connect(_ui->fixedSizeHistoryWarningButton, &QToolButton::clicked, this, [this](bool) { 0056 const QString message = i18nc("@info:whatsthis", 0057 "When using this option, the scrollback data will be saved to RAM. If you choose a huge value, your system may run out " 0058 "of free RAM and cause serious issues with your system."); 0059 const QPoint pos = QPoint(_ui->fixedSizeHistoryWrapper->width() / 2, _ui->fixedSizeHistoryWrapper->height()); 0060 QWhatsThis::showText(_ui->fixedSizeHistoryWrapper->mapToGlobal(pos), message, _ui->fixedSizeHistoryWrapper); 0061 }); 0062 0063 _ui->unlimitedHistoryWarningButton->setSizePolicy(warningButtonSizePolicy); 0064 _ui->unlimitedHistoryWarningButton->hide(); 0065 connect(_ui->unlimitedHistoryButton, &QAbstractButton::toggled, _ui->unlimitedHistoryWarningButton, &QWidget::setVisible); 0066 connect(_ui->unlimitedHistoryWarningButton, &QToolButton::clicked, this, [this](bool) { 0067 const auto message = 0068 xi18nc("@info:tooltip", 0069 "When using this option, the scrollback data will be written unencrypted to temporary files. Those temporary files will be " 0070 "deleted automatically when Konsole is closed in a normal manner.<nl/>Use <emphasis>Settings → Configure Konsole → Temporary " 0071 "Files</emphasis> to select the location of the temporary files."); 0072 const QPoint pos = QPoint(_ui->unlimitedHistoryWrapper->width() / 2, _ui->unlimitedHistoryWrapper->height()); 0073 QWhatsThis::showText(_ui->unlimitedHistoryWrapper->mapToGlobal(pos), message, _ui->unlimitedHistoryWrapper); 0074 }); 0075 0076 // Make radio buttons height equal 0077 // fixedSizeHistoryWrapper contains radio + spinbox + toolbutton, so it 0078 // has height always equal to or larger than single radio button, and 0079 // radio + toolbutton 0080 const int radioButtonHeight = _ui->fixedSizeHistoryWrapper->sizeHint().height(); 0081 _ui->noHistoryButton->setMinimumHeight(radioButtonHeight); 0082 _ui->unlimitedHistoryButton->setMinimumHeight(radioButtonHeight); 0083 } 0084 0085 HistorySizeWidget::~HistorySizeWidget() 0086 { 0087 delete _ui; 0088 } 0089 0090 void HistorySizeWidget::buttonClicked(QAbstractButton *) 0091 { 0092 Enum::HistoryModeEnum selectedMode = mode(); 0093 Q_EMIT historyModeChanged(selectedMode); 0094 } 0095 0096 void HistorySizeWidget::setMode(Enum::HistoryModeEnum aMode) 0097 { 0098 if (aMode == Enum::NoHistory) { 0099 _ui->noHistoryButton->setChecked(true); 0100 } else if (aMode == Enum::FixedSizeHistory) { 0101 _ui->fixedSizeHistoryButton->setChecked(true); 0102 } else if (aMode == Enum::UnlimitedHistory) { 0103 _ui->unlimitedHistoryButton->setChecked(true); 0104 } 0105 } 0106 0107 Enum::HistoryModeEnum HistorySizeWidget::mode() const 0108 { 0109 if (_ui->noHistoryButton->isChecked()) { 0110 return Enum::NoHistory; 0111 } else if (_ui->fixedSizeHistoryButton->isChecked()) { 0112 return Enum::FixedSizeHistory; 0113 } else if (_ui->unlimitedHistoryButton->isChecked()) { 0114 return Enum::UnlimitedHistory; 0115 } 0116 0117 Q_ASSERT(false); 0118 return Enum::NoHistory; 0119 } 0120 0121 void HistorySizeWidget::setLineCount(int lines) 0122 { 0123 _ui->historyLineSpinner->setValue(lines); 0124 _ui->historyLineSpinner->setSingleStep(lines / 10); 0125 } 0126 0127 int HistorySizeWidget::lineCount() const 0128 { 0129 return _ui->historyLineSpinner->value(); 0130 } 0131 0132 int HistorySizeWidget::preferredLabelHeight() 0133 { 0134 Q_ASSERT(_ui); 0135 Q_ASSERT(_ui->noHistoryButton); 0136 0137 return _ui->fixedSizeHistoryWrapper->sizeHint().height(); 0138 } 0139 0140 #include "moc_HistorySizeWidget.cpp"