File indexing completed on 2024-05-19 09:33:50
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 }