Sayonara Player
SettingConverter.h
1/* SettingConverter.h */
2
3/* Copyright (C) 2011-2020 Michael Lugmair (Lucio Carreras)
4*
5* This file is part of sayonara player
6*
7* This program is free software: you can redistribute it and/or modify
8* it under the terms of the GNU General Public License as published by
9* the Free Software Foundation, either version 3 of the License, or
10* (at your option) any later version.
11
12* This program is distributed in the hope that it will be useful,
13* but WITHOUT ANY WARRANTY; without even the implied warranty of
14* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15* GNU General Public License for more details.
16
17* You should have received a copy of the GNU General Public License
18* along with this program. If not, see <http://www.gnu.org/licenses/>.
19*/
20
21#ifndef SETTINGCONVERTER_H
22#define SETTINGCONVERTER_H
23
24#include "Utils/typedefs.h"
25
26#include <QPair>
27#include <QStringList>
28
29#include <exception>
30#include <iostream>
31
32class QSize;
33class QPoint;
35
41{
42 QString toString(const SettingConvertible& t);
43 bool fromString(const QString& val, SettingConvertible& t);
44
45 QString toString(const bool& val);
46 bool fromString(const QString& val, bool& b);
47
48 QString toString(const int& val);
49 bool fromString(const QString& val, int& i);
50
51 template<typename T, typename = typename std::enable_if< std::is_enum<T>::value, T >::type>
52 QString toString(const T& val)
53 {
54 int i = static_cast<int>(val);
55 return toString(i);
56 }
57
58 template <typename T, typename = typename std::enable_if< std::is_enum<T>::value, T >::type>
59 bool fromString(const QString& val, T& e)
60 {
61 int i;
62 bool b = fromString(val, i);
63
64 e = static_cast<T>(i);
65 return b;
66 }
67
68
69 QString toString(const float& val);
70 bool fromString(const QString& val, float& i);
71
72 QString toString(const QStringList& val);
73 bool fromString(const QString& val, QStringList& lst);
74
75 QString toString(const QString& val);
76 bool fromString(const QString& val, QString& b);
77
78 QString toString(const QSize& val);
79 bool fromString(const QString& val, QSize& sz);
80
81 QString toString(const QPoint& val);
82 bool fromString(const QString& val, QPoint& sz);
83
84 QString toString(const QByteArray& arr);
85 bool fromString(const QString& str, QByteArray& arr);
86
87 template<typename A, typename B>
88 QString toString(const QPair<A, B>& arr)
89 {
90 return toString(arr.first) + "," + toString(arr.second);
91 }
92
93 template<typename A, typename B>
94 bool fromString(const QString& str, QPair<A, B>& pair)
95 {
96 QStringList lst = str.split(",");
97
98 if(lst.size() >= 2)
99 {
100 fromString(lst[0], pair.first);
101 fromString(lst[1], pair.second);
102 }
103
104 return (lst.size() >= 2);
105 }
106
107 template<typename T>
108 QString toString(const QList<T>& val)
109 {
110 QStringList lst;
111
112 for(const T& v : val) {
113 lst << toString(v);
114 }
115
116 return lst.join(",");
117 }
118
119 template<typename T>
120 bool fromString(const QString& val, QList<T>& ret)
121 {
122 ret.clear();
123 QStringList lst = val.split(",");
124
125 for(const QString& l : lst)
126 {
127 try
128 {
129 T v;
130 if(fromString(l, v)){
131 ret << v;
132 }
133 } catch (std::exception& e) {
134 std::cerr << e.what() << std::endl;
135 }
136 }
137
138 return true;
139 }
140}
141
142#endif // SETTINGCONVERTER_H
Definition: EngineUtils.h:33
Definition: SettingConvertible.h:29
The SettingConverter<bool> class.
Definition: SettingConverter.h:41
Definition: typedefs.h:33