allow selection of a different thread palette

pull/155/head
Lex Neva 2018-04-24 00:22:45 -04:00
rodzic c234d6ed2c
commit 8608508e02
4 zmienionych plików z 68 dodań i 19 usunięć

Wyświetl plik

@ -99,6 +99,7 @@ class PrintPreviewServer(Thread):
def __init__(self, *args, **kwargs):
self.html = kwargs.pop('html')
self.metadata = kwargs.pop('metadata')
self.stitch_plan = kwargs.pop('stitch_plan')
Thread.__init__(self, *args, **kwargs)
self.daemon = True
self.last_request_time = None
@ -178,6 +179,35 @@ class PrintPreviewServer(Thread):
save_defaults(request.json['value'])
return "OK"
@self.app.route('/palette', methods=['POST'])
def set_palette():
name = request.json['name']
catalog = ThreadCatalog()
palette = catalog.get_palette_by_name(name)
catalog.apply_palette(self.stitch_plan, palette)
# clear any saved color or thread names
for field in self.metadata:
if field.startswith('color-') or field.startswith('thread-'):
del self.metadata[field]
self.metadata['thread-palette'] = name
return "OK"
@self.app.route('/threads', methods=['GET'])
def get_threads():
threads = []
for color_block in self.stitch_plan:
threads.append({
'hex': color_block.color.hex_digits,
'name': color_block.color.name,
'manufacturer': color_block.color.manufacturer,
'number': color_block.color.number,
})
return jsonify(threads)
def stop(self):
# for whatever reason, shutting down only seems possible in
# the context of a flask request, so we'll just make one
@ -291,7 +321,7 @@ class Print(InkstitchExtension):
patches = self.elements_to_patches(self.elements)
stitch_plan = patches_to_stitch_plan(patches)
palette = ThreadCatalog().match_and_apply_palette(stitch_plan)
palette = ThreadCatalog().match_and_apply_palette(stitch_plan, self.get_inkstitch_metadata()['thread-palette'])
render_stitch_plan(self.document.getroot(), stitch_plan)
self.strip_namespaces()
@ -354,7 +384,7 @@ class Print(InkstitchExtension):
# metadata into it.
self.document = deepcopy(self.original_document)
print_server = PrintPreviewServer(html=html, metadata=self.get_inkstitch_metadata())
print_server = PrintPreviewServer(html=html, metadata=self.get_inkstitch_metadata(), stitch_plan=stitch_plan)
print_server.start()
time.sleep(1)

Wyświetl plik

@ -75,11 +75,11 @@ class InkStitchMetadata(MutableMapping):
try:
return json.loads(item.text)
except ValueError:
except (ValueError, TypeError):
return None
def __delitem__(self, name):
item = self[name]
item = self._find_item(name)
if item:
self.metadata.remove(item)

Wyświetl plik

@ -38,8 +38,11 @@ class _ThreadCatalog(Sequence):
return sum(1 for thread in threads if thread in palette)
def match_and_apply_palette(self, stitch_plan):
palette = self.match_palette(stitch_plan)
def match_and_apply_palette(self, stitch_plan, palette=None):
if palette is None:
palette = self.match_palette(stitch_plan)
else:
palette = self.get_palette_by_name(palette)
if palette is not None:
self.apply_palette(stitch_plan, palette)
@ -75,6 +78,10 @@ class _ThreadCatalog(Sequence):
color_block.color.number = nearest.number
color_block.color.manufacturer = nearest.manufacturer
def get_palette_by_name(self, name):
for palette in self:
if palette.name == name:
return palette
_catalog = None

Wyświetl plik

@ -178,11 +178,11 @@ $(function() {
$('[data-field-name="' + field_name + '"]').each(function(i, item) {
var item = $(item);
if (item.is(':checkbox')) {
item.prop('checked', value).trigger('change');
item.prop('checked', value).trigger('initialize');
} else if (item.is('img')) {
item.attr('src', value);
} else if (item.is('select')) {
item.val(value).trigger('change');
item.val(value).trigger('initialize');
} else if (item.is('figure.inksimulation')) {
setSVGTransform(item, value);
} else {
@ -249,10 +249,10 @@ $(function() {
/* Settings */
// Paper Size
$('select#printing-size').change(function(){
var size = $(this).find(':selected').val();
$('.page').toggleClass('a4', size == 'a4');
$.postJSON('/settings/paper-size', {value: size});
$('select#printing-size').on('change initialize', function(){
$('.page').toggleClass('a4', $(this).find(':selected').val() == 'a4');
}).on('change', function() {
$.postJSON('/settings/paper-size', {value: $(this).find(':selected').val()});
});
// Thread Palette
@ -260,13 +260,26 @@ $(function() {
$('.modal').show();
}).on('update', function() {
$(this).data('current-value', $(this).find(':selected').val());
console.log("selected: " + $(this).data('current-value'));
}).trigger('update');
$('#modal-yes').on('click', function(){
// do shit with the newly-selected palette...
$("select#thread-palette").trigger("update");
$('.modal').hide();
var body = {'name': $('select#thread-palette').find(':selected').val()};
$.postJSON('/palette', body, function() {
$.getJSON('/threads', function(threads) {
console.log("threads: " + JSON.stringify(threads));
$.each(threads, function(i, thread) {
console.log("doing: " + JSON.stringify(thread));
$('[data-field-name="color-' + thread.hex + '"]').text(thread.name);
var thread_description = thread.manufacturer;
if (thread.number) {
thread_description += " #" + thread.number;
}
$('[data-field-name="thread-' + thread.hex + '"]').text(thread_description);
});
});
});
});
$('#modal-no').on('click', function(){
@ -276,14 +289,13 @@ $(function() {
});
//Checkbox
$(':checkbox').change(function() {
var checked = $(this).prop('checked');
$(':checkbox').on('change initialize', function() {
var field_name = $(this).attr('data-field-name');
$('.' + field_name).toggle(checked);
$('.' + field_name).toggle($(this).prop('checked'));
setPageNumbers();
$.postJSON('/settings/' + field_name, {value: checked});
}).on('change', function() {
$.postJSON('/settings/' + field_name, {value: $(this).prop('checked')});
});
// Logo