view libgui/src/documentation-dock-widget.cc @ 29330:b92614cfdfed

add bookmark functionality to the documentation browser (bug #54938) * libgui/src/documentation-bookmarks.cc: new file for the bookmarks tab; (documentation_bookmarks): initialize the tab, the filter and the tree; prepare the bookmark file and read existing bookmarks; (~documentation_bookmarks): empty destructor; (add_bookmark): slot for the adding bookmark action, get current title and url; (add_bookmark): do the adding, possibly as child of a parent item; (add_folder): slot for context menu action for adding a folder, check current position where to insert the new folder; (add_folder): do the folder adding; (filter_bookmarks): filter bookmarks following the changed filter text; (filter_activate): enable/disable filter; (update_filter_history): save a search term when acknowledged by return; (handle_double_click): open the clicked bookmark; (ctx_menu): show context menu at current mouse position; (open): open a bookmark via context menu; (edit): edit a bookmark via context menu; (remove): remove selected bookmarks via context menu; (show_filter): toggle visibility of the filter; (save_settings): save settings and initiate writing the bookmarks; (write_bookmarks): open file and initiate writing all top level items; (write_tree_item): write a single item and its children; (read_bookmarks): open the file, check if it is valid and loop over all top level items for reading them from the file; (read_next_item): read an item and its children in case of a folder; * documentation-bookmarks.h: class documentation_bookmarks derived from QWidget, declaration of all required functions and class variables; * documentation-dock-widget.cc (save_settings): new derived method, emitting a signal for saving setting in child widgets and callinf the original method * documentation-dock-widget.h: derived method save_settings and signal for child widgets * documentation.cc: include documentation-bookmarks.h; (documentation): add bookmark tab, connect signal for saving settings; (add_action): check reveiver before connection the actions signal; (construct_tool_bar): add toolbar button for adding a bookmark, connect its signal the add_bookmark slot and connect signal for saving settings; (notice_settings): add shortcut for adding a bookmark; (update_history): move combining page title and current anchor into a more specific title ... (title_and_anchor): to here; * documentation.h: new function title_and_anchor, new action * gui-preferences-dc.h: new file with constants for some bookmark settings and for the xbel file syntax * gui-preferences-sc.h: default value for bookmark action * bookmark-new.png/bookmark-new.svg: icon for tool bar button * icons_license: add new icon * module.mk: add new files * shortcut-manager.cc (init_data): initialize new short for bookmarking
author Torsten Lilge <ttl-octave@mailbox.org>
date Sun, 10 Jan 2021 14:04:35 +0100
parents bd51beb6205e
children 7854d5752dd2
line wrap: on
line source

////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2011-2020 The Octave Project Developers
//
// See the file COPYRIGHT.md in the top-level directory of this
// distribution or <https://octave.org/copyright/>.
//
// This file is part of Octave.
//
// Octave is free software: you can redistribute it and/or modify it
// under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Octave is distributed in the hope that it will be useful, but
// WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Octave; see the file COPYING.  If not, see
// <https://www.gnu.org/licenses/>.
//
////////////////////////////////////////////////////////////////////////

#if defined (HAVE_CONFIG_H)
#  include "config.h"
#endif

#include "documentation-dock-widget.h"

#include "help.h"

namespace octave
{
  documentation_dock_widget::documentation_dock_widget (QWidget *p,
                                                        base_qobject& oct_qobj)
    : octave_dock_widget ("DocumentationDockWidget", p, oct_qobj)
  {
    setWindowIcon (QIcon (":/actions/icons/logo.png"));
    set_title (tr ("Documentation"));
    setStatusTip (tr ("See the documentation for help."));

    m_docs = new documentation (this, oct_qobj);
    setWidget (m_docs);

    connect (p, SIGNAL (show_doc_signal (const QString&)),
             this, SLOT (showDoc (const QString&)));

    connect (p, SIGNAL (register_doc_signal (const QString&)),
             this, SLOT (registerDoc (const QString&)));

    connect (p, SIGNAL (unregister_doc_signal (const QString&)),
             this, SLOT (unregisterDoc (const QString&)));
  }

  documentation_dock_widget::~documentation_dock_widget (void)
  {
    if (m_docs)
      delete m_docs;
  }

  void documentation_dock_widget::notice_settings (const gui_settings *settings)
  {
    m_docs->notice_settings (settings);
  }

  void documentation_dock_widget::save_settings (void)
  {
    emit save_settings_signal ();
    octave_dock_widget::save_settings ();
  }

  void documentation_dock_widget::copyClipboard (void)
  {
    m_docs->copyClipboard ();
  }

  void documentation_dock_widget::pasteClipboard (void)
  {
    m_docs->pasteClipboard ();
  }

  void documentation_dock_widget::selectAll (void)
  {
    m_docs->selectAll ();
  }

  void documentation_dock_widget::showDoc (const QString& name)
  {
    // show the doc pane without focus for carrying on typing in the console
    if (! isVisible ())
      setVisible (true);

    raise ();

    m_docs->load_ref (name);
  }

  void documentation_dock_widget::registerDoc (const QString& name)
  {
    m_docs->registerDoc (name);
  }

  void documentation_dock_widget::unregisterDoc (const QString& name)
  {
    m_docs->unregisterDoc (name);
  }
}