add 'save as defaults' button

pull/148/head
Lex Neva 2018-04-16 20:17:07 -04:00
rodzic f9b90d31b7
commit 7b0804562e
7 zmienionych plików z 127 dodań i 24 usunięć

Wyświetl plik

@ -11,6 +11,8 @@ import time
import logging
from copy import deepcopy
import wx
import appdirs
import json
import inkex
import inkstitch
@ -33,6 +35,29 @@ def datetimeformat(value, format='%Y/%m/%d'):
return value.strftime(format)
def defaults_path():
defaults_dir = appdirs.user_config_dir('inkstitch')
if not os.path.exists(defaults_dir):
os.makedirs(defaults_dir)
return os.path.join(defaults_dir, 'print_settings.json')
def load_defaults():
try:
with open(defaults_path(), 'r') as defaults_file:
defaults = json.load(defaults_file)
return defaults
except:
return {}
def save_defaults(defaults):
with open(defaults_path(), 'w') as defaults_file:
json.dump(defaults, defaults_file)
def open_url(url):
# Avoid spurious output from xdg-open. Any output on stdout will crash
# inkscape.
@ -131,20 +156,26 @@ class PrintPreviewServer(Thread):
# nothing to do here -- request_started() will restart the watcher
return "OK"
@self.app.route('/metadata/<field_name>/set', methods=['POST'])
@self.app.route('/settings/<field_name>', methods=['POST'])
def set_field(field_name):
self.metadata[field_name] = request.json['value']
return "OK"
@self.app.route('/metadata/<field_mame>', methods=['GET'])
@self.app.route('/settings/<field_mame>', methods=['GET'])
def get_field(field_name):
return jsonify(self.metadata[field_name])
@self.app.route('/metadata', methods=['GET'])
def get_metadata():
# It's necessary to convert the metadata to a dict because json doesn't
# trust that a MutableMapping is dict-like :(
return jsonify(dict(self.metadata))
@self.app.route('/settings', methods=['GET'])
def get_settings():
settings = {}
settings.update(load_defaults())
settings.update(self.metadata)
return jsonify(settings)
@self.app.route('/defaults', methods=['POST'])
def set_defaults():
save_defaults(request.json['value'])
return "OK"
def stop(self):
# for whatever reason, shutting down only seems possible in

Wyświetl plik

@ -42,7 +42,11 @@ class InkStitchMetadata(MutableMapping):
metadata = self.document.find(SVG_METADATA_TAG)
if metadata is None:
metadata = inkex.etree.SubElement(self.document, SVG_METADATA_TAG)
metadata = inkex.etree.SubElement(self.document.getroot(), SVG_METADATA_TAG)
# move it so that it goes right after the first element, sodipodi:namedview
self.document.getroot().remove(metadata)
self.document.getroot().insert(1, metadata)
return metadata

Wyświetl plik

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2018-04-02 22:11-0400\n"
"POT-Creation-Date: 2018-04-16 20:17-0400\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -393,3 +393,12 @@ msgstr ""
msgid "Printing Size"
msgstr ""
msgid "Print Layouts"
msgstr ""
msgid "Includes all settings visible here and also the icon."
msgstr ""
msgid "Save as defaults"
msgstr ""

Wyświetl plik

@ -58,20 +58,22 @@ $(function() {
var content = $(this).html();
var field_name = $(this).attr('data-field-name');
$('[data-field-name="' + field_name + '"]').text(content);
$.postJSON('/metadata/' + field_name + '/set', {value: content});
$.postJSON('/settings/' + field_name, {value: content});
});
// load up initial metadata values
$.getJSON('/metadata', function(metadata) {
$.each(metadata, function(field_name, value) {
$.getJSON('/settings', function(settings) {
$.each(settings, function(field_name, value) {
$('[data-field-name="' + field_name + '"]').each(function(i, item) {
console.log(item);
if ($(item).is(':checkbox')) {
console.log("is a checkbox");
$(item).prop('checked', value).trigger('change');
var item = $(item);
if (item.is(':checkbox')) {
item.prop('checked', value).trigger('change');
} else if (item.is('img')) {
item.attr('src', value);
} else if (item.is('select')) {
item.val(value).trigger('change');
} else {
console.log("is not a checkbox");
$(item).text(value);
item.text(value);
}
});
});
@ -121,7 +123,9 @@ $(function() {
// Paper Size
$('select#printing-size').change(function(){
$('.page').toggleClass('a4');
var size = $(this).find(':selected').val();
$('.page').toggleClass('a4', size == 'a4');
$.postJSON('/settings/paper-size', {value: size});
});
//Checkbox
@ -133,8 +137,36 @@ $(function() {
setPageNumbers();
scaleInksimulation();
$.postJSON('/metadata/' + field_name + '/set', {value: checked});
$.postJSON('/settings/' + field_name, {value: checked});
});
// Logo
$('#logo-picker').change(function(e) {
var file = e.originalEvent.srcElement.files[0];
var reader = new FileReader();
reader.onloadend = function() {
var data = reader.result;
$('figure.brandlogo img').attr('src', data);
$.postJSON('/settings/logo', {value: data});
};
reader.readAsDataURL(file);
});
// "save as defaults" button
$('#save-settings').click(function(e) {
var settings = {};
settings["client-overview"] = $("[data-field-name='client-overview']").is(':checked');
settings["client-detailedview"] = $("[data-field-name='client-detailedview']").is(':checked');
settings["operator-overview"] = $("[data-field-name='operator-overview']").is(':checked');
settings["operator-detailedview"] = $("[data-field-name='operator-detailedview']").is(':checked');
settings["paper-size"] = $('select#printing-size').find(':selected').val();
var logo = $("figure.brandlogo img").attr('src');
if (logo.startsWith("data:")) {
settings["logo"] = logo;
}
$.postJSON('/defaults', {'value': settings});
});
});

Wyświetl plik

@ -226,6 +226,10 @@ body {
cursor: pointer;
}
#settings-ui fieldset {
margin-bottom: 1em;
}
/* Header */
@ -247,11 +251,30 @@ body {
margin: 2.5mm;
}
figure.brandlogo label {
display: block;
width: 100%;
height: 100%;
line-height: 30mm;
text-align: center;
}
figure.brandlogo img {
max-width: 30mm;
max-height: 30mm;
display: inline;
vertical-align: middle;
}
/* hide the actual file picker control, since we just want them to click the
* image instead
*/
#logo-picker {
width: 0px;
height: 0px;
opacity: 0%;
}
.operator-detailedview figure.brandlogo {
height: 20mm;
width: 30mm;

Wyświetl plik

@ -1,5 +1,8 @@
<figure class="brandlogo">
<img src="{{ logo.src or "resources/inkstitch-logo.svg" }}" alt="{{ logo.title }}" title="{{ logo.title }}">
<label for="logo-picker">
<img src="{{ logo.src or "resources/inkstitch-logo.svg" }}" alt="{{ logo.title }}" title="{{ logo.title }}" data-field-name="logo">
<input type=file id="logo-picker" />
</label>
</figure>
<div class="headline">
<div class="pageTitle">

Wyświetl plik

@ -15,7 +15,7 @@
<h1>{{ _('Settings') }}</h1>
<div>
<p>{{ _('Printing Size') }}:
<select id="printing-size">
<select id="printing-size" data-field-name="paper-size">
<option value="letter" selected="selected">Letter</option>
<option value="a4">A4</option>
</select>
@ -23,11 +23,12 @@
</div>
<div>
<fieldset>
<legend>{{ ('Print Layouts') }}:</legend>
<legend>{{ _('Print Layouts') }}:</legend>
<p><input type="checkbox" id="client-overview" data-field-name="client-overview" /><label for="client-overview">Client Overview</label></p>
<p><input type="checkbox" id="client-detailedview" data-field-name="client-detailedview" /><label for="client-detailedview">Client Detailed View</label></p>
<p><input type="checkbox" id="operator-overview" data-field-name="operator-overview" CHECKED /><label for="operator-overview">Operator Overview</label></p>
<p><input type="checkbox" id="operator-detailedview" data-field-name="operator-detailedview" CHECKED /><label for="operator-detailedview">Operator Detailed View</label></p>
</fieldset>
<button id="save-settings" title="{{ _("Includes all settings visible here and also the icon.") }}">{{ _("Save as defaults") }}</button>
</div>
</div>