File indexing completed on 2024-04-21 03:57:52

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 public:
0032     explicit KateStatusBarOpenUpMenu(QWidget *parent);
0033     void setVisible(bool) override;
0034 };
0035 
0036 /**
0037  * For convenience an own button class to ensure a unified look&feel.
0038  * Should someone dislike the QPushButton at all could he change it
0039  * to a e.g. QLabel subclass
0040  */
0041 class StatusBarButton : public QPushButton
0042 {
0043 public:
0044     explicit StatusBarButton(KateStatusBar *parent, const QString &text = QString());
0045     QSize sizeHint() const override;
0046     QSize minimumSizeHint() const override;
0047 
0048 protected:
0049     void paintEvent(QPaintEvent *) override;
0050 };
0051 
0052 class KateStatusBar : public KateViewBarWidget
0053 {
0054     Q_OBJECT
0055     friend class StatusBarButton;
0056 
0057 public:
0058     explicit KateStatusBar(KTextEditor::ViewPrivate *view);
0059 
0060     KateModeMenuList *modeMenu() const;
0061 
0062 public Q_SLOTS:
0063     void updateStatus();
0064 
0065     void viewModeChanged();
0066 
0067     void cursorPositionChanged();
0068 
0069     void updateDictionary();
0070 
0071     void selectionChanged();
0072 
0073     void documentConfigChanged();
0074 
0075     void modeChanged();
0076 
0077     void wordCountChanged(int, int, int, int);
0078 
0079     void toggleWordCount(bool on);
0080 
0081     void configChanged();
0082 
0083     void changeDictionary(QAction *action);
0084 
0085     void updateEOL();
0086 
0087 protected:
0088     bool eventFilter(QObject *obj, QEvent *event) override;
0089     void contextMenuEvent(QContextMenuEvent *event) override;
0090 
0091 private:
0092     KTextEditor::ViewPrivate *const m_view;
0093     StatusBarButton *m_cursorPosition = nullptr;
0094     QString m_wordCount;
0095     StatusBarButton *m_zoomLevel = nullptr;
0096     StatusBarButton *m_inputMode = nullptr;
0097     StatusBarButton *m_mode = nullptr;
0098     StatusBarButton *m_encoding = nullptr;
0099     StatusBarButton *m_tabsIndent = nullptr;
0100     StatusBarButton *m_dictionary = nullptr;
0101     StatusBarButton *m_eol = nullptr;
0102     QActionGroup *m_dictionaryGroup = nullptr;
0103     KateStatusBarOpenUpMenu *m_dictionaryMenu = nullptr;
0104     QMenu *m_indentSettingsMenu;
0105     KateModeMenuList *m_modeMenuList = nullptr;
0106     unsigned int m_selectionMode;
0107     QActionGroup *m_tabGroup;
0108     QActionGroup *m_indentGroup;
0109     QAction *m_mixedAction;
0110     QAction *m_hardAction;
0111     QAction *m_softAction;
0112     WordCounter *m_wordCounter;
0113 
0114 private:
0115     void addNumberAction(QActionGroup *group, QMenu *menu, int data);
0116     void updateGroup(QActionGroup *group, int w);
0117 
0118 public Q_SLOTS:
0119     void slotTabGroup(QAction *);
0120     void slotIndentGroup(QAction *);
0121     void slotIndentTabMode(QAction *);
0122     void toggleShowLines(bool checked);
0123     void toggleShowWords(bool checked);
0124 };
0125 
0126 #endif