1 /* This file is part of the Pangolin Project. 2 * http://github.com/stevenlovegrove/Pangolin 3 * 4 * Copyright (c) Andrey Mnatsakanov 5 * 6 * Permission is hereby granted, free of charge, to any person 7 * obtaining a copy of this software and associated documentation 8 * files (the "Software"), to deal in the Software without 9 * restriction, including without limitation the rights to use, 10 * copy, modify, merge, publish, distribute, sublicense, and/or sell 11 * copies of the Software, and to permit persons to whom the 12 * Software is furnished to do so, subject to the following 13 * conditions: 14 * 15 * The above copyright notice and this permission notice shall be 16 * included in all copies or substantial portions of the Software. 17 * 18 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 19 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 20 * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 21 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 22 * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 23 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 24 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 25 * OTHER DEALINGS IN THE SOFTWARE. 26 */ 27 28 #pragma once 29 30 #include <pybind11/pybind11.h> 31 #include <pangolin/var/var.h> 32 #include <Python.h> 33 34 namespace py_pangolin { 35 36 struct PyVarMeta { 37 double low; 38 double high; 39 bool logscale; 40 bool toggle; 41 bool read_only; 42 }; 43 44 void bind_var(pybind11::module& m); 45 46 class var_t 47 { 48 public: 49 var_t(const std::string& ns); 50 virtual ~var_t() noexcept; 51 pybind11::object get_attr(const std::string &name); 52 53 template <typename T> 54 void set_attr_(const std::string& name, T val, const PyVarMeta & meta = {}); 55 56 std::vector<std::string>& get_members(); 57 protected: 58 var_t(const var_t &other); 59 var_t(var_t &&other) noexcept; 60 var_t& operator=(const var_t &other); 61 var_t& operator=(var_t &&other) noexcept; 62 private: 63 std::vector<std::string> members; 64 std::string ns; 65 }; 66 67 } // py_pangolin 68