File indexing completed on 2024-04-28 05:49:36

0001 /*
0002     SPDX-FileCopyrightText: 2022 Waqar Ahmed <waqar.17a@gmail.com>
0003     SPDX-License-Identifier: MIT
0004 */
0005 #pragma once
0006 
0007 #include "kateprivate_export.h"
0008 
0009 #include <QString>
0010 #include <QUrl>
0011 #include <QWidgetList>
0012 
0013 QT_BEGIN_NAMESPACE
0014 class QScrollBar;
0015 class QAction;
0016 class QFont;
0017 class QIcon;
0018 class QVariant;
0019 class QWidget;
0020 typedef QMap<QString, QVariant> QVariantMap;
0021 QT_END_NAMESPACE
0022 
0023 namespace KTextEditor
0024 {
0025 class View;
0026 class Document;
0027 class MainWindow;
0028 class Range;
0029 class Cursor;
0030 }
0031 class DiagnosticsProvider;
0032 struct DiffParams;
0033 
0034 enum MessageType {
0035     Log = 0,
0036     Info,
0037     Warning,
0038     Error,
0039 };
0040 
0041 namespace Utils
0042 {
0043 
0044 // A helper class that maintains scroll position
0045 struct KATE_PRIVATE_EXPORT KateScrollBarRestorer {
0046     explicit KateScrollBarRestorer(KTextEditor::View *view);
0047     ~KateScrollBarRestorer();
0048 
0049     void restore();
0050 
0051 private:
0052     class KateScrollBarRestorerPrivate *const d = nullptr;
0053 };
0054 
0055 /**
0056  * returns the current active global font
0057  */
0058 KATE_PRIVATE_EXPORT QFont editorFont();
0059 
0060 /**
0061  * Returns the range that is currently visible in the @p view
0062  */
0063 KATE_PRIVATE_EXPORT KTextEditor::Range getVisibleRange(KTextEditor::View *view);
0064 
0065 /**
0066  * @brief Given path "/home/user/xyz.txt" returns "xyz.txt"
0067  */
0068 KATE_PRIVATE_EXPORT inline QString fileNameFromPath(const QString &path)
0069 {
0070     int lastSlash = path.lastIndexOf(QLatin1Char('/'));
0071     return lastSlash == -1 ? path : path.mid(lastSlash + 1);
0072 }
0073 
0074 /**
0075  * Return a matching icon for the given document.
0076  * We use the mime type icon for unmodified stuff and the modified one for modified docs.
0077  * @param doc document to get icon for
0078  * @return icon, always valid
0079  */
0080 KATE_PRIVATE_EXPORT QIcon iconForDocument(KTextEditor::Document *doc);
0081 
0082 KATE_PRIVATE_EXPORT QAction *toolviewShowAction(KTextEditor::MainWindow *, const QString &toolviewName);
0083 
0084 KATE_PRIVATE_EXPORT QWidget *toolviewForName(KTextEditor::MainWindow *, const QString &toolviewName);
0085 
0086 /*** BEGIN KTextEditor::MainWindow extensions **/
0087 KATE_PRIVATE_EXPORT void
0088 showMessage(const QString &message, const QIcon &icon, const QString &category, MessageType type, KTextEditor::MainWindow *mainWindow = nullptr);
0089 KATE_PRIVATE_EXPORT void showMessage(const QVariantMap &map, KTextEditor::MainWindow *mainWindow = nullptr);
0090 
0091 KATE_PRIVATE_EXPORT void showDiff(const QByteArray &diff, const DiffParams &params, KTextEditor::MainWindow *mainWindow);
0092 
0093 KATE_PRIVATE_EXPORT void addWidget(QWidget *widget, KTextEditor::MainWindow *mainWindow);
0094 KATE_PRIVATE_EXPORT void activateWidget(QWidget *widget, KTextEditor::MainWindow *mainWindow);
0095 /// @returns list of document area widgets that are not KTextEditor::Views (added by addWidget()
0096 /// TODO: Maybe it would be more versatile to return *all* widgets, including KTextEditor::Views, here, or perhaps
0097 ///       controlled by a flag to filter which widgets to return. Think e.g. about the document switching plugin.
0098 ///       activeWidget() (not yet "public") uses those semantics, already.
0099 KATE_PRIVATE_EXPORT QWidgetList widgets(KTextEditor::MainWindow *mainWindow);
0100 
0101 KATE_PRIVATE_EXPORT void insertWidgetInStatusbar(QWidget *widget, KTextEditor::MainWindow *mainWindow);
0102 
0103 KATE_PRIVATE_EXPORT void addPositionToHistory(const QUrl &url, KTextEditor::Cursor c, KTextEditor::MainWindow *mainWindow);
0104 /*** END KTextEditor::MainWindow extensions **/
0105 
0106 /**
0107  * Returns project base dir for provided document
0108  */
0109 KATE_PRIVATE_EXPORT QString projectBaseDirForDocument(KTextEditor::Document *doc);
0110 
0111 /**
0112  * Returns project map for provided document
0113  */
0114 KATE_PRIVATE_EXPORT QVariantMap projectMapForDocument(KTextEditor::Document *doc);
0115 
0116 /**
0117  * Convert an url to a xxx.yyy @ dir representation, used e.g. in the window title
0118  */
0119 KATE_PRIVATE_EXPORT QString niceFileNameWithPath(const QUrl &url);
0120 }