#include #include #include #include #include #include #include #include #include #include #include class MainWindowMediator { public: MainWindowMediator &setListOfCardsWidget(std::shared_ptr &iListOfCards) { _listOfCardsWidget = iListOfCards; return *this; } MainWindowMediator &setMainWindow(std::shared_ptr &iMainWindow) { _mainWindow = iMainWindow; return *this; } std::shared_ptr getListOfCardsWidget() { return _listOfCardsWidget; } std::shared_ptr getMainWindow() { return _mainWindow; } private: std::shared_ptr _listOfCardsWidget; std::shared_ptr _mainWindow; }; void configureMainMenuBar(QMenuBar &iMenuBar, MainWindowMediator &iMainWindowMediator) { QMenu *aOpenMenu = iMenuBar.addMenu("File"); aOpenMenu->addAction("Open JSON file", [] { 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) { std::cout << kFilePaths[0].toStdString() << '\n'; } }); aOpenMenu->addAction("Quit", [&iMainWindowMediator] { iMainWindowMediator.getMainWindow()->close(); }); } int main(int argc, char *argv[]) { QApplication aApplication(argc, argv); auto aWindow = std::make_shared(); aWindow->resize(440, 650); // Set Dialog flag for i3 users aWindow->setWindowFlag(Qt::WindowType::Dialog); QGridLayout aLayout(aWindow.get()); QMenuBar aMenuBar; aLayout.addWidget(&aMenuBar, 0, 0); auto aListOfCards = std::make_shared(); aLayout.addWidget(aListOfCards.get(), 1, 0); MainWindowMediator aMainWindowMediator; aMainWindowMediator.setListOfCardsWidget(aListOfCards); aMainWindowMediator.setMainWindow(aWindow); configureMainMenuBar(aMenuBar, aMainWindowMediator); aListOfCards->insertItem(0, "first card"); aListOfCards->insertItem(1, "second card"); aListOfCards->insertItem(2, "third card"); aWindow->show(); aWindow->setWindowTitle("Hearthstone simulator"); return aApplication.exec(); }