File indexing completed on 2025-02-02 05:43:09

0001 /*
0002     This file is part of the Okteta Kasten module, made within the KDE community.
0003 
0004     SPDX-FileCopyrightText: 2009 Friedrich W. H. Kossebau <kossebau@kde.org>
0005 
0006     SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0007 */
0008 
0009 #include "readonlybarcontroller.hpp"
0010 
0011 // Kasten core
0012 #include <Kasten/AbstractDocument>
0013 // Kasten ui
0014 #include <Kasten/ToggleButton>
0015 #include <Kasten/StatusBar>
0016 // KF
0017 #include <KLocalizedString>
0018 
0019 namespace Kasten {
0020 
0021 ReadOnlyBarController::ReadOnlyBarController(StatusBar* statusBar)
0022 {
0023     const QString readWriteText = i18nc("@option:check the document is read-write", "Read-write");
0024     const QString readOnlyText = i18nc("@option:check the document is read-only", "Read-only");
0025     mReadOnlyButton = new ToggleButton(QIcon::fromTheme(QStringLiteral("object-unlocked")), QString(), readWriteText, statusBar);
0026     mReadOnlyButton->setCheckedState(QIcon::fromTheme(QStringLiteral("object-locked")), QString(), readOnlyText);
0027     statusBar->addWidget(mReadOnlyButton);
0028     connect(mReadOnlyButton, &QAbstractButton::clicked,
0029             this, &ReadOnlyBarController::setReadOnly);
0030 
0031     setTargetModel(nullptr);
0032 }
0033 
0034 void ReadOnlyBarController::setTargetModel(AbstractModel* model)
0035 {
0036     if (mDocument) {
0037         mDocument->disconnect(mReadOnlyButton);
0038     }
0039 
0040     mDocument = model ? model->findBaseModel<AbstractDocument*>() : nullptr;
0041 
0042     if (mDocument) {
0043         mReadOnlyButton->setChecked(mDocument->isReadOnly());
0044 
0045         connect(mDocument, &AbstractModel::readOnlyChanged,
0046                 mReadOnlyButton, &QAbstractButton::setChecked);
0047         connect(mDocument, &AbstractModel::modifiableChanged,
0048                 mReadOnlyButton, &QWidget::setEnabled);
0049     } else {
0050         mReadOnlyButton->setChecked(false);
0051     }
0052 
0053     mReadOnlyButton->setEnabled(mDocument ? mDocument->isModifiable() : false);
0054 }
0055 
0056 void ReadOnlyBarController::setReadOnly(bool isReadOnly)
0057 {
0058     mDocument->setReadOnly(isReadOnly);
0059 }
0060 
0061 }
0062 
0063 #include "moc_readonlybarcontroller.cpp"