Added fceux help page viewer using QHelpEngine.

This commit is contained in:
mjbudd77 2021-08-16 21:44:03 -04:00
parent fa52003d37
commit 6762a1bb7c
3 changed files with 164 additions and 7 deletions

View File

@ -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}

View File

@ -23,6 +23,12 @@
#include <QFile>
#include <QFileDialog>
#include <QStandardPaths>
#include <QMenuBar>
#include <QMenu>
#include <QAction>
#include <QHelpEngine>
#include <QHelpIndexModel>
#include <QHelpContentWidget>
#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);
}
//-----------------------------------------------------------------------------------------------

View File

@ -1,2 +1,38 @@
// HelpPages.h
#pragma once
#include <QDialog>
#include <QSplitter>
#include <QTabWidget>
#include <QTextBrowser>
#include <QCloseEvent>
#include <QHelpEngine>
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);
};