1 // generic helper module for general-use static functions
2 #ifndef HELPERS_H
3 #define HELPERS_H
4 #include <QObject>
5 #include <QCoreApplication>
6 #include <QWidget>
7 #include <QSet>
8 #include <QList>
9 #include <QUrl>
10 #include <QUuid>
11 #include <QOpenGLWidget>
12 #include <QDate>
13 #include <QTime>
14 #include <QDir>
15
16 class QPushButton;
17 class QFileDialog;
18 class QLocalServer;
19 class QLocalSocket;
20 class QOpenGLTexture;
21
22 namespace Helpers {
23 enum DisabledTrack { NothingDisabled, DisabledAudio, DisabledVideo };
24 enum Subtitles { NoSubtitles, SubtitlesPresent, SubtitlesDisabled, };
25 enum FileType { AudioFile, VideoFile };
26 enum ScreenshotRender { VideoRender, SubsRender, WindowRender };
27 enum TitlePrefix { PrefixFullPath, PrefixFileName, NoPrefix };
28 enum MpvWidgetType { NullWidget, EmbedWidget, GlCbWidget, VulkanCbWidget,
29 CustomWidget };
30 enum ControlHiding { NeverShown, ShowWhenMoving, ShowWhenHovering,
31 AlwaysShow };
32 enum AfterPlayback { DoNothingAfter, RepeatAfter, PlayNextAfter,
33 ExitAfter, StandByAfter, HibernateAfter,
34 ShutdownAfter, LogOffAfter, LockAfter };
35
36 enum TimeFormat { LongFormat, ShortFormat,
37 LongHourFormat, ShortHourFormat };
38
39 extern QSet<QString> fileExtensions;
40 extern QSet<QString> subsExtensions;
41
42 QString fileSizeToString(int64_t bytes);
43 QString toDateFormat(double time);
44 QString toDateFormatFixed(double time, TimeFormat format);
45 QDate dateFromCFormat(const char date[]);
46 QTime timeFromCFormat(const char time[]);
47 QString parseFormat(QString fmt, QString fileName, DisabledTrack disabled,
48 Subtitles subtitles, double timeNav, double timeBegin,
49 double timeEnd);
50 QString parseFormatEx(QString fmt, QUrl sourceUrl, QString filePath,
51 QString fileExt, DisabledTrack disabled,
52 Subtitles subtitles, double timeNav,
53 double timeBegin, double timeEnd);
54 QString fileOpenFilter();
55 QString subsOpenFilter();
56 bool urlSurvivesFilter(const QUrl &url);
57 QList<QUrl> filterUrls(const QList<QUrl> &urls);
58 QRect vmapToRect(const QVariantMap &m);
59 QVariantMap rectToVmap(const QRect &r);
60 bool sizeFromString(QSize &size, const QString &text);
61 bool pointFromString(QPoint &point, const QString &text);
62 QRect availableGeometryFromPoint(const QPoint &point);
63 }
64
65 class IconThemer : public QObject {
66 Q_OBJECT
67 public:
68 class IconData {
69 public:
70 QPushButton *button; QString iconNormal; QString iconChecked;
71 };
72 enum FolderMode { FallbackFolder, CustomFolder, SystemFolder };
73 explicit IconThemer(QObject *parent = nullptr);
74 void addIconData(const IconData &data);
75 QIcon fetchIcon(const QString &name);
76 void updateButton(const IconData &data);
77
78 public slots:
79 void setIconFolders(IconThemer::FolderMode folderMode, const QString &fallbackFolder, const QString &customFolder);
80
81 private:
82 QList<IconData> iconDataList;
83 FolderMode mode;
84 QString fallback;
85 QString custom;
86 };
87
88 class DisplayNode;
89 class DisplayParser {
90 public:
91 DisplayParser();
92 ~DisplayParser();
93
94 void takeFormatString(QString fmt);
95 QString parseMetadata(QVariantMap metaData, QString displayString,
96 Helpers::FileType fileType);
97 private:
98 DisplayNode *node = nullptr;
99 };
100
101 class TrackInfo {
102 public:
TrackInfo()103 TrackInfo() {}
104 TrackInfo(const QUrl &url, const QUuid &list, const QUuid &item, QString text, double length, double position);
105 QUrl url;
106 QUuid list;
107 QUuid item;
108 QString text;
109 double length;
110 double position;
111 QVariantMap toVMap() const;
112 void fromVMap(const QVariantMap &map);
113 bool operator ==(const TrackInfo &track) const;
114
115 static QVariantList tracksToVList(const QList<TrackInfo> &list);
116 static QList<TrackInfo> tracksFromVList(const QVariantList &list);
117 };
118
119 class MouseState {
120 Q_DECLARE_TR_FUNCTIONS(MouseState)
121 public:
122 enum MouseButtons { None, Wheel, Left, Right, Middle, Back,
123 Forward, Task, XButton4, XButton5, XButton6, XButton7,
124 XButton8, XButton9, XButton10, XButton11, XButton12,
125 XButton13, XButton14, XButton15, XButton16, XButton17,
126 XButton18, XButton19,XButton20, XButton21, XButton22,
127 XButton23, XButton24 };
128 enum MousePress { MouseDown, MouseUp, PressTwice };
129
130 MouseState();
131 MouseState(const MouseState &m);
132 MouseState(int button, int mod, MousePress press);
133 MouseState operator =(const MouseState &other);
134
135 // Components
136 int button;
137 int mod;
138 MousePress press;
139
140 // to Qt notation functions
141 Qt::MouseButtons mouseButtons() const;
142 Qt::KeyboardModifiers keyModifiers() const;
143 bool isPress();
144 bool isTwice();
145 bool isWheel();
146
147 // I/O functions
148 QString toString() const;
149 QVariantMap toVMap() const;
150 void fromVMap(const QVariantMap &map);
151
152 // Hashing-related functions
153 uint mouseHash() const;
154 bool operator ==(const MouseState &other) const;
155 bool operator !() const; // le saef bull eyediom faec
156
157 // Conversion functions
158 static MouseState fromWheelEvent(QWheelEvent *event);
159 static MouseState fromMouseEvent(QMouseEvent *event, MousePress press);
160
161 // Display mapping vars
162 static QString buttonToText(int index);
163 static int buttonToTextCount();
164 static QString modToText(int index);
165 static int modToTextCount();
166 static QString multiModToText(int index);
167 static int multiModToTextCount();
168 static QString pressToText(int index);
169 static int pressToTextCount();
170 };
171
qHash(const MouseState & m,uint seed)172 inline uint qHash(const MouseState &m, uint seed) {
173 Q_UNUSED(seed)
174 return m.mouseHash();
175 }
176
177 typedef QHash<MouseState, QAction*> MouseStateMap;
178
179 class Command {
180 public:
181 Command();
182 Command(QAction *a, MouseState mf, MouseState mw);
183
184 // Components
185 QAction *action = nullptr;
186 QKeySequence keys; // taken from the QAction in constructor
187 MouseState mouseFullscreen;
188 MouseState mouseWindowed;
189
190 // I/O functions
191 QString toString() const;
192 QVariantMap toVMap() const;
193 void fromVMap(const QVariantMap &map);
194
195 // Conversion functions
196 void fromAction(QAction *a);
197 };
198
199
200
201 class AudioDevice {
202 public:
203 AudioDevice();
204 AudioDevice(const QVariantMap &m);
205 void setFromVMap(const QVariantMap &m);
206
207 bool operator ==(const AudioDevice &other) const;
208 QString displayString() const;
209 QString deviceName() const;
210
211 static QList<AudioDevice> listFromVList(const QVariantList &list);
212
213 private:
214 QString displayString_;
215 QString deviceName_;
216 };
217
218
219
220
221 #endif // HELPERS_H
222