1 /*
2     SPDX-FileCopyrightText: 2013 Dominik Haumann <dhaumann@kde.org>
3 
4     SPDX-License-Identifier: LGPL-2.0-or-later
5 */
6 
7 #ifndef KATE_STATUS_BAR_H
8 #define KATE_STATUS_BAR_H
9 
10 #include "kateviewhelpers.h"
11 
12 #include <KLocalizedString>
13 #include <KSqueezedTextLabel>
14 
15 #include <QLabel>
16 #include <QMenu>
17 #include <QPushButton>
18 #include <QToolButton>
19 
20 namespace KTextEditor
21 {
22 class ViewPrivate;
23 }
24 
25 class WordCounter;
26 class KateStatusBar;
27 class KateModeMenuList;
28 
29 class KateStatusBarOpenUpMenu : public QMenu
30 {
31     Q_OBJECT
32 public:
33     explicit KateStatusBarOpenUpMenu(QWidget *parent);
34     void setVisible(bool) override;
35 };
36 
37 /**
38  * For convenience an own button class to ensure a unified look&feel.
39  * Should someone dislike the QPushButton at all could he change it
40  * to a e.g. QLabel subclass
41  */
42 class StatusBarButton : public QPushButton
43 {
44     Q_OBJECT
45 public:
46     explicit StatusBarButton(KateStatusBar *parent, const QString &text = QString());
47 };
48 
49 class KateStatusBar : public KateViewBarWidget
50 {
51     Q_OBJECT
52     friend class StatusBarButton;
53 
54 public:
55     explicit KateStatusBar(KTextEditor::ViewPrivate *view);
56 
57     KateModeMenuList *modeMenu() const;
58 
59 public Q_SLOTS:
60     void updateStatus();
61 
62     void viewModeChanged();
63 
64     void cursorPositionChanged();
65 
66     void updateDictionary();
67 
68     void selectionChanged();
69 
70     void modifiedChanged();
71 
72     void documentConfigChanged();
73 
74     void modeChanged();
75 
76     void wordCountChanged(int, int, int, int);
77 
78     void toggleWordCount(bool on);
79 
80     void configChanged();
81 
82     void changeDictionary(QAction *action);
83 
84 protected:
85     bool eventFilter(QObject *obj, QEvent *event) override;
86     void contextMenuEvent(QContextMenuEvent *event) override;
87 
88 private:
89     KTextEditor::ViewPrivate *const m_view;
90     StatusBarButton *m_cursorPosition = nullptr;
91     QString m_wordCount;
92     StatusBarButton *m_modified = nullptr;
93     StatusBarButton *m_zoomLevel = nullptr;
94     StatusBarButton *m_inputMode = nullptr;
95     StatusBarButton *m_mode = nullptr;
96     StatusBarButton *m_encoding = nullptr;
97     StatusBarButton *m_tabsIndent = nullptr;
98     StatusBarButton *m_dictionary = nullptr;
99     QActionGroup *m_dictionaryGroup = nullptr;
100     KateStatusBarOpenUpMenu *m_dictionaryMenu = nullptr;
101     QMenu *m_indentSettingsMenu;
102     KateModeMenuList *m_modeMenuList = nullptr;
103     unsigned int m_modifiedStatus;
104     unsigned int m_selectionMode;
105     QActionGroup *m_tabGroup;
106     QActionGroup *m_indentGroup;
107     QAction *m_mixedAction;
108     QAction *m_hardAction;
109     QAction *m_softAction;
110     WordCounter *m_wordCounter;
111 
112 private:
113     void addNumberAction(QActionGroup *group, QMenu *menu, int data);
114     void updateGroup(QActionGroup *group, int w);
115 
116 public Q_SLOTS:
117     void slotTabGroup(QAction *);
118     void slotIndentGroup(QAction *);
119     void slotIndentTabMode(QAction *);
120     void toggleShowLines(bool checked);
121     void toggleShowWords(bool checked);
122 };
123 
124 #endif
125