From c234d6ed2c7d8cd7b7991643dbec4383bed9e2dc Mon Sep 17 00:00:00 2001 From: Lex Neva Date: Mon, 23 Apr 2018 23:12:48 -0400 Subject: [PATCH] UI to select different thread paette --- embroider_print.py | 4 ++- inkstitch/threads/catalog.py | 32 +++++++++++++------ messages.po | 30 ++++++++++++++++-- print/resources/inkstitch.js | 22 ++++++++++++- print/resources/style.css | 30 ++++++++++++++++-- print/templates/ui.html | 61 ++++++++++++++++++++++++++---------- 6 files changed, 145 insertions(+), 34 deletions(-) diff --git a/embroider_print.py b/embroider_print.py index 7ab24876c..43efa7584 100644 --- a/embroider_print.py +++ b/embroider_print.py @@ -291,7 +291,7 @@ class Print(InkstitchExtension): patches = self.elements_to_patches(self.elements) stitch_plan = patches_to_stitch_plan(patches) - ThreadCatalog().match_and_apply_palette(stitch_plan) + palette = ThreadCatalog().match_and_apply_palette(stitch_plan) render_stitch_plan(self.document.getroot(), stitch_plan) self.strip_namespaces() @@ -346,6 +346,8 @@ class Print(InkstitchExtension): }, svg_overview = overview_svg, color_blocks = stitch_plan.color_blocks, + palettes = ThreadCatalog().palette_names(), + selected_palette = palette.name, ) # We've totally mucked with the SVG. Restore it so that we can save diff --git a/inkstitch/threads/catalog.py b/inkstitch/threads/catalog.py index 80eb9dfeb..db50e6784 100644 --- a/inkstitch/threads/catalog.py +++ b/inkstitch/threads/catalog.py @@ -24,6 +24,9 @@ class _ThreadCatalog(Sequence): for palette_file in glob(os.path.join(path, '*.gpl')): self.palettes.append(ThreadPalette(palette_file)) + def palette_names(self): + return list(sorted(palette.name for palette in self)) + def __getitem__(self, item): return self.palettes[item] @@ -36,13 +39,20 @@ class _ThreadCatalog(Sequence): return sum(1 for thread in threads if thread in palette) def match_and_apply_palette(self, stitch_plan): - """Figure out which color palette was used and set thread names. + palette = self.match_palette(stitch_plan) + + if palette is not None: + self.apply_palette(stitch_plan, palette) + + return palette + + def match_palette(self, stitch_plan): + """Figure out which color palette was used Scans the catalog of color palettes and chooses one that seems most likely to be the one that the user used. A palette will only be chosen if more tha 80% of the thread colors in the stitch plan are - exact matches for threads in the palette. All other threads will be - matched to the closest thread in the palette. + exact matches for threads in the palette. """ threads = [color_block.color for color_block in stitch_plan] @@ -53,14 +63,18 @@ class _ThreadCatalog(Sequence): if matches < 0.8 * len(stitch_plan): # if less than 80% of the colors are an exact match, # don't use this palette - return + return None + else: + return palette - for thread in threads: - nearest = palette.nearest_color(thread) + def apply_palette(self, stitch_plan, palette): + for color_block in stitch_plan: + nearest = palette.nearest_color(color_block.color) + + color_block.color.name = nearest.name + color_block.color.number = nearest.number + color_block.color.manufacturer = nearest.manufacturer - thread.name = nearest.name - thread.number = nearest.number - thread.manufacturer = nearest.manufacturer _catalog = None diff --git a/messages.po b/messages.po index 82c2dc2e6..d19687643 100644 --- a/messages.po +++ b/messages.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2018-04-28 20:42-0400\n" +"POT-Creation-Date: 2018-04-29 21:29-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -339,7 +339,7 @@ msgstr "" msgid "rgb" msgstr "" -msgid "thread used" +msgid "thread" msgstr "" msgid "# stitches" @@ -406,6 +406,9 @@ msgstr "" msgid "Total nr trims" msgstr "" +msgid "thread used" +msgstr "" + msgid "Enter operator notes..." msgstr "" @@ -448,15 +451,36 @@ msgstr "" msgid "⚠ lost connection to Ink/Stitch" msgstr "" +msgid "Page Setup" +msgstr "" + msgid "Printing Size" msgstr "" msgid "Print Layouts" msgstr "" -msgid "Includes all settings visible here and also the icon." +msgid "Includes these Page Setup settings and also the icon." msgstr "" msgid "Save as defaults" msgstr "" +msgid "Design" +msgstr "" + +msgid "Thread Palette" +msgstr "" + +msgid "" +"Changing the thread palette will cause thread names and catalog numbers " +"to be recalculated based on the new palette. Any changes you have made " +"to color or thread names will be lost. Are you sure?" +msgstr "" + +msgid "Yes" +msgstr "" + +msgid "No" +msgstr "" + diff --git a/print/resources/inkstitch.js b/print/resources/inkstitch.js index 4a4e44561..60d17f61c 100644 --- a/print/resources/inkstitch.js +++ b/print/resources/inkstitch.js @@ -154,7 +154,7 @@ $(function() { $('[contenteditable="true"]').on('focusout', function() { /* change svg scale */ - var content = $.trim($(this).text()); + var content = $(this).html(); var field_name = $(this).attr('data-field-name'); if(field_name == 'svg-scale') { var scale = parseInt(content); @@ -255,6 +255,26 @@ $(function() { $.postJSON('/settings/paper-size', {value: size}); }); + // Thread Palette + $('select#thread-palette').change(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(); + }); + + $('#modal-no').on('click', function(){ + var select = $("select#thread-palette"); + select.find('[value="' + select.data('current-value') + '"]').prop('selected', true); + $('.modal').hide(); + }); + //Checkbox $(':checkbox').change(function() { var checked = $(this).prop('checked'); diff --git a/print/resources/style.css b/print/resources/style.css index 97dee6a8e..58ec8714b 100644 --- a/print/resources/style.css +++ b/print/resources/style.css @@ -214,9 +214,6 @@ body { border-bottom: 1px solid rgb(188, 188, 188); border-bottom: 1px solid rgba(129, 129, 129, 0.5); box-shadow: 0 1px 1px 1px rgba(194, 191, 191, 0.5); - } - - #settings-ui div { text-align: left; font-size: 12pt; } @@ -238,6 +235,33 @@ body { margin-bottom: 1em; } + #modal-background { + display: none; + z-index: 3; + position: fixed; + background: black; + opacity: 0.5; + width: 100%; + height: 100%; + top: 0; + left: 0; + } + + #modal-content { + display: none; + z-index: 4; + position: fixed; + width: 50%; + height: 25%%; + top: 200px; + left: 25%; + background: rgb(255, 255, 255); + border-bottom: 1px solid rgb(188, 188, 188); + box-shadow: 0 1px 1px 1px rgb(194, 191, 191); + text-align: center; + font-size: 16pt; + } + /* Header */ diff --git a/print/templates/ui.html b/print/templates/ui.html index f7246962a..112a342ef 100644 --- a/print/templates/ui.html +++ b/print/templates/ui.html @@ -9,26 +9,53 @@ {{ _('⚠ lost connection to Ink/Stitch') }} - +

X

{{ _('Settings') }}

-
-

{{ _('Printing Size') }}: - + + + +

+
+
+
+ {{ _('Print Layouts') }} +

+

+

+

+
+ +
+ +
+ {{ _('Design') }} +

{{ _('Thread Palette') }}: +

-
-
-
- {{ _('Print Layouts') }}: -

-

-

-

-
- -
+ + + + +