File indexing completed on 2024-12-01 11:20:33

0001 /***************************************************************************
0002  *   Copyright (C) 2003-2006 by David Saxton                               *
0003  *   david@bluehaze.org                                                    *
0004  *                                                                         *
0005  *   This program is free software; you can redistribute it and/or modify  *
0006  *   it under the terms of the GNU General Public License as published by  *
0007  *   the Free Software Foundation; either version 2 of the License, or     *
0008  *   (at your option) any later version.                                   *
0009  ***************************************************************************/
0010 
0011 #ifndef CONTEXTHELP_H
0012 #define CONTEXTHELP_H
0013 
0014 #include <ui_contexthelpwidget.h>
0015 
0016 #include <QPointer>
0017 
0018 class Item;
0019 class ContextHelp;
0020 class RichTextEditor;
0021 
0022 class QTextBRowser;
0023 class QUrl;
0024 class QLabel;
0025 class QTextBrowser;
0026 class QWidgetStack;
0027 
0028 namespace KateMDI
0029 {
0030 class ToolView;
0031 }
0032 namespace KParts
0033 {
0034 class URLArgs;
0035 }
0036 
0037 /**
0038 Sidebar that provides context-sensitive help for whatever the user is currently
0039 helping (e.g. pinouts, command references, etc). Not to be confused with
0040 ItemEditor, which which allows editing of data specific to the selected CNItem
0041 in a ICNDocument.
0042 
0043 @author David Saxton
0044 */
0045 class ContextHelp : public QWidget, public Ui::ContextHelpWidget
0046 {
0047     Q_OBJECT
0048 public:
0049     static ContextHelp *self(KateMDI::ToolView *parent = nullptr);
0050     static QString toolViewIdentifier()
0051     {
0052         return "ContextHelp";
0053     }
0054 
0055     ~ContextHelp() override;
0056     /**
0057      * Replace special tags with appropriate html formatting code.
0058      */
0059     void parseInfo(QString &info);
0060     /**
0061      * Used as an event filter in context help.
0062      */
0063     bool eventFilter(QObject *watched, QEvent *e) override;
0064 
0065 public slots:
0066     void slotClear();
0067     void slotMultipleSelected();
0068     void slotUpdate(Item *item);
0069     void setContextHelp(QString name, QString help);
0070     /**
0071      * Set the help browser to the given location.
0072      */
0073     void setBrowserItem(const QString &type);
0074     void openURL(const QUrl &url /*, const KParts::OpenUrlArguments& */);
0075 
0076 protected slots:
0077     /**
0078      * Called when the user clicks the "Edit" button.
0079      */
0080     void slotEdit();
0081     /**
0082      * Called when the user clicks the "Save" button.
0083      */
0084     void slotSave();
0085     /**
0086      * Called when the user clicks the "Reset" button.
0087      */
0088     void slotEditReset();
0089     /**
0090      * Called from the language select combo when the current selection
0091      * changes.
0092      */
0093     void setCurrentLanguage(int languageIndex);
0094     /**
0095      * Request a directory from the user for storing the context help in.
0096      */
0097     void requestItemDescriptionsDirectory();
0098 
0099 protected:
0100     enum LinkType {
0101         HelpLink,    ///< Context help item (that exists)
0102         NewHelpLink, ///< Context help item that doesn't yet exist
0103         ExampleLink, ///< Example circuit or flowcode
0104         ExternalLink ///< External website, etc
0105     };
0106     /**
0107      * Looks at url and tries to determine the link type. Will return
0108      * ExternalLink if the url can not be identified as any other type.
0109      */
0110     static LinkType extractLinkType(const QUrl &url);
0111     /**
0112      * Adjusts the appearance of links depending on their LinkType (e.g
0113      * external links are given an "external" icon, and new help links are
0114      * colored in red.
0115      */
0116     static void addLinkTypeAppearances(QString *html);
0117     /**
0118      * @return the physical location of the example file from an example url
0119      * (e.g. "/mosfets/and.circuit" might return
0120      * "/usr/share/apps/ktechlab/mosfets/and.circuit").
0121      */
0122     static QString examplePathToFullPath(QString path);
0123 
0124     /**
0125      * Saves the current editor text for the given language.
0126      * @return if all ok (e.g. if the file could be written successfully).
0127      */
0128     bool saveDescription(const QString &language);
0129     bool isEditChanged();
0130     QString m_currentLanguage;
0131     QString m_lastItemType;
0132     QTextBrowser *m_pBrowserView;
0133     RichTextEditor *m_pEditor;
0134 
0135 private slots:
0136     /**
0137      * This has to be called after itemlibrary has constructed itself
0138      * and a list of languages (i.e. a little bit after the constructor).
0139      */
0140     void slotInitializeLanguageList();
0141 
0142 private:
0143     ContextHelp(KateMDI::ToolView *parent);
0144 
0145     static ContextHelp *m_pSelf;
0146 };
0147 
0148 #endif