1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159
|
/************************************************************************
*
* Copyright (C) 2009-2024 IRCAD France
* Copyright (C) 2012-2020 IHU Strasbourg
*
* This file is part of Sight.
*
* Sight is free software: you can redistribute it and/or modify it under
* the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Sight 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with Sight. If not, see <https://www.gnu.org/licenses/>.
*
***********************************************************************/
#pragma once
#include <sight/core/config.hpp>
#include <core/base.hpp>
#include <boost/noncopyable.hpp>
#include <filesystem>
#include <functional>
#include <vector>
namespace sight::core::runtime
{
/**
* @brief Implements a module set profile.
*/
class SIGHT_CORE_CLASS_API profile : public boost::noncopyable
{
public:
using sptr = std::shared_ptr<profile>;
using params_container = std::vector<std::string>;
using run_callback_type = std::function<int ()>;
SIGHT_CORE_API virtual ~profile();
/// Starts the profile.
SIGHT_CORE_API virtual void start() = 0;
/// Stops the profile.
SIGHT_CORE_API virtual void stop() = 0;
/// Run the profile.
SIGHT_CORE_API virtual int run() = 0;
/// Define the callback to be called when running the profile
SIGHT_CORE_API virtual void set_run_callback(run_callback_type _callback) = 0;
/// Get profile path
const std::filesystem::path& file_path() const
{
return m_file_path;
}
/// Set profile path
void set_file_path(const std::filesystem::path& _file_path)
{
m_file_path = _file_path;
}
/// Return profile name.
const std::string& name() const
{
return m_name;
}
/**
* @brief Set profile name.
*
* @param[in] _s_name profile name
*/
void set_name(std::string _s_name)
{
m_name = _s_name;
}
/**
* @brief Return profile version.
*/
const std::string& version() const
{
return m_version;
}
/**
* @brief Set profile version.
*
* @param[in] _s_version profile version
*/
void set_version(std::string _s_version)
{
m_version = _s_version;
}
//------------------------------------------------------------------------------
params_container get_params() const
{
return m_params;
}
SIGHT_CORE_API void set_params(const params_container& _params);
/**
* @brief Returns internal arg count.
* The returned int shall not be modified. This is provided for external
* library needs (QApplication constructor for example)
*/
int& get_raw_arg_count()
{
return m_argc;
}
/**
* @brief Returns a raw pointer on internal arguments.
* The returned data shall not be modified. This is provided for external
* library needs (QApplication constructor for example)
*/
char** get_raw_params() const
{
return m_argv;
}
protected:
/**
* @brief Constructor : does nothing.
*/
SIGHT_CORE_API profile() = default;
private:
std::filesystem::path m_file_path; ///< xml parsed file used to generate profile
std::string m_name; ///< name profile
std::string m_version; ///< profile app version
params_container m_params;
int m_argc {0};
char** m_argv {nullptr};
};
/// Get current profile.
SIGHT_CORE_API core::runtime::profile::sptr get_current_profile();
} // namespace sight::core::runtime
|