blob: c7cee0a615dc7a8a94e5cc3b8fa46a6531bf0f96 [file] [log] [blame]
Nicolas Jagereeef17c2016-08-16 10:21:54 -04001/***************************************************************************
2* Copyright (C) 2016 by Savoir-faire Linux *
3* Author: Jäger Nicolas <nicolas.jager@savoirfairelinux.com> *
4* *
5* This program is free software; you can redistribute it and/or modify *
6* it under the terms of the GNU General Public License as published by *
7* the Free Software Foundation; either version 3 of the License, or *
8* (at your option) any later version. *
9* *
10* This program 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 General Public License for more details. *
14* *
15* You should have received a copy of the GNU General Public License *
16* along with this program. If not, see <http://www.gnu.org/licenses/>. *
17**************************************************************************/
18#pragma once
19
20namespace RingClientUWP
21{
22
23/* forward declaration */
24ref class RingDebug;
25
26/* delegate */
27delegate void debugMessageToScreen(Platform::String^ message);
28
29/* this is how to implement a singleton class*/
30public ref class RingDebug sealed
31{
32public:
33 /* singleton */
34 static property RingDebug^ instance
35 {
36 RingDebug^ get()
37 {
38 static RingDebug^ instance_ = ref new RingDebug();
39 return instance_;
40 }
41 }
42
43 /* properties */
44
45 /* functions */
46internal:
47 enum class Type { MSG, WNG, ERR };
48 void print(const std::string& message, const Type& type = Type::MSG);
49
50 /* event */
51 event debugMessageToScreen^ messageToScreen;
52
53private:
54 RingDebug() {}; // singleton
55};
56
atraczyk14ba30c2016-09-22 18:31:59 -040057void WriteLine(String^ str)
58{
59 std::wstringstream wStringstream;
60 wStringstream << str->Data() << "\n";
61 OutputDebugString(wStringstream.str().c_str());
62}
63
64void WriteException(Exception^ ex)
65{
66 std::wstringstream wStringstream;
67 wStringstream << "0x" << ex->HResult << ": " << ex->Message->Data();
68 OutputDebugString(wStringstream.str().c_str());
69}
70
Nicolas Jager9edbea32016-10-03 09:13:53 -040071#define MSG_(cstr) CoreApplication::MainView->CoreWindow->Dispatcher->RunAsync(CoreDispatcherPriority::High, \
Nicolas Jagereeef17c2016-08-16 10:21:54 -040072ref new DispatchedHandler([=]() { RingDebug::instance->print(cstr); }))
73
Nicolas Jager9edbea32016-10-03 09:13:53 -040074#define WNG_(cstr) CoreApplication::MainView->CoreWindow->Dispatcher->RunAsync(CoreDispatcherPriority::High, \
Nicolas Jagereeef17c2016-08-16 10:21:54 -040075ref new DispatchedHandler([=]() { RingDebug::instance->print(std::string(cstr), RingDebug::Type::WNG); }))
76
Nicolas Jager9edbea32016-10-03 09:13:53 -040077#define ERR_(cstr) CoreApplication::MainView->CoreWindow->Dispatcher->RunAsync(CoreDispatcherPriority::High, \
Nicolas Jagereeef17c2016-08-16 10:21:54 -040078ref new DispatchedHandler([=]() { RingDebug::instance->print(std::string(cstr), RingDebug::Type::ERR); }))
79
Nicolas Jager32ed1a22016-08-17 08:36:02 -040080}