Krita Source Code Documentation
Loading...
Searching...
No Matches
kundo2magicstring.h
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2014 Dmitry Kazakov <dimula73@gmail.com>
3 * SPDX-FileCopyrightText: 2014 Alexander Potashev <aspotashev@gmail.com>
4 *
5 * SPDX-License-Identifier: LGPL-2.0-or-later
6 */
7
8#ifndef KUNDO2MAGICSTRING_H
9#define KUNDO2MAGICSTRING_H
10
11#include <QString>
12#include <QDebug>
13
14#include <klocalizedstring.h>
15#include <boost/operators.hpp>
16
17#include "kritacommand_export.h"
18
39class KRITACOMMAND_EXPORT KUndo2MagicString : public boost::equality_comparable<KUndo2MagicString>
40{
41public:
48
53 QString toString() const;
54
61 QString toSecondaryString() const;
62
66 bool isEmpty() const;
67
68 bool operator==(const KUndo2MagicString &rhs) const;
69
70private:
75 explicit KUndo2MagicString(const QString &text);
76
77
78 friend KUndo2MagicString kundo2_noi18n(const QString &text);
79 template <typename A1>
80 friend KUndo2MagicString kundo2_noi18n(const char *text, const A1 &a1);
81 template <typename A1, typename A2>
82 friend KUndo2MagicString kundo2_noi18n(const char *text, const A1 &a1, const A2 &a2);
83 template <typename A1, typename A2, typename A3>
84 friend KUndo2MagicString kundo2_noi18n(const char *text, const A1 &a1, const A2 &a2, const A3 &a3);
85 template <typename A1, typename A2, typename A3, typename A4>
86 friend KUndo2MagicString kundo2_noi18n(const char *text, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4);
87
88
89 friend KUndo2MagicString kundo2_i18n(const char *text);
90 template <typename A1>
91 friend KUndo2MagicString kundo2_i18n(const char *text, const A1 &a1);
92 template <typename A1, typename A2>
93 friend KUndo2MagicString kundo2_i18n(const char *text, const A1 &a1, const A2 &a2);
94 template <typename A1, typename A2, typename A3>
95 friend KUndo2MagicString kundo2_i18n(const char *text, const A1 &a1, const A2 &a2, const A3 &a3);
96 template <typename A1, typename A2, typename A3, typename A4>
97 friend KUndo2MagicString kundo2_i18n(const char *text, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4);
98
99
100 friend KUndo2MagicString kundo2_i18nc(const char *ctxt, const char *text);
101 template <typename A1>
102 friend KUndo2MagicString kundo2_i18nc(const char *ctxt, const char *text, const A1 &a1);
103 template <typename A1, typename A2>
104 friend KUndo2MagicString kundo2_i18nc(const char *ctxt, const char *text, const A1 &a1, const A2 &a2);
105 template <typename A1, typename A2, typename A3>
106 friend KUndo2MagicString kundo2_i18nc(const char *ctxt, const char *text, const A1 &a1, const A2 &a2, const A3 &a3);
107
108
109 template <typename A1>
110 friend KUndo2MagicString kundo2_i18np(const char *sing, const char *plur, const A1 &a1);
111 template <typename A1, typename A2>
112 friend KUndo2MagicString kundo2_i18np(const char *sing, const char *plur, const A1 &a1, const A2 &a2);
113 template <typename A1, typename A2, typename A3>
114 friend KUndo2MagicString kundo2_i18np(const char *sing, const char *plur, const A1 &a1, const A2 &a2, const A3 &a3);
115
116
117 template <typename A1>
118 friend KUndo2MagicString kundo2_i18ncp(const char *ctxt, const char *sing, const char *plur, const A1 &a1);
119 template <typename A1, typename A2>
120 friend KUndo2MagicString kundo2_i18ncp(const char *ctxt, const char *sing, const char *plur, const A1 &a1, const A2 &a2);
121 template <typename A1, typename A2, typename A3>
122 friend KUndo2MagicString kundo2_i18ncp(const char *ctxt, const char *sing, const char *plur, const A1 &a1, const A2 &a2, const A3 &a3);
123
124private:
125 QString m_text;
126};
127
128inline QDebug operator<<(QDebug dbg, const KUndo2MagicString &v)
129{
130 if (v.toString() != v.toSecondaryString()) {
131 dbg.nospace() << v.toString() << "(" << v.toSecondaryString() << ")";
132 } else {
133 dbg.nospace() << v.toString();
134 }
135
136 return dbg.space();
137}
138
139
146inline KUndo2MagicString kundo2_noi18n(const QString &text)
147{
148 return KUndo2MagicString(text);
149}
150
151template <typename A1>
152inline KUndo2MagicString kundo2_noi18n(const char *text, const A1 &a1)
153{
154 return KUndo2MagicString(QString(text).arg(a1));
155}
156
157template <typename A1, typename A2>
158inline KUndo2MagicString kundo2_noi18n(const char *text, const A1 &a1, const A2 &a2)
159{
160 return KUndo2MagicString(QString(text).arg(a1).arg(a2));
161}
162
163template <typename A1, typename A2, typename A3>
164inline KUndo2MagicString kundo2_noi18n(const char *text, const A1 &a1, const A2 &a2, const A3 &a3)
165{
166 return KUndo2MagicString(QString(text).arg(a1).arg(a2).arg(a3));
167}
168
169template <typename A1, typename A2, typename A3, typename A4>
170inline KUndo2MagicString kundo2_noi18n(const char *text, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4)
171{
172 return KUndo2MagicString(QString(text).arg(a1).arg(a2).arg(a3).arg(a4));
173}
174
180inline KUndo2MagicString kundo2_i18n(const char *text)
181{
182 return KUndo2MagicString(i18nc("(qtundo-format)", text));
183}
184
185template <typename A1>
186inline KUndo2MagicString kundo2_i18n(const char *text, const A1 &a1)
187{
188 return KUndo2MagicString(i18nc("(qtundo-format)", text, a1));
189}
190
191template <typename A1, typename A2>
192inline KUndo2MagicString kundo2_i18n(const char *text, const A1 &a1, const A2 &a2)
193{
194 return KUndo2MagicString(i18nc("(qtundo-format)", text, a1, a2));
195}
196
197template <typename A1, typename A2, typename A3>
198inline KUndo2MagicString kundo2_i18n(const char *text, const A1 &a1, const A2 &a2, const A3 &a3)
199{
200 return KUndo2MagicString(i18nc("(qtundo-format)", text, a1, a2, a3));
201}
202
203template <typename A1, typename A2, typename A3, typename A4>
204inline KUndo2MagicString kundo2_i18n(const char *text, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4)
205{
206 return KUndo2MagicString(i18nc("(qtundo-format)", text, a1, a2, a3, a4));
207}
208
209inline QString prependContext(const char *ctxt)
210{
211 return QString("(qtundo-format) %1").arg(ctxt);
212}
213
218inline KUndo2MagicString kundo2_i18nc(const char *ctxt, const char *text)
219{
220 return KUndo2MagicString(i18nc(prependContext(ctxt).toLatin1().data(), text));
221}
222
223template <typename A1>
224inline KUndo2MagicString kundo2_i18nc(const char *ctxt, const char *text, const A1 &a1)
225{
226 return KUndo2MagicString(i18nc(prependContext(ctxt).toLatin1().data(), text, a1));
227}
228
229template <typename A1, typename A2>
230inline KUndo2MagicString kundo2_i18nc(const char *ctxt, const char *text, const A1 &a1, const A2 &a2)
231{
232 return KUndo2MagicString(i18nc(prependContext(ctxt).toLatin1().data(), text, a1, a2));
233}
234
235template <typename A1, typename A2, typename A3>
236inline KUndo2MagicString kundo2_i18nc(const char *ctxt, const char *text, const A1 &a1, const A2 &a2, const A3 &a3)
237{
238 return KUndo2MagicString(i18nc(prependContext(ctxt).toLatin1().data(), text, a1, a2, a3));
239}
240
241template <typename A1, typename A2, typename A3, typename A4>
242inline KUndo2MagicString kundo2_i18nc(const char *ctxt, const char *text, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4)
243{
244 return KUndo2MagicString(i18nc(prependContext(ctxt).toLatin1().data(), text, a1, a2, a3, a4));
245}
246
252template <typename A1>
253inline KUndo2MagicString kundo2_i18np(const char *sing, const char *plur, const A1 &a1)
254{
255 return KUndo2MagicString(i18ncp("(qtundo-format)", sing, plur, a1));
256}
257
258template <typename A1, typename A2>
259inline KUndo2MagicString kundo2_i18np(const char *sing, const char *plur, const A1 &a1, const A2 &a2)
260{
261 return i18ncp("(qtundo-format)", sing, plur, a1, a2);
262}
263
264template <typename A1, typename A2, typename A3>
265inline KUndo2MagicString kundo2_i18np(const char *sing, const char *plur, const A1 &a1, const A2 &a2, const A3 &a3)
266{
267 return i18ncp("(qtundo-format)", sing, plur, a1, a2, a3);
268}
269
270template <typename A1, typename A2, typename A3, typename A4>
271inline KUndo2MagicString kundo2_i18np(const char *sing, const char *plur, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4)
272{
273 return i18ncp("(qtundo-format)", sing, plur, a1, a2, a3, a4);
274}
275
276
281template <typename A1>
282inline KUndo2MagicString kundo2_i18ncp(const char *ctxt, const char *sing, const char *plur, const A1 &a1)
283{
284 return KUndo2MagicString(i18ncp(prependContext(ctxt).toLatin1().data(), sing, plur, a1));
285}
286
287template <typename A1, typename A2>
288inline KUndo2MagicString kundo2_i18ncp(const char *ctxt, const char *sing, const char *plur, const A1 &a1, const A2 &a2)
289{
290 return i18ncp(prependContext(ctxt).toLatin1().data(), sing, plur, a1, a2);
291}
292
293template <typename A1, typename A2, typename A3>
294inline KUndo2MagicString kundo2_i18ncp(const char *ctxt, const char *sing, const char *plur, const A1 &a1, const A2 &a2, const A3 &a3)
295{
296 return i18ncp(prependContext(ctxt).toLatin1().data(), sing, plur, a1, a2, a3);
297}
298
299template <typename A1, typename A2, typename A3, typename A4>
300inline KUndo2MagicString kundo2_i18ncp(const char *ctxt, const char *sing, const char *plur, const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4)
301{
302 return i18ncp(prependContext(ctxt).toLatin1().data(), sing, plur, a1, a2, a3, a4);
303}
304
305#endif /* KUNDO2MAGICSTRING_H */
qreal v
bool operator==(const KisRegion &lhs, const KisRegion &rhs)
KUndo2MagicString kundo2_i18ncp(const char *ctxt, const char *sing, const char *plur, const A1 &a1)
QString prependContext(const char *ctxt)
KUndo2MagicString kundo2_i18n(const char *text)
KUndo2MagicString kundo2_i18nc(const char *ctxt, const char *text)
KUndo2MagicString kundo2_noi18n(const QString &text)
KUndo2MagicString kundo2_i18np(const char *sing, const char *plur, const A1 &a1)
QDebug operator<<(QDebug dbg, const KUndo2MagicString &v)