171 lines
5.2 KiB
JavaScript
171 lines
5.2 KiB
JavaScript
import config from './../../config.js';
|
|
import Dialog_class from './../../libs/popup.js';
|
|
import Helper_class from './../../libs/helpers.js';
|
|
import Base_gui_class from './../../core/base-gui.js';
|
|
|
|
class Tools_settings_class {
|
|
|
|
constructor() {
|
|
this.Base_gui = new Base_gui_class();
|
|
this.POP = new Dialog_class();
|
|
this.Helper = new Helper_class();
|
|
|
|
this.default_units_config = {
|
|
pixels: 'px',
|
|
inches: '"',
|
|
centimeters: 'cm',
|
|
millimetres: 'mm',
|
|
};
|
|
}
|
|
|
|
settings() {
|
|
var _this = this;
|
|
var transparency_values = ['squares', 'green', 'grey'];
|
|
var resolutions_values = [72, 150, 300, 600];
|
|
var default_units_all = Object.keys(this.default_units_config);
|
|
var transparency = this.get_setting('transparency');
|
|
var theme = this.get_setting('theme');
|
|
var snap = this.get_setting('snap');
|
|
var guides = this.get_setting('guides');
|
|
var safe_search = this.get_setting('safe_search');
|
|
var exit_confirm = this.get_setting('exit_confirm');
|
|
var default_units = this.get_setting('default_units');
|
|
var resolution = this.get_setting('resolution');
|
|
var thick_guides = this.get_setting('thick_guides');
|
|
var enable_autoresize = this.get_setting('enable_autoresize');
|
|
|
|
var settings = {
|
|
title: 'Settings',
|
|
params: [
|
|
{name: "transparency", title: "Transparent:", value: transparency},
|
|
{name: "transparency_type", title: "Transparency background:", type: "select",
|
|
value: config.TRANSPARENCY_TYPE, values: transparency_values},
|
|
{name: "theme", title: "Theme", values: config.themes, value: theme, type: "select"},
|
|
{name: "default_units", title: "Units", values: default_units_all, value: default_units, type: "select"},
|
|
{name: "resolution", title: "Resolution:", type: "select",
|
|
value: resolution, values: resolutions_values},
|
|
{name: "snap", title: "Enable snap:", value: snap},
|
|
{name: "guides", title: "Enable guides:", value: guides},
|
|
{name: "safe_search", title: "Safe search:", value: safe_search},
|
|
{name: "exit_confirm", title: "Exit confirmation:", value: exit_confirm},
|
|
{name: "thick_guides", title: "Thick guides:", value: thick_guides},
|
|
{name: "enable_autoresize", title: "Enable autoresize:", value: enable_autoresize},
|
|
],
|
|
on_change: function (params) {
|
|
this.Base_gui.change_theme(params.theme);
|
|
},
|
|
on_cancel: function (params) {
|
|
this.Base_gui.change_theme(theme);
|
|
},
|
|
on_finish: function (params) {
|
|
_this.save_values(params);
|
|
},
|
|
};
|
|
this.POP.show(settings);
|
|
}
|
|
|
|
save_values(params) {
|
|
|
|
//save
|
|
this.save_setting('theme', params.theme);
|
|
this.save_setting('transparency', params.transparency);
|
|
this.save_setting('transparency_type', params.transparency_type);
|
|
this.save_setting('snap', params.snap);
|
|
this.save_setting('guides', params.guides);
|
|
this.save_setting('safe_search', params.safe_search);
|
|
this.save_setting('exit_confirm', params.exit_confirm);
|
|
this.save_setting('default_units', params.default_units);
|
|
this.save_setting('default_units_short', this.default_units_config[params.default_units]);
|
|
this.save_setting('resolution', params.resolution);
|
|
this.save_setting('thick_guides', params.thick_guides);
|
|
this.save_setting('enable_autoresize', params.enable_autoresize);
|
|
|
|
//update config
|
|
config.TRANSPARENCY = this.get_setting('transparency');
|
|
config.TRANSPARENCY_TYPE = this.get_setting('transparency_type');
|
|
config.SNAP = this.get_setting('snap');
|
|
config.guides_enabled = this.get_setting('guides');
|
|
this.Base_gui.change_theme(this.get_setting('theme'));
|
|
this.Base_gui.GUI_information.update_units();
|
|
|
|
//finish
|
|
this.Base_gui.prepare_canvas();
|
|
config.need_render = true;
|
|
}
|
|
|
|
/**
|
|
* set global setting. Values can be string(1 or 0 will be converted to boolean) or boolean
|
|
*
|
|
* @param key
|
|
* @param value
|
|
*/
|
|
save_setting(key, value) {
|
|
//prepare
|
|
if(value === true){
|
|
value = 1;
|
|
}
|
|
if(value === false){
|
|
value = 0;
|
|
}
|
|
|
|
this.Helper.setCookie(key, value);
|
|
}
|
|
|
|
/**
|
|
* get global setting. If settings does not exists, default valye will be used.
|
|
*
|
|
* @param key
|
|
* @returns {Object|string}
|
|
*/
|
|
get_setting(key) {
|
|
var default_values = {
|
|
'theme': null,
|
|
'transparency': false,
|
|
'snap': true,
|
|
'guides': true,
|
|
'safe_search': true,
|
|
'exit_confirm': true,
|
|
'default_units': Object.keys(this.default_units_config)[0],
|
|
'default_units_short': Object.values(this.default_units_config)[0],
|
|
'resolution': 72,
|
|
'thick_guides': false,
|
|
'enable_autoresize': config.enable_autoresize_by_default,
|
|
};
|
|
|
|
var value = this.Helper.getCookie(key);
|
|
if(value == null && default_values[key] != undefined){
|
|
//set default value
|
|
value = default_values[key];
|
|
}
|
|
if(key == 'safe_search' && config.safe_search_can_be_disabled === false){
|
|
//not allowed
|
|
value = 1;
|
|
}
|
|
if(key == 'theme' && value == null) {
|
|
value = config.themes[0];
|
|
/*if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches
|
|
&& config.themes.includes('dark')) {
|
|
//dark mode
|
|
value = 'dark';
|
|
}
|
|
else if (window.matchMedia && window.matchMedia('(prefers-color-scheme: light)').matches
|
|
&& config.themes.includes('light')) {
|
|
//light mode
|
|
value = 'light';
|
|
}*/
|
|
}
|
|
|
|
//finalize values
|
|
if(value === 1){
|
|
value = true;
|
|
}
|
|
if(value === 0){
|
|
value = false;
|
|
}
|
|
|
|
return value;
|
|
}
|
|
|
|
}
|
|
|
|
export default Tools_settings_class; |