libquentier  0.4.0
The library for rich desktop clients of Evernote service
Printable.h
1 /*
2  * Copyright 2016 Dmitry Ivanov
3  *
4  * This file is part of libquentier
5  *
6  * libquentier is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU Lesser General Public License as published by
8  * the Free Software Foundation, version 3 of the License.
9  *
10  * libquentier is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  * GNU Lesser General Public License for more details.
14  *
15  * You should have received a copy of the GNU Lesser General Public License
16  * along with libquentier. If not, see <http://www.gnu.org/licenses/>.
17  */
18 
19 #ifndef LIB_QUENTIER_UTILITY_PRINTABLE_H
20 #define LIB_QUENTIER_UTILITY_PRINTABLE_H
21 
22 #include <quentier/utility/Linkage.h>
23 #include <quentier/utility/Macros.h>
24 #include <QString>
25 #include <QTextStream>
26 #include <QDebug>
27 #include <QHash>
28 #include <QSet>
29 
30 #if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0)
31 
32 #include <qt5qevercloud/QEverCloud.h>
33 
34 #if QEVERCLOUD_HAS_OAUTH
35 #include <qt5qevercloud/QEverCloudOAuth.h>
36 #endif
37 
38 #else // Qt5
39 
40 #include <qt4qevercloud/QEverCloud.h>
41 
42 #if QEVERCLOUD_HAS_OAUTH
43 #include <qt4qevercloud/QEverCloudOAuth.h>
44 #endif
45 
46 #endif // Qt5
47 
48 namespace quentier {
49 
54 class QUENTIER_EXPORT Printable
55 {
56 public:
57  virtual QTextStream & print(QTextStream & strm) const = 0;
58 
59  virtual const QString toString() const;
60 
61  friend QUENTIER_EXPORT QTextStream & operator << (QTextStream & strm,
62  const Printable & printable);
63  friend QUENTIER_EXPORT QDebug & operator << (QDebug & debug,
64  const Printable & printable);
65 protected:
66  Printable();
67  Printable(const Printable & other);
68  virtual ~Printable();
69 };
70 
71 } // namespace quentier
72 
73 // printing operators for existing classes not inheriting from Printable
74 
75 template <class T>
76 const QString ToString(const T & object)
77 {
78  QString str;
79  QTextStream strm(&str, QIODevice::WriteOnly);
80  strm << object;
81  return str;
82 }
83 
84 template <class TKey, class TValue>
85 const QString ToString(const QHash<TKey, TValue> & object)
86 {
87  QString str;
88  QTextStream strm(&str, QIODevice::WriteOnly);
89  strm << QStringLiteral("QHash: \n");
90 
91  typedef typename QHash<TKey,TValue>::const_iterator CIter;
92  CIter hashEnd = object.end();
93  for(CIter it = object.begin(); it != hashEnd; ++it) {
94  strm << QStringLiteral("[") << it.key() << QStringLiteral("] = ") << it.value() << QStringLiteral(";\n");
95  }
96  return str;
97 }
98 
99 template <class T>
100 const QString ToString(const QSet<T> & object)
101 {
102  QString str;
103  QTextStream strm(&str, QIODevice::WriteOnly);
104  strm << QStringLiteral("QSet: \n");
105 
106  typedef typename QSet<T>::const_iterator CIter;
107  CIter setEnd = object.end();
108  for(CIter it = object.begin(); it != setEnd; ++it) {
109  strm << QStringLiteral("[") << *it << QStringLiteral("];\n");
110  }
111  return str;
112 }
113 
114 #define QUENTIER_DECLARE_PRINTABLE(type, ...) \
115  QUENTIER_EXPORT QTextStream & operator << (QTextStream & strm, const type & obj); \
116  inline QDebug & operator << (QDebug & debug, const type & obj) \
117  { \
118  debug << ToString<type, ##__VA_ARGS__>(obj); \
119  return debug; \
120  }
121 
122 QUENTIER_DECLARE_PRINTABLE(qevercloud::Contact)
123 QUENTIER_DECLARE_PRINTABLE(qevercloud::Identity)
124 QUENTIER_DECLARE_PRINTABLE(qevercloud::BusinessUserInfo)
125 QUENTIER_DECLARE_PRINTABLE(qevercloud::Accounting)
126 QUENTIER_DECLARE_PRINTABLE(qevercloud::AccountLimits)
127 QUENTIER_DECLARE_PRINTABLE(qevercloud::UserAttributes)
128 QUENTIER_DECLARE_PRINTABLE(qevercloud::NoteAttributes)
129 QUENTIER_DECLARE_PRINTABLE(qevercloud::PrivilegeLevel::type)
130 QUENTIER_DECLARE_PRINTABLE(qevercloud::ServiceLevel::type)
131 QUENTIER_DECLARE_PRINTABLE(qevercloud::QueryFormat::type)
132 QUENTIER_DECLARE_PRINTABLE(qevercloud::SharedNotebookPrivilegeLevel::type)
133 QUENTIER_DECLARE_PRINTABLE(qevercloud::NoteSortOrder::type)
134 QUENTIER_DECLARE_PRINTABLE(qevercloud::NotebookRestrictions)
135 QUENTIER_DECLARE_PRINTABLE(qevercloud::SharedNotebookInstanceRestrictions::type)
136 QUENTIER_DECLARE_PRINTABLE(qevercloud::ResourceAttributes)
137 QUENTIER_DECLARE_PRINTABLE(qevercloud::Resource)
138 QUENTIER_DECLARE_PRINTABLE(qevercloud::SyncChunk)
139 QUENTIER_DECLARE_PRINTABLE(qevercloud::Tag)
140 QUENTIER_DECLARE_PRINTABLE(qevercloud::SavedSearch)
141 QUENTIER_DECLARE_PRINTABLE(qevercloud::LinkedNotebook)
142 QUENTIER_DECLARE_PRINTABLE(qevercloud::Notebook)
143 QUENTIER_DECLARE_PRINTABLE(qevercloud::Publishing)
144 QUENTIER_DECLARE_PRINTABLE(qevercloud::SharedNotebook)
145 QUENTIER_DECLARE_PRINTABLE(qevercloud::BusinessNotebook)
146 QUENTIER_DECLARE_PRINTABLE(qevercloud::User)
147 QUENTIER_DECLARE_PRINTABLE(qevercloud::SharedNotebookRecipientSettings)
148 QUENTIER_DECLARE_PRINTABLE(qevercloud::ReminderEmailConfig::type)
149 QUENTIER_DECLARE_PRINTABLE(qevercloud::PremiumOrderStatus::type)
150 QUENTIER_DECLARE_PRINTABLE(qevercloud::BusinessUserRole::type)
151 QUENTIER_DECLARE_PRINTABLE(qevercloud::SponsoredGroupRole::type)
152 QUENTIER_DECLARE_PRINTABLE(qevercloud::SharedNote)
153 QUENTIER_DECLARE_PRINTABLE(qevercloud::NoteRestrictions)
154 QUENTIER_DECLARE_PRINTABLE(qevercloud::NoteLimits)
155 QUENTIER_DECLARE_PRINTABLE(qevercloud::Note)
156 QUENTIER_DECLARE_PRINTABLE(qevercloud::EDAMErrorCode::type)
157 QUENTIER_DECLARE_PRINTABLE(qevercloud::SyncState)
158 QUENTIER_DECLARE_PRINTABLE(qevercloud::SyncChunkFilter)
159 QUENTIER_DECLARE_PRINTABLE(qevercloud::NoteResultSpec)
160 
161 #if QEVERCLOUD_HAS_OAUTH
162 QUENTIER_DECLARE_PRINTABLE(qevercloud::EvernoteOAuthWebView::OAuthResult)
163 #endif
164 
165 #endif // LIB_QUENTIER_UTILITY_PRINTABLE_H
The Printable class is the interface for Quentier's internal classes which should be able to write th...
Definition: Printable.h:54