File indexing completed on 2024-04-28 16:24:37

0001 /* This file is part of the KDE project
0002  * Copyright (C) 2009, 2012 Dag Andersen <danders@get2net.dk>
0003  *
0004  * This library is free software; you can redistribute it and/or
0005  * modify it under the terms of the GNU Library General Public
0006  * License as published by the Free Software Foundation; either
0007  * version 2 of the License, or (at your option) any later version.
0008  *
0009  * This library is distributed in the hope that it will be useful,
0010  * but WITHOUT ANY WARRANTY; without even the implied warranty of
0011  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
0012  * Library General Public License for more details.
0013  *
0014  * You should have received a copy of the GNU Library General Public License
0015  * along with this library; see the file COPYING.LIB.  If not, write to
0016  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
0017  * Boston, MA 02110-1301, USA.
0018  */
0019 
0020 // clazy:excludeall=qstring-arg
0021 #include "kptschedulesdocker.h"
0022 
0023 #include "kptschedule.h"
0024 #include <kptdebug.h>
0025 
0026 #include <KLocalizedString>
0027 
0028 #include <QAbstractItemView>
0029 #include <QModelIndex>
0030 #include <QModelIndexList>
0031 #include <QTreeView>
0032 
0033 
0034 namespace KPlato
0035 {
0036 
0037 SchedulesDocker::SchedulesDocker()
0038 {
0039     setWindowTitle(i18n("Schedule Selector"));
0040     m_view = new QTreeView(this);
0041     m_sfModel.setSourceModel(&m_model);
0042     m_view->setModel(&m_sfModel);
0043     m_sfModel.setFilterKeyColumn (ScheduleModel::ScheduleScheduled);
0044     m_sfModel.setFilterRole(Qt::EditRole);
0045     m_sfModel.setFilterFixedString("true");
0046     m_sfModel.setDynamicSortFilter (true);
0047 
0048     for(int c = 1; c <  m_model.columnCount(); ++c) {
0049         m_view->setColumnHidden(c, true);
0050     }
0051     m_view->setHeaderHidden(true);
0052     m_view->setSelectionMode(QAbstractItemView::SingleSelection);
0053     m_view->setSelectionBehavior(QAbstractItemView::SelectRows);
0054 
0055     setWidget(m_view);
0056 
0057     connect(m_view->selectionModel(), &QItemSelectionModel::selectionChanged, this, &SchedulesDocker::slotSelectionChanged);
0058 }
0059 
0060 SchedulesDocker::~SchedulesDocker()
0061 {
0062 }
0063 
0064 void SchedulesDocker::slotSelectionChanged()
0065 {
0066     emit selectionChanged(selectedSchedule());
0067 }
0068 
0069 void SchedulesDocker::setProject(Project *project)
0070 {
0071     debugPlan<<project;
0072     m_model.setProject(project);
0073 }
0074 
0075 ScheduleManager *SchedulesDocker::selectedSchedule() const
0076 {
0077     QModelIndexList lst = m_view->selectionModel()->selectedRows();
0078     Q_ASSERT(lst.count() <= 1);
0079     ScheduleManager *sm = 0;
0080     if (! lst.isEmpty()) {
0081         sm = m_model.manager(m_sfModel.mapToSource(lst.first()));
0082     }
0083     return sm;
0084 }
0085 
0086 void SchedulesDocker::setSelectedSchedule(ScheduleManager *sm)
0087 {
0088     qDebug()<<"setSelectedSchedule:"<<sm<<m_model.index(sm);
0089     QModelIndex idx = m_sfModel.mapFromSource(m_model.index(sm));
0090     if (sm) {
0091         Q_ASSERT(idx.isValid());
0092     }
0093     m_view->selectionModel()->select(idx, QItemSelectionModel::ClearAndSelect);
0094     qDebug()<<"setSelectedSchedule:"<<sm<<idx;
0095 }
0096 
0097 //--------------------
0098 SchedulesDockerFactory::SchedulesDockerFactory()
0099 {
0100 }
0101 
0102 QString SchedulesDockerFactory::id() const
0103 {
0104     return QString("KPlatoSchedulesDocker");
0105 }
0106 
0107 QDockWidget* SchedulesDockerFactory::createDockWidget()
0108 {
0109     return new SchedulesDocker();
0110 }
0111 
0112 } //namespace KPlato