.. _program_listing_file_include_miral_miral_configuration_option.h:

Program Listing for File configuration_option.h
===============================================

|exhale_lsh| :ref:`Return to documentation for file <file_include_miral_miral_configuration_option.h>` (``include/miral/miral/configuration_option.h``)

.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS

.. code-block:: cpp

   /*
    * Copyright © Canonical Ltd.
    *
    * This program is free software: you can redistribute it and/or modify it
    * under the terms of the GNU General Public License version 2 or 3 as
    * published by the Free Software Foundation.
    *
    * 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 General Public License for more details.
    *
    * You should have received a copy of the GNU General Public License
    * along with this program.  If not, see <http://www.gnu.org/licenses/>.
    */
   
   #ifndef MIRAL_CONFIGURATION_OPTION_H
   #define MIRAL_CONFIGURATION_OPTION_H
   
   #include <mir/optional_value.h>
   #include <miral/lambda_as_function.h>
   
   #include <functional>
   #include <memory>
   #include <string>
   
   namespace mir { class Server; }
   
   namespace miral
   {
   class ConfigurationOption
   {
   public:
       ConfigurationOption(
           std::function<void(int value)> callback,
           std::string const& option,
           std::string const& description,
           int default_value);
   
       ConfigurationOption(
           std::function<void(double value)> callback,
           std::string const& option,
           std::string const& description,
           double default_value);
   
       ConfigurationOption(
           std::function<void(std::string const& value)> callback,
           std::string const& option,
           std::string const& description,
           std::string const& default_value);
   
       ConfigurationOption(
           std::function<void(std::string const& value)> callback,
           std::string const& option,
           std::string const& description,
           char const* default_value);
   
       ConfigurationOption(
           std::function<void(bool value)> callback,
           std::string const& option,
           std::string const& description,
           bool default_value);
   
       ConfigurationOption(
           std::function<void(mir::optional_value<int> const& value)> callback,
           std::string const& option,
           std::string const& description);
   
       ConfigurationOption(
           std::function<void(mir::optional_value<std::string> const& value)> callback,
           std::string const& option,
           std::string const& description);
   
       ConfigurationOption(
           std::function<void(mir::optional_value<bool> const& value)> callback,
           std::string const& option,
           std::string const& description);
   
       ConfigurationOption(
           std::function<void(bool is_set)> callback,
           std::string const& option,
           std::string const& description);
   
       // \remark Since MirAL 3.6
       ConfigurationOption(
           std::function<void(std::vector<std::string> const& values)> callback,
           std::string const& option,
           std::string const& description);
   
       template<typename Lambda>
       ConfigurationOption(
               Lambda&& callback,
               std::string const& option,
               std::string const& description) :
               ConfigurationOption(lambda_as_function(std::forward<Lambda>(callback)), option, description) {}
   
       void operator()(mir::Server& server) const;
   
       // Call the callback *before* Mir initialization starts
       friend auto pre_init(ConfigurationOption const& clo) -> ConfigurationOption;
   
       ~ConfigurationOption();
       ConfigurationOption(ConfigurationOption const&);
       auto operator=(ConfigurationOption const&) -> ConfigurationOption&;
   
   private:
       struct Self;
       std::shared_ptr<Self> self;
   };
   
   auto pre_init(ConfigurationOption const& clo) -> ConfigurationOption;
   }
   
   #endif //MIRAL_CONFIGURATION_OPTION_H