File indexing completed on 2024-04-28 05:38:03

0001 /***************************************************************************
0002  *   Copyright (C) 2009 by Renaud Guezennec                             *
0003  *   https://rolisteam.org/contact                   *
0004  *                                                                         *
0005  *   Rolisteam is free software; you can redistribute it and/or modify     *
0006  *   it under the terms of the GNU General Public License as published by  *
0007  *   the Free Software Foundation; either version 2 of the License, or     *
0008  *   (at your option) any later version.                                   *
0009  *                                                                         *
0010  *   This program is distributed in the hope that it will be useful,       *
0011  *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
0012  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
0013  *   GNU General Public License for more details.                          *
0014  *                                                                         *
0015  *   You should have received a copy of the GNU General Public License     *
0016  *   along with this program; if not, write to the                         *
0017  *   Free Software Foundation, Inc.,                                       *
0018  *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
0019  ***************************************************************************/
0020 #include "campaigndock.h"
0021 
0022 #include <QCloseEvent>
0023 #include <QDebug>
0024 #include <QFileSystemModel>
0025 #include <QHBoxLayout>
0026 #include <QHeaderView>
0027 #include <QLineEdit>
0028 #include <QTreeView>
0029 
0030 #include "data/campaign.h"
0031 #include "data/campaigneditor.h"
0032 #include "model/mediamodel.h"
0033 
0034 #include "ui_campaigndock.h"
0035 
0036 namespace campaign
0037 {
0038 CampaignDock::CampaignDock(CampaignEditor* ctrl, QWidget* parent)
0039     : QDockWidget(parent)
0040     , m_ui(new Ui::CampaignDock)
0041     , m_campaignEditor(ctrl)
0042     , m_model(new MediaModel(ctrl ? ctrl->campaign() : nullptr))
0043     , m_filteredModel(new MediaFilteredModel)
0044 {
0045     m_ui->setupUi(this);
0046     setObjectName("CampaignDock");
0047     m_ui->m_view->setCampaign(ctrl->campaign());
0048 
0049     setWindowTitle(tr("Campaign Content"));
0050 
0051     m_ui->m_typeCombobox->addItem(tr("All"), QVariant::fromValue(Core::MediaType::Unknown));
0052     m_ui->m_typeCombobox->addItem(tr("AudioFile"), QVariant::fromValue(Core::MediaType::AudioFile));
0053     m_ui->m_typeCombobox->addItem(tr("CharacterSheet"), QVariant::fromValue(Core::MediaType::CharacterSheetFile));
0054     m_ui->m_typeCombobox->addItem(tr("Image"), QVariant::fromValue(Core::MediaType::ImageFile));
0055     m_ui->m_typeCombobox->addItem(tr("Map"), QVariant::fromValue(Core::MediaType::MapFile));
0056     m_ui->m_typeCombobox->addItem(tr("Mindmap"), QVariant::fromValue(Core::MediaType::MindmapFile));
0057     m_ui->m_typeCombobox->addItem(tr("PDF"), QVariant::fromValue(Core::MediaType::PdfFile));
0058     m_ui->m_typeCombobox->addItem(tr("PlayList"), QVariant::fromValue(Core::MediaType::PlayListFile));
0059     m_ui->m_typeCombobox->addItem(tr("Text"), QVariant::fromValue(Core::MediaType::TextFile));
0060     m_ui->m_typeCombobox->addItem(tr("Token"), QVariant::fromValue(Core::MediaType::TokenFile));
0061     m_ui->m_typeCombobox->addItem(tr("WebPage"), QVariant::fromValue(Core::MediaType::WebpageFile));
0062 
0063     connect(this, &CampaignDock::campaignChanged, this,
0064             [this]() { m_model->setCampaign(m_campaignEditor->campaign()); });
0065     connect(m_ui->m_view, &CampaignView::openAs, this, &CampaignDock::openResource);
0066     connect(m_ui->m_view, &CampaignView::removeSelection, this, &CampaignDock::removeFile);
0067 
0068     m_filteredModel->setSourceModel(m_model.get());
0069     m_ui->m_view->setModel(m_filteredModel.get());
0070 
0071     connect(m_ui->m_patternEdit, &QLineEdit::textEdited, this,
0072             [this]() { m_filteredModel->setPattern(m_ui->m_patternEdit->text()); });
0073 
0074     connect(m_ui->m_typeCombobox, QOverload<int>::of(&QComboBox::currentIndexChanged), this,
0075             [this]() { m_filteredModel->setType(m_ui->m_typeCombobox->currentData().value<Core::MediaType>()); });
0076 
0077     connect(m_model.get(), &MediaModel::performCommand, m_campaignEditor, &CampaignEditor::doCommand);
0078 
0079     m_ui->m_view->setDragEnabled(true);
0080     m_ui->m_view->setAcceptDrops(true);
0081     m_ui->m_view->setDropIndicatorShown(true);
0082     m_ui->m_view->setDefaultDropAction(Qt::MoveAction);
0083     m_ui->m_view->setSelectionMode(QAbstractItemView::ExtendedSelection);
0084     m_ui->m_view->setAlternatingRowColors(true);
0085 }
0086 CampaignDock::~CampaignDock() {}
0087 
0088 void CampaignDock::setCampaign(CampaignEditor* campaign)
0089 {
0090     if(m_campaignEditor == campaign)
0091         return;
0092     m_campaignEditor= campaign;
0093     emit campaignChanged();
0094 }
0095 void CampaignDock::closeEvent(QCloseEvent* event)
0096 {
0097     QWidget::closeEvent(event);
0098     if(event->isAccepted())
0099     {
0100         // emit changeVisibility(false);
0101     }
0102 }
0103 } // namespace campaign