2017-03-17 15:45:24 +01:00

53 lines
1.5 KiB
Perl

package Slic3r::GUI::Preset;
use Moo;
use Unicode::Normalize;
has 'default' => (is => 'ro', default => sub { 0 });
has 'external' => (is => 'ro', default => sub { 0 });
has 'name' => (is => 'rw', required => 1);
has 'file' => (is => 'rw');
sub BUILD {
my ($self) = @_;
$self->name(Unicode::Normalize::NFC($self->name));
}
sub config {
my ($self, $keys, $extra_keys) = @_;
if ($self->default) {
return Slic3r::Config->new_from_defaults(@$keys);
} else {
if (!-e Slic3r::encode_path($self->file)) {
Slic3r::GUI::show_error(undef, "The selected preset does not exist anymore (" . $self->file . ").");
return undef;
}
my $external_config = $self->load_config;
if (!$keys) {
return $external_config;
} else {
# apply preset values on top of defaults
my $config = Slic3r::Config->new_from_defaults(@$keys);
$config->set($_, $external_config->get($_))
for grep $external_config->has($_), @$keys;
# For extra_keys we don't populate defaults.
if ($extra_keys && !$self->external) {
$config->set($_, $external_config->get($_))
for grep $external_config->has($_), @$extra_keys;
}
return $config;
}
}
}
sub load_config {
my ($self) = @_;
return Slic3r::Config->load($self->file);
}
1;