File indexing completed on 2024-04-14 05:44:08
0001 /* 0002 SPDX-FileCopyrightText: 2008 Robert Knight <robertknight@gmail.com> 0003 0004 SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 // Own 0008 #include "CopyInputDialog.h" 0009 0010 // Qt 0011 #include <QSortFilterProxyModel> 0012 0013 // Konsole 0014 #include "CheckableSessionModel.h" 0015 #include "ui_CopyInputDialog.h" 0016 0017 #include <KLocalizedString> 0018 #include <QDialogButtonBox> 0019 #include <QPushButton> 0020 #include <QVBoxLayout> 0021 0022 using namespace Konsole; 0023 0024 CopyInputDialog::CopyInputDialog(QWidget *parent) 0025 : QDialog(parent) 0026 , _ui(nullptr) 0027 , _model(nullptr) 0028 , _masterSession(nullptr) 0029 { 0030 setWindowTitle(i18n("Copy Input")); 0031 auto buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel); 0032 auto mainWidget = new QWidget(this); 0033 auto mainLayout = new QVBoxLayout; 0034 setLayout(mainLayout); 0035 mainLayout->addWidget(mainWidget); 0036 QPushButton *okButton = buttonBox->button(QDialogButtonBox::Ok); 0037 okButton->setDefault(true); 0038 connect(buttonBox, &QDialogButtonBox::accepted, this, &CopyInputDialog::accept); 0039 connect(buttonBox, &QDialogButtonBox::rejected, this, &CopyInputDialog::reject); 0040 mainLayout->addWidget(buttonBox); 0041 0042 setWindowModality(Qt::WindowModal); 0043 0044 _ui = new Ui::CopyInputDialog(); 0045 _ui->setupUi(mainWidget); 0046 0047 connect(_ui->selectAllButton, &QPushButton::clicked, this, &Konsole::CopyInputDialog::selectAll); 0048 connect(_ui->deselectAllButton, &QPushButton::clicked, this, &Konsole::CopyInputDialog::deselectAll); 0049 0050 _ui->filterEdit->setClearButtonEnabled(true); 0051 _ui->filterEdit->setFocus(); 0052 0053 _model = new CheckableSessionModel(parent); 0054 _model->setCheckColumn(1); 0055 _model->setSessions(SessionManager::instance()->sessions()); 0056 0057 auto filterProxyModel = new QSortFilterProxyModel(this); 0058 filterProxyModel->setDynamicSortFilter(true); 0059 filterProxyModel->setFilterCaseSensitivity(Qt::CaseInsensitive); 0060 filterProxyModel->setSourceModel(_model); 0061 filterProxyModel->setFilterKeyColumn(-1); 0062 0063 connect(_ui->filterEdit, &QLineEdit::textChanged, filterProxyModel, &QSortFilterProxyModel::setFilterFixedString); 0064 0065 _ui->sessionList->setModel(filterProxyModel); 0066 _ui->sessionList->setColumnHidden(0, true); // Hide number column 0067 _ui->sessionList->header()->hide(); 0068 } 0069 0070 CopyInputDialog::~CopyInputDialog() 0071 { 0072 delete _ui; 0073 } 0074 0075 void CopyInputDialog::setChosenSessions(const QSet<Session *> &sessions) 0076 { 0077 QSet<Session *> checked = sessions; 0078 if (!_masterSession.isNull()) { 0079 checked.insert(_masterSession); 0080 } 0081 0082 _model->setCheckedSessions(checked); 0083 } 0084 0085 QSet<Session *> CopyInputDialog::chosenSessions() const 0086 { 0087 return _model->checkedSessions(); 0088 } 0089 0090 void CopyInputDialog::setMasterSession(Session *session) 0091 { 0092 if (!_masterSession.isNull()) { 0093 _model->setCheckable(_masterSession, true); 0094 } 0095 0096 _model->setCheckable(session, false); 0097 QSet<Session *> checked = _model->checkedSessions(); 0098 checked.insert(session); 0099 _model->setCheckedSessions(checked); 0100 0101 _masterSession = session; 0102 } 0103 0104 void CopyInputDialog::setSelectionChecked(bool checked) 0105 { 0106 QAbstractItemModel *model = _ui->sessionList->model(); 0107 int rows = model->rowCount(); 0108 0109 const QModelIndexList selected = _ui->sessionList->selectionModel()->selectedIndexes(); 0110 0111 if (selected.count() > 1) { 0112 for (const QModelIndex &index : selected) { 0113 setRowChecked(index.row(), checked); 0114 } 0115 } else { 0116 for (int i = 0; i < rows; i++) { 0117 setRowChecked(i, checked); 0118 } 0119 } 0120 } 0121 0122 void CopyInputDialog::setRowChecked(int row, bool checked) 0123 { 0124 QAbstractItemModel *model = _ui->sessionList->model(); 0125 QModelIndex index = model->index(row, _model->checkColumn()); 0126 model->setData(index, static_cast<int>(checked ? Qt::Checked : Qt::Unchecked), Qt::CheckStateRole); 0127 } 0128 0129 #include "moc_CopyInputDialog.cpp"