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