From 75aa656c2cfb7ee4189c31a6c7a0d23d83b4d03a Mon Sep 17 00:00:00 2001 From: kalleen Date: Wed, 11 Apr 2018 18:57:55 +0200 Subject: add apply to all button for svg transforms --- embroider_print.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'embroider_print.py') diff --git a/embroider_print.py b/embroider_print.py index 96c3255d..c0b49bf2 100644 --- a/embroider_print.py +++ b/embroider_print.py @@ -295,7 +295,7 @@ class Print(InkstitchExtension): 'estimated_thread': '', # TODO }, svg_overview = overview_svg, - svg_scale = '100%', + svg_transform = '', # Format: matrix(0.2, 0, 0, 0.2, 0, 0) color_blocks = stitch_plan.color_blocks, ) -- cgit v1.2.3 From 85a8b6b1cfe008eed49c678bc0af9e2bea931f3c Mon Sep 17 00:00:00 2001 From: Lex Neva Date: Fri, 13 Apr 2018 21:23:00 -0400 Subject: inkstitch metadata framework --- embroider_print.py | 32 +++++++++++++++++++++++++------- 1 file changed, 25 insertions(+), 7 deletions(-) (limited to 'embroider_print.py') diff --git a/embroider_print.py b/embroider_print.py index 96c3255d..79d9bf45 100644 --- a/embroider_print.py +++ b/embroider_print.py @@ -9,6 +9,7 @@ import socket import errno import time import logging +from copy import deepcopy import wx import inkex @@ -23,7 +24,7 @@ from jinja2 import Environment, FileSystemLoader, select_autoescape from datetime import date import base64 -from flask import Flask, request, Response, send_from_directory +from flask import Flask, request, Response, send_from_directory, jsonify import webbrowser import requests @@ -71,6 +72,7 @@ def open_url(url): class PrintPreviewServer(Thread): def __init__(self, *args, **kwargs): self.html = kwargs.pop('html') + self.metadata = kwargs.pop('metadata') Thread.__init__(self, *args, **kwargs) self.daemon = True self.last_request_time = None @@ -129,6 +131,21 @@ class PrintPreviewServer(Thread): # nothing to do here -- request_started() will restart the watcher return "OK" + @self.app.route('/metadata//set', methods=['POST']) + def set_field(field_name): + self.metadata[field_name] = request.form['value'] + return "OK" + + @self.app.route('/metadata/', 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)) + def stop(self): # for whatever reason, shutting down only seems possible in # the context of a flask request, so we'll just make one @@ -299,7 +316,11 @@ class Print(InkstitchExtension): color_blocks = stitch_plan.color_blocks, ) - print_server = PrintPreviewServer(html=html) + # We've totally mucked with the SVG. Restore it so that we can save + # metadata into it. + self.document = deepcopy(self.original_document) + + print_server = PrintPreviewServer(html=html, metadata=self.get_inkstitch_metadata()) print_server.start() time.sleep(1) @@ -310,12 +331,9 @@ class Print(InkstitchExtension): info_frame.Show() app.MainLoop() - # don't let inkex print the document out - sys.exit(0) - if __name__ == '__main__': - save_stderr() + #save_stderr() effect = Print() effect.affect() - restore_stderr() + #restore_stderr() -- cgit v1.2.3 From f9b90d31b7730103e296b0c2509885b07000eac4 Mon Sep 17 00:00:00 2001 From: Lex Neva Date: Sat, 14 Apr 2018 20:39:59 -0400 Subject: round-trip editable fields and checkboxes --- embroider_print.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'embroider_print.py') diff --git a/embroider_print.py b/embroider_print.py index 79d9bf45..a8daece4 100644 --- a/embroider_print.py +++ b/embroider_print.py @@ -133,7 +133,7 @@ class PrintPreviewServer(Thread): @self.app.route('/metadata//set', methods=['POST']) def set_field(field_name): - self.metadata[field_name] = request.form['value'] + self.metadata[field_name] = request.json['value'] return "OK" @self.app.route('/metadata/', methods=['GET']) -- cgit v1.2.3 From 7b0804562e4ce3b440e67de6cb001ac021326990 Mon Sep 17 00:00:00 2001 From: Lex Neva Date: Mon, 16 Apr 2018 20:17:07 -0400 Subject: add 'save as defaults' button --- embroider_print.py | 45 ++++++++++++++++++++++++++++++++++++++------- 1 file changed, 38 insertions(+), 7 deletions(-) (limited to 'embroider_print.py') diff --git a/embroider_print.py b/embroider_print.py index a8daece4..fa144d1d 100644 --- a/embroider_print.py +++ b/embroider_print.py @@ -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//set', methods=['POST']) + @self.app.route('/settings/', methods=['POST']) def set_field(field_name): self.metadata[field_name] = request.json['value'] return "OK" - @self.app.route('/metadata/', methods=['GET']) + @self.app.route('/settings/', 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 -- cgit v1.2.3 From 51741745b0bb691a55b642a2ea938ac74324da2d Mon Sep 17 00:00:00 2001 From: Lex Neva Date: Tue, 17 Apr 2018 15:48:38 -0400 Subject: don't get transform from html --- embroider_print.py | 1 - 1 file changed, 1 deletion(-) (limited to 'embroider_print.py') diff --git a/embroider_print.py b/embroider_print.py index bc96b2cd..2aa76ec6 100644 --- a/embroider_print.py +++ b/embroider_print.py @@ -343,7 +343,6 @@ class Print(InkstitchExtension): 'estimated_thread': '', # TODO }, svg_overview = overview_svg, - svg_transform = '', # Format: matrix(0.2, 0, 0, 0.2, 0, 0) color_blocks = stitch_plan.color_blocks, ) -- cgit v1.2.3 From 9148d5484462e342ab716a7b4b0859c7c298702a Mon Sep 17 00:00:00 2001 From: Lex Neva Date: Wed, 18 Apr 2018 16:12:42 -0400 Subject: hide stderr but print exceptions --- embroider_print.py | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) (limited to 'embroider_print.py') diff --git a/embroider_print.py b/embroider_print.py index 2aa76ec6..0dbff929 100644 --- a/embroider_print.py +++ b/embroider_print.py @@ -363,7 +363,18 @@ class Print(InkstitchExtension): if __name__ == '__main__': - #save_stderr() - effect = Print() - effect.affect() - #restore_stderr() + exception = None + + save_stderr() + try: + effect = Print() + effect.affect() + except: + exception = traceback.format_exc() + restore_stderr() + + if exception: + print >> sys.stderr, exception + sys.exit(1) + else: + sys.exit(0) -- cgit v1.2.3 From dc547108e1d85c2dd241d329e0858dced90bf92c Mon Sep 17 00:00:00 2001 From: Lex Neva Date: Wed, 18 Apr 2018 22:30:26 -0400 Subject: handle firefox's window.close() permission denied --- embroider_print.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'embroider_print.py') diff --git a/embroider_print.py b/embroider_print.py index 0dbff929..cbdaeb09 100644 --- a/embroider_print.py +++ b/embroider_print.py @@ -133,7 +133,7 @@ class PrintPreviewServer(Thread): def shutdown(): self.shutting_down = True request.environ.get('werkzeug.server.shutdown')() - return 'Server shutting down...' + return _('Closing...') + '

' + _('It is safe to close this window now.') @self.app.route('/resources/', methods=['GET']) def resources(resource): -- cgit v1.2.3