File indexing completed on 2024-04-28 05:38:02
0001 #include "antagonistboard.h" 0002 #include "ui_antagonistboard.h" 0003 0004 #include <QBuffer> 0005 #include <QByteArray> 0006 #include <QDrag> 0007 #include <QFileDialog> 0008 #include <QJsonArray> 0009 #include <QJsonDocument> 0010 #include <QJsonObject> 0011 #include <QJsonValue> 0012 #include <QMenu> 0013 0014 #include "controller/antagonistboardcontroller.h" 0015 #include "controller/view_controller/imageselectorcontroller.h" 0016 #include "data/campaign.h" 0017 #include "data/campaigneditor.h" 0018 #include "data/character.h" 0019 #include "data/rolisteammimedata.h" 0020 #include "model/genericmodel.h" 0021 #include "model/nonplayablecharactermodel.h" 0022 #include "model/proxystatemodel.h" 0023 #include "rwidgets/delegates/avatardelegate.h" 0024 #include "rwidgets/delegates/statedelegate.h" 0025 #include "rwidgets/delegates/taglistdelegate.h" 0026 #include "rwidgets/dialogs/imageselectordialog.h" 0027 #include "worker/iohelper.h" 0028 #include "worker/utilshelper.h" 0029 0030 namespace campaign 0031 { 0032 namespace 0033 { 0034 template <class T> 0035 T* convertField(CharacterField* field) 0036 { 0037 return dynamic_cast<T*>(field); 0038 } 0039 0040 void setAllRowToHeight(GenericModel* model, int height, QTableView* view) 0041 { 0042 for(int i= 0; i < model->rowCount(); ++i) 0043 { 0044 view->setRowHeight(i, height); 0045 } 0046 } 0047 0048 campaign::FilteredCharacterModel::Definition checkDefinition(QCheckBox* with, QCheckBox* without, QCheckBox* sender) 0049 { 0050 auto filter= campaign::FilteredCharacterModel::All; 0051 if(with->isChecked() && sender == with) 0052 { 0053 if(without->isChecked()) 0054 without->setChecked(false); 0055 filter= campaign::FilteredCharacterModel::With; 0056 } 0057 else if(without->isChecked() && sender == without) 0058 { 0059 if(with->isChecked()) 0060 with->setChecked(false); 0061 filter= campaign::FilteredCharacterModel::Without; 0062 } 0063 return filter; 0064 } 0065 } // namespace 0066 AntagonistBoard::AntagonistBoard(campaign::CampaignEditor* editor, QWidget* parent) 0067 : QWidget(parent) 0068 , ui(new Ui::AntagonistBoard) 0069 , m_ctrl(new AntagonistBoardController(editor)) 0070 , m_createTokenAct(new QAction(tr("Edit Token"))) 0071 , m_cloneCharacterAct(new QAction(tr("Clone Character"))) 0072 , m_changeImageAct(new QAction(tr("Change Image"))) 0073 , m_fullModeAct(new QAction(tr("Main columns"))) 0074 , m_minimalModeAct(new QAction(tr("Minimal Columns"))) 0075 , m_saveTokenAct(new QAction(tr("Save"))) 0076 { 0077 ui->setupUi(this); 0078 setAcceptDrops(true); 0079 0080 ui->m_antogonistView->setModel(m_ctrl->filteredModel()); 0081 ui->m_antogonistView->setDragEnabled(true); 0082 ui->m_antogonistView->setAcceptDrops(true); 0083 ui->m_antogonistView->setDragDropOverwriteMode(false); 0084 ui->m_antogonistView->setDropIndicatorShown(true); 0085 ui->m_antogonistView->setDefaultDropAction(Qt::MoveAction); 0086 ui->m_antogonistView->setDragDropMode(QAbstractItemView::DragDrop); 0087 ui->m_antogonistView->setSelectionMode(QAbstractItemView::ExtendedSelection); 0088 ui->m_antogonistView->setSelectionBehavior(QAbstractItemView::SelectRows); 0089 ui->m_antogonistView->setContextMenuPolicy(Qt::CustomContextMenu); 0090 ui->m_antogonistView->setItemDelegateForColumn(NonPlayableCharacterModel::ColAvatar, new AvatarDelegate(this)); 0091 ui->m_antogonistView->setItemDelegateForColumn(NonPlayableCharacterModel::ColTags, new TagListDelegate(this)); 0092 ui->m_antogonistView->setItemDelegateForColumn(NonPlayableCharacterModel::ColState, 0093 new StateDelegate(m_ctrl->characterStateModel(), this)); 0094 connect(ui->m_antogonistView, &QTableView::customContextMenuRequested, this, &AntagonistBoard::contextualMenu); 0095 m_fullModeAct->setCheckable(true); 0096 m_minimalModeAct->setCheckable(true); 0097 0098 ui->m_currentState->setModel(new ProxyStateModel(m_ctrl->stateModel(), this)); 0099 connect(ui->m_currentState, &QComboBox::currentIndexChanged, this, 0100 [this]() 0101 { 0102 auto idx= ui->m_currentState->currentIndex(); 0103 auto model= m_ctrl->filteredModel(); 0104 auto stateModel= ui->m_currentState->model(); 0105 model->setCharacterStateId( 0106 stateModel->data(stateModel->index(idx, 0), CharacterStateModel::ID).toString()); 0107 }); 0108 0109 ui->m_antogonistView->setIconSize(QSize(64, 64)); 0110 0111 ui->m_saveBtn->setDefaultAction(m_saveTokenAct.get()); 0112 ui->m_advencedBtn->setDefaultAction(ui->m_advencedAct); 0113 connect(ui->m_advencedAct, &QAction::triggered, this, 0114 [this](bool isChecked) 0115 { 0116 ui->m_advencedGroup->setVisible(isChecked); 0117 auto model= m_ctrl->filteredModel(); 0118 model->setAdvanced(isChecked); 0119 }); 0120 0121 ui->m_advencedGroup->setVisible(false); 0122 0123 connect(m_saveTokenAct.get(), &QAction::triggered, this, 0124 [this] 0125 { 0126 auto character= m_ctrl->character(); 0127 0128 character->setName(ui->m_nameEdit->text()); 0129 character->setSize(ui->m_sizeEdit->value()); 0130 character->setInitCommand(ui->m_initCommand->text()); 0131 character->setInitiativeScore(ui->m_initValue->value()); 0132 character->setColor(ui->m_colorSelector->color()); 0133 character->setHealthPointsCurrent(ui->m_currentLife->value()); 0134 character->setHealthPointsMax(ui->m_maxLife->value()); 0135 character->setHealthPointsMin(ui->m_lifeMin->value()); 0136 character->setAvatar(IOHelper::pixmapToData(ui->m_avatarDisplay->pixmap())); 0137 0138 m_ctrl->saveToken(); 0139 m_ctrl->setCharacter(nullptr); 0140 }); 0141 0142 ui->m_antogonistView->installEventFilter(this); 0143 0144 connect(m_fullModeAct.get(), &QAction::toggled, this, 0145 [this](bool val) 0146 { 0147 if(!val) 0148 return; 0149 0150 m_minimalModeAct->setChecked(false); 0151 int i= 0; 0152 for(auto const& col : m_columnsAction) 0153 { 0154 if(i < 4) 0155 col->setChecked(true); 0156 else 0157 col->setChecked(false); 0158 0159 ++i; 0160 } 0161 }); 0162 0163 connect(m_minimalModeAct.get(), &QAction::toggled, this, 0164 [this](bool val) 0165 { 0166 if(!val) 0167 return; 0168 int i= 0; 0169 m_fullModeAct->setChecked(false); 0170 for(auto const& col : m_columnsAction) 0171 { 0172 if(i < 2) 0173 col->setChecked(true); 0174 else 0175 col->setChecked(false); 0176 0177 ++i; 0178 } 0179 }); 0180 0181 if(!editor) 0182 return; 0183 0184 auto cols= editor->campaign()->npcModel()->headers(); 0185 0186 int i= 0; 0187 std::for_each(std::begin(cols), std::end(cols), 0188 [&i, this](const QString& colname) 0189 { 0190 std::unique_ptr<QAction> act(new QAction(colname)); 0191 act->setCheckable(true); 0192 act->setChecked(true); 0193 connect(act.get(), &QAction::toggled, this, &AntagonistBoard::hideColumn); 0194 act->setData(i); 0195 ++i; 0196 m_columnsAction.push_back(std::move(act)); 0197 }); 0198 0199 connect(ui->m_addCharacterAct, &QAction::triggered, this, [this]() { m_ctrl->addCharacter(); }); 0200 connect(ui->m_removeCharacterAct, &QAction::triggered, this, 0201 [this]() 0202 { 0203 auto index= ui->m_antogonistView->currentIndex(); 0204 if(!index.isValid()) 0205 return; 0206 0207 m_ctrl->removeCharacter(index.data(NonPlayableCharacterModel::RoleUuid).toString()); 0208 }); 0209 m_fullModeAct->setChecked(false); 0210 m_minimalModeAct->setChecked(true); 0211 0212 ui->m_addCharacterBtn->setDefaultAction(ui->m_addCharacterAct); 0213 ui->m_removeCharacterBtn->setDefaultAction(ui->m_removeCharacterAct); 0214 0215 ui->m_addPropertyBtn->setDefaultAction(ui->m_addPropertyAct); 0216 ui->m_addActionBtn->setDefaultAction(ui->m_addActionAct); 0217 ui->m_addShapeBtn->setDefaultAction(ui->m_addShapeAct); 0218 0219 ui->m_removeActBtn->setDefaultAction(ui->m_removeActionAct); 0220 ui->m_removeShapeBtn->setDefaultAction(ui->m_removeShapeAct); 0221 ui->m_removePropertyBtn->setDefaultAction(ui->m_removePropertyAct); 0222 0223 connect(ui->m_antogonistView, &DragableTableView::dragItem, this, 0224 [this](QModelIndex index) 0225 { 0226 if(index.column() != NonPlayableCharacterModel::ColAvatar) 0227 return; 0228 auto uuid= index.data(NonPlayableCharacterModel::RoleUuid).toString(); 0229 auto name= index.data(NonPlayableCharacterModel::RoleName).toString(); 0230 auto img= index.data(NonPlayableCharacterModel::RoleAvatar); 0231 auto pix = img.value<QPixmap>(); 0232 0233 if(pix.isNull() || img.isNull()) 0234 return; 0235 QDrag* drag= new QDrag(this); 0236 RolisteamMimeData* mimeData= new RolisteamMimeData(); 0237 0238 mimeData->setNpcUuid(uuid); 0239 mimeData->setImageData(img); 0240 mimeData->setText(name); 0241 drag->setMimeData(mimeData); 0242 drag->setPixmap(helper::utils::roundCornerImage(pix)); 0243 drag->exec(); 0244 }); 0245 0246 connect(m_createTokenAct.get(), &QAction::triggered, this, 0247 [this]() 0248 { 0249 if(m_currentItemId.isEmpty()) 0250 return; 0251 m_ctrl->editCharacter(m_currentItemId); 0252 }); 0253 0254 auto changeImageFunc = [this](const QString& itemId) 0255 { 0256 ImageSelectorController ctrl(false, ImageSelectorController::All, ImageSelectorController::Square); 0257 ImageSelectorDialog dialog(&ctrl, this); 0258 if(QDialog::Accepted != dialog.exec()) 0259 return; 0260 0261 m_ctrl->changeImage(itemId, ctrl.finalImageData()); 0262 }; 0263 0264 connect(m_changeImageAct.get(), &QAction::triggered, m_ctrl.get(), 0265 [this, changeImageFunc]() 0266 { 0267 changeImageFunc(m_currentItemId); 0268 }); 0269 0270 connect(m_ctrl.get(), &AntagonistBoardController::characterChanged, this, 0271 [this]() 0272 { 0273 if(m_ctrl->editingCharacter()) 0274 { 0275 auto character= m_ctrl->character(); 0276 ui->m_nameEdit->setText(character->name()); 0277 ui->m_colorSelector->setColor(character->getColor()); 0278 ui->m_lifeMin->setValue(character->getHealthPointsMin()); 0279 ui->m_maxLife->setValue(character->getHealthPointsMax()); 0280 ui->m_currentLife->setValue(character->getHealthPointsCurrent()); 0281 ui->m_initCommand->setText(character->initCommand()); 0282 ui->m_initValue->setValue(character->getInitiativeScore()); 0283 ui->m_avatarDisplay->setPixmap(IOHelper::dataToPixmap(character->avatar())); 0284 ui->stackedWidget->setCurrentIndex(1); 0285 } 0286 else 0287 { 0288 ui->stackedWidget->setCurrentIndex(0); 0289 } 0290 }); 0291 ui->stackedWidget->setCurrentIndex(0); 0292 0293 ui->m_actionList->setModel(m_ctrl->actionModel()); 0294 ui->m_propertyList->setModel(m_ctrl->propertyModel()); 0295 ui->m_shapeList->setModel(m_ctrl->shapeModel()); 0296 0297 connect(ui->m_addActionAct, &QAction::triggered, this, 0298 [this]() { m_ctrl->appendData(campaign::ModelType::Model_Action); }); 0299 connect(ui->m_addPropertyAct, &QAction::triggered, this, 0300 [this]() { m_ctrl->appendData(campaign::ModelType::Model_Properties); }); 0301 connect(ui->m_addActionAct, &QAction::triggered, this, 0302 [this]() 0303 { 0304 m_ctrl->appendData(campaign::ModelType::Model_Shape); 0305 setAllRowToHeight(m_ctrl->shapeModel(), ui->m_sizeEdit->value(), ui->m_shapeList); 0306 }); 0307 0308 ui->m_removeActionAct->setData(QVariant::fromValue(campaign::ModelType::Model_Action)); 0309 ui->m_removePropertyAct->setData(QVariant::fromValue(campaign::ModelType::Model_Properties)); 0310 ui->m_removeShapeAct->setData(QVariant::fromValue(campaign::ModelType::Model_Shape)); 0311 0312 auto remove= [this]() 0313 { 0314 auto act= qobject_cast<QAction*>(sender()); 0315 auto mode= act->data().value<campaign::ModelType>(); 0316 QModelIndex index; 0317 switch(mode) 0318 { 0319 case campaign::ModelType::Model_Action: 0320 index= ui->m_actionList->currentIndex(); 0321 break; 0322 case campaign::ModelType::Model_Shape: 0323 index= ui->m_shapeList->currentIndex(); 0324 break; 0325 case campaign::ModelType::Model_Properties: 0326 index= ui->m_propertyList->currentIndex(); 0327 break; 0328 } 0329 m_ctrl->removeData(index, mode); 0330 }; 0331 0332 connect(ui->m_antogonistView, &QTableView::doubleClicked, this, [changeImageFunc](const QModelIndex& index){ 0333 if(!index.isValid()) 0334 return; 0335 0336 auto itemId = index.data(NonPlayableCharacterModel::RoleUuid).toString(); 0337 0338 if(itemId.isEmpty()) 0339 return; 0340 0341 switch(index.column()) 0342 { 0343 case NonPlayableCharacterModel::ColAvatar: 0344 changeImageFunc(itemId); 0345 break; 0346 default: 0347 break; 0348 } 0349 0350 0351 }); 0352 connect(ui->m_removeActionAct, &QAction::triggered, this, remove); 0353 connect(ui->m_removePropertyAct, &QAction::triggered, this, remove); 0354 connect(ui->m_removeShapeAct, &QAction::triggered, this, remove); 0355 0356 connect(ui->m_shapeList, &QTableView::doubleClicked, this, 0357 [this](const QModelIndex& index) 0358 { 0359 auto path= index.data().toString(); 0360 auto dir= QDir::homePath(); 0361 0362 if(!path.isEmpty()) 0363 { 0364 QFileInfo info(path); 0365 dir= info.absolutePath(); 0366 } 0367 0368 ImageSelectorController ctrl(false, ImageSelectorController::All, ImageSelectorController::Square); 0369 ImageSelectorDialog dialog(&ctrl, this); 0370 if(QDialog::Accepted != dialog.exec()) 0371 return; 0372 0373 auto data= ctrl.finalImageData(); 0374 // m_shapeModel->setData(index, data); 0375 }); 0376 0377 connect(ui->m_sizeEdit, QOverload<int>::of(&QSpinBox::valueChanged), this, 0378 [=] 0379 { 0380 auto val= ui->m_sizeEdit->value(); 0381 ui->m_shapeList->setIconSize(QSize(val, val)); 0382 // setAllRowToHeight(m_shapeModel, val, ui->m_shapeList); 0383 }); 0384 0385 // sconnect(ui->m_avatarEdit, &QLineEdit::textChanged, this, &AntagonistBoard::updateImage); 0386 connect(ui->m_avatarOpenFileBtn, &QPushButton::clicked, this, 0387 [this]() 0388 { 0389 ImageSelectorController ctrl(true, ImageSelectorController::All, ImageSelectorController::Square); 0390 ImageSelectorDialog dialog(&ctrl, this); 0391 if(QDialog::Accepted != dialog.exec()) 0392 return; 0393 0394 auto data= ctrl.finalImageData(); 0395 updateImage(data); 0396 }); 0397 0398 connect(ui->m_tags, &QLineEdit::textEdited, this, 0399 [this]() 0400 { 0401 auto model= m_ctrl->filteredModel(); 0402 if(model) 0403 model->setTags(ui->m_tags->text()); 0404 }); 0405 0406 auto avatarUpdate= [this]() 0407 { 0408 auto filtered= m_ctrl->filteredModel(); 0409 if(filtered) 0410 filtered->setAvatarDefinition( 0411 checkDefinition(ui->m_withAvatar, ui->m_withoutAvatar, qobject_cast<QCheckBox*>(sender()))); 0412 }; 0413 0414 connect(ui->m_withAvatar, &QCheckBox::clicked, this, avatarUpdate); 0415 connect(ui->m_withoutAvatar, &QCheckBox::clicked, this, avatarUpdate); 0416 0417 auto initScoreUpdate= [this]() 0418 { 0419 auto filtered= m_ctrl->filteredModel(); 0420 if(filtered) 0421 filtered->setInitiativeScoreDef( 0422 checkDefinition(ui->m_withInit, ui->m_withoutInit, qobject_cast<QCheckBox*>(sender()))); 0423 }; 0424 0425 connect(ui->m_withInit, &QCheckBox::clicked, this, initScoreUpdate); 0426 connect(ui->m_withoutInit, &QCheckBox::clicked, this, initScoreUpdate); 0427 0428 auto actionUpdate= [this]() 0429 { 0430 auto filtered= m_ctrl->filteredModel(); 0431 if(filtered) 0432 filtered->setActionDef( 0433 checkDefinition(ui->m_withActions, ui->m_withoutAction, qobject_cast<QCheckBox*>(sender()))); 0434 }; 0435 0436 connect(ui->m_withActions, &QCheckBox::clicked, this, actionUpdate); 0437 connect(ui->m_withoutAction, &QCheckBox::clicked, this, actionUpdate); 0438 0439 auto propertiesUpdate= [this]() 0440 { 0441 auto filtered= m_ctrl->filteredModel(); 0442 if(filtered) 0443 filtered->setPropertiesDef( 0444 checkDefinition(ui->m_withProperties, ui->m_withoutProperties, qobject_cast<QCheckBox*>(sender()))); 0445 }; 0446 0447 connect(ui->m_withProperties, &QCheckBox::clicked, this, propertiesUpdate); 0448 connect(ui->m_withoutProperties, &QCheckBox::clicked, this, propertiesUpdate); 0449 0450 auto shapeUpdate= [this]() 0451 { 0452 auto filtered= m_ctrl->filteredModel(); 0453 if(filtered) 0454 filtered->setShapeDef( 0455 checkDefinition(ui->m_withShape, ui->m_withoutShape, qobject_cast<QCheckBox*>(sender()))); 0456 }; 0457 0458 connect(ui->m_withShape, &QCheckBox::clicked, this, shapeUpdate); 0459 connect(ui->m_withoutShape, &QCheckBox::clicked, this, shapeUpdate); 0460 0461 auto initiativeCmdUpdate= [this]() 0462 { 0463 auto filtered= m_ctrl->filteredModel(); 0464 if(filtered) 0465 filtered->setInitiativeCmdDef( 0466 checkDefinition(ui->m_withInitCmd, ui->m_withoutInitCmd, qobject_cast<QCheckBox*>(sender()))); 0467 }; 0468 0469 connect(ui->m_withInitCmd, &QCheckBox::clicked, this, initiativeCmdUpdate); 0470 connect(ui->m_withoutInitCmd, &QCheckBox::clicked, this, initiativeCmdUpdate); 0471 0472 connect(ui->m_textToExclude, &QLineEdit::textEdited, this, 0473 [this](const QString& text) 0474 { 0475 auto model= m_ctrl->filteredModel(); 0476 if(model) 0477 model->setExclude(text); 0478 }); 0479 0480 connect(ui->m_exludedTags, &QLineEdit::textEdited, this, 0481 [this](const QString& text) 0482 { 0483 auto model= m_ctrl->filteredModel(); 0484 if(model) 0485 model->setExcludeTags(text); 0486 }); 0487 auto updateHealth= [this]() 0488 { 0489 QCheckBox* sdr= qobject_cast<QCheckBox*>(sender()); 0490 auto hlState= FilteredCharacterModel::HealthState::HS_All; 0491 0492 if(sdr == ui->m_healthMin && ui->m_healthMin->isChecked()) 0493 { 0494 hlState= FilteredCharacterModel::HealthState::HS_Dead; 0495 ui->m_injured->setChecked(false); 0496 ui->m_fullHealth->setChecked(false); 0497 } 0498 else if(sdr == ui->m_injured && ui->m_injured->isChecked()) 0499 { 0500 hlState= FilteredCharacterModel::HealthState::HS_Injured; 0501 ui->m_healthMin->setChecked(false); 0502 ui->m_fullHealth->setChecked(false); 0503 } 0504 else if(sdr == ui->m_fullHealth && ui->m_fullHealth->isChecked()) 0505 { 0506 hlState= FilteredCharacterModel::HealthState::HS_Full; 0507 ui->m_healthMin->setChecked(false); 0508 ui->m_injured->setChecked(false); 0509 } 0510 auto filtered= m_ctrl->filteredModel(); 0511 if(filtered) 0512 filtered->setHlState(hlState); 0513 }; 0514 connect(ui->m_healthMin, &QCheckBox::clicked, this, updateHealth); 0515 connect(ui->m_injured, &QCheckBox::clicked, this, updateHealth); 0516 connect(ui->m_fullHealth, &QCheckBox::clicked, this, updateHealth); 0517 0518 ui->m_colorCombo->setModel(m_ctrl->colorModel()); 0519 ui->m_currentState->setModel(m_ctrl->stateModel()); 0520 0521 connect(ui->m_searchLine, &QLineEdit::textChanged, this, 0522 [this]() { m_ctrl->setSearchText(ui->m_searchLine->text()); }); 0523 0524 #ifndef Q_OS_MAC 0525 ui->m_actionList->setAlternatingRowColors(true); 0526 ui->m_shapeList->setAlternatingRowColors(true); 0527 ui->m_propertyList->setAlternatingRowColors(true); 0528 #endif 0529 } 0530 0531 AntagonistBoard::~AntagonistBoard() 0532 { 0533 delete ui; 0534 } 0535 0536 const std::vector<std::unique_ptr<QAction>>& AntagonistBoard::columnsActions() const 0537 { 0538 return m_columnsAction; 0539 } 0540 0541 void AntagonistBoard::contextualMenu(const QPoint& pos) 0542 { 0543 QMenu menu; 0544 0545 auto index= ui->m_antogonistView->indexAt(pos); 0546 0547 m_currentItemId= index.isValid() ? index.data(NonPlayableCharacterModel::RoleUuid).toString() : QString(); 0548 menu.addAction(ui->m_addCharacterAct); 0549 menu.addAction(m_cloneCharacterAct.get()); 0550 menu.addAction(ui->m_removeCharacterAct); 0551 menu.addAction(m_createTokenAct.get()); 0552 menu.addAction(m_changeImageAct.get()); 0553 menu.addSeparator(); 0554 menu.addAction(m_fullModeAct.get()); 0555 menu.addAction(m_minimalModeAct.get()); 0556 auto colsMenu= menu.addMenu(tr("Show Columns")); 0557 for(auto const& act : m_columnsAction) 0558 { 0559 colsMenu->addAction(act.get()); 0560 } 0561 0562 m_createTokenAct->setEnabled(index.isValid()); 0563 m_cloneCharacterAct->setEnabled(index.isValid()); 0564 ui->m_removeCharacterAct->setEnabled(index.isValid()); 0565 m_changeImageAct->setEnabled(index.isValid()); 0566 0567 menu.exec(ui->m_antogonistView->mapToGlobal(pos)); 0568 } 0569 0570 void AntagonistBoard::updateImage(const QByteArray& data) 0571 { 0572 QPixmap pix; 0573 pix.loadFromData(data); 0574 ui->m_avatarDisplay->setPixmap(pix); 0575 } 0576 0577 void AntagonistBoard::hideColumn() 0578 { 0579 auto act= qobject_cast<QAction*>(sender()); 0580 auto i= act->data().toInt(); 0581 0582 if(act->isChecked()) 0583 ui->m_antogonistView->showColumn(i); 0584 else 0585 ui->m_antogonistView->hideColumn(i); 0586 } 0587 0588 bool AntagonistBoard::eventFilter(QObject* obj, QEvent* event) 0589 { 0590 if(obj == ui->m_antogonistView) 0591 { 0592 /*if(event->type() == QEvent::MouseMove) 0593 { 0594 auto e= dynamic_cast<QMouseEvent*>(event); 0595 if(e) 0596 { 0597 auto index= ui->m_antogonistView->indexAt(e->pos()); 0598 } 0599 }*/ 0600 } 0601 0602 return QWidget::eventFilter(obj, event); 0603 } 0604 0605 bool AntagonistBoard::fullMode() const 0606 { 0607 return m_fullModeAct->isChecked(); 0608 } 0609 0610 void AntagonistBoard::setFullMode(bool newFullMode) 0611 { 0612 if(fullMode() == newFullMode) 0613 return; 0614 m_fullModeAct->setChecked(newFullMode); 0615 emit fullModeChanged(); 0616 } 0617 0618 bool AntagonistBoard::minimalMode() const 0619 { 0620 return m_minimalModeAct->isChecked(); 0621 } 0622 0623 void AntagonistBoard::setMinimalMode(bool newMinimalMode) 0624 { 0625 if(minimalMode() == newMinimalMode) 0626 return; 0627 m_minimalModeAct->setChecked(newMinimalMode); 0628 emit minimalModeChanged(); 0629 } 0630 0631 } // namespace campaign