File indexing completed on 2024-05-05 05:40:57

0001 /***************************************************************************
0002  *  Copyright (C) 2021 by Renaud Guezennec                               *
0003  *   http://www.rolisteam.org/contact                                      *
0004  *                                                                         *
0005  *   This software 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 "campaignproperties.h"
0021 #include "ui_campaignproperties.h"
0022 
0023 #include <QHeaderView>
0024 
0025 #include "delegates/checkboxdelegate.h"
0026 #include "delegates/colordelegate.h"
0027 #include "delegates/imagepathdelegateitem.h"
0028 #include "diceparser/dicealias.h"
0029 #include "model/characterstatemodel.h"
0030 #include "model/dicealiasmodel.h"
0031 #include "model/thememodel.h"
0032 
0033 CampaignProperties::CampaignProperties(campaign::Campaign* capm, ThemeModel* themeModel, QWidget* parent)
0034     : QDialog(parent), ui(new Ui::CampaignProperties), m_campaign(capm)
0035 {
0036     ui->setupUi(this);
0037     Q_ASSERT(m_campaign);
0038 
0039     setWindowTitle(tr("Campaign Properties"));
0040 
0041     ui->m_tableViewAlias->setModel(m_campaign->diceAliases());
0042     ui->m_stateView->setModel(m_campaign->stateModel());
0043 
0044     ui->m_nameEdit->setText(m_campaign->name());
0045     ui->m_rootDir->setPath(m_campaign->rootDirectory());
0046     ui->m_rootDir->setEnabled(false);
0047     // ui->m_currentTheme->setModel();
0048     // ui->m_currentTheme->setCurrentText();
0049 
0050     QHeaderView* horizontalHeader= ui->m_tableViewAlias->horizontalHeader();
0051     horizontalHeader->setSectionResizeMode(DiceAliasModel::PATTERN, QHeaderView::ResizeToContents);
0052     horizontalHeader->setSectionResizeMode(DiceAliasModel::COMMAND, QHeaderView::Stretch);
0053     horizontalHeader->setSectionResizeMode(DiceAliasModel::METHOD, QHeaderView::ResizeToContents);
0054     horizontalHeader->setSectionResizeMode(DiceAliasModel::COMMENT, QHeaderView::ResizeToContents);
0055 
0056     ui->m_tableViewAlias->setItemDelegateForColumn(DiceAliasModel::METHOD, new rwidgets::CheckBoxDelegate());
0057     ui->m_tableViewAlias->setItemDelegateForColumn(DiceAliasModel::DISABLE, new rwidgets::CheckBoxDelegate());
0058 
0059     connect(ui->m_nameEdit, &QLineEdit::textEdited, m_campaign, &campaign::Campaign::setName);
0060     if(themeModel)
0061     {
0062         ui->m_currentTheme->setModel(themeModel);
0063         auto idx= themeModel->indexOf(m_campaign->currentTheme());
0064         ui->m_currentTheme->setCurrentIndex(idx);
0065     }
0066     ui->m_diskUsageLbl->setText(QLocale::system().formattedDataSize(m_campaign->diskUsage()));
0067     ui->m_fileCountLbl->setText(tr("%n file(s)", "", m_campaign->fileCount()));
0068 
0069     connect(ui->m_addDiceAliasAct, &QToolButton::clicked, m_campaign, &campaign::Campaign::addAlias);
0070     connect(ui->m_delDiceAliasAct, &QToolButton::clicked, this,
0071             [this]() { m_campaign->deleteAlias(ui->m_tableViewAlias->currentIndex()); });
0072     connect(ui->m_upDiceAliasAct, &QToolButton::clicked, this,
0073             [this]() { m_campaign->moveAlias(ui->m_tableViewAlias->currentIndex(), campaign::Campaign::Move::UP); });
0074     connect(ui->m_downDiceAliasAct, &QToolButton::clicked, this,
0075             [this]() { m_campaign->moveAlias(ui->m_tableViewAlias->currentIndex(), campaign::Campaign::Move::DOWN); });
0076     connect(ui->m_topDiceAliasAct, &QToolButton::clicked, this,
0077             [this]() { m_campaign->moveAlias(ui->m_tableViewAlias->currentIndex(), campaign::Campaign::Move::TOP); });
0078     connect(ui->m_bottomDiceAliasAct, &QToolButton::clicked, this,
0079             [this]()
0080             { m_campaign->moveAlias(ui->m_tableViewAlias->currentIndex(), campaign::Campaign::Move::BOTTOM); });
0081     connect(ui->m_testPushButton, &QToolButton::clicked, this,
0082             [this]
0083             {
0084                 auto input= ui->m_cmdDiceEdit->text();
0085                 auto const& aliases= m_campaign->diceAliases()->aliases();
0086                 for(auto const& alias : aliases)
0087                 {
0088                     if(!alias)
0089                         continue;
0090 
0091                     alias->resolved(input);
0092                 }
0093                 ui->m_convertedCmdEdit->setText(input);
0094             });
0095 
0096     // States
0097     connect(ui->m_addCharacterStateAct, &QToolButton::clicked, m_campaign, &campaign::Campaign::addState);
0098     connect(ui->m_delCharceterStateAct, &QToolButton::clicked, m_campaign,
0099             [this]() { m_campaign->deleteState(ui->m_stateView->currentIndex()); });
0100     connect(ui->m_upCharacterStateAct, &QToolButton::clicked, this,
0101             [this]() { m_campaign->moveState(ui->m_stateView->currentIndex(), campaign::Campaign::Move::UP); });
0102 
0103     connect(ui->m_downCharacterStateAct, &QToolButton::clicked, this,
0104             [this]() { m_campaign->moveState(ui->m_stateView->currentIndex(), campaign::Campaign::Move::DOWN); });
0105     connect(ui->m_topCharacterStateAct, &QToolButton::clicked, this,
0106             [this]() { m_campaign->moveState(ui->m_stateView->currentIndex(), campaign::Campaign::Move::TOP); });
0107     connect(ui->m_bottomCharacterStateAct, &QToolButton::clicked, this,
0108             [this]() { m_campaign->moveState(ui->m_stateView->currentIndex(), campaign::Campaign::Move::BOTTOM); });
0109 
0110     ui->m_stateView->setItemDelegateForColumn(1, new rwidgets::ColorDelegate(this));
0111     ui->m_stateView->setItemDelegateForColumn(
0112         2, new rwidgets::ImagePathDelegateItem(m_campaign->directory(campaign::Campaign::Place::STATE_ROOT), this));
0113 }
0114 
0115 CampaignProperties::~CampaignProperties()
0116 {
0117     delete ui;
0118 }
0119 
0120 void CampaignProperties::setCurrentTab(Tab tab)
0121 {
0122     QHash<Tab, int> indexes{{Tab::Properties, 2}, {Tab::Dice, 0}, {Tab::States, 1}};
0123 
0124     auto idx= indexes.value(tab);
0125     ui->m_tabwidget->setCurrentIndex(idx);
0126 }