File indexing completed on 2024-05-05 12:22:55

0001 /*
0002     SPDX-FileCopyrightText: 2013 Dominik Haumann <dhaumann@kde.org>
0003 
0004     SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #ifndef KATE_STATUS_BAR_H
0008 #define KATE_STATUS_BAR_H
0009 
0010 #include "kateviewhelpers.h"
0011 
0012 #include <KLocalizedString>
0013 #include <KSqueezedTextLabel>
0014 
0015 #include <QLabel>
0016 #include <QMenu>
0017 #include <QPushButton>
0018 #include <QToolButton>
0019 
0020 namespace KTextEditor
0021 {
0022 class ViewPrivate;
0023 }
0024 
0025 class WordCounter;
0026 class KateStatusBar;
0027 class KateModeMenuList;
0028 
0029 class KateStatusBarOpenUpMenu : public QMenu
0030 {
0031     Q_OBJECT
0032 public:
0033     explicit KateStatusBarOpenUpMenu(QWidget *parent);
0034     void setVisible(bool) override;
0035 };
0036 
0037 /**
0038  * For convenience an own button class to ensure a unified look&feel.
0039  * Should someone dislike the QPushButton at all could he change it
0040  * to a e.g. QLabel subclass
0041  */
0042 class StatusBarButton : public QPushButton
0043 {
0044     Q_OBJECT
0045 public:
0046     explicit StatusBarButton(KateStatusBar *parent, const QString &text = QString());
0047     QSize sizeHint() const override;
0048     QSize minimumSizeHint() const override;
0049 
0050 protected:
0051     void paintEvent(QPaintEvent *) override;
0052 };
0053 
0054 class KateStatusBar : public KateViewBarWidget
0055 {
0056     Q_OBJECT
0057     friend class StatusBarButton;
0058 
0059 public:
0060     explicit KateStatusBar(KTextEditor::ViewPrivate *view);
0061 
0062     KateModeMenuList *modeMenu() const;
0063 
0064 public Q_SLOTS:
0065     void updateStatus();
0066 
0067     void viewModeChanged();
0068 
0069     void cursorPositionChanged();
0070 
0071     void updateDictionary();
0072 
0073     void selectionChanged();
0074 
0075     void documentConfigChanged();
0076 
0077     void modeChanged();
0078 
0079     void wordCountChanged(int, int, int, int);
0080 
0081     void toggleWordCount(bool on);
0082 
0083     void configChanged();
0084 
0085     void changeDictionary(QAction *action);
0086 
0087     void updateEOL();
0088 
0089 protected:
0090     bool eventFilter(QObject *obj, QEvent *event) override;
0091     void contextMenuEvent(QContextMenuEvent *event) override;
0092 
0093 private:
0094     KTextEditor::ViewPrivate *const m_view;
0095     StatusBarButton *m_cursorPosition = nullptr;
0096     QString m_wordCount;
0097     StatusBarButton *m_zoomLevel = nullptr;
0098     StatusBarButton *m_inputMode = nullptr;
0099     StatusBarButton *m_mode = nullptr;
0100     StatusBarButton *m_encoding = nullptr;
0101     StatusBarButton *m_tabsIndent = nullptr;
0102     StatusBarButton *m_dictionary = nullptr;
0103     StatusBarButton *m_eol = nullptr;
0104     QActionGroup *m_dictionaryGroup = nullptr;
0105     KateStatusBarOpenUpMenu *m_dictionaryMenu = nullptr;
0106     QMenu *m_indentSettingsMenu;
0107     KateModeMenuList *m_modeMenuList = nullptr;
0108     unsigned int m_selectionMode;
0109     QActionGroup *m_tabGroup;
0110     QActionGroup *m_indentGroup;
0111     QAction *m_mixedAction;
0112     QAction *m_hardAction;
0113     QAction *m_softAction;
0114     WordCounter *m_wordCounter;
0115 
0116 private:
0117     void addNumberAction(QActionGroup *group, QMenu *menu, int data);
0118     void updateGroup(QActionGroup *group, int w);
0119 
0120 public Q_SLOTS:
0121     void slotTabGroup(QAction *);
0122     void slotIndentGroup(QAction *);
0123     void slotIndentTabMode(QAction *);
0124     void toggleShowLines(bool checked);
0125     void toggleShowWords(bool checked);
0126 };
0127 
0128 #endif