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