# HG changeset patch
# User am@osimis.io
# Date 1535640760 -7200
# Node ID 8c8da145fefa2eebd36e504dae145429fc7ff8b1
# Parent 2038d76bf13fff3451bd5560770f860aeeab8c1b
renamings and doc
diff -r 2038d76bf13f -r 8c8da145fefa Applications/BasicApplication.cpp
--- a/Applications/BasicApplication.cpp Thu Aug 30 11:36:36 2018 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,291 +0,0 @@
-/**
- * Stone of Orthanc
- * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics
- * Department, University Hospital of Liege, Belgium
- * Copyright (C) 2017-2018 Osimis S.A., Belgium
- *
- * This program is free software: you can redistribute it and/or
- * modify it under the terms of the GNU Affero General Public License
- * as published by the Free Software Foundation, either version 3 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see .
- **/
-
-
-#include "IBasicApplication.h"
-
-#include "../Framework/Toolbox/MessagingToolbox.h"
-#include "Sdl/SdlEngine.h"
-
-#include
-#include
-#include
-
-namespace OrthancStone
-{
- // Anonymous namespace to avoid clashes against other compilation modules
- namespace
- {
- class LogStatusBar : public IStatusBar
- {
- public:
- virtual void ClearMessage()
- {
- }
-
- virtual void SetMessage(const std::string& message)
- {
- LOG(WARNING) << message;
- }
- };
- }
-
-
-#if ORTHANC_ENABLE_SDL == 1
- static void DeclareSdlCommandLineOptions(boost::program_options::options_description& options)
- {
- // Declare the supported parameters
- boost::program_options::options_description generic("Generic options");
- generic.add_options()
- ("help", "Display this help and exit")
- ("verbose", "Be verbose in logs")
- ("orthanc", boost::program_options::value()->default_value("http://localhost:8042/"),
- "URL to the Orthanc server")
- ("username", "Username for the Orthanc server")
- ("password", "Password for the Orthanc server")
- ("https-verify", boost::program_options::value()->default_value(true), "Check HTTPS certificates")
- ;
-
- options.add(generic);
-
- boost::program_options::options_description sdl("SDL options");
- sdl.add_options()
- ("width", boost::program_options::value()->default_value(1024), "Initial width of the SDL window")
- ("height", boost::program_options::value()->default_value(768), "Initial height of the SDL window")
- ("opengl", boost::program_options::value()->default_value(true), "Enable OpenGL in SDL")
- ;
-
- options.add(sdl);
- }
-
-
- int IBasicApplication::ExecuteWithSdl(IBasicApplication& application,
- int argc,
- char* argv[])
- {
- /******************************************************************
- * Initialize all the subcomponents of Orthanc Stone
- ******************************************************************/
-
- Orthanc::Logging::Initialize();
- Orthanc::HttpClient::InitializeOpenSsl();
- Orthanc::HttpClient::GlobalInitialize();
- SdlWindow::GlobalInitialize();
-
-
- /******************************************************************
- * Declare and parse the command-line options of the application
- ******************************************************************/
-
- boost::program_options::options_description options;
- DeclareSdlCommandLineOptions(options);
- application.DeclareCommandLineOptions(options);
-
- boost::program_options::variables_map parameters;
- bool error = false;
-
- try
- {
- boost::program_options::store(boost::program_options::command_line_parser(argc, argv).
- options(options).run(), parameters);
- boost::program_options::notify(parameters);
- }
- catch (boost::program_options::error& e)
- {
- LOG(ERROR) << "Error while parsing the command-line arguments: " << e.what();
- error = true;
- }
-
-
- /******************************************************************
- * Configure the application with the command-line parameters
- ******************************************************************/
-
- if (error || parameters.count("help"))
- {
- std::cout << std::endl
- << "Usage: " << argv[0] << " [OPTION]..."
- << std::endl
- << "Orthanc, lightweight, RESTful DICOM server for healthcare and medical research."
- << std::endl << std::endl
- << "Demonstration application of Orthanc Stone using SDL."
- << std::endl;
-
- std::cout << options << "\n";
- return error ? -1 : 0;
- }
-
- if (parameters.count("https-verify") &&
- !parameters["https-verify"].as())
- {
- LOG(WARNING) << "Turning off verification of HTTPS certificates (unsafe)";
- Orthanc::HttpClient::ConfigureSsl(false, "");
- }
-
- if (parameters.count("verbose"))
- {
- Orthanc::Logging::EnableInfoLevel(true);
- }
-
- if (!parameters.count("width") ||
- !parameters.count("height") ||
- !parameters.count("opengl"))
- {
- LOG(ERROR) << "Parameter \"width\", \"height\" or \"opengl\" is missing";
- return -1;
- }
-
- int w = parameters["width"].as();
- int h = parameters["height"].as();
- if (w <= 0 || h <= 0)
- {
- LOG(ERROR) << "Parameters \"width\" and \"height\" must be positive";
- return -1;
- }
-
- unsigned int width = static_cast(w);
- unsigned int height = static_cast(h);
- LOG(WARNING) << "Initial display size: " << width << "x" << height;
-
- bool opengl = parameters["opengl"].as();
- if (opengl)
- {
- LOG(WARNING) << "OpenGL is enabled, disable it with option \"--opengl=off\" if the application crashes";
- }
- else
- {
- LOG(WARNING) << "OpenGL is disabled, enable it with option \"--opengl=on\" for best performance";
- }
-
- bool success = true;
- try
- {
- /****************************************************************
- * Initialize the connection to the Orthanc server
- ****************************************************************/
-
- Orthanc::WebServiceParameters webService;
-
- if (parameters.count("orthanc"))
- {
- webService.SetUrl(parameters["orthanc"].as());
- }
-
- if (parameters.count("username"))
- {
- webService.SetUsername(parameters["username"].as());
- }
-
- if (parameters.count("password"))
- {
- webService.SetPassword(parameters["password"].as());
- }
-
- LOG(WARNING) << "URL to the Orthanc REST API: " << webService.GetUrl();
-
- {
- OrthancPlugins::OrthancHttpConnection orthanc(webService);
- if (!MessagingToolbox::CheckOrthancVersion(orthanc))
- {
- LOG(ERROR) << "Your version of Orthanc is incompatible with Stone of Orthanc, please upgrade";
- throw Orthanc::OrthancException(Orthanc::ErrorCode_NetworkProtocol);
- }
- }
-
-
- /****************************************************************
- * Initialize the application
- ****************************************************************/
-
- LOG(WARNING) << "Creating the widgets of the application";
-
- LogStatusBar statusBar;
- BasicApplicationContext context(webService);
-
- application.Initialize(context, statusBar, parameters);
-
- {
- BasicApplicationContext::ViewportLocker locker(context);
- locker.GetViewport().SetStatusBar(statusBar);
- }
-
- std::string title = application.GetTitle();
- if (title.empty())
- {
- title = "Stone of Orthanc";
- }
-
- {
- /**************************************************************
- * Run the application inside a SDL window
- **************************************************************/
-
- LOG(WARNING) << "Starting the application";
-
- SdlWindow window(title.c_str(), width, height, opengl);
- SdlEngine sdl(window, context);
-
- {
- BasicApplicationContext::ViewportLocker locker(context);
- locker.GetViewport().Register(sdl); // (*)
- }
-
- context.Start();
- sdl.Run();
-
- LOG(WARNING) << "Stopping the application";
-
- // Don't move the "Stop()" command below out of the block,
- // otherwise the application might crash, because the
- // "SdlEngine" is an observer of the viewport (*) and the
- // update thread started by "context.Start()" would call a
- // destructed object (the "SdlEngine" is deleted with the
- // lexical scope).
- context.Stop();
- }
-
-
- /****************************************************************
- * Finalize the application
- ****************************************************************/
-
- LOG(WARNING) << "The application has stopped";
- application.Finalize();
- }
- catch (Orthanc::OrthancException& e)
- {
- LOG(ERROR) << "EXCEPTION: " << e.What();
- success = false;
- }
-
-
- /******************************************************************
- * Finalize all the subcomponents of Orthanc Stone
- ******************************************************************/
-
- SdlWindow::GlobalFinalize();
- Orthanc::HttpClient::GlobalFinalize();
- Orthanc::HttpClient::FinalizeOpenSsl();
-
- return (success ? 0 : -1);
- }
-#endif
-
-}
diff -r 2038d76bf13f -r 8c8da145fefa Applications/BasicApplication.h
--- a/Applications/BasicApplication.h Thu Aug 30 11:36:36 2018 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,68 +0,0 @@
-/**
- * Stone of Orthanc
- * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics
- * Department, University Hospital of Liege, Belgium
- * Copyright (C) 2017-2018 Osimis S.A., Belgium
- *
- * This program is free software: you can redistribute it and/or
- * modify it under the terms of the GNU Affero General Public License
- * as published by the Free Software Foundation, either version 3 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see .
- **/
-
-
-#pragma once
-
-#include "BasicApplicationContext.h"
-
-#include
-
-#if ORTHANC_ENABLE_SDL == 1
-# include // Necessary to avoid undefined reference to `SDL_main'
-#endif
-
-namespace OrthancStone
-{
- class IBasicApplication : public boost::noncopyable
- {
- public:
- virtual ~IBasicApplication()
- {
- }
-
- virtual void DeclareStartupOption(const std::string& name, const std::string& defaultValue, const std::string& helpText) = 0;
- virtual void Initialize(IStatusBar& statusBar, const std::map startupOptions);
-
-
- virtual void DeclareCommandLineOptions(boost::program_options::options_description& options) = 0;
-
- virtual std::string GetTitle() const = 0;
-
- virtual void Initialize(BasicApplicationContext& context,
- IStatusBar& statusBar,
- const boost::program_options::variables_map& parameters) = 0;
-
- virtual void Finalize() = 0;
-
-#if ORTHANC_ENABLE_SDL == 1
- static int ExecuteWithSdl(IBasicApplication& application,
- int argc,
- char* argv[]);
-#endif
- };
-
- class IBasicSdlApplication : public IBasicApplication
- {
- public:
-
-
- }
-}
diff -r 2038d76bf13f -r 8c8da145fefa Applications/BasicApplicationContext.cpp
--- a/Applications/BasicApplicationContext.cpp Thu Aug 30 11:36:36 2018 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,26 +0,0 @@
-/**
- * Stone of Orthanc
- * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics
- * Department, University Hospital of Liege, Belgium
- * Copyright (C) 2017-2018 Osimis S.A., Belgium
- *
- * This program is free software: you can redistribute it and/or
- * modify it under the terms of the GNU Affero General Public License
- * as published by the Free Software Foundation, either version 3 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see .
- **/
-
-
-#include "BasicApplicationContext.h"
-
-namespace OrthancStone
-{
-}
diff -r 2038d76bf13f -r 8c8da145fefa Applications/BasicApplicationContext.h
--- a/Applications/BasicApplicationContext.h Thu Aug 30 11:36:36 2018 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,51 +0,0 @@
-/**
- * Stone of Orthanc
- * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics
- * Department, University Hospital of Liege, Belgium
- * Copyright (C) 2017-2018 Osimis S.A., Belgium
- *
- * This program is free software: you can redistribute it and/or
- * modify it under the terms of the GNU Affero General Public License
- * as published by the Free Software Foundation, either version 3 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see .
- **/
-
-
-#pragma once
-
-#include "../Framework/Toolbox/IWebService.h"
-#include "../Framework/Viewport/WidgetViewport.h"
-
-#include
-
-namespace OrthancStone
-{
- class BasicApplicationContext : public boost::noncopyable
- {
-
- protected:
- IWebService* webService_;
- public:
- BasicApplicationContext()
- : webService_(NULL)
- {
- }
-
- IWebService& GetWebService() {return *webService_;}
- void SetWebService(IWebService& webService)
- {
- webService_ = &webService;
- }
-// virtual IWidget& SetCentralWidget(IWidget* widget) = 0; // Takes ownership
-
- virtual ~BasicApplicationContext() {}
- };
-}
diff -r 2038d76bf13f -r 8c8da145fefa Applications/Generic/BasicNativeApplicationContext.h
--- a/Applications/Generic/BasicNativeApplicationContext.h Thu Aug 30 11:36:36 2018 +0200
+++ b/Applications/Generic/BasicNativeApplicationContext.h Thu Aug 30 16:52:40 2018 +0200
@@ -27,11 +27,11 @@
#include
#include
-#include "../BasicApplicationContext.h"
+#include "../StoneApplicationContext.h"
namespace OrthancStone
{
- class BasicNativeApplicationContext : public BasicApplicationContext
+ class BasicNativeApplicationContext : public StoneApplicationContext
{
private:
diff -r 2038d76bf13f -r 8c8da145fefa Applications/Generic/BasicNativeApplicationRunner.h
--- a/Applications/Generic/BasicNativeApplicationRunner.h Thu Aug 30 11:36:36 2018 +0200
+++ b/Applications/Generic/BasicNativeApplicationRunner.h Thu Aug 30 16:52:40 2018 +0200
@@ -21,7 +21,7 @@
#pragma once
-#include "../IBasicApplication.h"
+#include "../IStoneApplication.h"
#if ORTHANC_ENABLE_NATIVE != 1
#error this file shall be included only with the ORTHANC_ENABLE_NATIVE set to 1
@@ -35,11 +35,11 @@
{
protected:
MessageBroker& broker_;
- IBasicApplication& application_;
+ IStoneApplication& application_;
public:
BasicNativeApplicationRunner(MessageBroker& broker,
- IBasicApplication& application)
+ IStoneApplication& application)
: broker_(broker),
application_(application)
{
diff -r 2038d76bf13f -r 8c8da145fefa Applications/IBasicApplication.h
--- a/Applications/IBasicApplication.h Thu Aug 30 11:36:36 2018 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,55 +0,0 @@
-/**
- * Stone of Orthanc
- * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics
- * Department, University Hospital of Liege, Belgium
- * Copyright (C) 2017-2018 Osimis S.A., Belgium
- *
- * This program is free software: you can redistribute it and/or
- * modify it under the terms of the GNU Affero General Public License
- * as published by the Free Software Foundation, either version 3 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see .
- **/
-
-
-#pragma once
-
-#include "BasicApplicationContext.h"
-#include
-#include "../Framework/Viewport/WidgetViewport.h"
-#include "json/json.h"
-
-namespace OrthancStone
-{
- class IBasicApplication : public boost::noncopyable
- {
- protected:
- BasicApplicationContext* context_;
-
- public:
- virtual ~IBasicApplication()
- {
- }
-
- virtual void DeclareStartupOptions(boost::program_options::options_description& options) = 0;
- virtual void Initialize(BasicApplicationContext* context,
- IStatusBar& statusBar,
- const boost::program_options::variables_map& parameters) = 0;
-#if ORTHANC_ENABLE_WASM==1
- virtual void InitializeWasm() {} // specific initialization when the app is running in WebAssembly. This is called after the other Initialize()
-#endif
-
- virtual std::string GetTitle() const = 0;
- virtual IWidget* GetCentralWidget() = 0;
-
- virtual void Finalize() = 0;
- };
-
-}
diff -r 2038d76bf13f -r 8c8da145fefa Applications/IStoneApplication.h
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Applications/IStoneApplication.h Thu Aug 30 16:52:40 2018 +0200
@@ -0,0 +1,58 @@
+/**
+ * Stone of Orthanc
+ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics
+ * Department, University Hospital of Liege, Belgium
+ * Copyright (C) 2017-2018 Osimis S.A., Belgium
+ *
+ * This program is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU Affero General Public License
+ * as published by the Free Software Foundation, either version 3 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ **/
+
+
+#pragma once
+
+#include "StoneApplicationContext.h"
+#include
+#include "../Framework/Viewport/WidgetViewport.h"
+#include "json/json.h"
+
+namespace OrthancStone
+{
+ // a StoneApplication is an application that can actually be executed
+ // in multiple environments. i.e: it can run natively integrated in a QtApplication
+ // or it can be executed as part of a WebPage when compiled into WebAssembly.
+ class IStoneApplication : public boost::noncopyable
+ {
+ protected:
+ StoneApplicationContext* context_;
+
+ public:
+ virtual ~IStoneApplication()
+ {
+ }
+
+ virtual void DeclareStartupOptions(boost::program_options::options_description& options) = 0;
+ virtual void Initialize(StoneApplicationContext* context,
+ IStatusBar& statusBar,
+ const boost::program_options::variables_map& parameters) = 0;
+#if ORTHANC_ENABLE_WASM==1
+ virtual void InitializeWasm() {} // specific initialization when the app is running in WebAssembly. This is called after the other Initialize()
+#endif
+
+ virtual std::string GetTitle() const = 0;
+ virtual IWidget* GetCentralWidget() = 0;
+
+ virtual void Finalize() = 0;
+ };
+
+}
diff -r 2038d76bf13f -r 8c8da145fefa Applications/Qt/BasicQtApplicationRunner.h
--- a/Applications/Qt/BasicQtApplicationRunner.h Thu Aug 30 11:36:36 2018 +0200
+++ b/Applications/Qt/BasicQtApplicationRunner.h Thu Aug 30 16:52:40 2018 +0200
@@ -38,7 +38,7 @@
virtual void InitializeMainWindow(BasicNativeApplicationContext& context) = 0;
public:
BasicQtApplicationRunner(MessageBroker& broker,
- IBasicApplication& application)
+ IStoneApplication& application)
: BasicNativeApplicationRunner(broker, application)
{
}
diff -r 2038d76bf13f -r 8c8da145fefa Applications/Samples/SampleApplicationBase.h
--- a/Applications/Samples/SampleApplicationBase.h Thu Aug 30 11:36:36 2018 +0200
+++ b/Applications/Samples/SampleApplicationBase.h Thu Aug 30 16:52:40 2018 +0200
@@ -21,16 +21,16 @@
#pragma once
-#include "../../Applications/IBasicApplication.h"
+#include "../../Applications/IStoneApplication.h"
namespace OrthancStone
{
namespace Samples
{
- class SampleApplicationBase : public IBasicApplication
+ class SampleApplicationBase : public IStoneApplication
{
public:
- virtual void Initialize(BasicApplicationContext* context,
+ virtual void Initialize(StoneApplicationContext* context,
IStatusBar& statusBar,
const boost::program_options::variables_map& parameters)
{
diff -r 2038d76bf13f -r 8c8da145fefa Applications/Samples/SampleMainWasm.cpp
--- a/Applications/Samples/SampleMainWasm.cpp Thu Aug 30 11:36:36 2018 +0200
+++ b/Applications/Samples/SampleMainWasm.cpp Thu Aug 30 16:52:40 2018 +0200
@@ -26,7 +26,7 @@
#include "SampleList.h"
-OrthancStone::IBasicApplication* CreateUserApplication(OrthancStone::MessageBroker& broker) {
+OrthancStone::IStoneApplication* CreateUserApplication(OrthancStone::MessageBroker& broker) {
return new SampleApplication(broker);
}
\ No newline at end of file
diff -r 2038d76bf13f -r 8c8da145fefa Applications/Samples/SimpleViewerApplication.h
--- a/Applications/Samples/SimpleViewerApplication.h Thu Aug 30 11:36:36 2018 +0200
+++ b/Applications/Samples/SimpleViewerApplication.h Thu Aug 30 16:52:40 2018 +0200
@@ -226,7 +226,7 @@
options.add(generic);
}
- virtual void Initialize(BasicApplicationContext* context,
+ virtual void Initialize(StoneApplicationContext* context,
IStatusBar& statusBar,
const boost::program_options::variables_map& parameters)
{
diff -r 2038d76bf13f -r 8c8da145fefa Applications/StoneApplicationContext.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Applications/StoneApplicationContext.cpp Thu Aug 30 16:52:40 2018 +0200
@@ -0,0 +1,26 @@
+/**
+ * Stone of Orthanc
+ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics
+ * Department, University Hospital of Liege, Belgium
+ * Copyright (C) 2017-2018 Osimis S.A., Belgium
+ *
+ * This program is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU Affero General Public License
+ * as published by the Free Software Foundation, either version 3 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ **/
+
+
+#include "StoneApplicationContext.h"
+
+namespace OrthancStone
+{
+}
diff -r 2038d76bf13f -r 8c8da145fefa Applications/StoneApplicationContext.h
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Applications/StoneApplicationContext.h Thu Aug 30 16:52:40 2018 +0200
@@ -0,0 +1,56 @@
+/**
+ * Stone of Orthanc
+ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics
+ * Department, University Hospital of Liege, Belgium
+ * Copyright (C) 2017-2018 Osimis S.A., Belgium
+ *
+ * This program is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU Affero General Public License
+ * as published by the Free Software Foundation, either version 3 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ **/
+
+
+#pragma once
+
+#include "../Framework/Toolbox/IWebService.h"
+#include "../Framework/Viewport/WidgetViewport.h"
+
+#include
+
+namespace OrthancStone
+{
+ // a StoneApplicationContext contains the services that a StoneApplication
+ // uses and that depends on the environment in which the Application executes.
+ // I.e, the StoneApplicationContext provides a WebService interface such that
+ // the StoneApplication can perform HTTP requests. In a WASM environment,
+ // the WebService is provided by the browser while, in a native environment,
+ // the WebService is provided by the OracleWebService (a C++ Http client)
+ class StoneApplicationContext : public boost::noncopyable
+ {
+
+ protected:
+ IWebService* webService_;
+ public:
+ StoneApplicationContext()
+ : webService_(NULL)
+ {
+ }
+
+ IWebService& GetWebService() {return *webService_;}
+ void SetWebService(IWebService& webService)
+ {
+ webService_ = &webService;
+ }
+
+ virtual ~StoneApplicationContext() {}
+ };
+}
diff -r 2038d76bf13f -r 8c8da145fefa Framework/Toolbox/IWebService.h
--- a/Framework/Toolbox/IWebService.h Thu Aug 30 11:36:36 2018 +0200
+++ b/Framework/Toolbox/IWebService.h Thu Aug 30 16:52:40 2018 +0200
@@ -28,6 +28,11 @@
namespace OrthancStone
{
+ // The IWebService performs HTTP requests.
+ // Since applications can run in native or WASM environment and, since
+ // in a WASM environment, the WebService is asynchronous, the IWebservice
+ // also implements an asynchronous interface: you must schedule a request
+ // and you'll be notified when the response/error is ready.
class IWebService
{
protected:
diff -r 2038d76bf13f -r 8c8da145fefa Platforms/Generic/OracleWebService.h
--- a/Platforms/Generic/OracleWebService.h Thu Aug 30 11:36:36 2018 +0200
+++ b/Platforms/Generic/OracleWebService.h Thu Aug 30 16:52:40 2018 +0200
@@ -29,6 +29,7 @@
namespace OrthancStone
{
+ // The OracleWebService performs HTTP requests in a native environment.
class OracleWebService : public IWebService
{
private:
diff -r 2038d76bf13f -r 8c8da145fefa Platforms/Wasm/Defaults.cpp
--- a/Platforms/Wasm/Defaults.cpp Thu Aug 30 11:36:36 2018 +0200
+++ b/Platforms/Wasm/Defaults.cpp Thu Aug 30 16:52:40 2018 +0200
@@ -14,9 +14,9 @@
/**********************************/
-static std::unique_ptr application;
+static std::unique_ptr application;
static OrthancStone::IStoneApplicationToWebApplicationAdapter* applicationWebAdapter = NULL;
-static std::unique_ptr context;
+static std::unique_ptr context;
static OrthancStone::StartupParametersBuilder startupParametersBuilder;
static OrthancStone::MessageBroker broker;
@@ -90,7 +90,7 @@
application->DeclareStartupOptions(options);
startupParametersBuilder.GetStartupParameters(parameters, options);
- context.reset(new OrthancStone::BasicApplicationContext());
+ context.reset(new OrthancStone::StoneApplicationContext());
context->SetWebService(OrthancStone::WasmWebService::GetInstance());
application->Initialize(context.get(), statusBar_, parameters);
application->InitializeWasm();
diff -r 2038d76bf13f -r 8c8da145fefa Platforms/Wasm/Defaults.h
--- a/Platforms/Wasm/Defaults.h Thu Aug 30 11:36:36 2018 +0200
+++ b/Platforms/Wasm/Defaults.h Thu Aug 30 16:52:40 2018 +0200
@@ -6,7 +6,7 @@
#include
#include
#include
-#include
+#include
typedef OrthancStone::WidgetViewport* ViewportHandle; // the objects exchanged between JS and C++
@@ -27,7 +27,7 @@
}
#endif
-extern OrthancStone::IBasicApplication* CreateUserApplication(OrthancStone::MessageBroker& broker);
+extern OrthancStone::IStoneApplication* CreateUserApplication(OrthancStone::MessageBroker& broker);
namespace OrthancStone {
diff -r 2038d76bf13f -r 8c8da145fefa Resources/CMake/OrthancStoneConfiguration.cmake
--- a/Resources/CMake/OrthancStoneConfiguration.cmake Thu Aug 30 11:36:36 2018 +0200
+++ b/Resources/CMake/OrthancStoneConfiguration.cmake Thu Aug 30 16:52:40 2018 +0200
@@ -162,8 +162,8 @@
#####################################################################
set(APPLICATIONS_SOURCES
- ${ORTHANC_STONE_ROOT}/Applications/IBasicApplication.h
- ${ORTHANC_STONE_ROOT}/Applications/BasicApplicationContext.cpp
+ ${ORTHANC_STONE_ROOT}/Applications/IStoneApplication.h
+ ${ORTHANC_STONE_ROOT}/Applications/StoneApplicationContext.cpp
)
if (NOT ORTHANC_SANDBOXED)