diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 88a30063..491d989a 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -13,13 +13,13 @@ else() endif() if ( ${QT6} ) - find_package( Qt6 COMPONENTS Widgets OpenGL OpenGLWidgets REQUIRED) - add_definitions( ${Qt6Widgets_DEFINITIONS} ${Qt6OpenGLWidgets_DEFINITIONS} ) - include_directories( ${Qt6Widgets_INCLUDE_DIRS} ${Qt6OpenGLWidgets_INCLUDE_DIRS} ) + find_package( Qt6 COMPONENTS Widgets Help OpenGL OpenGLWidgets REQUIRED) + add_definitions( ${Qt6Widgets_DEFINITIONS} ${Qt6Help_DEFINITIONS} ${Qt6OpenGLWidgets_DEFINITIONS} ) + include_directories( ${Qt6Widgets_INCLUDE_DIRS} ${Qt6Help_INCLUDE_DIRS} ${Qt6OpenGLWidgets_INCLUDE_DIRS} ) else() - find_package( Qt5 COMPONENTS Widgets OpenGL REQUIRED) - add_definitions( ${Qt5Widgets_DEFINITIONS} ) - include_directories( ${Qt5Widgets_INCLUDE_DIRS} ) + find_package( Qt5 COMPONENTS Widgets OpenGL Help REQUIRED) + add_definitions( ${Qt5Widgets_DEFINITIONS} ${Qt5Help_DEFINITIONS} ) + include_directories( ${Qt5Widgets_INCLUDE_DIRS} ${Qt5Help_INCLUDE_DIRS} ) endif() if(WIN32) @@ -534,6 +534,7 @@ endif() target_link_libraries( ${APP_NAME} ${${Qt}Widgets_LIBRARIES} + ${${Qt}Help_LIBRARIES} ${${Qt}OpenGL_LIBRARIES} ${${Qt}OpenGLWidgets_LIBRARIES} ${OPENGL_LDFLAGS} diff --git a/src/drivers/Qt/HelpPages.cpp b/src/drivers/Qt/HelpPages.cpp index 730e5e26..8a42ee76 100644 --- a/src/drivers/Qt/HelpPages.cpp +++ b/src/drivers/Qt/HelpPages.cpp @@ -23,6 +23,12 @@ #include #include #include +#include +#include +#include +#include +#include +#include #include "driver.h" #include "Qt/HelpPages.h" @@ -92,7 +98,12 @@ void consoleWin_t::OpenHelpWindow(std::string subpage) std::string helpFileViewer; g_config->getOption ("SDL.HelpFileViewer", &helpFileViewer ); - helpWin = forkHelpFileViewer( helpFileViewer.c_str(), helpFileName.c_str() ); + //helpWin = forkHelpFileViewer( helpFileViewer.c_str(), helpFileName.c_str() ); + + HelpDialog *win = new HelpDialog(this); + + win->show(); + #endif } @@ -203,3 +214,112 @@ static int forkHelpFileViewer( const char *chmViewer, const char *filepath ) return pid; } #endif + +//----------------------------------------------------------------------------------------------- +//--- Help Page Dialog +//----------------------------------------------------------------------------------------------- +HelpDialog::HelpDialog(QWidget *parent) + : QDialog(parent, Qt::Window) +{ + int useNativeMenuBar; + QMenu *fileMenu; + QMenuBar *menuBar; + QAction *act; + QVBoxLayout *mainLayoutv; + + mainLayoutv = new QVBoxLayout(); + + setLayout( mainLayoutv ); + + menuBar = new QMenuBar(this); + mainLayoutv->setMenuBar( menuBar ); + + // This is needed for menu bar to show up on MacOS + g_config->getOption( "SDL.UseNativeMenuBar", &useNativeMenuBar ); + + menuBar->setNativeMenuBar( useNativeMenuBar ? true : false ); + + //----------------------------------------------------------------------- + // Menu Start + //----------------------------------------------------------------------- + // File + fileMenu = menuBar->addMenu(tr("&File")); + + // File -> Close + act = new QAction(tr("&Close"), this); + act->setShortcut(QKeySequence::Close); + act->setStatusTip(tr("Close Window")); + connect(act, SIGNAL(triggered()), this, SLOT(closeWindow(void)) ); + + fileMenu->addAction(act); + + //----------------------------------------------------------------------- + // Menu End + //----------------------------------------------------------------------- + + helpEngine = new QHelpEngine( + QApplication::applicationDirPath() + + "/fceux.qhc", this); + helpEngine->setupData(); + + hsplitter = new QSplitter( Qt::Horizontal ); + tabWgt = new QTabWidget(); + textViewer = new HelpBrowser( helpEngine ); + + textViewer->setSource( + QUrl("qthelp://TasVideos.fceux/doc/../web/help/fceux.html")); + + tabWgt->addTab( helpEngine->contentWidget(), tr("Contents") ); + tabWgt->addTab( helpEngine->indexWidget() , tr("Index") ); + + hsplitter->addWidget( tabWgt ); + hsplitter->addWidget( textViewer ); + + mainLayoutv->addWidget( hsplitter ); + + connect(helpEngine->contentWidget(), + SIGNAL(linkActivated(QUrl)), + textViewer, SLOT(setSource(QUrl))); + + connect(helpEngine->indexWidget(), + SIGNAL(linkActivated(QUrl, QString)), + textViewer, SLOT(setSource(QUrl))); + +} +//----------------------------------------------------------------------------------------------- +HelpDialog::~HelpDialog(void) +{ + +} +//----------------------------------------------------------------------------------------------- +void HelpDialog::closeEvent(QCloseEvent *event) +{ + //printf("Help Dialog Close Window Event\n"); + done(0); + deleteLater(); + event->accept(); +} +//----------------------------------------------------------------------------------------------- +void HelpDialog::closeWindow(void) +{ + //printf("Close Window\n"); + done(0); + deleteLater(); +} +//----------------------------------------------------------------------------------------------- +//---- Help Browser Class +//----------------------------------------------------------------------------------------------- +HelpBrowser::HelpBrowser(QHelpEngine* helpEngine, + QWidget* parent):QTextBrowser(parent), + helpEngine(helpEngine) +{ +} +//----------------------------------------------------------------------------------------------- +QVariant HelpBrowser::loadResource(int type, const QUrl &name) +{ + if (name.scheme() == "qthelp") + return QVariant(helpEngine->fileData(name)); + else + return QTextBrowser::loadResource(type, name); +} +//----------------------------------------------------------------------------------------------- diff --git a/src/drivers/Qt/HelpPages.h b/src/drivers/Qt/HelpPages.h index 531f6750..6ff7e1e3 100644 --- a/src/drivers/Qt/HelpPages.h +++ b/src/drivers/Qt/HelpPages.h @@ -1,2 +1,38 @@ // HelpPages.h +#pragma once +#include +#include +#include +#include +#include +#include + +class HelpBrowser : public QTextBrowser +{ + public: + HelpBrowser(QHelpEngine* helpEngine, QWidget* parent = 0); + QVariant loadResource (int type, const QUrl& name); + private: + QHelpEngine* helpEngine; +}; + +class HelpDialog : public QDialog +{ + Q_OBJECT + + public: + HelpDialog( QWidget *parent = 0); + ~HelpDialog(void); + + protected: + void closeEvent(QCloseEvent *event); + + QHelpEngine *helpEngine; + QSplitter *hsplitter; + QTabWidget *tabWgt; + HelpBrowser *textViewer; + + public slots: + void closeWindow(void); +};