#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include class ControlInterface : public QObject { public: ControlInterface& registerListOfCardsWidget(std::shared_ptr& iListOfCards) { _listOfCardsWidget = iListOfCards; return *this; } ControlInterface& registerMainWindow(std::shared_ptr& iMainWindow) { _mainWindow = iMainWindow; return *this; } ControlInterface& registerMainMenuBar(std::shared_ptr& iMenuBar) { _mainMenuBar = iMenuBar; return *this; } ControlInterface& registerRightView(std::shared_ptr& iRightView) { _rightView = iRightView; return *this; } std::shared_ptr listOfCardsWidget() { return _listOfCardsWidget; } std::shared_ptr mainWindow() { return _mainWindow; } std::shared_ptr mainMenuBar() { return _mainMenuBar; } std::shared_ptr rightView() { return _rightView; } ControlInterface& configure() { configureListOfCardsWidget().configureMainMenuBar().configureRightGraphicsView(); return *this; } public slots: void display_card(QListWidgetItem* iItem) { _popUpWindowSelectCard = std::make_shared(_mainWindow.get()); _popUpWindowSelectCard->resize(400, 500); _popUpWindowSelectCard->setWindowFlag(Qt::WindowType::Dialog); _popUpWindowSelectCard->show(); } private: std::shared_ptr _listOfCardsWidget; std::shared_ptr _mainWindow; std::shared_ptr _mainMenuBar; std::shared_ptr _rightView; std::shared_ptr _rightScene; std::vector> _cards; std::shared_ptr _popUpWindowSelectCard; ControlInterface& fillListOfCards(const std::string& iCardsJsonPath) { std::ifstream aCardsJsonFile{iCardsJsonPath}; uint64_t aCardIndex{0}; _cards.clear(); _listOfCardsWidget->clear(); for (auto& aCard : nlohmann::json::parse(aCardsJsonFile)) { _cards.push_back(aCard); _listOfCardsWidget->insertItem(aCardIndex++, std::format("{} ({})", aCard["name"].get(), aCard["id"].get()) .c_str()); } QObject::connect(_listOfCardsWidget.get(), &QListWidget::itemDoubleClicked, this, &ControlInterface::display_card); _listOfCardsWidget->setVisible(true); _listOfCardsWidget->setFixedWidth(_listOfCardsWidget->sizeHintForColumn(0) + 2 * _listOfCardsWidget->frameWidth() + 20); _mainWindow->resize(1500, 1000); return *this; } ControlInterface& configureListOfCardsWidget() { _listOfCardsWidget->hide(); return *this; } ControlInterface& configureMainMenuBar() { QMenu* aOpenMenu = _mainMenuBar->addMenu("File"); aOpenMenu->addAction("Open JSON file", [this] { QFileDialog aFileDialog; aFileDialog.setWindowTitle("Choose JSON file"); QDir aCurrentDir{QDir::currentPath()}; aFileDialog.setDirectory(aCurrentDir); aFileDialog.setFileMode(QFileDialog::ExistingFile); aFileDialog.setOption(QFileDialog::ShowDirsOnly, false); aFileDialog.setNameFilter("*.json"); aFileDialog.exec(); const QStringList kFilePaths{aFileDialog.selectedFiles()}; if (kFilePaths.size() > 0) { fillListOfCards(kFilePaths[0].toStdString()); _rightView->setVisible(true); } }); aOpenMenu->addAction("Quit", [this] { _mainWindow->close(); }); return *this; } ControlInterface& configureRightGraphicsView() { _rightScene = std::make_shared(); QGraphicsRectItem* rect = _rightScene->addRect(QRectF(0, 0, 100, 100)); QGraphicsItem* item = _rightScene->itemAt(50, 50, QTransform()); _rightView->setScene(_rightScene.get()); _rightView->hide(); return *this; } }; // int main(int argc, // char* argv[]) //{ // QApplication aApplication(argc, argv); // auto aWindow = std::make_shared(); // aWindow->resize(400, 50); // // Set Dialog flag for i3 users // aWindow->setWindowFlag(Qt::WindowType::Dialog); // // QGridLayout aLayout(aWindow.get()); // QHBoxLayout aHLayout(aLayout.widget()); // auto aMenuBar = std::make_shared(); // aLayout.addWidget(aMenuBar.get(), 0, 0); // auto aListOfCards = std::make_shared(); // aLayout.addLayout(&aHLayout, 1, 0); // aHLayout.addWidget(aListOfCards.get()); // auto aRightView = std::make_shared(); // aHLayout.addWidget(aRightView.get()); // // ControlInterface aControlInterface; // aControlInterface.registerListOfCardsWidget(aListOfCards) // .registerMainWindow(aWindow) // .registerMainMenuBar(aMenuBar) // .registerRightView(aRightView) // .configure(); // aWindow->show(); // aWindow->setWindowTitle("Hearthstone simulator"); // return aApplication.exec(); // } class ControlCentre : public QObject { Q_OBJECT public: /* view */ public slots: void setView(/* View */); signals: void viewSelected(/* selected view */); private: }; auto main(int argc, char* argv[]) -> int { QApplication aApplication(argc, argv); auto aWindow = std::make_shared(); aWindow->resize(1400, 800); // Set Dialog flag for i3 users aWindow->setWindowFlag(Qt::WindowType::Dialog); aWindow->show(); aWindow->setWindowTitle("Hearthstone simulator"); return aApplication.exec(); }