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 
32 class QSize;
33 class QPoint;
34 class SettingConvertible;
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
QPair
Definition: typedefs.h:32
QList
Definition: EngineUtils.h:33
SettingConvertible
Definition: SettingConvertible.h:29
SettingConverter
The SettingConverter<bool> class.
Definition: SettingConverter.h:41