Welcome to mirror list, hosted at ThFree Co, Russian Federation.

Version.hpp « Config « slic3r « src - github.com/supermerill/SuperSlicer.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: acb0ae46009c71ee45ef67cf0ab1b17efff13c81 (plain)
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
#ifndef slic3r_GUI_ConfigIndex_
#define slic3r_GUI_ConfigIndex_

#include <string>
#include <vector>

#include <boost/filesystem.hpp>

#include "../../libslic3r/FileParserError.hpp"
#include "../Utils/Semver.hpp"

namespace Slic3r { 
namespace GUI {
namespace Config {

// Configuration bundle version.
struct Version
{
	// Version of this config.
	Semver 		config_version     = Semver::invalid();
	// Minimum Slic3r version, for which this config is applicable.
	Semver 		min_slic3r_version = Semver::zero();
	// Maximum Slic3r version, for which this config is recommended.
	// Slic3r should read older configuration and upgrade to a newer format,
	// but likely there has been a better configuration published, using the new features.
	Semver 		max_slic3r_version = Semver::inf();
	// Single comment line.
	std::string comment;

	bool 		is_slic3r_supported(const Semver &slicer_version) const;
	bool 		is_current_slic3r_supported() const;
};

// Index of vendor specific config bundle versions and Slic3r compatibilities.
// The index is being downloaded from the internet, also an initial version of the index 
// is contained in the Slic3r installation.
// 
// The index has a simple format:
//
// min_sic3r_version = 
// max_slic3r_version = 
// config_version "comment"
// config_version "comment"
// ...
// min_slic3r_version = 
// max_slic3r_version = 
// config_version comment
// config_version comment
// ...
//
// The min_slic3r_version, max_slic3r_version keys are applied to the config versions below,
// empty slic3r version means an open interval.
class Index
{
public:
	typedef std::vector<Version>::const_iterator const_iterator;
	// Read a config index file in the simple format described in the Index class comment.
	// Throws Slic3r::file_parser_error and the standard std file access exceptions.
	size_t						load(const boost::filesystem::path &path);

	const std::string&			vendor() const { return m_vendor; }
	// Returns version of the index as the highest version of all the configs.
	// If there is no config, Semver::zero() is returned.
	Semver						version() const;

	const_iterator				begin()   const { return m_configs.begin(); }
	const_iterator				end()     const { return m_configs.end(); }
	const_iterator 				find(const Semver &ver) const;
	const std::vector<Version>& configs() const { return m_configs; }
	// Finds a recommended config to be installed for the current Slic3r version.
	// Returns configs().end() if such version does not exist in the index. This shall never happen
	// if the index is valid.
	const_iterator				recommended() const;

	// Load all vendor specific indices.
	// Throws Slic3r::file_parser_error and the standard std file access exceptions.
	static std::vector<Index>	load_db();

private:
	std::string 				m_vendor;
	std::vector<Version>		m_configs;
};

} // namespace Config
} // namespace GUI
} // namespace Slic3r

#endif /* slic3r_GUI_ConfigIndex_ */