From d4e55a093d9866457471385f8fd8cff384bc301b Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Wed, 24 Sep 2014 23:46:32 +0000 Subject: [PATCH] Add local HTML help file to help menu. So that a manual can be viewed without an Internet connection a second manual action has been added to the WSJT_X help menu. This shells out to the default web browser with a local file target. The build has been enhanced to install and package the current version of the HTML user manual as downloaded from the project web site at build time The package file locations have been adjusted to be compatible with the QStandardPaths class so that its locate() method can be used to portably access resources like this local help file git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@4359 ab8295b8-cf94-4d9e-aec4-7959e3be5d79 --- CMake/download_html_manual.cmake | 16 ++++++++++ CMakeCPackOptions.cmake.in | 4 +-- CMakeLists.txt | 55 +++++++++++++++++++++++--------- mainwindow.cpp | 18 +++++++++-- mainwindow.h | 3 +- mainwindow.ui | 16 +++++++--- wsjtx_config.h.in | 2 +- 7 files changed, 89 insertions(+), 25 deletions(-) create mode 100644 CMake/download_html_manual.cmake diff --git a/CMake/download_html_manual.cmake b/CMake/download_html_manual.cmake new file mode 100644 index 000000000..08a6affdc --- /dev/null +++ b/CMake/download_html_manual.cmake @@ -0,0 +1,16 @@ +# +# CMake script to fetch the current HTML manual +# +message (STATUS "file: ${URL}/${NAME}") +file ( + DOWNLOAD ${URL}/${NAME} contrib/${NAME} + TIMEOUT 10 + STATUS manual_STATUS + LOG manual_LOG + SHOW_PROGRESS + ) +list (GET manual_STATUS 0 manual_RC) +if (manual_RC) + message (WARNING "${manual_STATUS}") + message (FATAL_ERROR "${manual_LOG}") +endif (manual_RC) diff --git a/CMakeCPackOptions.cmake.in b/CMakeCPackOptions.cmake.in index 8b9ca9154..1e51ab8c2 100644 --- a/CMakeCPackOptions.cmake.in +++ b/CMakeCPackOptions.cmake.in @@ -32,14 +32,14 @@ if (CPACK_GENERATOR MATCHES "NSIS") set (CPACK_PACKAGE_ICON "@PROJECT_SOURCE_DIR@/icons/windows-icons\\installer_logo.bmp") # tell cpack to create links to the doc files set (CPACK_NSIS_MENU_LINKS - "@PROJECT_MANUAL@" "WSJT-X Documentation" + "@PROJECT_MANUAL_DIRECTORY_URL@@PROJECT_MANUAL@" "WSJT-X Documentation" "@PROJECT_HOMEPAGE@" "WSJT-X Web Site" ) # Use the icon from wsjtx for add-remove programs set (CPACK_NSIS_INSTALLED_ICON_NAME "bin\\\\wsjtx.exe") set (CPACK_NSIS_DISPLAY_NAME "${CPACK_PACKAGE_DESCRIPTION_SUMMARY}") - set (CPACK_NSIS_HELP_LINK "@PROJECT_MANUAL@") + set (CPACK_NSIS_HELP_LINK "@PROJECT_MANUAL_DIRECTORY_URL@@PROJECT_MANUAL@") set (CPACK_NSIS_URL_INFO_ABOUT "@PROJECT_HOMEPAGE@") set (CPACK_NSIS_CONTACT "${CPACK_PACKAGE_CONTACT}") set (CPACK_NSIS_MUI_FINISHPAGE_RUN "wsjtx.exe") diff --git a/CMakeLists.txt b/CMakeLists.txt index daa7fd314..38c92f493 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -9,7 +9,8 @@ set (PROJECT_VENDOR "Joe Taylor, K1JT") set (PROJECT_CONTACT "Joe Taylor ") set (PROJECT_COPYRIGHT "Copyright (C) 2001-2014 by Joe Taylor, K1JT") set (PROJECT_HOMEPAGE "http://www.physics.princeton.edu/pulsar/K1JT/wsjtx.html") -set (PROJECT_MANUAL "http://www.physics.princeton.edu/pulsar/K1JT/wsjtx-doc/wsjtx-main.html") +set (PROJECT_MANUAL wsjtx-main.html) +set (PROJECT_MANUAL_DIRECTORY_URL http://www.physics.princeton.edu/pulsar/K1JT/wsjtx-doc) set (PROJECT_SUMMARY_DESCRIPTION "WSJT-X - JT9 and JT65 Modes for LF, MF and HF Amateur Radio.") set (PROJECT_DESCRIPTION "${PROJECT_SUMMARY_DESCRIPTION} WSJT-X implements JT9, a new mode designed especially for the LF, MF, @@ -81,12 +82,24 @@ CMAKE_DEPENDENT_OPTION (WSJT_ENABLE_EXPERIMENTAL_FEATURES "Enable features not f # set (WSJT_BIN_DESTINATION bin) set (WSJT_LIB_DESTINATION lib) -set (WSJT_SHARE_DESTINATION share/wsjtx) -set (WSJT_DOC_DESTINATION share/doc/wsjtx) -set (WSJT_MANPAGE_DESTINATION share) +set (WSJT_SHARE_DESTINATION share) +set (WSJT_DOC_DESTINATION doc/WSJT-X) set (WSJT_PLUGIN_DESTINATION lib/plugins) set (WSJT_QT_CONF_DESTINATION bin) +if (WIN32) + set (WSJT_SHARE_DESTINATION bin) + set (WSJT_DOC_DESTINATION doc) + set (WSJT_PLUGIN_DESTINATION plugins) +endif (WIN32) + +if (APPLE) + set (WSJT_BIN_DESTINATION ${CMAKE_PROJECT_NAME}.app/Contents/MacOS) + set (WSJT_SHARE_DESTINATION ${CMAKE_PROJECT_NAME}.app/Contents/Resources) + set (WSJT_PLUGIN_DESTINATION ${CMAKE_PROJECT_NAME}.app/Contents/PlugIns) + set (WSJT_QT_CONF_DESTINATION ${CMAKE_PROJECT_NAME}.app/Contents/Resources) +endif (APPLE) + # # Project sources @@ -379,15 +392,6 @@ if (APPLE) if (NOT "${ENDCH}" STREQUAL "/") set (CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}/") endif () - # install inside bundle - # set (CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}wsjtx.app") - - set (WSJT_PLUGIN_DESTINATION ${CMAKE_PROJECT_NAME}.app/Contents/PlugIns) - set (WSJT_QT_CONF_DESTINATION ${CMAKE_PROJECT_NAME}.app/Contents/Resources) - set (WSJT_SHARE_DESTINATION ${CMAKE_PROJECT_NAME}.app/Contents/Resources) - set (WSJT_DOC_DESTINATION ${CMAKE_PROJECT_NAME}.app/Contents/Resources) - set (WSJT_MANPAGE_DESTINATION ${CMAKE_PROJECT_NAME}.app/Contents/Resources) - set (WSJT_BIN_DESTINATION ${CMAKE_PROJECT_NAME}.app/Contents/MacOS) endif (APPLE) @@ -468,6 +472,17 @@ FortranCInterface_HEADER (FC.h MACRO_NAMESPACE "FC_" SYMBOL_NAMESPACE "FC_" # sort out pre-requisites # +# +# fetch latest HTML manual +# +add_custom_command ( + OUTPUT contrib/${PROJECT_MANUAL} + COMMAND ${CMAKE_COMMAND} -D URL=${PROJECT_MANUAL_DIRECTORY_URL} -D NAME=${PROJECT_MANUAL} -P ${CMAKE_SOURCE_DIR}/CMake/download_html_manual.cmake + DEPENDS CMake/download_html_manual.cmake + COMMENT "Downloading WSJT-X HTML manual" + VERBATIM + ) + # # Setup RPATH so that built executable targets will run in both the # build tree and the install location without having to set a @@ -652,6 +667,7 @@ add_executable (wsjtx WIN32 MACOSX_BUNDLE ${WSJTX_ICON_FILE} ${wsjtx_RESOURCES_RCC} contrib/kvasd${CMAKE_EXECUTABLE_SUFFIX} + contrib/${PROJECT_MANUAL} ) qt5_use_modules (wsjtx Widgets OpenGL Network Multimedia) @@ -707,6 +723,12 @@ install (PROGRAMS RENAME rigctld-wsjtx${CMAKE_EXECUTABLE_SUFFIX} ) +install (FILES + ${CMAKE_BINARY_DIR}/contrib/${PROJECT_MANUAL} + DESTINATION ${WSJT_SHARE_DESTINATION}/${WSJT_DOC_DESTINATION} + #COMPONENT Runtime + ) + # # uninstall support @@ -791,6 +813,7 @@ if (NOT is_debug_build) # if a system Qt is used (e.g. installed in /usr/lib/), it will not be included in the installation set (fixup_exe "\${CMAKE_INSTALL_PREFIX}/${WSJT_BIN_DESTINATION}/${CMAKE_PROJECT_NAME}${CMAKE_EXECUTABLE_SUFFIX}") + #get_filename_component (hamlib_lib_dir ${hamlib_LIBRARIES} PATH) if (APPLE) @@ -881,8 +904,10 @@ file (APPEND \"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${WSJT_QT_CONF_DESTINATION include (BundleUtilities) set (BU_CHMOD_BUNDLE_ITEMS ON) set (gp_tool ${gp_tool}) - message (STATUS \"fixup_exe: ${fixup_exe}\") - fixup_bundle (\"${fixup_exe}\" \"\${QTPLUGINS}\" \"${fixup_library_dirs}\") + # canonicalize path in install context + get_filename_component (the_exe ${fixup_exe} REALPATH) + message (STATUS \"fixup_exe: \${the_exe}\") + fixup_bundle (\"\${the_exe}\" \"\${QTPLUGINS}\" \"${fixup_library_dirs}\") " #COMPONENT Runtime ) diff --git a/mainwindow.cpp b/mainwindow.cpp index 1b91215ce..24c2f379c 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -988,9 +988,23 @@ void MainWindow::msgBox(QString t) //msgBox msgBox0.exec(); } -void MainWindow::on_actionOnline_Users_Guide_triggered() //Display manual +void MainWindow::on_actionOnline_User_Guide_triggered() //Display manual { - QDesktopServices::openUrl (QUrl (PROJECT_MANUAL, QUrl::TolerantMode)); + QDesktopServices::openUrl (QUrl (PROJECT_MANUAL_DIRECTORY_URL PROJECT_MANUAL)); +} + +//Display local copy of manual +void MainWindow::on_actionLocal_User_Guide_triggered() +{ +#if !defined (Q_OS_WIN) || QT_VERSION >= 0x050300 + QDir path {QStandardPaths::locate (QStandardPaths::DataLocation, WSJT_DOC_DESTINATION, QStandardPaths::LocateDirectory)}; +#else + QDir path {QCoreApplication::applicationDirPath ()}; + path.cd (WSJT_DOC_DESTINATION); +#endif + + auto file = path.absoluteFilePath (PROJECT_MANUAL); + QDesktopServices::openUrl (QUrl {"file:///" + file}); } void MainWindow::on_actionWide_Waterfall_triggered() //Display Waterfalls diff --git a/mainwindow.h b/mainwindow.h index a0d03a6e3..35e5f7d23 100644 --- a/mainwindow.h +++ b/mainwindow.h @@ -96,7 +96,8 @@ private slots: void on_autoButton_clicked (bool); void on_stopTxButton_clicked(); void on_stopButton_clicked(); - void on_actionOnline_Users_Guide_triggered(); + void on_actionOnline_User_Guide_triggered(); + void on_actionLocal_User_Guide_triggered(); void on_actionWide_Waterfall_triggered(); void on_actionOpen_triggered(); void on_actionOpen_next_in_directory_triggered(); diff --git a/mainwindow.ui b/mainwindow.ui index 5074611ff..ced250bbd 100644 --- a/mainwindow.ui +++ b/mainwindow.ui @@ -2330,11 +2330,14 @@ list. The list can be maintained in Settings (F2). Help - + + + - + + @@ -2444,9 +2447,9 @@ list. The list can be maintained in Settings (F2). Save all - + - Online User's Guide + Online User Guide F1 @@ -2687,6 +2690,11 @@ list. The list can be maintained in Settings (F2). F2 + + + Local User Guide + + diff --git a/wsjtx_config.h.in b/wsjtx_config.h.in index d16cf7821..f18b36022 100644 --- a/wsjtx_config.h.in +++ b/wsjtx_config.h.in @@ -13,9 +13,9 @@ #cmakedefine WSJT_BIN_DESTINATION "@WSJT_BIN_DESTINATION@" #cmakedefine WSJT_LIB_DESTINATION "@WSJT_LIB_DESTINATION@" -#cmakedefine WSJT_SHARE_DESTINATION "@WSJT_SHARE_DESTINATION@" #cmakedefine WSJT_DOC_DESTINATION "@WSJT_DOC_DESTINATION@" #cmakedefine PROJECT_MANUAL "@PROJECT_MANUAL@" +#cmakedefine PROJECT_MANUAL_DIRECTORY_URL "@PROJECT_MANUAL_DIRECTORY_URL@" #cmakedefine01 WSJT_SHARED_RUNTIME #cmakedefine01 WSJT_QDEBUG_TO_FILE