diff --git a/README.md b/README.md index 657564239..fdc55bd2c 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ -[![Build Status](https://travis-ci.org/FPGAwars/icestudio.svg?branch=0.3.0-rc)](https://travis-ci.org/FPGAwars/icestudio) -[![Version](https://img.shields.io/badge/version-v0.3.0--rc-orange.svg)](https://github.com/FPGAwars/icestudio/releases) +[![Build Status](https://travis-ci.org/FPGAwars/icestudio.svg?branch=0.3.0)](https://travis-ci.org/FPGAwars/icestudio) +[![Version](https://img.shields.io/badge/version-v0.3.0-orange.svg)](https://github.com/FPGAwars/icestudio/releases) [![License](http://img.shields.io/:license-gpl-blue.svg)](http://opensource.org/licenses/GPL-2.0) [![Documentation Status](https://readthedocs.org/projects/icestudio/badge/?version=latest)](http://icestudio.readthedocs.io/en/latest) @@ -44,6 +44,8 @@ Supported operating systems: + + Check the [Documentation](http://icestudio.readthedocs.io/en/latest) for more information. ## Development @@ -100,10 +102,10 @@ npm run dist |:----------:|:------------------------------------------:| | English | ![Progress](http://progressed.io/bar/100) | | Spanish | ![Progress](http://progressed.io/bar/100) | -| Galician | ![Progress](http://progressed.io/bar/95) | -| Basque | ![Progress](http://progressed.io/bar/95) | -| Catalan | ![Progress](http://progressed.io/bar/95) | -| French | ![Progress](http://progressed.io/bar/95) | +| French | ![Progress](http://progressed.io/bar/100) | +| Basque | ![Progress](http://progressed.io/bar/97) | +| Galician | ![Progress](http://progressed.io/bar/93) | +| Catalan | ![Progress](http://progressed.io/bar/93) | **Contribute!** @@ -167,9 +169,11 @@ There is a [Wishlist](https://github.com/FPGAwars/icestudio/wiki/Wishlist:-propo * v0.3, v0.2: using [JointJS](https://github.com/clientIO/joint) and [AlertifyJS](https://github.com/MohammadYounes/AlertifyJS) * v0.1: using [AngularJS-Flowchart](https://github.com/codecapers/AngularJS-FlowChart) -* [BQ](https://www.bq.com) sponsored this project from 02-2016 to 02-2017. Thanks -![](https://github.com/FPGAwars/icezum/raw/master/wiki/bq-logo.png) + +* [BQ](https://www.bq.com) sponsored this project from 02/2016 to 02/2017. Thanks + + ## License diff --git a/app/bower.json b/app/bower.json index 77b283fd0..c28af528f 100644 --- a/app/bower.json +++ b/app/bower.json @@ -32,7 +32,7 @@ "ace-builds": "^1.2.5", "select2": "^4.0.3", "async": "^1.5.2", - "svg-pan-zoom": "^3.2.9", + "svg-pan-zoom": "~3.4.0", "alertify-js": "^1.8.0", "jquery-resize": "*", "angular-gettext": "https://github.com/Jesus89/angular-gettext.git#master" diff --git a/app/package.json b/app/package.json index 362232782..f61b885f9 100644 --- a/app/package.json +++ b/app/package.json @@ -1,6 +1,6 @@ { "name": "icestudio", - "version": "0.3.0-rc", + "version": "0.3.0", "description": "Experimental graphic editor for open FPGAs", "author": "Jesús Arroyo Torrens ", "repository": "https://github.com/FPGAwars/icestudio", @@ -18,8 +18,9 @@ "icon": "resources/images/icestudio-logo.png" }, "apio": { - "min": "0.2.2", - "max": "0.2.3" + "min": "0.2.4", + "max": "0.2.5", + "external": "" }, "engines": { "node": ">= 0.10.0" @@ -42,7 +43,7 @@ "ssh-exec": "^2.0.0", "sudo-prompt": "^6.2.0", "svgo": "~0.7.1", - "tarball-extract": "0.0.3" + "tarball-extract": "~0.0.6" }, "readme": "../README.md", "keywords": [ diff --git a/app/resources/boards/generator.py b/app/resources/boards/generator.py index 7382000c9..655c73546 100755 --- a/app/resources/boards/generator.py +++ b/app/resources/boards/generator.py @@ -4,9 +4,12 @@ # -- Author Jesús Arroyo (C) 2016-2017 # -- Licence GPLv2 -# set_io LED0 95 # output -> { "name": "LED0", "value": "95", "type": "output" } -# set_io --warn-no-port SW1 10 # input -> { "name": "SW1", "value": "10", "type": "input" } -# set_io --warn-no-port D13 144 -> { "name": "D13", "value": "144", "type": "inout" } +# set_io LED0 95 # output +# -> { "name": "LED0", "value": "95", "type": "output" } +# set_io --warn-no-port SW1 10 # input +# -> { "name": "SW1", "value": "10", "type": "input" } +# set_io --warn-no-port D13 144 +# -> { "name": "D13", "value": "144", "type": "inout" } import os import re @@ -18,26 +21,31 @@ # Python 2-3 compat try: input = raw_input -except: +except Exception: pass # Load parameters name = input('Insert board name: ') # eg. icoboard +path = os.path.join(os.path.dirname(__file__), name) # Regex pattern pattern = 'set_io\s+(--warn-no-port)?\s*(.*?)\s+(.*?)\s+(#+\s+(input|output))?' # Open file -with open(os.path.join(name, 'pinout.pcf')) as file: +with open(os.path.join(path, 'pinout.pcf')) as file: data = file.read() # Build json pinout = re.findall(pattern, data) format_pinout = [] for item in pinout: - format_pinout += [{ 'name': item[1], 'value': item[2], 'type': item[4] or 'inout' }] + format_pinout += [{ + 'name': item[1], + 'value': item[2], + 'type': item[4] or 'inout' + }] # Save json file - with open(os.path.join(name, 'pinout.json'), 'w') as outfile: + with open(os.path.join(path, 'pinout.json'), 'w') as outfile: json.dump(format_pinout, outfile) print('Done!') diff --git a/app/resources/boards/icestick/pinout.json b/app/resources/boards/icestick/pinout.json index f3d685ce3..ceaa09a92 100644 --- a/app/resources/boards/icestick/pinout.json +++ b/app/resources/boards/icestick/pinout.json @@ -1 +1 @@ -[{"type": "output", "name": "D1", "value": "99"}, {"type": "output", "name": "D2", "value": "98"}, {"type": "output", "name": "D3", "value": "97"}, {"type": "output", "name": "D4", "value": "96"}, {"type": "output", "name": "D5", "value": "95"}, {"type": "output", "name": "IrDA_TX", "value": "105"}, {"type": "input", "name": "IrDA_RX", "value": "106"}, {"type": "inout", "name": "SD", "value": "107"}, {"type": "inout", "name": "PMOD1", "value": "78"}, {"type": "inout", "name": "PMOD2", "value": "79"}, {"type": "inout", "name": "PMOD3", "value": "80"}, {"type": "inout", "name": "PMOD4", "value": "81"}, {"type": "inout", "name": "PMOD7", "value": "87"}, {"type": "inout", "name": "PMOD8", "value": "88"}, {"type": "inout", "name": "PMOD9", "value": "90"}, {"type": "inout", "name": "PMOD10", "value": "91"}, {"type": "inout", "name": "TR3", "value": "112"}, {"type": "inout", "name": "TR4", "value": "113"}, {"type": "inout", "name": "TR5", "value": "114"}, {"type": "inout", "name": "TR6", "value": "115"}, {"type": "inout", "name": "TR7", "value": "116"}, {"type": "inout", "name": "TR8", "value": "117"}, {"type": "inout", "name": "TR9", "value": "118"}, {"type": "inout", "name": "TR10", "value": "119"}, {"type": "inout", "name": "BR3", "value": "62"}, {"type": "inout", "name": "BR4", "value": "61"}, {"type": "inout", "name": "BR5", "value": "60"}, {"type": "inout", "name": "BR6", "value": "56"}, {"type": "inout", "name": "BR7", "value": "48"}, {"type": "inout", "name": "BR8", "value": "47"}, {"type": "inout", "name": "BR9", "value": "45"}, {"type": "inout", "name": "BR10", "value": "44"}, {"type": "input", "name": "CLK", "value": "21"}, {"type": "input", "name": "RES", "value": "66"}, {"type": "output", "name": "DONE", "value": "65"}, {"type": "output", "name": "SS", "value": "71"}, {"type": "input", "name": "MISO", "value": "67"}, {"type": "output", "name": "MOSI", "value": "68"}, {"type": "output", "name": "SCK", "value": "70"}, {"type": "output", "name": "DCD", "value": "1"}, {"type": "output", "name": "DSR", "value": "2"}, {"type": "input", "name": "DTR", "value": "3"}, {"type": "output", "name": "CTS", "value": "4"}, {"type": "input", "name": "RTS", "value": "7"}, {"type": "output", "name": "TX", "value": "8"}, {"type": "input", "name": "RX", "value": "9"}] \ No newline at end of file +[{"type": "output", "name": "D1", "value": "99"}, {"type": "output", "name": "D2", "value": "98"}, {"type": "output", "name": "D3", "value": "97"}, {"type": "output", "name": "D4", "value": "96"}, {"type": "output", "name": "D5", "value": "95"}, {"type": "output", "name": "IrDA_TX", "value": "105"}, {"type": "input", "name": "IrDA_RX", "value": "106"}, {"type": "output", "name": "IrDA_SD", "value": "107"}, {"type": "inout", "name": "PMOD1", "value": "78"}, {"type": "inout", "name": "PMOD2", "value": "79"}, {"type": "inout", "name": "PMOD3", "value": "80"}, {"type": "inout", "name": "PMOD4", "value": "81"}, {"type": "inout", "name": "PMOD7", "value": "87"}, {"type": "inout", "name": "PMOD8", "value": "88"}, {"type": "inout", "name": "PMOD9", "value": "90"}, {"type": "inout", "name": "PMOD10", "value": "91"}, {"type": "inout", "name": "TR3", "value": "112"}, {"type": "inout", "name": "TR4", "value": "113"}, {"type": "inout", "name": "TR5", "value": "114"}, {"type": "inout", "name": "TR6", "value": "115"}, {"type": "inout", "name": "TR7", "value": "116"}, {"type": "inout", "name": "TR8", "value": "117"}, {"type": "inout", "name": "TR9", "value": "118"}, {"type": "inout", "name": "TR10", "value": "119"}, {"type": "inout", "name": "BR3", "value": "62"}, {"type": "inout", "name": "BR4", "value": "61"}, {"type": "inout", "name": "BR5", "value": "60"}, {"type": "inout", "name": "BR6", "value": "56"}, {"type": "inout", "name": "BR7", "value": "48"}, {"type": "inout", "name": "BR8", "value": "47"}, {"type": "inout", "name": "BR9", "value": "45"}, {"type": "inout", "name": "BR10", "value": "44"}, {"type": "input", "name": "CLK", "value": "21"}, {"type": "input", "name": "RES", "value": "66"}, {"type": "output", "name": "DONE", "value": "65"}, {"type": "output", "name": "SS", "value": "71"}, {"type": "input", "name": "MISO", "value": "67"}, {"type": "output", "name": "MOSI", "value": "68"}, {"type": "output", "name": "SCK", "value": "70"}, {"type": "output", "name": "DCD", "value": "1"}, {"type": "output", "name": "DSR", "value": "2"}, {"type": "input", "name": "DTR", "value": "3"}, {"type": "output", "name": "CTS", "value": "4"}, {"type": "input", "name": "RTS", "value": "7"}, {"type": "output", "name": "TX", "value": "8"}, {"type": "input", "name": "RX", "value": "9"}] \ No newline at end of file diff --git a/app/resources/boards/icestick/pinout.pcf b/app/resources/boards/icestick/pinout.pcf index 2b5eb6ea7..0dd3f17eb 100644 --- a/app/resources/boards/icestick/pinout.pcf +++ b/app/resources/boards/icestick/pinout.pcf @@ -30,8 +30,8 @@ set_io --warn-no-port D5 95 # output set_io --warn-no-port IrDA_TX 105 # output set_io --warn-no-port IrDA_RX 106 # input -#-- SD = 0, enable IrDA -set_io --warn-no-port SD 107 +#-- IrDA_SD = 0, enable IrDA +set_io --warn-no-port IrDA_SD 107 # output # ------------ PMOD connector ------------------------------------------------- # diff --git a/app/resources/images/icestudio-logo-old.svg b/app/resources/images/icestudio-logo-old.svg new file mode 100644 index 000000000..417d10544 --- /dev/null +++ b/app/resources/images/icestudio-logo-old.svg @@ -0,0 +1,140 @@ + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + diff --git a/app/resources/images/icestudio-logo.ico b/app/resources/images/icestudio-logo.ico index f8dbf862d..bf1e5c43d 100644 Binary files a/app/resources/images/icestudio-logo.ico and b/app/resources/images/icestudio-logo.ico differ diff --git a/app/resources/images/icestudio-logo.png b/app/resources/images/icestudio-logo.png index 7c5387dfb..f281d96b5 100644 Binary files a/app/resources/images/icestudio-logo.png and b/app/resources/images/icestudio-logo.png differ diff --git a/app/resources/images/icestudio-logo.svg b/app/resources/images/icestudio-logo.svg index 417d10544..6e54c8e33 100644 --- a/app/resources/images/icestudio-logo.svg +++ b/app/resources/images/icestudio-logo.svg @@ -9,75 +9,42 @@ xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="111.07935mm" - height="111.07935mm" - viewBox="0 0 393.58825 393.58825" - id="svg8825" + width="103.81227mm" + height="103.80888mm" + viewBox="0 0 367.83883 367.82675" + id="svg4694" version="1.1" inkscape:version="0.91 r13725" sodipodi:docname="icestudio-logo.svg" inkscape:export-filename="/home/jesus/code/icestudio/app/resources/images/icestudio-logo.png" - inkscape:export-xdpi="26" - inkscape:export-ydpi="26"> + inkscape:export-xdpi="27.892656" + inkscape:export-ydpi="27.892656"> - - - - - - - - + id="defs4696" /> + id="metadata4699"> @@ -92,48 +59,72 @@ inkscape:label="Layer 1" inkscape:groupmode="layer" id="layer1" - transform="translate(-14.634449,-281.28232)"> + transform="translate(-56.086737,-137.01309)"> - + id="g4255" + transform="translate(1.3533226e-5,-1.3846548e-5)"> - - - - + id="g4144"> + + + + + + + + + + + + + + + diff --git a/app/resources/locale/ca_ES/ca_ES.po b/app/resources/locale/ca_ES/ca_ES.po index c3f2567dd..a53bf767b 100644 --- a/app/resources/locale/ca_ES/ca_ES.po +++ b/app/resources/locale/ca_ES/ca_ES.po @@ -35,15 +35,15 @@ msgstr "" "dispositiu USB de la FPGA
  • Selecciona la interfície de la placa i " "desinstal·la el driver
  • " -#: app/views/menu.html:309 +#: app/views/menu.html:313 msgid "About Icestudio" msgstr "Quant a Icestudio" -#: app/views/menu.html:263 +#: app/views/menu.html:267 msgid "Add" msgstr "Afegir" -#: app/scripts/controllers/menu.js:516 +#: app/scripts/controllers/menu.js:511 msgid "Add a block to start" msgstr "Afegeix un bloc per a iniciar" @@ -51,19 +51,19 @@ msgstr "Afegeix un bloc per a iniciar" msgid "Add as block" msgstr "Afegeix com a bloc" -#: app/scripts/services/tools.js:895 +#: app/scripts/services/tools.js:889 msgid "All collections removed" msgstr "Col·leccions eliminades" -#: app/scripts/controllers/menu.js:538 +#: app/scripts/controllers/menu.js:533 msgid "All stored collections will be lost. Do you want to continue?" msgstr "Totes les col·leccions emmagatzemades es perdran. Vols continuar?" -#: app/scripts/services/utils.js:530 +#: app/scripts/services/utils.js:535 msgid "Author" msgstr "Autor" -#: app/views/menu.html:320 +#: app/views/menu.html:324 msgid "Basic" msgstr "Bàsic" @@ -73,12 +73,12 @@ msgstr "Basc" #: app/scripts/services/blocks.js:755 app/scripts/services/blocks.js:776 #: app/scripts/services/blocks.js:831 app/scripts/services/blocks.js:850 -#: app/scripts/services/blocks.js:885 app/scripts/services/blocks.js:926 -#: app/scripts/services/blocks.js:960 +#: app/scripts/services/blocks.js:885 app/scripts/services/blocks.js:928 +#: app/scripts/services/blocks.js:962 msgid "Block updated" msgstr "Bloc actualitzat" -#: app/scripts/services/project.js:413 +#: app/scripts/services/project.js:426 msgid "Block {{name}} imported" msgstr "Bloc {{name}} importat" @@ -94,11 +94,11 @@ msgstr "Placa" msgid "Board rules" msgstr "Regles de la placa" -#: app/scripts/controllers/menu.js:341 +#: app/scripts/controllers/menu.js:337 msgid "Board rules disabled" msgstr "Regles de la placa inhabilitades" -#: app/scripts/controllers/menu.js:336 +#: app/scripts/controllers/menu.js:332 msgid "Board rules enabled" msgstr "Regles de la placa habilitades" @@ -106,15 +106,15 @@ msgstr "Regles de la placa habilitades" msgid "Board {{name}} not detected" msgstr "Placa {{name}} no detectada" -#: app/scripts/controllers/menu.js:477 +#: app/scripts/controllers/menu.js:476 msgid "Board {{name}} selected" msgstr "Placa {{name}} seleccionada" -#: app/views/menu.html:209 +#: app/views/menu.html:213 msgid "Build" msgstr "Sintetitza" -#: app/scripts/controllers/main.js:16 +#: app/scripts/controllers/main.js:16 app/scripts/services/project.js:144 msgid "Cancel" msgstr "Cancel·la" @@ -134,7 +134,7 @@ msgstr "Comprovant Python" msgid "Click here to install it" msgstr "" -#: app/views/menu.html:334 +#: app/views/menu.html:338 msgid "Code" msgstr "Codi" @@ -146,7 +146,7 @@ msgstr "Col·lecció" msgid "Collection info" msgstr "" -#: app/scripts/controllers/menu.js:436 +#: app/scripts/controllers/menu.js:434 msgid "Collection {{collection}} info not defined" msgstr "" @@ -158,7 +158,7 @@ msgstr "Col·lecció {{name}} afegida" msgid "Collection {{name}} not replaced" msgstr "Col·lecció {{name}} no reemplaçada" -#: app/scripts/services/tools.js:889 +#: app/scripts/services/tools.js:883 msgid "Collection {{name}} removed" msgstr "Col·lecció {{name}} eliminada" @@ -166,22 +166,26 @@ msgstr "Col·lecció {{name}} eliminada" msgid "Collection {{name}} replaced" msgstr "Col·lecció {{name}} reemplaçada" -#: app/scripts/controllers/menu.js:444 +#: app/scripts/controllers/menu.js:442 msgid "Collection {{name}} selected" msgstr "Col·lecció {{name}} seleccionada" -#: app/views/menu.html:259 +#: app/views/menu.html:263 msgid "Collections" msgstr "Col·leccions" -#: app/views/menu.html:305 +#: app/views/menu.html:309 msgid "Community forum" msgstr "Fòrum de la comunitat" -#: app/views/menu.html:331 +#: app/views/menu.html:335 msgid "Constant" msgstr "Constant" +#: app/scripts/services/project.js:106 +msgid "Convert" +msgstr "" + #: app/views/menu.html:91 msgid "Copy" msgstr "Copia" @@ -194,7 +198,7 @@ msgstr "Retalla" msgid "Datasheet" msgstr "Full de dades" -#: app/views/menu.html:189 +#: app/views/menu.html:190 msgid "Default" msgstr "Per defecte" @@ -206,23 +210,19 @@ msgstr "" "La toolchain per defecte no es troba, per la qual cosa serà descarregada. " "Aquesta operació requereix connexió a Internet. Vols continuar?" -#: app/scripts/services/utils.js:529 +#: app/scripts/services/utils.js:534 msgid "Description" msgstr "Descripció" -#: app/views/menu.html:126 app/views/menu.html:252 +#: app/views/menu.html:126 app/views/menu.html:256 msgid "Disable" msgstr "Inhabilita" -#: app/scripts/controllers/menu.js:241 +#: app/scripts/controllers/menu.js:237 msgid "Do you want to close the application?" msgstr "Vols tancar l'aplicació?" -#: app/scripts/services/project.js:106 -msgid "Do you want to convert it?" -msgstr "Vols convertir-lo?" - -#: app/scripts/controllers/menu.js:528 +#: app/scripts/controllers/menu.js:523 msgid "Do you want to remove the {{name}} collection?" msgstr "Vols eliminar la col·lecció {{name}}?" @@ -230,11 +230,11 @@ msgstr "Vols eliminar la col·lecció {{name}}?" msgid "Do you want to replace it?" msgstr "Vols reemplaçar-la?" -#: app/views/menu.html:298 +#: app/views/menu.html:302 msgid "Documentation" msgstr "Documentació" -#: app/views/menu.html:243 +#: app/views/menu.html:247 msgid "Drivers" msgstr "Drivers" @@ -262,7 +262,7 @@ msgstr "Edita" msgid "Edit the collection name" msgstr "" -#: app/views/menu.html:121 app/views/menu.html:247 +#: app/views/menu.html:121 app/views/menu.html:251 msgid "Enable" msgstr "Habilita" @@ -294,7 +294,7 @@ msgstr "Introdueix els ports de sortida" msgid "Enter the parameters" msgstr "Introdueix els paràmetres" -#: app/scripts/controllers/menu.js:328 +#: app/scripts/controllers/menu.js:324 msgid "Enter the remote hostname user@host (experimental)" msgstr "Introdueix el nom del host remot usuari@host" @@ -302,7 +302,7 @@ msgstr "Introdueix el nom del host remot usuari@host" msgid "Error: default toolchain not found in '{{dir}}'" msgstr "Error: toolchain per defecte no trobada en '{{dir}}'" -#: app/scripts/services/utils.js:670 +#: app/scripts/services/utils.js:675 msgid "Error: {{error}}" msgstr "Error: {{error}}" @@ -347,7 +347,7 @@ msgstr "FPGA pin" msgid "File" msgstr "Fitxer" -#: app/scripts/services/project.js:425 +#: app/scripts/services/project.js:438 msgid "" "File {{file}} already exists in the project path. Do you want to replace it?" msgstr "" @@ -358,7 +358,7 @@ msgstr "" msgid "File {{file}} does not exist" msgstr "El fitxer {{file}} no existeix" -#: app/scripts/services/project.js:459 +#: app/scripts/services/project.js:472 msgid "File {{file}} imported" msgstr "Fitxer {{file}} importat" @@ -370,7 +370,7 @@ msgstr "Ajustar contingut" msgid "French" msgstr "Francès" -#: app/scripts/controllers/menu.js:220 +#: app/scripts/controllers/menu.js:216 msgid "GTKWave exported" msgstr "GTKWave exportat" @@ -378,27 +378,27 @@ msgstr "GTKWave exportat" msgid "Galician" msgstr "Gallec" -#: app/views/menu.html:288 +#: app/views/menu.html:292 msgid "Help" msgstr "Ajuda" -#: app/scripts/services/utils.js:543 +#: app/scripts/services/utils.js:548 msgid "Image" msgstr "Imatge" -#: app/scripts/controllers/menu.js:688 +#: app/scripts/controllers/menu.js:683 msgid "Image {{name}} saved" msgstr "Imatge {{name}} desada" -#: app/views/menu.html:337 +#: app/views/menu.html:341 msgid "Information" msgstr "Informació" -#: app/views/menu.html:325 +#: app/views/menu.html:329 msgid "Input" msgstr "Entrada" -#: app/views/menu.html:220 +#: app/views/menu.html:224 msgid "Install" msgstr "Instal·lar" @@ -457,6 +457,10 @@ msgstr "" msgid "Language" msgstr "Idioma" +#: app/scripts/services/project.js:105 +msgid "Load" +msgstr "" + #: app/scripts/services/blocks.js:186 app/scripts/services/blocks.js:864 msgid "Local parameter" msgstr "Paràmetre local" @@ -465,7 +469,11 @@ msgstr "Paràmetre local" msgid "Make virtual env..." msgstr "Crear entorn virtual" -#: app/scripts/services/utils.js:527 +#: app/scripts/services/utils.js:755 +msgid "Maximum bus size: 96 bits" +msgstr "" + +#: app/scripts/services/utils.js:532 msgid "Name" msgstr "Nom" @@ -477,15 +485,15 @@ msgstr "Nou" msgid "New project {{name}} created" msgstr "Nou projecte {{name}} creat" -#: app/scripts/controllers/menu.js:546 +#: app/scripts/controllers/menu.js:541 msgid "No collections stored" msgstr "Cap col·lecció emmagatzemada" -#: app/scripts/controllers/main.js:15 +#: app/scripts/controllers/main.js:15 app/scripts/services/project.js:143 msgid "OK" msgstr "D'acord" -#: app/scripts/services/project.js:364 app/scripts/services/project.js:99 +#: app/scripts/services/project.js:377 app/scripts/services/project.js:99 msgid "Old project format {{version}}" msgstr "Format de projecte antic {{version}}" @@ -493,19 +501,19 @@ msgstr "Format de projecte antic {{version}}" msgid "Open" msgstr "Obre" -#: app/scripts/services/utils.js:550 +#: app/scripts/services/utils.js:555 msgid "Open SVG" msgstr "Obre SVG" -#: app/scripts/services/project.js:462 +#: app/scripts/services/project.js:475 msgid "Original file {{file}} does not exist" msgstr "El fitxer original {{file}} no existeix" -#: app/views/menu.html:328 +#: app/views/menu.html:332 msgid "Output" msgstr "Eixida" -#: app/scripts/controllers/menu.js:202 +#: app/scripts/controllers/menu.js:198 msgid "PCF file exported" msgstr "Fitxer PCF exportat" @@ -513,7 +521,7 @@ msgstr "Fitxer PCF exportat" msgid "Paste" msgstr "Enganxa" -#: app/scripts/services/utils.js:872 +#: app/scripts/services/utils.js:884 msgid "Please run: {{cmd}}" msgstr "" @@ -525,11 +533,11 @@ msgstr "Preferències" msgid "Project information" msgstr "Informació del projecte" -#: app/scripts/services/project.js:125 +#: app/scripts/services/project.js:131 msgid "Project {{name}} loaded" msgstr "Projecte {{name}} carregat" -#: app/scripts/services/project.js:334 +#: app/scripts/services/project.js:346 msgid "Project {{name}} saved" msgstr "Projecte {{name}} desat" @@ -541,7 +549,7 @@ msgstr "És necessari Python 2.7" msgid "Quit" msgstr "Tanca" -#: app/scripts/services/blocks.js:946 app/views/design.html:5 +#: app/scripts/services/blocks.js:948 app/views/design.html:5 msgid "Read only" msgstr "Només lectura" @@ -557,19 +565,19 @@ msgstr "Host remot {{name}} no connectat" msgid "Remote hostname" msgstr "Nom del host remot" -#: app/views/menu.html:228 app/views/menu.html:267 +#: app/views/menu.html:232 app/views/menu.html:271 msgid "Remove" msgstr "Suprimir" -#: app/views/menu.html:279 +#: app/views/menu.html:283 msgid "Remove all" msgstr "Suprimir tot" -#: app/scripts/services/utils.js:552 +#: app/scripts/services/utils.js:557 msgid "Reset SVG" msgstr "Reseteja SVG" -#: app/views/menu.html:233 +#: app/views/menu.html:237 msgid "Reset default" msgstr "Resetejar els valors per defecte" @@ -581,7 +589,7 @@ msgstr "Resetejar vista" msgid "Save" msgstr "Desa" -#: app/scripts/services/utils.js:551 +#: app/scripts/services/utils.js:556 msgid "Save SVG" msgstr "Desa SVG" @@ -601,7 +609,7 @@ msgstr "Selecciona tot" msgid "Show clock" msgstr "Mostra rellotge" -#: app/views/menu.html:301 +#: app/views/menu.html:305 msgid "Source code" msgstr "Codi font" @@ -617,7 +625,7 @@ msgstr "Sincronitza fitxers remots" msgid "Testbench" msgstr "Testbench" -#: app/scripts/controllers/menu.js:211 +#: app/scripts/controllers/menu.js:207 msgid "Testbench exported" msgstr "Testbench exportat" @@ -625,7 +633,7 @@ msgstr "Testbench exportat" msgid "The collection {{name}} already exists." msgstr "La col·leccio {{name}} ja existeix" -#: app/scripts/controllers/menu.js:465 +#: app/scripts/controllers/menu.js:463 msgid "" "The current FPGA I/O configuration will be lost. Do you want to change to " "{{name}} board?" @@ -649,7 +657,7 @@ msgstr "" "La toolchain serà actualitzada. Aquesta operació requereix connexió a " "Internet. Vols continuar?" -#: app/scripts/services/project.js:387 +#: app/scripts/services/project.js:400 msgid "" "This import operation requires a project path. You need to save the current " "project. Do you want to continue?" @@ -657,11 +665,11 @@ msgstr "" "Aquesta operació d'importació requereix un directori de projecte. Has de " "desar el projecte actual. Vols continuar?" -#: app/scripts/services/project.js:105 +#: app/scripts/services/project.js:109 msgid "This project is designed for the {{name}} board." msgstr "Aquest projecte està dissenyat per a la placa {{name}}" -#: app/views/menu.html:216 +#: app/views/menu.html:220 msgid "Toolchain" msgstr "Toolchain" @@ -682,7 +690,7 @@ msgstr "Toolchain no instal·lada. Per favor, instal·la la toolchain" msgid "Toolchain removed" msgstr "Toolchain eliminada" -#: app/views/menu.html:203 +#: app/views/menu.html:207 msgid "Tools" msgstr "Eines" @@ -694,11 +702,11 @@ msgstr "Desfés" msgid "Unknown board" msgstr "Placa desconeguda" -#: app/scripts/app.js:37 +#: app/scripts/app.js:44 msgid "Untitled" msgstr "Sense títol" -#: app/views/menu.html:223 +#: app/views/menu.html:227 msgid "Update" msgstr "Actualitzar" @@ -707,19 +715,19 @@ msgstr "Actualitzar" msgid "Update the block name" msgstr "Actualitza el nom del bloc" -#: app/views/menu.html:212 +#: app/views/menu.html:216 msgid "Upload" msgstr "Carrega" -#: app/views/menu.html:206 +#: app/views/menu.html:210 msgid "Verify" msgstr "Verifica" -#: app/scripts/controllers/menu.js:193 +#: app/scripts/controllers/menu.js:189 msgid "Verilog code exported" msgstr "Codi Verilog exportat" -#: app/scripts/services/utils.js:528 app/views/menu.html:294 +#: app/scripts/services/utils.js:533 app/views/menu.html:298 msgid "Version" msgstr "Versió" @@ -727,7 +735,7 @@ msgstr "Versió" msgid "View" msgstr "Visualitza" -#: app/views/menu.html:291 +#: app/views/menu.html:295 msgid "View license" msgstr "Visualitzar llicència" @@ -749,7 +757,7 @@ msgstr "Nom del paràmetre incorrecte" msgid "Wrong port name {{name}}" msgstr "Nom del port incorrecte" -#: app/scripts/services/project.js:133 +#: app/scripts/services/project.js:139 msgid "Wrong project format: {{name}}" msgstr "Format de projecte incorrecte: {{name}}" @@ -757,7 +765,11 @@ msgstr "Format de projecte incorrecte: {{name}}" msgid "Wrong remote hostname {{name}}" msgstr "Nom del host remot incorrecte {{name}}" -#: app/scripts/controllers/menu.js:242 +#: app/scripts/services/project.js:110 +msgid "You can load it as it is or convert it for the {{name}} board." +msgstr "" + +#: app/scripts/controllers/menu.js:238 msgid "Your changes will be lost if you don’t save them" msgstr "Els teus canvis es perdran si no els deses" @@ -795,22 +807,25 @@ msgstr "Iniciar càrrega ..." msgid "start_verify" msgstr "Iniciar verificació ..." -#: app/scripts/services/drivers.js:103 app/scripts/services/utils.js:847 +#: app/scripts/services/drivers.js:103 app/scripts/services/utils.js:859 msgid "{{app}} is required." msgstr "" -#: app/scripts/controllers/menu.js:398 +#: app/scripts/controllers/menu.js:396 msgid "{{board}} datasheet not defined" msgstr "Full de dades de {{board}} no definit" -#: app/scripts/controllers/menu.js:388 +#: app/scripts/controllers/menu.js:386 msgid "{{board}} pinout not defined" msgstr "{{board}} pinout no definit" -#: app/scripts/controllers/menu.js:417 +#: app/scripts/controllers/menu.js:415 msgid "{{board}} rules not defined" msgstr "Regles de {{board}} no definides" +#~ msgid "Do you want to convert it?" +#~ msgstr "Vols convertir-lo?" + #~ msgid "Homebrew is required" #~ msgstr "És necessari Homebrew" diff --git a/app/resources/locale/en/en.po b/app/resources/locale/en/en.po index e96b4a7a5..241e41b40 100644 --- a/app/resources/locale/en/en.po +++ b/app/resources/locale/en/en.po @@ -34,15 +34,15 @@ msgstr "" "

    FTDI driver uninstallation instructions

    1. Find the FPGA USB " "Device
    2. Select the board interface and uninstall the driver
    " -#: app/views/menu.html:309 +#: app/views/menu.html:313 msgid "About Icestudio" msgstr "About Icestudio" -#: app/views/menu.html:263 +#: app/views/menu.html:267 msgid "Add" msgstr "Add" -#: app/scripts/controllers/menu.js:516 +#: app/scripts/controllers/menu.js:511 msgid "Add a block to start" msgstr "Add a block to start" @@ -50,19 +50,19 @@ msgstr "Add a block to start" msgid "Add as block" msgstr "Add as block" -#: app/scripts/services/tools.js:895 +#: app/scripts/services/tools.js:889 msgid "All collections removed" msgstr "All collections removed" -#: app/scripts/controllers/menu.js:538 +#: app/scripts/controllers/menu.js:533 msgid "All stored collections will be lost. Do you want to continue?" msgstr "All stored collections will be lost. Do you want to continue?" -#: app/scripts/services/utils.js:530 +#: app/scripts/services/utils.js:535 msgid "Author" msgstr "Author" -#: app/views/menu.html:320 +#: app/views/menu.html:324 msgid "Basic" msgstr "Basic" @@ -72,12 +72,12 @@ msgstr "Basque" #: app/scripts/services/blocks.js:755 app/scripts/services/blocks.js:776 #: app/scripts/services/blocks.js:831 app/scripts/services/blocks.js:850 -#: app/scripts/services/blocks.js:885 app/scripts/services/blocks.js:926 -#: app/scripts/services/blocks.js:960 +#: app/scripts/services/blocks.js:885 app/scripts/services/blocks.js:928 +#: app/scripts/services/blocks.js:962 msgid "Block updated" msgstr "Block updated" -#: app/scripts/services/project.js:413 +#: app/scripts/services/project.js:426 msgid "Block {{name}} imported" msgstr "Block {{name}} imported" @@ -93,11 +93,11 @@ msgstr "Board" msgid "Board rules" msgstr "Board rules" -#: app/scripts/controllers/menu.js:341 +#: app/scripts/controllers/menu.js:337 msgid "Board rules disabled" msgstr "Board rules disabled" -#: app/scripts/controllers/menu.js:336 +#: app/scripts/controllers/menu.js:332 msgid "Board rules enabled" msgstr "Board rules enabled" @@ -105,15 +105,15 @@ msgstr "Board rules enabled" msgid "Board {{name}} not detected" msgstr "Board {{name}} not detected" -#: app/scripts/controllers/menu.js:477 +#: app/scripts/controllers/menu.js:476 msgid "Board {{name}} selected" msgstr "Board {{name}} selected" -#: app/views/menu.html:209 +#: app/views/menu.html:213 msgid "Build" msgstr "Build" -#: app/scripts/controllers/main.js:16 +#: app/scripts/controllers/main.js:16 app/scripts/services/project.js:144 msgid "Cancel" msgstr "Cancel" @@ -133,7 +133,7 @@ msgstr "Check Python..." msgid "Click here to install it" msgstr "Click here to install it" -#: app/views/menu.html:334 +#: app/views/menu.html:338 msgid "Code" msgstr "Code" @@ -145,7 +145,7 @@ msgstr "Collection" msgid "Collection info" msgstr "Collection info" -#: app/scripts/controllers/menu.js:436 +#: app/scripts/controllers/menu.js:434 msgid "Collection {{collection}} info not defined" msgstr "Collection {{collection}} info not defined" @@ -157,7 +157,7 @@ msgstr "Collection {{name}} added" msgid "Collection {{name}} not replaced" msgstr "Collection {{name}} not replaced" -#: app/scripts/services/tools.js:889 +#: app/scripts/services/tools.js:883 msgid "Collection {{name}} removed" msgstr "Collection {{name}} removed" @@ -165,22 +165,26 @@ msgstr "Collection {{name}} removed" msgid "Collection {{name}} replaced" msgstr "Collection {{name}} replaced" -#: app/scripts/controllers/menu.js:444 +#: app/scripts/controllers/menu.js:442 msgid "Collection {{name}} selected" msgstr "Collection {{name}} selected" -#: app/views/menu.html:259 +#: app/views/menu.html:263 msgid "Collections" msgstr "Collections" -#: app/views/menu.html:305 +#: app/views/menu.html:309 msgid "Community forum" msgstr "Community forum" -#: app/views/menu.html:331 +#: app/views/menu.html:335 msgid "Constant" msgstr "Constant" +#: app/scripts/services/project.js:106 +msgid "Convert" +msgstr "Convert" + #: app/views/menu.html:91 msgid "Copy" msgstr "Copy" @@ -193,7 +197,7 @@ msgstr "Cut" msgid "Datasheet" msgstr "Datasheet" -#: app/views/menu.html:189 +#: app/views/menu.html:190 msgid "Default" msgstr "Default" @@ -205,23 +209,19 @@ msgstr "" "Default toolchain not found. Toolchain will be downloaded. This operation " "requires Internet connection. Do you want to continue?" -#: app/scripts/services/utils.js:529 +#: app/scripts/services/utils.js:534 msgid "Description" msgstr "Description" -#: app/views/menu.html:126 app/views/menu.html:252 +#: app/views/menu.html:126 app/views/menu.html:256 msgid "Disable" msgstr "Disable" -#: app/scripts/controllers/menu.js:241 +#: app/scripts/controllers/menu.js:237 msgid "Do you want to close the application?" msgstr "Do you want to close the application?" -#: app/scripts/services/project.js:106 -msgid "Do you want to convert it?" -msgstr "Do you want to convert it?" - -#: app/scripts/controllers/menu.js:528 +#: app/scripts/controllers/menu.js:523 msgid "Do you want to remove the {{name}} collection?" msgstr "Do you want to remove the {{name}} collection?" @@ -229,11 +229,11 @@ msgstr "Do you want to remove the {{name}} collection?" msgid "Do you want to replace it?" msgstr "Do you want to replace it?" -#: app/views/menu.html:298 +#: app/views/menu.html:302 msgid "Documentation" msgstr "Documentation" -#: app/views/menu.html:243 +#: app/views/menu.html:247 msgid "Drivers" msgstr "Drivers" @@ -261,7 +261,7 @@ msgstr "Edit" msgid "Edit the collection name" msgstr "Edit the collection name" -#: app/views/menu.html:121 app/views/menu.html:247 +#: app/views/menu.html:121 app/views/menu.html:251 msgid "Enable" msgstr "Enable" @@ -293,7 +293,7 @@ msgstr "Enter the output ports" msgid "Enter the parameters" msgstr "Enter the parameters" -#: app/scripts/controllers/menu.js:328 +#: app/scripts/controllers/menu.js:324 msgid "Enter the remote hostname user@host (experimental)" msgstr "Enter the remote hostname user@host (experimental)" @@ -301,7 +301,7 @@ msgstr "Enter the remote hostname user@host (experimental)" msgid "Error: default toolchain not found in '{{dir}}'" msgstr "Error: default toolchain not found in '{{dir}}'" -#: app/scripts/services/utils.js:670 +#: app/scripts/services/utils.js:675 msgid "Error: {{error}}" msgstr "Error: {{error}}" @@ -346,7 +346,7 @@ msgstr "FPGA pin" msgid "File" msgstr "File" -#: app/scripts/services/project.js:425 +#: app/scripts/services/project.js:438 msgid "" "File {{file}} already exists in the project path. Do you want to replace it?" msgstr "" @@ -356,7 +356,7 @@ msgstr "" msgid "File {{file}} does not exist" msgstr "File {{file}} does not exist" -#: app/scripts/services/project.js:459 +#: app/scripts/services/project.js:472 msgid "File {{file}} imported" msgstr "File {{file}} imported" @@ -368,7 +368,7 @@ msgstr "Fit content" msgid "French" msgstr "French" -#: app/scripts/controllers/menu.js:220 +#: app/scripts/controllers/menu.js:216 msgid "GTKWave exported" msgstr "GTKWave exported" @@ -376,27 +376,27 @@ msgstr "GTKWave exported" msgid "Galician" msgstr "Galician" -#: app/views/menu.html:288 +#: app/views/menu.html:292 msgid "Help" msgstr "Help" -#: app/scripts/services/utils.js:543 +#: app/scripts/services/utils.js:548 msgid "Image" msgstr "Image" -#: app/scripts/controllers/menu.js:688 +#: app/scripts/controllers/menu.js:683 msgid "Image {{name}} saved" msgstr "Image {{name}} saved" -#: app/views/menu.html:337 +#: app/views/menu.html:341 msgid "Information" msgstr "Information" -#: app/views/menu.html:325 +#: app/views/menu.html:329 msgid "Input" msgstr "Input" -#: app/views/menu.html:220 +#: app/views/menu.html:224 msgid "Install" msgstr "Install" @@ -453,6 +453,10 @@ msgstr "It is recommended to use USB 2.0 ports" msgid "Language" msgstr "Language" +#: app/scripts/services/project.js:105 +msgid "Load" +msgstr "Load" + #: app/scripts/services/blocks.js:186 app/scripts/services/blocks.js:864 msgid "Local parameter" msgstr "Local parameter" @@ -461,7 +465,11 @@ msgstr "Local parameter" msgid "Make virtual env..." msgstr "Make virtual env..." -#: app/scripts/services/utils.js:527 +#: app/scripts/services/utils.js:755 +msgid "Maximum bus size: 96 bits" +msgstr "Maximum bus size: 96 bits" + +#: app/scripts/services/utils.js:532 msgid "Name" msgstr "Name" @@ -473,15 +481,15 @@ msgstr "New" msgid "New project {{name}} created" msgstr "New project {{name}} created" -#: app/scripts/controllers/menu.js:546 +#: app/scripts/controllers/menu.js:541 msgid "No collections stored" msgstr "No collections stored" -#: app/scripts/controllers/main.js:15 +#: app/scripts/controllers/main.js:15 app/scripts/services/project.js:143 msgid "OK" msgstr "OK" -#: app/scripts/services/project.js:364 app/scripts/services/project.js:99 +#: app/scripts/services/project.js:377 app/scripts/services/project.js:99 msgid "Old project format {{version}}" msgstr "Old project format {{version}}" @@ -489,19 +497,19 @@ msgstr "Old project format {{version}}" msgid "Open" msgstr "Open" -#: app/scripts/services/utils.js:550 +#: app/scripts/services/utils.js:555 msgid "Open SVG" msgstr "Open SVG" -#: app/scripts/services/project.js:462 +#: app/scripts/services/project.js:475 msgid "Original file {{file}} does not exist" msgstr "Original file {{file}} does not exist" -#: app/views/menu.html:328 +#: app/views/menu.html:332 msgid "Output" msgstr "Output" -#: app/scripts/controllers/menu.js:202 +#: app/scripts/controllers/menu.js:198 msgid "PCF file exported" msgstr "PCF file exported" @@ -509,7 +517,7 @@ msgstr "PCF file exported" msgid "Paste" msgstr "Paste" -#: app/scripts/services/utils.js:872 +#: app/scripts/services/utils.js:884 msgid "Please run: {{cmd}}" msgstr "Please run: {{cmd}}" @@ -521,11 +529,11 @@ msgstr "Preferences" msgid "Project information" msgstr "Project information" -#: app/scripts/services/project.js:125 +#: app/scripts/services/project.js:131 msgid "Project {{name}} loaded" msgstr "Project {{name}} loaded" -#: app/scripts/services/project.js:334 +#: app/scripts/services/project.js:346 msgid "Project {{name}} saved" msgstr "Project {{name}} saved" @@ -537,7 +545,7 @@ msgstr "Python 2.7 is required" msgid "Quit" msgstr "Quit" -#: app/scripts/services/blocks.js:946 app/views/design.html:5 +#: app/scripts/services/blocks.js:948 app/views/design.html:5 msgid "Read only" msgstr "Read only" @@ -553,19 +561,19 @@ msgstr "Remote host {{name}} not connected" msgid "Remote hostname" msgstr "Remote hostname" -#: app/views/menu.html:228 app/views/menu.html:267 +#: app/views/menu.html:232 app/views/menu.html:271 msgid "Remove" msgstr "Remove" -#: app/views/menu.html:279 +#: app/views/menu.html:283 msgid "Remove all" msgstr "Remove all" -#: app/scripts/services/utils.js:552 +#: app/scripts/services/utils.js:557 msgid "Reset SVG" msgstr "Reset SVG" -#: app/views/menu.html:233 +#: app/views/menu.html:237 msgid "Reset default" msgstr "Reset default" @@ -577,7 +585,7 @@ msgstr "Reset view" msgid "Save" msgstr "Save" -#: app/scripts/services/utils.js:551 +#: app/scripts/services/utils.js:556 msgid "Save SVG" msgstr "Save SVG" @@ -597,7 +605,7 @@ msgstr "Select all" msgid "Show clock" msgstr "Show clock" -#: app/views/menu.html:301 +#: app/views/menu.html:305 msgid "Source code" msgstr "Source code" @@ -613,7 +621,7 @@ msgstr "Synchronize remote files ..." msgid "Testbench" msgstr "Testbench" -#: app/scripts/controllers/menu.js:211 +#: app/scripts/controllers/menu.js:207 msgid "Testbench exported" msgstr "Testbench exported" @@ -621,7 +629,7 @@ msgstr "Testbench exported" msgid "The collection {{name}} already exists." msgstr "The collection {{name}} already exists." -#: app/scripts/controllers/menu.js:465 +#: app/scripts/controllers/menu.js:463 msgid "" "The current FPGA I/O configuration will be lost. Do you want to change to " "{{name}} board?" @@ -645,7 +653,7 @@ msgstr "" "The toolchain will be updated. This operation requires Internet connection. " "Do you want to continue?" -#: app/scripts/services/project.js:387 +#: app/scripts/services/project.js:400 msgid "" "This import operation requires a project path. You need to save the current " "project. Do you want to continue?" @@ -653,11 +661,11 @@ msgstr "" "This import operation requires a project path. You need to save the current " "project. Do you want to continue?" -#: app/scripts/services/project.js:105 +#: app/scripts/services/project.js:109 msgid "This project is designed for the {{name}} board." msgstr "This project is designed for the {{name}} board." -#: app/views/menu.html:216 +#: app/views/menu.html:220 msgid "Toolchain" msgstr "Toolchain" @@ -678,7 +686,7 @@ msgstr "Toolchain not installed. Please, install the toolchain" msgid "Toolchain removed" msgstr "Toolchain removed" -#: app/views/menu.html:203 +#: app/views/menu.html:207 msgid "Tools" msgstr "Tools" @@ -690,11 +698,11 @@ msgstr "Undo" msgid "Unknown board" msgstr "Unknown board" -#: app/scripts/app.js:37 +#: app/scripts/app.js:44 msgid "Untitled" msgstr "Untitled" -#: app/views/menu.html:223 +#: app/views/menu.html:227 msgid "Update" msgstr "Update" @@ -703,19 +711,19 @@ msgstr "Update" msgid "Update the block name" msgstr "Update the block name" -#: app/views/menu.html:212 +#: app/views/menu.html:216 msgid "Upload" msgstr "Upload" -#: app/views/menu.html:206 +#: app/views/menu.html:210 msgid "Verify" msgstr "Verify" -#: app/scripts/controllers/menu.js:193 +#: app/scripts/controllers/menu.js:189 msgid "Verilog code exported" msgstr "Verilog code exported" -#: app/scripts/services/utils.js:528 app/views/menu.html:294 +#: app/scripts/services/utils.js:533 app/views/menu.html:298 msgid "Version" msgstr "Version" @@ -723,7 +731,7 @@ msgstr "Version" msgid "View" msgstr "View" -#: app/views/menu.html:291 +#: app/views/menu.html:295 msgid "View license" msgstr "View license" @@ -745,7 +753,7 @@ msgstr "Wrong parameter name {{name}}" msgid "Wrong port name {{name}}" msgstr "Wrong port name {{name}}" -#: app/scripts/services/project.js:133 +#: app/scripts/services/project.js:139 msgid "Wrong project format: {{name}}" msgstr "Wrong project format: {{name}}" @@ -753,7 +761,11 @@ msgstr "Wrong project format: {{name}}" msgid "Wrong remote hostname {{name}}" msgstr "Wrong remote hostname {{name}}" -#: app/scripts/controllers/menu.js:242 +#: app/scripts/services/project.js:110 +msgid "You can load it as it is or convert it for the {{name}} board." +msgstr "You can load it as it is or convert it for the {{name}} board." + +#: app/scripts/controllers/menu.js:238 msgid "Your changes will be lost if you don’t save them" msgstr "Your changes will be lost if you don’t save them" @@ -791,22 +803,25 @@ msgstr "Start uploading ..." msgid "start_verify" msgstr "Start verification ..." -#: app/scripts/services/drivers.js:103 app/scripts/services/utils.js:847 +#: app/scripts/services/drivers.js:103 app/scripts/services/utils.js:859 msgid "{{app}} is required." msgstr "{{app}} is required." -#: app/scripts/controllers/menu.js:398 +#: app/scripts/controllers/menu.js:396 msgid "{{board}} datasheet not defined" msgstr "{{board}} datasheet not defined" -#: app/scripts/controllers/menu.js:388 +#: app/scripts/controllers/menu.js:386 msgid "{{board}} pinout not defined" msgstr "{{board}} pinout not defined" -#: app/scripts/controllers/menu.js:417 +#: app/scripts/controllers/menu.js:415 msgid "{{board}} rules not defined" msgstr "{{board}} rules not defined" +#~ msgid "Do you want to convert it?" +#~ msgstr "Do you want to convert it?" + #~ msgid "Collection {{collection}} data not defined" #~ msgstr "Collection {{collection}} data not defined" diff --git a/app/resources/locale/es_ES/es_ES.po b/app/resources/locale/es_ES/es_ES.po index 279616321..346c9727b 100644 --- a/app/resources/locale/es_ES/es_ES.po +++ b/app/resources/locale/es_ES/es_ES.po @@ -35,15 +35,15 @@ msgstr "" "dispositivo USB FPGA
  • Selecciona la interfaz de la placa y desinstala " "el driver
  • " -#: app/views/menu.html:309 +#: app/views/menu.html:313 msgid "About Icestudio" msgstr "Sobre Icestudio" -#: app/views/menu.html:263 +#: app/views/menu.html:267 msgid "Add" msgstr "Añadir" -#: app/scripts/controllers/menu.js:516 +#: app/scripts/controllers/menu.js:511 msgid "Add a block to start" msgstr "Añade un bloque para comenzar" @@ -51,19 +51,19 @@ msgstr "Añade un bloque para comenzar" msgid "Add as block" msgstr "Añadir como bloque" -#: app/scripts/services/tools.js:895 +#: app/scripts/services/tools.js:889 msgid "All collections removed" msgstr "Colecciones eliminadas" -#: app/scripts/controllers/menu.js:538 +#: app/scripts/controllers/menu.js:533 msgid "All stored collections will be lost. Do you want to continue?" msgstr "Todas las colecciones almacenadas se perderán. ¿Deseas continuar?" -#: app/scripts/services/utils.js:530 +#: app/scripts/services/utils.js:535 msgid "Author" msgstr "Autor" -#: app/views/menu.html:320 +#: app/views/menu.html:324 msgid "Basic" msgstr "Básico" @@ -73,12 +73,12 @@ msgstr "Euskera" #: app/scripts/services/blocks.js:755 app/scripts/services/blocks.js:776 #: app/scripts/services/blocks.js:831 app/scripts/services/blocks.js:850 -#: app/scripts/services/blocks.js:885 app/scripts/services/blocks.js:926 -#: app/scripts/services/blocks.js:960 +#: app/scripts/services/blocks.js:885 app/scripts/services/blocks.js:928 +#: app/scripts/services/blocks.js:962 msgid "Block updated" msgstr "Bloque actualizado" -#: app/scripts/services/project.js:413 +#: app/scripts/services/project.js:426 msgid "Block {{name}} imported" msgstr "Bloque {{name}} importado" @@ -94,11 +94,11 @@ msgstr "Placa" msgid "Board rules" msgstr "Reglas de la placa" -#: app/scripts/controllers/menu.js:341 +#: app/scripts/controllers/menu.js:337 msgid "Board rules disabled" msgstr "Reglas de la placa deshabilitadas" -#: app/scripts/controllers/menu.js:336 +#: app/scripts/controllers/menu.js:332 msgid "Board rules enabled" msgstr "Reglas de la placa habilitadas" @@ -106,15 +106,15 @@ msgstr "Reglas de la placa habilitadas" msgid "Board {{name}} not detected" msgstr "Placa {{name}} no detectada" -#: app/scripts/controllers/menu.js:477 +#: app/scripts/controllers/menu.js:476 msgid "Board {{name}} selected" msgstr "Placa {{name}} seleccionada" -#: app/views/menu.html:209 +#: app/views/menu.html:213 msgid "Build" msgstr "Sintetizar" -#: app/scripts/controllers/main.js:16 +#: app/scripts/controllers/main.js:16 app/scripts/services/project.js:144 msgid "Cancel" msgstr "Cancelar" @@ -134,7 +134,7 @@ msgstr "Comprobando Python..." msgid "Click here to install it" msgstr "Haga clic aquí para instalarlo" -#: app/views/menu.html:334 +#: app/views/menu.html:338 msgid "Code" msgstr "Código" @@ -146,7 +146,7 @@ msgstr "Colección" msgid "Collection info" msgstr "Información de la colección" -#: app/scripts/controllers/menu.js:436 +#: app/scripts/controllers/menu.js:434 msgid "Collection {{collection}} info not defined" msgstr "Información de la colección {{collection}} no definida" @@ -158,7 +158,7 @@ msgstr "Colección {{name}} añadida" msgid "Collection {{name}} not replaced" msgstr "Colección {{name}} no reemplazada" -#: app/scripts/services/tools.js:889 +#: app/scripts/services/tools.js:883 msgid "Collection {{name}} removed" msgstr "Colección {{name}} eliminada" @@ -166,22 +166,26 @@ msgstr "Colección {{name}} eliminada" msgid "Collection {{name}} replaced" msgstr "Colección {{name}} reemplazada" -#: app/scripts/controllers/menu.js:444 +#: app/scripts/controllers/menu.js:442 msgid "Collection {{name}} selected" msgstr "Colección {{name}} seleccionada" -#: app/views/menu.html:259 +#: app/views/menu.html:263 msgid "Collections" msgstr "Colecciones" -#: app/views/menu.html:305 +#: app/views/menu.html:309 msgid "Community forum" msgstr "Foro de la comunidad" -#: app/views/menu.html:331 +#: app/views/menu.html:335 msgid "Constant" msgstr "Constante" +#: app/scripts/services/project.js:106 +msgid "Convert" +msgstr "Convertir" + #: app/views/menu.html:91 msgid "Copy" msgstr "Copiar" @@ -194,7 +198,7 @@ msgstr "Cortar" msgid "Datasheet" msgstr "Datasheet" -#: app/views/menu.html:189 +#: app/views/menu.html:190 msgid "Default" msgstr "Por defecto" @@ -206,23 +210,19 @@ msgstr "" "No se encuentra la toolchain por defecto, por lo que será descargada. Esta " "operación requiere conexión a Internet. ¿Deseas continuar?" -#: app/scripts/services/utils.js:529 +#: app/scripts/services/utils.js:534 msgid "Description" msgstr "Descripción" -#: app/views/menu.html:126 app/views/menu.html:252 +#: app/views/menu.html:126 app/views/menu.html:256 msgid "Disable" msgstr "Deshabilitar" -#: app/scripts/controllers/menu.js:241 +#: app/scripts/controllers/menu.js:237 msgid "Do you want to close the application?" msgstr "¿Deseas cerrar la aplicación?" -#: app/scripts/services/project.js:106 -msgid "Do you want to convert it?" -msgstr "¿Deseas convertirlo?" - -#: app/scripts/controllers/menu.js:528 +#: app/scripts/controllers/menu.js:523 msgid "Do you want to remove the {{name}} collection?" msgstr "¿Deseas eliminar la colección {{name}}?" @@ -230,11 +230,11 @@ msgstr "¿Deseas eliminar la colección {{name}}?" msgid "Do you want to replace it?" msgstr "¿Deseas reemplazarla?" -#: app/views/menu.html:298 +#: app/views/menu.html:302 msgid "Documentation" msgstr "Documentación" -#: app/views/menu.html:243 +#: app/views/menu.html:247 msgid "Drivers" msgstr "Drivers" @@ -262,7 +262,7 @@ msgstr "Editar" msgid "Edit the collection name" msgstr "Edita el nombre de la colección" -#: app/views/menu.html:121 app/views/menu.html:247 +#: app/views/menu.html:121 app/views/menu.html:251 msgid "Enable" msgstr "Habilitar" @@ -294,7 +294,7 @@ msgstr "Introduce los puertos de salida" msgid "Enter the parameters" msgstr "Introduce los parámetros" -#: app/scripts/controllers/menu.js:328 +#: app/scripts/controllers/menu.js:324 msgid "Enter the remote hostname user@host (experimental)" msgstr "Introduce el nombre del host remoto usuario@host (experimental)" @@ -302,7 +302,7 @@ msgstr "Introduce el nombre del host remoto usuario@host (experimental)" msgid "Error: default toolchain not found in '{{dir}}'" msgstr "Error: toolchain por defecto no encontrada en '{{dir}}'" -#: app/scripts/services/utils.js:670 +#: app/scripts/services/utils.js:675 msgid "Error: {{error}}" msgstr "Error: {{error}}" @@ -347,7 +347,7 @@ msgstr "FPGA pin" msgid "File" msgstr "Archivo" -#: app/scripts/services/project.js:425 +#: app/scripts/services/project.js:438 msgid "" "File {{file}} already exists in the project path. Do you want to replace it?" msgstr "" @@ -358,7 +358,7 @@ msgstr "" msgid "File {{file}} does not exist" msgstr "El archivo {{file}} no existe" -#: app/scripts/services/project.js:459 +#: app/scripts/services/project.js:472 msgid "File {{file}} imported" msgstr "Archivo {{file}} importado" @@ -370,7 +370,7 @@ msgstr "Ajustar contenido" msgid "French" msgstr "Francés" -#: app/scripts/controllers/menu.js:220 +#: app/scripts/controllers/menu.js:216 msgid "GTKWave exported" msgstr "GTKWave exportado" @@ -378,27 +378,27 @@ msgstr "GTKWave exportado" msgid "Galician" msgstr "Gallego" -#: app/views/menu.html:288 +#: app/views/menu.html:292 msgid "Help" msgstr "Ayuda" -#: app/scripts/services/utils.js:543 +#: app/scripts/services/utils.js:548 msgid "Image" msgstr "Imagen" -#: app/scripts/controllers/menu.js:688 +#: app/scripts/controllers/menu.js:683 msgid "Image {{name}} saved" msgstr "Imagen {{name}} guardada" -#: app/views/menu.html:337 +#: app/views/menu.html:341 msgid "Information" msgstr "Información" -#: app/views/menu.html:325 +#: app/views/menu.html:329 msgid "Input" msgstr "Entrada" -#: app/views/menu.html:220 +#: app/views/menu.html:224 msgid "Install" msgstr "Instalar" @@ -457,6 +457,10 @@ msgstr "Se recomienda utilizar puertos USB 2.0" msgid "Language" msgstr "Idioma" +#: app/scripts/services/project.js:105 +msgid "Load" +msgstr "Cargar" + #: app/scripts/services/blocks.js:186 app/scripts/services/blocks.js:864 msgid "Local parameter" msgstr "Parámetro local" @@ -465,7 +469,11 @@ msgstr "Parámetro local" msgid "Make virtual env..." msgstr "Crear virtual env..." -#: app/scripts/services/utils.js:527 +#: app/scripts/services/utils.js:755 +msgid "Maximum bus size: 96 bits" +msgstr "Tamaño máximo del bus: 96 bits" + +#: app/scripts/services/utils.js:532 msgid "Name" msgstr "Nombre" @@ -477,15 +485,15 @@ msgstr "Nuevo" msgid "New project {{name}} created" msgstr "Nuevo proyecto {{name}} creado" -#: app/scripts/controllers/menu.js:546 +#: app/scripts/controllers/menu.js:541 msgid "No collections stored" msgstr "Ninguna colección almacenada" -#: app/scripts/controllers/main.js:15 +#: app/scripts/controllers/main.js:15 app/scripts/services/project.js:143 msgid "OK" msgstr "OK" -#: app/scripts/services/project.js:364 app/scripts/services/project.js:99 +#: app/scripts/services/project.js:377 app/scripts/services/project.js:99 msgid "Old project format {{version}}" msgstr "Formato de proyecto antiguo {{version}}" @@ -493,19 +501,19 @@ msgstr "Formato de proyecto antiguo {{version}}" msgid "Open" msgstr "Abrir" -#: app/scripts/services/utils.js:550 +#: app/scripts/services/utils.js:555 msgid "Open SVG" msgstr "Abrir SVG" -#: app/scripts/services/project.js:462 +#: app/scripts/services/project.js:475 msgid "Original file {{file}} does not exist" msgstr "El archivo original {{file}} no existe" -#: app/views/menu.html:328 +#: app/views/menu.html:332 msgid "Output" msgstr "Salida" -#: app/scripts/controllers/menu.js:202 +#: app/scripts/controllers/menu.js:198 msgid "PCF file exported" msgstr "Fichero PCF exportado" @@ -513,7 +521,7 @@ msgstr "Fichero PCF exportado" msgid "Paste" msgstr "Pegar" -#: app/scripts/services/utils.js:872 +#: app/scripts/services/utils.js:884 msgid "Please run: {{cmd}}" msgstr "Por favor ejecuta: {{cmd}}" @@ -525,11 +533,11 @@ msgstr "Preferencias" msgid "Project information" msgstr "Información del proyecto" -#: app/scripts/services/project.js:125 +#: app/scripts/services/project.js:131 msgid "Project {{name}} loaded" msgstr "Proyecto {{name}} cargado" -#: app/scripts/services/project.js:334 +#: app/scripts/services/project.js:346 msgid "Project {{name}} saved" msgstr "Proyecto {{name}} guardado" @@ -541,7 +549,7 @@ msgstr "Es necesario Python 2.7" msgid "Quit" msgstr "Salir" -#: app/scripts/services/blocks.js:946 app/views/design.html:5 +#: app/scripts/services/blocks.js:948 app/views/design.html:5 msgid "Read only" msgstr "Solo lectura" @@ -557,19 +565,19 @@ msgstr "Host remoto {{name}} no conectado" msgid "Remote hostname" msgstr "Nombre del host remoto" -#: app/views/menu.html:228 app/views/menu.html:267 +#: app/views/menu.html:232 app/views/menu.html:271 msgid "Remove" msgstr "Eliminar" -#: app/views/menu.html:279 +#: app/views/menu.html:283 msgid "Remove all" msgstr "Eliminar todo" -#: app/scripts/services/utils.js:552 +#: app/scripts/services/utils.js:557 msgid "Reset SVG" msgstr "Resetear SVG" -#: app/views/menu.html:233 +#: app/views/menu.html:237 msgid "Reset default" msgstr "Reset default" @@ -581,7 +589,7 @@ msgstr "Resetear vista" msgid "Save" msgstr "Guardar" -#: app/scripts/services/utils.js:551 +#: app/scripts/services/utils.js:556 msgid "Save SVG" msgstr "Guardar SVG" @@ -601,7 +609,7 @@ msgstr "Seleccionar todo" msgid "Show clock" msgstr "Mostrar reloj" -#: app/views/menu.html:301 +#: app/views/menu.html:305 msgid "Source code" msgstr "Código fuente" @@ -617,7 +625,7 @@ msgstr "Sincronizando ficheros remotos ..." msgid "Testbench" msgstr "Testbench" -#: app/scripts/controllers/menu.js:211 +#: app/scripts/controllers/menu.js:207 msgid "Testbench exported" msgstr "Testbench exportado" @@ -625,7 +633,7 @@ msgstr "Testbench exportado" msgid "The collection {{name}} already exists." msgstr "La colección {{name}} ya existe." -#: app/scripts/controllers/menu.js:465 +#: app/scripts/controllers/menu.js:463 msgid "" "The current FPGA I/O configuration will be lost. Do you want to change to " "{{name}} board?" @@ -650,7 +658,7 @@ msgstr "" "La toolchain será actualizada. Esta operación requiere conexión a Internet. " "¿Deseas continuar?" -#: app/scripts/services/project.js:387 +#: app/scripts/services/project.js:400 msgid "" "This import operation requires a project path. You need to save the current " "project. Do you want to continue?" @@ -658,11 +666,11 @@ msgstr "" "Esta operación de importación requiere una ruta del proyecto. Debes guardar " "el proyecto actual. ¿Deseas continuar?" -#: app/scripts/services/project.js:105 +#: app/scripts/services/project.js:109 msgid "This project is designed for the {{name}} board." msgstr "Este proyecto está diseñado para la placa {{name}}." -#: app/views/menu.html:216 +#: app/views/menu.html:220 msgid "Toolchain" msgstr "Toolchain" @@ -683,7 +691,7 @@ msgstr "La toolchain no está instalada. Por favor, instala la toolchain" msgid "Toolchain removed" msgstr "Toolchain eliminada" -#: app/views/menu.html:203 +#: app/views/menu.html:207 msgid "Tools" msgstr "Herramientas" @@ -695,11 +703,11 @@ msgstr "Deshacer" msgid "Unknown board" msgstr "Placa desconocida" -#: app/scripts/app.js:37 +#: app/scripts/app.js:44 msgid "Untitled" msgstr "Sin título" -#: app/views/menu.html:223 +#: app/views/menu.html:227 msgid "Update" msgstr "Actualizar" @@ -708,19 +716,19 @@ msgstr "Actualizar" msgid "Update the block name" msgstr "Actualiza el nombre del bloque" -#: app/views/menu.html:212 +#: app/views/menu.html:216 msgid "Upload" msgstr "Cargar" -#: app/views/menu.html:206 +#: app/views/menu.html:210 msgid "Verify" msgstr "Verificar" -#: app/scripts/controllers/menu.js:193 +#: app/scripts/controllers/menu.js:189 msgid "Verilog code exported" msgstr "Código Verilog exportado" -#: app/scripts/services/utils.js:528 app/views/menu.html:294 +#: app/scripts/services/utils.js:533 app/views/menu.html:298 msgid "Version" msgstr "Versión" @@ -728,7 +736,7 @@ msgstr "Versión" msgid "View" msgstr "Ver" -#: app/views/menu.html:291 +#: app/views/menu.html:295 msgid "View license" msgstr "Ver licencia" @@ -750,7 +758,7 @@ msgstr "Nombre del parámetro {{name}} incorrecto" msgid "Wrong port name {{name}}" msgstr "Nombre del puerto {{name}} incorrecto" -#: app/scripts/services/project.js:133 +#: app/scripts/services/project.js:139 msgid "Wrong project format: {{name}}" msgstr "Formato de proyecto incorrecto: {{name}}" @@ -758,7 +766,11 @@ msgstr "Formato de proyecto incorrecto: {{name}}" msgid "Wrong remote hostname {{name}}" msgstr "Nombre del host remoto incorrecto {{name}}" -#: app/scripts/controllers/menu.js:242 +#: app/scripts/services/project.js:110 +msgid "You can load it as it is or convert it for the {{name}} board." +msgstr "Puedes cargarlo como está o convertirlo para la placa {{name}}." + +#: app/scripts/controllers/menu.js:238 msgid "Your changes will be lost if you don’t save them" msgstr "Tus cambios se perderán si no los guardas" @@ -796,22 +808,25 @@ msgstr "Comenzar carga ..." msgid "start_verify" msgstr "Comenzar verificación ..." -#: app/scripts/services/drivers.js:103 app/scripts/services/utils.js:847 +#: app/scripts/services/drivers.js:103 app/scripts/services/utils.js:859 msgid "{{app}} is required." msgstr "Es necesario {{app}}." -#: app/scripts/controllers/menu.js:398 +#: app/scripts/controllers/menu.js:396 msgid "{{board}} datasheet not defined" msgstr "{{board}} datasheet no definido" -#: app/scripts/controllers/menu.js:388 +#: app/scripts/controllers/menu.js:386 msgid "{{board}} pinout not defined" msgstr "{{board}} pinout no definido" -#: app/scripts/controllers/menu.js:417 +#: app/scripts/controllers/menu.js:415 msgid "{{board}} rules not defined" msgstr "Reglas de {{board}} no definidas" +#~ msgid "Do you want to convert it?" +#~ msgstr "¿Deseas convertirlo?" + #~ msgid "Homebrew is required" #~ msgstr "Es necesario Homebrew" diff --git a/app/resources/locale/eu_ES/eu_ES.po b/app/resources/locale/eu_ES/eu_ES.po index becd02cdb..8ce913b22 100644 --- a/app/resources/locale/eu_ES/eu_ES.po +++ b/app/resources/locale/eu_ES/eu_ES.po @@ -36,15 +36,15 @@ msgstr "" "gailua bila ezazu
  • Txartelaren interfazea hauta ezazu eta driver-a " "desinstalatu
  • " -#: app/views/menu.html:309 +#: app/views/menu.html:313 msgid "About Icestudio" msgstr "Icestudio-ri buruz..." -#: app/views/menu.html:263 +#: app/views/menu.html:267 msgid "Add" msgstr "Gehitu" -#: app/scripts/controllers/menu.js:516 +#: app/scripts/controllers/menu.js:511 msgid "Add a block to start" msgstr "Gehi ezazu bloke bat hasteko" @@ -52,19 +52,19 @@ msgstr "Gehi ezazu bloke bat hasteko" msgid "Add as block" msgstr "Blokea sortu" -#: app/scripts/services/tools.js:895 +#: app/scripts/services/tools.js:889 msgid "All collections removed" msgstr "Bildumak ezabatu dira" -#: app/scripts/controllers/menu.js:538 +#: app/scripts/controllers/menu.js:533 msgid "All stored collections will be lost. Do you want to continue?" msgstr "Gordetako bildumak galduko dira. Jarraitu nahi al duzu?" -#: app/scripts/services/utils.js:530 +#: app/scripts/services/utils.js:535 msgid "Author" msgstr "Egilea" -#: app/views/menu.html:320 +#: app/views/menu.html:324 msgid "Basic" msgstr "Oinarrizkoa" @@ -74,12 +74,12 @@ msgstr "Euskara" #: app/scripts/services/blocks.js:755 app/scripts/services/blocks.js:776 #: app/scripts/services/blocks.js:831 app/scripts/services/blocks.js:850 -#: app/scripts/services/blocks.js:885 app/scripts/services/blocks.js:926 -#: app/scripts/services/blocks.js:960 +#: app/scripts/services/blocks.js:885 app/scripts/services/blocks.js:928 +#: app/scripts/services/blocks.js:962 msgid "Block updated" msgstr "Etiketa freskatua dago" -#: app/scripts/services/project.js:413 +#: app/scripts/services/project.js:426 msgid "Block {{name}} imported" msgstr "{{name}} blokea inportatu duzu" @@ -95,11 +95,11 @@ msgstr "Txartela" msgid "Board rules" msgstr "Txartelaren arauak" -#: app/scripts/controllers/menu.js:341 +#: app/scripts/controllers/menu.js:337 msgid "Board rules disabled" msgstr "Txartelaren arauak desgaituta" -#: app/scripts/controllers/menu.js:336 +#: app/scripts/controllers/menu.js:332 msgid "Board rules enabled" msgstr "Txartelaren arauak gaituta" @@ -107,15 +107,15 @@ msgstr "Txartelaren arauak gaituta" msgid "Board {{name}} not detected" msgstr "{{name}} txartela ez da aurkitu" -#: app/scripts/controllers/menu.js:477 +#: app/scripts/controllers/menu.js:476 msgid "Board {{name}} selected" msgstr "{{name}} txartela hautatu duzu" -#: app/views/menu.html:209 +#: app/views/menu.html:213 msgid "Build" msgstr "Sintetizatu" -#: app/scripts/controllers/main.js:16 +#: app/scripts/controllers/main.js:16 app/scripts/services/project.js:144 msgid "Cancel" msgstr "Utzi" @@ -133,9 +133,9 @@ msgstr "Python egiaztatu..." #: app/scripts/services/drivers.js:104 msgid "Click here to install it" -msgstr "" +msgstr "Instalatzeko hemen klik egin" -#: app/views/menu.html:334 +#: app/views/menu.html:338 msgid "Code" msgstr "Kodea" @@ -145,11 +145,11 @@ msgstr "Bilduma" #: app/views/menu.html:165 msgid "Collection info" -msgstr "" +msgstr "Bildumaren informazioa" -#: app/scripts/controllers/menu.js:436 +#: app/scripts/controllers/menu.js:434 msgid "Collection {{collection}} info not defined" -msgstr "" +msgstr "{{collection}} bildumaren informazioa zehaztuta gabe dago" #: app/scripts/services/tools.js:773 msgid "Collection {{name}} added" @@ -159,7 +159,7 @@ msgstr "{{name}} bilduma gehitu da" msgid "Collection {{name}} not replaced" msgstr "{{name}} bilduma ez da ordeztu" -#: app/scripts/services/tools.js:889 +#: app/scripts/services/tools.js:883 msgid "Collection {{name}} removed" msgstr "{{name}} bilduma ezabatu da" @@ -167,22 +167,26 @@ msgstr "{{name}} bilduma ezabatu da" msgid "Collection {{name}} replaced" msgstr "{{name}} bilduma ordeztu da" -#: app/scripts/controllers/menu.js:444 +#: app/scripts/controllers/menu.js:442 msgid "Collection {{name}} selected" msgstr "{{name}} bilduma hautatu da" -#: app/views/menu.html:259 +#: app/views/menu.html:263 msgid "Collections" msgstr "Bildumak" -#: app/views/menu.html:305 +#: app/views/menu.html:309 msgid "Community forum" msgstr "Komunitatearen foroa" -#: app/views/menu.html:331 +#: app/views/menu.html:335 msgid "Constant" msgstr "Konstantea" +#: app/scripts/services/project.js:106 +msgid "Convert" +msgstr "" + #: app/views/menu.html:91 msgid "Copy" msgstr "Kopiatu" @@ -195,7 +199,7 @@ msgstr "Ebaki" msgid "Datasheet" msgstr "Datu-fitxa" -#: app/views/menu.html:189 +#: app/views/menu.html:190 msgid "Default" msgstr "Lehenetsia" @@ -207,23 +211,19 @@ msgstr "" "Toolchain lehenetsia ez da aurkitu. Hortaz, deskargatu egingo da. Eragiketak " "Interneteko sarbidea behar du, jarraitu nahi al duzu?" -#: app/scripts/services/utils.js:529 +#: app/scripts/services/utils.js:534 msgid "Description" msgstr "Azalpena" -#: app/views/menu.html:126 app/views/menu.html:252 +#: app/views/menu.html:126 app/views/menu.html:256 msgid "Disable" msgstr "Desgaitu" -#: app/scripts/controllers/menu.js:241 +#: app/scripts/controllers/menu.js:237 msgid "Do you want to close the application?" msgstr "Aplikazioa itxi nahi al duzu?" -#: app/scripts/services/project.js:106 -msgid "Do you want to convert it?" -msgstr "Bihurtu nahi al duzu?" - -#: app/scripts/controllers/menu.js:528 +#: app/scripts/controllers/menu.js:523 msgid "Do you want to remove the {{name}} collection?" msgstr "{{name}} bilduma ezabatu nahi al duzu?" @@ -231,11 +231,11 @@ msgstr "{{name}} bilduma ezabatu nahi al duzu?" msgid "Do you want to replace it?" msgstr "Ordeztu nahi al duzu?" -#: app/views/menu.html:298 +#: app/views/menu.html:302 msgid "Documentation" msgstr "Dokumentazioa" -#: app/views/menu.html:243 +#: app/views/menu.html:247 msgid "Drivers" msgstr "Driverrak" @@ -257,13 +257,13 @@ msgstr "Blokearen ezaugarriak bikoiztu dira" #: app/views/menu.html:78 msgid "Edit" -msgstr "Editatu" +msgstr "Aldatu" #: app/scripts/services/tools.js:748 msgid "Edit the collection name" -msgstr "" +msgstr "Bildumaren izena aldatu" -#: app/views/menu.html:121 app/views/menu.html:247 +#: app/views/menu.html:121 app/views/menu.html:251 msgid "Enable" msgstr "Onartu" @@ -295,7 +295,7 @@ msgstr "Irteerako portuak sar itzazu" msgid "Enter the parameters" msgstr "Parametroak sar itzazu" -#: app/scripts/controllers/menu.js:328 +#: app/scripts/controllers/menu.js:324 msgid "Enter the remote hostname user@host (experimental)" msgstr "" "Urrutiko ostalariaren izena sar ezazu erabiltzailea@host (esperimentala)" @@ -304,13 +304,13 @@ msgstr "" msgid "Error: default toolchain not found in '{{dir}}'" msgstr "Errorea: Toolchain lehenetsia ez da '{{dir}}'-en aurkitu" -#: app/scripts/services/utils.js:670 +#: app/scripts/services/utils.js:675 msgid "Error: {{error}}" msgstr "Errorea: {{error}}" #: app/scripts/services/tools.js:336 msgid "Errors detected in the code" -msgstr "" +msgstr "Kodean erroreak aurkitu dira" #: app/views/menu.html:39 msgid "Examples" @@ -349,7 +349,7 @@ msgstr "FPGA pina" msgid "File" msgstr "Fitxategia" -#: app/scripts/services/project.js:425 +#: app/scripts/services/project.js:438 msgid "" "File {{file}} already exists in the project path. Do you want to replace it?" msgstr "" @@ -360,7 +360,7 @@ msgstr "" msgid "File {{file}} does not exist" msgstr "Ez dago {{file}} izeneko fitxategirik" -#: app/scripts/services/project.js:459 +#: app/scripts/services/project.js:472 msgid "File {{file}} imported" msgstr "{{file}} fitxategia inportatu da" @@ -372,7 +372,7 @@ msgstr "Edukia doitu" msgid "French" msgstr "Frantsesa" -#: app/scripts/controllers/menu.js:220 +#: app/scripts/controllers/menu.js:216 msgid "GTKWave exported" msgstr "GTKWave-a esportatu da" @@ -380,27 +380,27 @@ msgstr "GTKWave-a esportatu da" msgid "Galician" msgstr "Galegoa" -#: app/views/menu.html:288 +#: app/views/menu.html:292 msgid "Help" msgstr "Laguntza" -#: app/scripts/services/utils.js:543 +#: app/scripts/services/utils.js:548 msgid "Image" msgstr "Irudia" -#: app/scripts/controllers/menu.js:688 +#: app/scripts/controllers/menu.js:683 msgid "Image {{name}} saved" msgstr "{{name}} izeneko irudia gorde da" -#: app/views/menu.html:337 +#: app/views/menu.html:341 msgid "Information" msgstr "Informazioa" -#: app/views/menu.html:325 +#: app/views/menu.html:329 msgid "Input" msgstr "Sarrera" -#: app/views/menu.html:220 +#: app/views/menu.html:224 msgid "Install" msgstr "Instalatu" @@ -454,12 +454,16 @@ msgstr "Sarrerako konexio anitzak baliogabeak" #: app/scripts/services/drivers.js:190 msgid "It is recommended to use USB 2.0 ports" -msgstr "" +msgstr "USB 2.0 atakak erabiltzea gomendatzen da" #: app/views/menu.html:134 msgid "Language" msgstr "Hizkuntza" +#: app/scripts/services/project.js:105 +msgid "Load" +msgstr "" + #: app/scripts/services/blocks.js:186 app/scripts/services/blocks.js:864 msgid "Local parameter" msgstr "Parametro lokala" @@ -468,7 +472,11 @@ msgstr "Parametro lokala" msgid "Make virtual env..." msgstr "Env birtuala sortu..." -#: app/scripts/services/utils.js:527 +#: app/scripts/services/utils.js:755 +msgid "Maximum bus size: 96 bits" +msgstr "" + +#: app/scripts/services/utils.js:532 msgid "Name" msgstr "Izena" @@ -480,15 +488,15 @@ msgstr "Berria" msgid "New project {{name}} created" msgstr "{{name}} proiektua sortu da" -#: app/scripts/controllers/menu.js:546 +#: app/scripts/controllers/menu.js:541 msgid "No collections stored" msgstr "Ez dago gordeta bildumarik" -#: app/scripts/controllers/main.js:15 +#: app/scripts/controllers/main.js:15 app/scripts/services/project.js:143 msgid "OK" msgstr "Ok" -#: app/scripts/services/project.js:364 app/scripts/services/project.js:99 +#: app/scripts/services/project.js:377 app/scripts/services/project.js:99 msgid "Old project format {{version}}" msgstr "{{version}} formatu zaharra duen proiektua" @@ -496,19 +504,19 @@ msgstr "{{version}} formatu zaharra duen proiektua" msgid "Open" msgstr "Ireki" -#: app/scripts/services/utils.js:550 +#: app/scripts/services/utils.js:555 msgid "Open SVG" msgstr "SVGa ireki" -#: app/scripts/services/project.js:462 +#: app/scripts/services/project.js:475 msgid "Original file {{file}} does not exist" msgstr "Jatorrizko {{file}} fitxategia ez dago" -#: app/views/menu.html:328 +#: app/views/menu.html:332 msgid "Output" msgstr "Irteera" -#: app/scripts/controllers/menu.js:202 +#: app/scripts/controllers/menu.js:198 msgid "PCF file exported" msgstr "PCF fitxategia esportatu da" @@ -516,9 +524,9 @@ msgstr "PCF fitxategia esportatu da" msgid "Paste" msgstr "Itsatsi" -#: app/scripts/services/utils.js:872 +#: app/scripts/services/utils.js:884 msgid "Please run: {{cmd}}" -msgstr "" +msgstr "Mesedez {{cmd}} exekutatu" #: app/views/menu.html:108 msgid "Preferences" @@ -528,11 +536,11 @@ msgstr "Lehentasunak" msgid "Project information" msgstr "Proiektuaren informazioa" -#: app/scripts/services/project.js:125 +#: app/scripts/services/project.js:131 msgid "Project {{name}} loaded" msgstr "{{name}} proiektua kargatu da" -#: app/scripts/services/project.js:334 +#: app/scripts/services/project.js:346 msgid "Project {{name}} saved" msgstr "{{name}} proiektua gorde da" @@ -544,7 +552,7 @@ msgstr "Python 2.7 behar da" msgid "Quit" msgstr "Utzi" -#: app/scripts/services/blocks.js:946 app/views/design.html:5 +#: app/scripts/services/blocks.js:948 app/views/design.html:5 msgid "Read only" msgstr "Irakurtzeko soilik" @@ -560,19 +568,19 @@ msgstr "{{name}} urrutiko ostalaria ez dago konektatua" msgid "Remote hostname" msgstr "Urrutiko ostalariaren izena" -#: app/views/menu.html:228 app/views/menu.html:267 +#: app/views/menu.html:232 app/views/menu.html:271 msgid "Remove" msgstr "Ezabatu" -#: app/views/menu.html:279 +#: app/views/menu.html:283 msgid "Remove all" msgstr "Dena ezabatu" -#: app/scripts/services/utils.js:552 +#: app/scripts/services/utils.js:557 msgid "Reset SVG" msgstr "SVGa berrezarri" -#: app/views/menu.html:233 +#: app/views/menu.html:237 msgid "Reset default" msgstr "Jatorrizkoa berrezarri" @@ -584,7 +592,7 @@ msgstr "Bista berrezarri" msgid "Save" msgstr "Gorde" -#: app/scripts/services/utils.js:551 +#: app/scripts/services/utils.js:556 msgid "Save SVG" msgstr "SVGa gorde" @@ -604,7 +612,7 @@ msgstr "Dena hautatu" msgid "Show clock" msgstr "Ordularia erakutsi" -#: app/views/menu.html:301 +#: app/views/menu.html:305 msgid "Source code" msgstr "Iturburu kodea" @@ -620,7 +628,7 @@ msgstr "Urrutiko fitxategiak sinkronizatu..." msgid "Testbench" msgstr "Testbench " -#: app/scripts/controllers/menu.js:211 +#: app/scripts/controllers/menu.js:207 msgid "Testbench exported" msgstr "Testbench-a esportatu da" @@ -628,7 +636,7 @@ msgstr "Testbench-a esportatu da" msgid "The collection {{name}} already exists." msgstr "{{name}} bilduma badago" -#: app/scripts/controllers/menu.js:465 +#: app/scripts/controllers/menu.js:463 msgid "" "The current FPGA I/O configuration will be lost. Do you want to change to " "{{name}} board?" @@ -652,7 +660,7 @@ msgstr "" "Toolchain-a eguneratuko da. Operazio horrek Interneteko sarbidea behar du. " "Jarraitu nahi al duzu?" -#: app/scripts/services/project.js:387 +#: app/scripts/services/project.js:400 msgid "" "This import operation requires a project path. You need to save the current " "project. Do you want to continue?" @@ -660,11 +668,11 @@ msgstr "" "Inportazio operazioak proiektu-bidea behar du. Uneko proiektua gorde " "beharko duzu. Jarraitu nahi al duzu?" -#: app/scripts/services/project.js:105 +#: app/scripts/services/project.js:109 msgid "This project is designed for the {{name}} board." msgstr "Proiektua {{name}} txartelarentzat diseinatu da." -#: app/views/menu.html:216 +#: app/views/menu.html:220 msgid "Toolchain" msgstr "Toolchain" @@ -685,7 +693,7 @@ msgstr "Toolchain-a ez da instalatu. Mesedez, toolchaina instala ezazu" msgid "Toolchain removed" msgstr "Toolchain-a ezabatu da" -#: app/views/menu.html:203 +#: app/views/menu.html:207 msgid "Tools" msgstr "Tresnak" @@ -697,11 +705,11 @@ msgstr "Desegin" msgid "Unknown board" msgstr "Txartel ezezaguna" -#: app/scripts/app.js:37 +#: app/scripts/app.js:44 msgid "Untitled" msgstr "Izenik gabe" -#: app/views/menu.html:223 +#: app/views/menu.html:227 msgid "Update" msgstr "Eguneratu" @@ -710,19 +718,19 @@ msgstr "Eguneratu" msgid "Update the block name" msgstr "Blokearen izena egunera ezazu" -#: app/views/menu.html:212 +#: app/views/menu.html:216 msgid "Upload" msgstr "Kargatu" -#: app/views/menu.html:206 +#: app/views/menu.html:210 msgid "Verify" msgstr "Egiaztatu" -#: app/scripts/controllers/menu.js:193 +#: app/scripts/controllers/menu.js:189 msgid "Verilog code exported" msgstr "Verilog kodea esportatu da" -#: app/scripts/services/utils.js:528 app/views/menu.html:294 +#: app/scripts/services/utils.js:533 app/views/menu.html:298 msgid "Version" msgstr "Bertsioa" @@ -730,7 +738,7 @@ msgstr "Bertsioa" msgid "View" msgstr "Ikusi" -#: app/views/menu.html:291 +#: app/views/menu.html:295 msgid "View license" msgstr "Lizentzia ikusi" @@ -752,7 +760,7 @@ msgstr "Parametroaren formatua okerra da: {{name}}" msgid "Wrong port name {{name}}" msgstr "Portuaren izena okerra da: {{name}}" -#: app/scripts/services/project.js:133 +#: app/scripts/services/project.js:139 msgid "Wrong project format: {{name}}" msgstr "Proiektuaren formatua okerra da: {{name}}" @@ -760,7 +768,11 @@ msgstr "Proiektuaren formatua okerra da: {{name}}" msgid "Wrong remote hostname {{name}}" msgstr "Urrutiko ostalariaren {{name}} izena okerra da" -#: app/scripts/controllers/menu.js:242 +#: app/scripts/services/project.js:110 +msgid "You can load it as it is or convert it for the {{name}} board." +msgstr "" + +#: app/scripts/controllers/menu.js:238 msgid "Your changes will be lost if you don’t save them" msgstr "Aldaketak galduko dituzu gordetzen ez badituzu" @@ -798,22 +810,25 @@ msgstr "Karga hasi ..." msgid "start_verify" msgstr "Egiaztapena hasi ..." -#: app/scripts/services/drivers.js:103 app/scripts/services/utils.js:847 +#: app/scripts/services/drivers.js:103 app/scripts/services/utils.js:859 msgid "{{app}} is required." -msgstr "" +msgstr "{{app}} behar da" -#: app/scripts/controllers/menu.js:398 +#: app/scripts/controllers/menu.js:396 msgid "{{board}} datasheet not defined" msgstr "{{board}} ez zehaztua" -#: app/scripts/controllers/menu.js:388 +#: app/scripts/controllers/menu.js:386 msgid "{{board}} pinout not defined" msgstr "{{board}} pinout ez zehaztua" -#: app/scripts/controllers/menu.js:417 +#: app/scripts/controllers/menu.js:415 msgid "{{board}} rules not defined" msgstr "{{board}} txartelaren arauak ez daude definituta" +#~ msgid "Do you want to convert it?" +#~ msgstr "Bihurtu nahi al duzu?" + #~ msgid "Homebrew is required" #~ msgstr "Homebrew-a behar da" diff --git a/app/resources/locale/fr_FR/fr_FR.po b/app/resources/locale/fr_FR/fr_FR.po index f564e39c7..fa3fcb6a9 100644 --- a/app/resources/locale/fr_FR/fr_FR.po +++ b/app/resources/locale/fr_FR/fr_FR.po @@ -9,7 +9,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.8.7.1\n" +"X-Generator: Poedit 2.0.2\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #: app/scripts/services/drivers.js:200 app/scripts/services/drivers.js:81 @@ -35,15 +35,15 @@ msgstr "" "périphérique USB FPGA
  • Sélectionner la carte interface et " "désinstaller le pilote
  • " -#: app/views/menu.html:309 +#: app/views/menu.html:313 msgid "About Icestudio" msgstr "À propos d'Icestudio" -#: app/views/menu.html:263 +#: app/views/menu.html:267 msgid "Add" msgstr "Ajouter" -#: app/scripts/controllers/menu.js:516 +#: app/scripts/controllers/menu.js:511 msgid "Add a block to start" msgstr "Ajouter un bloc pour commencer" @@ -51,20 +51,20 @@ msgstr "Ajouter un bloc pour commencer" msgid "Add as block" msgstr "Ajouter un bloc" -#: app/scripts/services/tools.js:895 +#: app/scripts/services/tools.js:889 msgid "All collections removed" msgstr "Toutes les collections ont été supprimées" -#: app/scripts/controllers/menu.js:538 +#: app/scripts/controllers/menu.js:533 msgid "All stored collections will be lost. Do you want to continue?" msgstr "" "Toutes les collections enregistrées seront perdues. Voulez-vous continuer ?" -#: app/scripts/services/utils.js:530 +#: app/scripts/services/utils.js:535 msgid "Author" msgstr "Auteur" -#: app/views/menu.html:320 +#: app/views/menu.html:324 msgid "Basic" msgstr "Basique" @@ -74,12 +74,12 @@ msgstr "Basque" #: app/scripts/services/blocks.js:755 app/scripts/services/blocks.js:776 #: app/scripts/services/blocks.js:831 app/scripts/services/blocks.js:850 -#: app/scripts/services/blocks.js:885 app/scripts/services/blocks.js:926 -#: app/scripts/services/blocks.js:960 +#: app/scripts/services/blocks.js:885 app/scripts/services/blocks.js:928 +#: app/scripts/services/blocks.js:962 msgid "Block updated" msgstr "Bloc mis à jour" -#: app/scripts/services/project.js:413 +#: app/scripts/services/project.js:426 msgid "Block {{name}} imported" msgstr "Bloc {{name}} importé" @@ -95,11 +95,11 @@ msgstr "Carte" msgid "Board rules" msgstr "Règles de la carte" -#: app/scripts/controllers/menu.js:341 +#: app/scripts/controllers/menu.js:337 msgid "Board rules disabled" msgstr "Règles de la carte désactivées" -#: app/scripts/controllers/menu.js:336 +#: app/scripts/controllers/menu.js:332 msgid "Board rules enabled" msgstr "Règles de la carte activées" @@ -107,15 +107,15 @@ msgstr "Règles de la carte activées" msgid "Board {{name}} not detected" msgstr "Carte {{name}} non détectée" -#: app/scripts/controllers/menu.js:477 +#: app/scripts/controllers/menu.js:476 msgid "Board {{name}} selected" msgstr "Carte {{name}} séléctionnée" -#: app/views/menu.html:209 +#: app/views/menu.html:213 msgid "Build" msgstr "Construire" -#: app/scripts/controllers/main.js:16 +#: app/scripts/controllers/main.js:16 app/scripts/services/project.js:144 msgid "Cancel" msgstr "Annuler" @@ -133,9 +133,9 @@ msgstr "Vérifier Python..." #: app/scripts/services/drivers.js:104 msgid "Click here to install it" -msgstr "" +msgstr "Cliquer ici pour l'installer" -#: app/views/menu.html:334 +#: app/views/menu.html:338 msgid "Code" msgstr "Code" @@ -145,11 +145,11 @@ msgstr "Collection" #: app/views/menu.html:165 msgid "Collection info" -msgstr "" +msgstr "Informations sur la collection" -#: app/scripts/controllers/menu.js:436 +#: app/scripts/controllers/menu.js:434 msgid "Collection {{collection}} info not defined" -msgstr "" +msgstr "Informations sur la collection {{name}} non définies" #: app/scripts/services/tools.js:773 msgid "Collection {{name}} added" @@ -159,7 +159,7 @@ msgstr "Collection {{name}} ajoutée" msgid "Collection {{name}} not replaced" msgstr "Collection {{name}} non remplacée" -#: app/scripts/services/tools.js:889 +#: app/scripts/services/tools.js:883 msgid "Collection {{name}} removed" msgstr "Collection {{name}} supprimée" @@ -167,22 +167,26 @@ msgstr "Collection {{name}} supprimée" msgid "Collection {{name}} replaced" msgstr "Collection {{name}} remplacée" -#: app/scripts/controllers/menu.js:444 +#: app/scripts/controllers/menu.js:442 msgid "Collection {{name}} selected" msgstr "Collection {{name}} sélectionée" -#: app/views/menu.html:259 +#: app/views/menu.html:263 msgid "Collections" msgstr "Collections" -#: app/views/menu.html:305 +#: app/views/menu.html:309 msgid "Community forum" msgstr "Forum communautaire" -#: app/views/menu.html:331 +#: app/views/menu.html:335 msgid "Constant" msgstr "Constante" +#: app/scripts/services/project.js:106 +msgid "Convert" +msgstr "Convertir" + #: app/views/menu.html:91 msgid "Copy" msgstr "Copier" @@ -195,7 +199,7 @@ msgstr "Couper" msgid "Datasheet" msgstr "Documentation" -#: app/views/menu.html:189 +#: app/views/menu.html:190 msgid "Default" msgstr "Défaut" @@ -208,23 +212,19 @@ msgstr "" "téléchargée. Cette opération nécessite une connexion Internet. Voulez-vous " "continuer ?" -#: app/scripts/services/utils.js:529 +#: app/scripts/services/utils.js:534 msgid "Description" msgstr "Description" -#: app/views/menu.html:126 app/views/menu.html:252 +#: app/views/menu.html:126 app/views/menu.html:256 msgid "Disable" msgstr "Désactiver" -#: app/scripts/controllers/menu.js:241 +#: app/scripts/controllers/menu.js:237 msgid "Do you want to close the application?" msgstr "Voulez-vous fermer l'application ?" -#: app/scripts/services/project.js:106 -msgid "Do you want to convert it?" -msgstr "Voulez-vous le convertir ?" - -#: app/scripts/controllers/menu.js:528 +#: app/scripts/controllers/menu.js:523 msgid "Do you want to remove the {{name}} collection?" msgstr "Voulez-vous supprimer la collection {{name}} ?" @@ -232,11 +232,11 @@ msgstr "Voulez-vous supprimer la collection {{name}} ?" msgid "Do you want to replace it?" msgstr "Voulez-vous le remplacer ?" -#: app/views/menu.html:298 +#: app/views/menu.html:302 msgid "Documentation" msgstr "Documentation" -#: app/views/menu.html:243 +#: app/views/menu.html:247 msgid "Drivers" msgstr "Pilote" @@ -262,9 +262,9 @@ msgstr "Édition" #: app/scripts/services/tools.js:748 msgid "Edit the collection name" -msgstr "" +msgstr "Éditer le nom de la collection" -#: app/views/menu.html:121 app/views/menu.html:247 +#: app/views/menu.html:121 app/views/menu.html:251 msgid "Enable" msgstr "Activer" @@ -296,7 +296,7 @@ msgstr "Entrer les ports de sortie" msgid "Enter the parameters" msgstr "Entrer les paramètres" -#: app/scripts/controllers/menu.js:328 +#: app/scripts/controllers/menu.js:324 msgid "Enter the remote hostname user@host (experimental)" msgstr "Entrer le nom d'hôte distant user@host (expérimental)" @@ -304,13 +304,13 @@ msgstr "Entrer le nom d'hôte distant user@host (expérimental)" msgid "Error: default toolchain not found in '{{dir}}'" msgstr "Erreur: La toolchain par défaut n'a pas été trouvée dans '{{dir}}'" -#: app/scripts/services/utils.js:670 +#: app/scripts/services/utils.js:675 msgid "Error: {{error}}" msgstr "Erreur : {{error}}" #: app/scripts/services/tools.js:336 msgid "Errors detected in the code" -msgstr "" +msgstr "Erreurs détectées dans le code" #: app/views/menu.html:39 msgid "Examples" @@ -349,7 +349,7 @@ msgstr "Pin FPGA" msgid "File" msgstr "Fichier" -#: app/scripts/services/project.js:425 +#: app/scripts/services/project.js:438 msgid "" "File {{file}} already exists in the project path. Do you want to replace it?" msgstr "" @@ -360,7 +360,7 @@ msgstr "" msgid "File {{file}} does not exist" msgstr "Le fichier {{file}} n'existe pas" -#: app/scripts/services/project.js:459 +#: app/scripts/services/project.js:472 msgid "File {{file}} imported" msgstr "Fichier {{file}} importé" @@ -372,7 +372,7 @@ msgstr "Adapter le contenu" msgid "French" msgstr "Français" -#: app/scripts/controllers/menu.js:220 +#: app/scripts/controllers/menu.js:216 msgid "GTKWave exported" msgstr "GTKWave exporté" @@ -380,27 +380,27 @@ msgstr "GTKWave exporté" msgid "Galician" msgstr "Galicien" -#: app/views/menu.html:288 +#: app/views/menu.html:292 msgid "Help" msgstr "Aide" -#: app/scripts/services/utils.js:543 +#: app/scripts/services/utils.js:548 msgid "Image" msgstr "Image" -#: app/scripts/controllers/menu.js:688 +#: app/scripts/controllers/menu.js:683 msgid "Image {{name}} saved" msgstr "Image {{name}} sauvegardée" -#: app/views/menu.html:337 +#: app/views/menu.html:341 msgid "Information" msgstr "Information" -#: app/views/menu.html:325 +#: app/views/menu.html:329 msgid "Input" msgstr "Entrée" -#: app/views/menu.html:220 +#: app/views/menu.html:224 msgid "Install" msgstr "Installation" @@ -453,12 +453,16 @@ msgstr "Connexions de multiples entrées invalides" #: app/scripts/services/drivers.js:190 msgid "It is recommended to use USB 2.0 ports" -msgstr "" +msgstr "Des ports USB 2.0 sont recommandés" #: app/views/menu.html:134 msgid "Language" msgstr "Langue" +#: app/scripts/services/project.js:105 +msgid "Load" +msgstr "Charger" + #: app/scripts/services/blocks.js:186 app/scripts/services/blocks.js:864 msgid "Local parameter" msgstr "Paramètre local" @@ -467,7 +471,11 @@ msgstr "Paramètre local" msgid "Make virtual env..." msgstr "Créer l'environnement virtuel..." -#: app/scripts/services/utils.js:527 +#: app/scripts/services/utils.js:755 +msgid "Maximum bus size: 96 bits" +msgstr "Taille maximale du bus : 96 bits" + +#: app/scripts/services/utils.js:532 msgid "Name" msgstr "Nom" @@ -479,15 +487,15 @@ msgstr "Nouveau" msgid "New project {{name}} created" msgstr "Nouveau projet {{name}} créé" -#: app/scripts/controllers/menu.js:546 +#: app/scripts/controllers/menu.js:541 msgid "No collections stored" msgstr "Pas de collections sauvegardées" -#: app/scripts/controllers/main.js:15 +#: app/scripts/controllers/main.js:15 app/scripts/services/project.js:143 msgid "OK" msgstr "OK" -#: app/scripts/services/project.js:364 app/scripts/services/project.js:99 +#: app/scripts/services/project.js:377 app/scripts/services/project.js:99 msgid "Old project format {{version}}" msgstr "Vieux format de projet {{version}}" @@ -495,19 +503,19 @@ msgstr "Vieux format de projet {{version}}" msgid "Open" msgstr "Ouvrir" -#: app/scripts/services/utils.js:550 +#: app/scripts/services/utils.js:555 msgid "Open SVG" msgstr "Ouvrir SVG" -#: app/scripts/services/project.js:462 +#: app/scripts/services/project.js:475 msgid "Original file {{file}} does not exist" msgstr "Le fichier original {{file}} n'existe pas" -#: app/views/menu.html:328 +#: app/views/menu.html:332 msgid "Output" msgstr "Sortie" -#: app/scripts/controllers/menu.js:202 +#: app/scripts/controllers/menu.js:198 msgid "PCF file exported" msgstr "Fichier PCF exporté" @@ -515,9 +523,9 @@ msgstr "Fichier PCF exporté" msgid "Paste" msgstr "Coller" -#: app/scripts/services/utils.js:872 +#: app/scripts/services/utils.js:884 msgid "Please run: {{cmd}}" -msgstr "" +msgstr "Veuillez exécuter : {{cmd}}" #: app/views/menu.html:108 msgid "Preferences" @@ -527,11 +535,11 @@ msgstr "Préférences" msgid "Project information" msgstr "Informations du projet" -#: app/scripts/services/project.js:125 +#: app/scripts/services/project.js:131 msgid "Project {{name}} loaded" msgstr "Projet {{name}} chargé" -#: app/scripts/services/project.js:334 +#: app/scripts/services/project.js:346 msgid "Project {{name}} saved" msgstr "Projet {{name}} sauvegardé" @@ -543,7 +551,7 @@ msgstr "Python 2.7 est requis" msgid "Quit" msgstr "Quitter" -#: app/scripts/services/blocks.js:946 app/views/design.html:5 +#: app/scripts/services/blocks.js:948 app/views/design.html:5 msgid "Read only" msgstr "Lecture seule" @@ -559,19 +567,19 @@ msgstr "Hôte distant {{name}} non connecté" msgid "Remote hostname" msgstr "Nom d'hôte distant" -#: app/views/menu.html:228 app/views/menu.html:267 +#: app/views/menu.html:232 app/views/menu.html:271 msgid "Remove" msgstr "Supprimer" -#: app/views/menu.html:279 +#: app/views/menu.html:283 msgid "Remove all" msgstr "Supprimer tout" -#: app/scripts/services/utils.js:552 +#: app/scripts/services/utils.js:557 msgid "Reset SVG" msgstr "Réinitialiser le SVG" -#: app/views/menu.html:233 +#: app/views/menu.html:237 msgid "Reset default" msgstr "Réinitialiser avec les paramètres par défaut" @@ -583,7 +591,7 @@ msgstr "Réinitialiser la vue" msgid "Save" msgstr "Sauvegarder" -#: app/scripts/services/utils.js:551 +#: app/scripts/services/utils.js:556 msgid "Save SVG" msgstr "Sauvegarder le SVG" @@ -603,7 +611,7 @@ msgstr "Sélectionner tout" msgid "Show clock" msgstr "Montrer l'horloge" -#: app/views/menu.html:301 +#: app/views/menu.html:305 msgid "Source code" msgstr "Code source" @@ -619,7 +627,7 @@ msgstr "Synchroniser les fichiers distants ..." msgid "Testbench" msgstr "Testbench" -#: app/scripts/controllers/menu.js:211 +#: app/scripts/controllers/menu.js:207 msgid "Testbench exported" msgstr "Testbench exporté" @@ -627,7 +635,7 @@ msgstr "Testbench exporté" msgid "The collection {{name}} already exists." msgstr "La collection {{name}} existe déjà." -#: app/scripts/controllers/menu.js:465 +#: app/scripts/controllers/menu.js:463 msgid "" "The current FPGA I/O configuration will be lost. Do you want to change to " "{{name}} board?" @@ -651,7 +659,7 @@ msgstr "" "La toolchain va être mise à jour. Cette opération a besoin d'une connexion " "Internet.Voulez-vous continuer ?" -#: app/scripts/services/project.js:387 +#: app/scripts/services/project.js:400 msgid "" "This import operation requires a project path. You need to save the current " "project. Do you want to continue?" @@ -659,11 +667,11 @@ msgstr "" "Cette opération d'importation requiert un chemin de projet. Vous devez " "sauvegarder le projet actuel. Voulez vous continuer ?" -#: app/scripts/services/project.js:105 +#: app/scripts/services/project.js:109 msgid "This project is designed for the {{name}} board." msgstr "Ce projet est conçu pour la carte {{name}}" -#: app/views/menu.html:216 +#: app/views/menu.html:220 msgid "Toolchain" msgstr "Toolchain" @@ -684,7 +692,7 @@ msgstr "La toolchain n'est pas installée. Veuillez installer la toolchain" msgid "Toolchain removed" msgstr "Toolchain supprimée" -#: app/views/menu.html:203 +#: app/views/menu.html:207 msgid "Tools" msgstr "Outils" @@ -696,11 +704,11 @@ msgstr "Revenir en arrière" msgid "Unknown board" msgstr "Carte inconnue" -#: app/scripts/app.js:37 +#: app/scripts/app.js:44 msgid "Untitled" msgstr "Sans titre" -#: app/views/menu.html:223 +#: app/views/menu.html:227 msgid "Update" msgstr "Mettre à jour" @@ -709,19 +717,19 @@ msgstr "Mettre à jour" msgid "Update the block name" msgstr "Mettre le nom du bloc à jour" -#: app/views/menu.html:212 +#: app/views/menu.html:216 msgid "Upload" msgstr "Télécharger" -#: app/views/menu.html:206 +#: app/views/menu.html:210 msgid "Verify" msgstr "Vérifier" -#: app/scripts/controllers/menu.js:193 +#: app/scripts/controllers/menu.js:189 msgid "Verilog code exported" msgstr "Code Verilog exporté" -#: app/scripts/services/utils.js:528 app/views/menu.html:294 +#: app/scripts/services/utils.js:533 app/views/menu.html:298 msgid "Version" msgstr "Version" @@ -729,7 +737,7 @@ msgstr "Version" msgid "View" msgstr "Vue" -#: app/views/menu.html:291 +#: app/views/menu.html:295 msgid "View license" msgstr "Voir la licence" @@ -751,7 +759,7 @@ msgstr "Mauvais nom de paramètre {{name}}" msgid "Wrong port name {{name}}" msgstr "Mauvais nom de port {{name}}" -#: app/scripts/services/project.js:133 +#: app/scripts/services/project.js:139 msgid "Wrong project format: {{name}}" msgstr "Mauvais format de projet: {{name}}" @@ -759,7 +767,12 @@ msgstr "Mauvais format de projet: {{name}}" msgid "Wrong remote hostname {{name}}" msgstr "Mauvais nom d'hôte distant {{name}}" -#: app/scripts/controllers/menu.js:242 +#: app/scripts/services/project.js:110 +msgid "You can load it as it is or convert it for the {{name}} board." +msgstr "" +"Vous pouvez le charger tel quel ou le convertir pour la carte {{name}}." + +#: app/scripts/controllers/menu.js:238 msgid "Your changes will be lost if you don’t save them" msgstr "Vos modifications seront perdues si vous ne les sauvegardez pas" @@ -797,22 +810,25 @@ msgstr "Début du téléchargement" msgid "start_verify" msgstr "Début de la vérification" -#: app/scripts/services/drivers.js:103 app/scripts/services/utils.js:847 +#: app/scripts/services/drivers.js:103 app/scripts/services/utils.js:859 msgid "{{app}} is required." -msgstr "" +msgstr "{{app}} est requis." -#: app/scripts/controllers/menu.js:398 +#: app/scripts/controllers/menu.js:396 msgid "{{board}} datasheet not defined" msgstr "Documentation {{board}} non définie" -#: app/scripts/controllers/menu.js:388 +#: app/scripts/controllers/menu.js:386 msgid "{{board}} pinout not defined" msgstr "Pinout {{board}} non défini" -#: app/scripts/controllers/menu.js:417 +#: app/scripts/controllers/menu.js:415 msgid "{{board}} rules not defined" msgstr "Règles {{board}} non définies" +#~ msgid "Do you want to convert it?" +#~ msgstr "Voulez-vous le convertir ?" + #~ msgid "Homebrew is required" #~ msgstr "Homebrew est requis" diff --git a/app/resources/locale/gl_ES/gl_ES.po b/app/resources/locale/gl_ES/gl_ES.po index 4d19dab0d..cf4620aae 100644 --- a/app/resources/locale/gl_ES/gl_ES.po +++ b/app/resources/locale/gl_ES/gl_ES.po @@ -35,15 +35,15 @@ msgstr "" "o dispositivo USB da placa FPGA
  • Selecciona a interfaz da placa e " "desinstala o controlador
  • " -#: app/views/menu.html:309 +#: app/views/menu.html:313 msgid "About Icestudio" msgstr "Acerca de Icestudio" -#: app/views/menu.html:263 +#: app/views/menu.html:267 msgid "Add" msgstr "Engadir" -#: app/scripts/controllers/menu.js:516 +#: app/scripts/controllers/menu.js:511 msgid "Add a block to start" msgstr "Engada un bloque para comezar" @@ -51,19 +51,19 @@ msgstr "Engada un bloque para comezar" msgid "Add as block" msgstr "Engadir como bloque" -#: app/scripts/services/tools.js:895 +#: app/scripts/services/tools.js:889 msgid "All collections removed" msgstr "Elimináronse todas as coleccións" -#: app/scripts/controllers/menu.js:538 +#: app/scripts/controllers/menu.js:533 msgid "All stored collections will be lost. Do you want to continue?" msgstr "Perderanse todas as coleccións gardadas. Desexa continuar?" -#: app/scripts/services/utils.js:530 +#: app/scripts/services/utils.js:535 msgid "Author" msgstr "Autor" -#: app/views/menu.html:320 +#: app/views/menu.html:324 msgid "Basic" msgstr "Básico" @@ -73,12 +73,12 @@ msgstr "Euskera" #: app/scripts/services/blocks.js:755 app/scripts/services/blocks.js:776 #: app/scripts/services/blocks.js:831 app/scripts/services/blocks.js:850 -#: app/scripts/services/blocks.js:885 app/scripts/services/blocks.js:926 -#: app/scripts/services/blocks.js:960 +#: app/scripts/services/blocks.js:885 app/scripts/services/blocks.js:928 +#: app/scripts/services/blocks.js:962 msgid "Block updated" msgstr "Bloque actualizado" -#: app/scripts/services/project.js:413 +#: app/scripts/services/project.js:426 msgid "Block {{name}} imported" msgstr "Importouse o bloque {{name}}" @@ -94,11 +94,11 @@ msgstr "Placa" msgid "Board rules" msgstr "Regras da placa" -#: app/scripts/controllers/menu.js:341 +#: app/scripts/controllers/menu.js:337 msgid "Board rules disabled" msgstr "Deshabilitáronse as regras da placa" -#: app/scripts/controllers/menu.js:336 +#: app/scripts/controllers/menu.js:332 msgid "Board rules enabled" msgstr "Habilitáronse as regras da placa" @@ -106,15 +106,15 @@ msgstr "Habilitáronse as regras da placa" msgid "Board {{name}} not detected" msgstr "Non se detectou a placa {{name}}" -#: app/scripts/controllers/menu.js:477 +#: app/scripts/controllers/menu.js:476 msgid "Board {{name}} selected" msgstr "Seleccionouse a placa {{name}}" -#: app/views/menu.html:209 +#: app/views/menu.html:213 msgid "Build" msgstr "Sintetizar" -#: app/scripts/controllers/main.js:16 +#: app/scripts/controllers/main.js:16 app/scripts/services/project.js:144 msgid "Cancel" msgstr "Cancelar" @@ -134,7 +134,7 @@ msgstr "Comprobando Python..." msgid "Click here to install it" msgstr "" -#: app/views/menu.html:334 +#: app/views/menu.html:338 msgid "Code" msgstr "Código" @@ -146,7 +146,7 @@ msgstr "Colección" msgid "Collection info" msgstr "" -#: app/scripts/controllers/menu.js:436 +#: app/scripts/controllers/menu.js:434 msgid "Collection {{collection}} info not defined" msgstr "" @@ -158,7 +158,7 @@ msgstr "Engadiuse a coleción {{name}}" msgid "Collection {{name}} not replaced" msgstr "Non se trocou a colección {{name}}" -#: app/scripts/services/tools.js:889 +#: app/scripts/services/tools.js:883 msgid "Collection {{name}} removed" msgstr "Eliminouse a colección {{name}}" @@ -166,22 +166,26 @@ msgstr "Eliminouse a colección {{name}}" msgid "Collection {{name}} replaced" msgstr "Trocouse a colección {{name}}" -#: app/scripts/controllers/menu.js:444 +#: app/scripts/controllers/menu.js:442 msgid "Collection {{name}} selected" msgstr "Seleccionouse a colección {{name}}" -#: app/views/menu.html:259 +#: app/views/menu.html:263 msgid "Collections" msgstr "Coleccións" -#: app/views/menu.html:305 +#: app/views/menu.html:309 msgid "Community forum" msgstr "Foro da comunidade" -#: app/views/menu.html:331 +#: app/views/menu.html:335 msgid "Constant" msgstr "Constante" +#: app/scripts/services/project.js:106 +msgid "Convert" +msgstr "" + #: app/views/menu.html:91 msgid "Copy" msgstr "Copiar" @@ -194,7 +198,7 @@ msgstr "Cortar" msgid "Datasheet" msgstr "Folla de datos" -#: app/views/menu.html:189 +#: app/views/menu.html:190 msgid "Default" msgstr "Predeterminado" @@ -206,23 +210,19 @@ msgstr "" "Non se atopou a cadea de ferramentas predeterminada, e procederase á sua " "descarga. Esta operación require dunha conexión a Internet. Desexa continuar?" -#: app/scripts/services/utils.js:529 +#: app/scripts/services/utils.js:534 msgid "Description" msgstr "Descripción" -#: app/views/menu.html:126 app/views/menu.html:252 +#: app/views/menu.html:126 app/views/menu.html:256 msgid "Disable" msgstr "Deshabilitar" -#: app/scripts/controllers/menu.js:241 +#: app/scripts/controllers/menu.js:237 msgid "Do you want to close the application?" msgstr "Desexa pechar a aplicación?" -#: app/scripts/services/project.js:106 -msgid "Do you want to convert it?" -msgstr "Desexa convertelo?" - -#: app/scripts/controllers/menu.js:528 +#: app/scripts/controllers/menu.js:523 msgid "Do you want to remove the {{name}} collection?" msgstr "Desexa eliminar a colección {{name}}?" @@ -230,11 +230,11 @@ msgstr "Desexa eliminar a colección {{name}}?" msgid "Do you want to replace it?" msgstr "Desexa trocalo?" -#: app/views/menu.html:298 +#: app/views/menu.html:302 msgid "Documentation" msgstr "Documentación" -#: app/views/menu.html:243 +#: app/views/menu.html:247 msgid "Drivers" msgstr "Controladores" @@ -262,7 +262,7 @@ msgstr "Editar" msgid "Edit the collection name" msgstr "" -#: app/views/menu.html:121 app/views/menu.html:247 +#: app/views/menu.html:121 app/views/menu.html:251 msgid "Enable" msgstr "Habilitar" @@ -294,7 +294,7 @@ msgstr "Introduza os portos de saída" msgid "Enter the parameters" msgstr "Introduza os parámetros" -#: app/scripts/controllers/menu.js:328 +#: app/scripts/controllers/menu.js:324 msgid "Enter the remote hostname user@host (experimental)" msgstr "Introduza o nome do equipo remoto: usuario@equipo (experimental)" @@ -302,7 +302,7 @@ msgstr "Introduza o nome do equipo remoto: usuario@equipo (experimental)" msgid "Error: default toolchain not found in '{{dir}}'" msgstr "Erro: non se atopou a cadea de ferramentas predeterminada en '{{dir}}'" -#: app/scripts/services/utils.js:670 +#: app/scripts/services/utils.js:675 msgid "Error: {{error}}" msgstr "Erro: {{error}}" @@ -347,7 +347,7 @@ msgstr "Pin da FPGA" msgid "File" msgstr "Ficheiro" -#: app/scripts/services/project.js:425 +#: app/scripts/services/project.js:438 msgid "" "File {{file}} already exists in the project path. Do you want to replace it?" msgstr "Xa existe o ficheiro {{file}} no cartafol do proxecto. Desexa trocalo?" @@ -356,7 +356,7 @@ msgstr "Xa existe o ficheiro {{file}} no cartafol do proxecto. Desexa trocalo?" msgid "File {{file}} does not exist" msgstr "O ficheiro {{file}} non existe" -#: app/scripts/services/project.js:459 +#: app/scripts/services/project.js:472 msgid "File {{file}} imported" msgstr "Importouse o ficheiro {{file}}" @@ -368,7 +368,7 @@ msgstr "Axustar contido" msgid "French" msgstr "Francés" -#: app/scripts/controllers/menu.js:220 +#: app/scripts/controllers/menu.js:216 msgid "GTKWave exported" msgstr "Exportouse o ficheiro para GTKWave" @@ -376,27 +376,27 @@ msgstr "Exportouse o ficheiro para GTKWave" msgid "Galician" msgstr "Galego" -#: app/views/menu.html:288 +#: app/views/menu.html:292 msgid "Help" msgstr "Axuda" -#: app/scripts/services/utils.js:543 +#: app/scripts/services/utils.js:548 msgid "Image" msgstr "Imaxe" -#: app/scripts/controllers/menu.js:688 +#: app/scripts/controllers/menu.js:683 msgid "Image {{name}} saved" msgstr "Gardouse a imaxe {{name}}" -#: app/views/menu.html:337 +#: app/views/menu.html:341 msgid "Information" msgstr "Información" -#: app/views/menu.html:325 +#: app/views/menu.html:329 msgid "Input" msgstr "Entrada" -#: app/views/menu.html:220 +#: app/views/menu.html:224 msgid "Install" msgstr "Instalar" @@ -457,6 +457,10 @@ msgstr "" msgid "Language" msgstr "Idioma" +#: app/scripts/services/project.js:105 +msgid "Load" +msgstr "" + #: app/scripts/services/blocks.js:186 app/scripts/services/blocks.js:864 msgid "Local parameter" msgstr "Parámetro local" @@ -465,7 +469,11 @@ msgstr "Parámetro local" msgid "Make virtual env..." msgstr "Creando o contorno virtual..." -#: app/scripts/services/utils.js:527 +#: app/scripts/services/utils.js:755 +msgid "Maximum bus size: 96 bits" +msgstr "" + +#: app/scripts/services/utils.js:532 msgid "Name" msgstr "Nome" @@ -477,15 +485,15 @@ msgstr "Novo" msgid "New project {{name}} created" msgstr "Novo proxecto {{name}} creado" -#: app/scripts/controllers/menu.js:546 +#: app/scripts/controllers/menu.js:541 msgid "No collections stored" msgstr "Non hay coleccións gardadas" -#: app/scripts/controllers/main.js:15 +#: app/scripts/controllers/main.js:15 app/scripts/services/project.js:143 msgid "OK" msgstr "Aceptar" -#: app/scripts/services/project.js:364 app/scripts/services/project.js:99 +#: app/scripts/services/project.js:377 app/scripts/services/project.js:99 msgid "Old project format {{version}}" msgstr "O formato {{version}} do proxecto é antigo" @@ -493,19 +501,19 @@ msgstr "O formato {{version}} do proxecto é antigo" msgid "Open" msgstr "Abrir" -#: app/scripts/services/utils.js:550 +#: app/scripts/services/utils.js:555 msgid "Open SVG" msgstr "Abrir SVG" -#: app/scripts/services/project.js:462 +#: app/scripts/services/project.js:475 msgid "Original file {{file}} does not exist" msgstr "Non existe o ficheiro {{name}} orixinal" -#: app/views/menu.html:328 +#: app/views/menu.html:332 msgid "Output" msgstr "Saída" -#: app/scripts/controllers/menu.js:202 +#: app/scripts/controllers/menu.js:198 msgid "PCF file exported" msgstr "Ficheiro PCF exportado" @@ -513,7 +521,7 @@ msgstr "Ficheiro PCF exportado" msgid "Paste" msgstr "Pegar" -#: app/scripts/services/utils.js:872 +#: app/scripts/services/utils.js:884 msgid "Please run: {{cmd}}" msgstr "" @@ -525,11 +533,11 @@ msgstr "Preferencias" msgid "Project information" msgstr "Información do proxecto" -#: app/scripts/services/project.js:125 +#: app/scripts/services/project.js:131 msgid "Project {{name}} loaded" msgstr "Proxecto {{name}} cargado" -#: app/scripts/services/project.js:334 +#: app/scripts/services/project.js:346 msgid "Project {{name}} saved" msgstr "Proxecto {{name}} gardado" @@ -541,7 +549,7 @@ msgstr "Requírese Python 2.7" msgid "Quit" msgstr "Saír" -#: app/scripts/services/blocks.js:946 app/views/design.html:5 +#: app/scripts/services/blocks.js:948 app/views/design.html:5 msgid "Read only" msgstr "Só lectura" @@ -557,19 +565,19 @@ msgstr "Non se puido conectar ó equipo remoto {{name}}" msgid "Remote hostname" msgstr "Nome do equipo remoto" -#: app/views/menu.html:228 app/views/menu.html:267 +#: app/views/menu.html:232 app/views/menu.html:271 msgid "Remove" msgstr "Eliminar" -#: app/views/menu.html:279 +#: app/views/menu.html:283 msgid "Remove all" msgstr "Eliminar todo" -#: app/scripts/services/utils.js:552 +#: app/scripts/services/utils.js:557 msgid "Reset SVG" msgstr "Restablecer SVG" -#: app/views/menu.html:233 +#: app/views/menu.html:237 msgid "Reset default" msgstr "Restablecer predeterminado" @@ -581,7 +589,7 @@ msgstr "Restablecer vista" msgid "Save" msgstr "Gardar" -#: app/scripts/services/utils.js:551 +#: app/scripts/services/utils.js:556 msgid "Save SVG" msgstr "Gardar SVG" @@ -601,7 +609,7 @@ msgstr "Seleccionar todo" msgid "Show clock" msgstr "Mostrar reloxo" -#: app/views/menu.html:301 +#: app/views/menu.html:305 msgid "Source code" msgstr "Código fonte" @@ -617,7 +625,7 @@ msgstr "Sincronizando ficheiros remotos..." msgid "Testbench" msgstr "Testbench" -#: app/scripts/controllers/menu.js:211 +#: app/scripts/controllers/menu.js:207 msgid "Testbench exported" msgstr "Testbench exportado" @@ -625,7 +633,7 @@ msgstr "Testbench exportado" msgid "The collection {{name}} already exists." msgstr "A colección {{name}} xa existe." -#: app/scripts/controllers/menu.js:465 +#: app/scripts/controllers/menu.js:463 msgid "" "The current FPGA I/O configuration will be lost. Do you want to change to " "{{name}} board?" @@ -651,7 +659,7 @@ msgstr "" "Vaise actualizar a cadea de ferramentas. Esta operación require dunha " "conexión a Internet. Desexa continuar?" -#: app/scripts/services/project.js:387 +#: app/scripts/services/project.js:400 msgid "" "This import operation requires a project path. You need to save the current " "project. Do you want to continue?" @@ -659,11 +667,11 @@ msgstr "" "É necesario gardar o proxecto actual xa que a operación de importación " "require dun cartafol do proxecto. Desexa continuar?" -#: app/scripts/services/project.js:105 +#: app/scripts/services/project.js:109 msgid "This project is designed for the {{name}} board." msgstr "Este proxecto está deseñado para a placa {{name}}" -#: app/views/menu.html:216 +#: app/views/menu.html:220 msgid "Toolchain" msgstr "Cadea de ferramentas" @@ -684,7 +692,7 @@ msgstr "A cadea de ferramentas non está instalada. Por favor, instálea." msgid "Toolchain removed" msgstr "Eliminouse a cadea de ferramentas" -#: app/views/menu.html:203 +#: app/views/menu.html:207 msgid "Tools" msgstr "Ferramentas" @@ -696,11 +704,11 @@ msgstr "Desfacer" msgid "Unknown board" msgstr "Placa desconocida" -#: app/scripts/app.js:37 +#: app/scripts/app.js:44 msgid "Untitled" msgstr "Sen título" -#: app/views/menu.html:223 +#: app/views/menu.html:227 msgid "Update" msgstr "Actualizar" @@ -709,19 +717,19 @@ msgstr "Actualizar" msgid "Update the block name" msgstr "Actualizar o nome do bloque" -#: app/views/menu.html:212 +#: app/views/menu.html:216 msgid "Upload" msgstr "Cargar" -#: app/views/menu.html:206 +#: app/views/menu.html:210 msgid "Verify" msgstr "Verificar" -#: app/scripts/controllers/menu.js:193 +#: app/scripts/controllers/menu.js:189 msgid "Verilog code exported" msgstr "Código Verilog exportado" -#: app/scripts/services/utils.js:528 app/views/menu.html:294 +#: app/scripts/services/utils.js:533 app/views/menu.html:298 msgid "Version" msgstr "Versión" @@ -729,7 +737,7 @@ msgstr "Versión" msgid "View" msgstr "Ver" -#: app/views/menu.html:291 +#: app/views/menu.html:295 msgid "View license" msgstr "Ver licenza" @@ -751,7 +759,7 @@ msgstr "O nome do parámetro {{name}} non é correcto" msgid "Wrong port name {{name}}" msgstr "O nome do porto {{name}} non é correcto" -#: app/scripts/services/project.js:133 +#: app/scripts/services/project.js:139 msgid "Wrong project format: {{name}}" msgstr "O formato do proxecto {{name}} non é correcto" @@ -759,7 +767,11 @@ msgstr "O formato do proxecto {{name}} non é correcto" msgid "Wrong remote hostname {{name}}" msgstr "O nome do equipo remoto {{name}} non é correcto" -#: app/scripts/controllers/menu.js:242 +#: app/scripts/services/project.js:110 +msgid "You can load it as it is or convert it for the {{name}} board." +msgstr "" + +#: app/scripts/controllers/menu.js:238 msgid "Your changes will be lost if you don’t save them" msgstr "Os cambios realizados perderanse se non se gardan" @@ -797,22 +809,25 @@ msgstr "Iniciando a carga..." msgid "start_verify" msgstr "Iniciando a verificación..." -#: app/scripts/services/drivers.js:103 app/scripts/services/utils.js:847 +#: app/scripts/services/drivers.js:103 app/scripts/services/utils.js:859 msgid "{{app}} is required." msgstr "" -#: app/scripts/controllers/menu.js:398 +#: app/scripts/controllers/menu.js:396 msgid "{{board}} datasheet not defined" msgstr "Non se definiu a folla de datos para a placa {{board}}" -#: app/scripts/controllers/menu.js:388 +#: app/scripts/controllers/menu.js:386 msgid "{{board}} pinout not defined" msgstr "Non se definiu o pinout para a placa {{board}}" -#: app/scripts/controllers/menu.js:417 +#: app/scripts/controllers/menu.js:415 msgid "{{board}} rules not defined" msgstr "Non se definiron as regras para a placa {{board}}" +#~ msgid "Do you want to convert it?" +#~ msgstr "Desexa convertelo?" + #~ msgid "Homebrew is required" #~ msgstr "Requírese Homebrew" diff --git a/app/resources/locale/template.pot b/app/resources/locale/template.pot index cff71181e..d5e7c24fd 100644 --- a/app/resources/locale/template.pot +++ b/app/resources/locale/template.pot @@ -17,15 +17,15 @@ msgstr "" msgid "

    FTDI driver uninstallation instructions

    1. Find the FPGA USB Device
    2. Select the board interface and uninstall the driver
    " msgstr "" -#: app/views/menu.html:309 +#: app/views/menu.html:313 msgid "About Icestudio" msgstr "" -#: app/views/menu.html:263 +#: app/views/menu.html:267 msgid "Add" msgstr "" -#: app/scripts/controllers/menu.js:516 +#: app/scripts/controllers/menu.js:511 msgid "Add a block to start" msgstr "" @@ -33,19 +33,19 @@ msgstr "" msgid "Add as block" msgstr "" -#: app/scripts/services/tools.js:895 +#: app/scripts/services/tools.js:889 msgid "All collections removed" msgstr "" -#: app/scripts/controllers/menu.js:538 +#: app/scripts/controllers/menu.js:533 msgid "All stored collections will be lost. Do you want to continue?" msgstr "" -#: app/scripts/services/utils.js:530 +#: app/scripts/services/utils.js:535 msgid "Author" msgstr "" -#: app/views/menu.html:320 +#: app/views/menu.html:324 msgid "Basic" msgstr "" @@ -58,12 +58,12 @@ msgstr "" #: app/scripts/services/blocks.js:831 #: app/scripts/services/blocks.js:850 #: app/scripts/services/blocks.js:885 -#: app/scripts/services/blocks.js:926 -#: app/scripts/services/blocks.js:960 +#: app/scripts/services/blocks.js:928 +#: app/scripts/services/blocks.js:962 msgid "Block updated" msgstr "" -#: app/scripts/services/project.js:413 +#: app/scripts/services/project.js:426 msgid "Block {{name}} imported" msgstr "" @@ -80,11 +80,11 @@ msgstr "" msgid "Board rules" msgstr "" -#: app/scripts/controllers/menu.js:341 +#: app/scripts/controllers/menu.js:337 msgid "Board rules disabled" msgstr "" -#: app/scripts/controllers/menu.js:336 +#: app/scripts/controllers/menu.js:332 msgid "Board rules enabled" msgstr "" @@ -92,15 +92,16 @@ msgstr "" msgid "Board {{name}} not detected" msgstr "" -#: app/scripts/controllers/menu.js:477 +#: app/scripts/controllers/menu.js:476 msgid "Board {{name}} selected" msgstr "" -#: app/views/menu.html:209 +#: app/views/menu.html:213 msgid "Build" msgstr "" #: app/scripts/controllers/main.js:16 +#: app/scripts/services/project.js:144 msgid "Cancel" msgstr "" @@ -120,7 +121,7 @@ msgstr "" msgid "Click here to install it" msgstr "" -#: app/views/menu.html:334 +#: app/views/menu.html:338 msgid "Code" msgstr "" @@ -132,7 +133,7 @@ msgstr "" msgid "Collection info" msgstr "" -#: app/scripts/controllers/menu.js:436 +#: app/scripts/controllers/menu.js:434 msgid "Collection {{collection}} info not defined" msgstr "" @@ -144,7 +145,7 @@ msgstr "" msgid "Collection {{name}} not replaced" msgstr "" -#: app/scripts/services/tools.js:889 +#: app/scripts/services/tools.js:883 msgid "Collection {{name}} removed" msgstr "" @@ -152,22 +153,26 @@ msgstr "" msgid "Collection {{name}} replaced" msgstr "" -#: app/scripts/controllers/menu.js:444 +#: app/scripts/controllers/menu.js:442 msgid "Collection {{name}} selected" msgstr "" -#: app/views/menu.html:259 +#: app/views/menu.html:263 msgid "Collections" msgstr "" -#: app/views/menu.html:305 +#: app/views/menu.html:309 msgid "Community forum" msgstr "" -#: app/views/menu.html:331 +#: app/views/menu.html:335 msgid "Constant" msgstr "" +#: app/scripts/services/project.js:106 +msgid "Convert" +msgstr "" + #: app/views/menu.html:91 msgid "Copy" msgstr "" @@ -180,7 +185,7 @@ msgstr "" msgid "Datasheet" msgstr "" -#: app/views/menu.html:189 +#: app/views/menu.html:190 msgid "Default" msgstr "" @@ -188,24 +193,20 @@ msgstr "" msgid "Default toolchain not found. Toolchain will be downloaded. This operation requires Internet connection. Do you want to continue?" msgstr "" -#: app/scripts/services/utils.js:529 +#: app/scripts/services/utils.js:534 msgid "Description" msgstr "" #: app/views/menu.html:126 -#: app/views/menu.html:252 +#: app/views/menu.html:256 msgid "Disable" msgstr "" -#: app/scripts/controllers/menu.js:241 +#: app/scripts/controllers/menu.js:237 msgid "Do you want to close the application?" msgstr "" -#: app/scripts/services/project.js:106 -msgid "Do you want to convert it?" -msgstr "" - -#: app/scripts/controllers/menu.js:528 +#: app/scripts/controllers/menu.js:523 msgid "Do you want to remove the {{name}} collection?" msgstr "" @@ -213,11 +214,11 @@ msgstr "" msgid "Do you want to replace it?" msgstr "" -#: app/views/menu.html:298 +#: app/views/menu.html:302 msgid "Documentation" msgstr "" -#: app/views/menu.html:243 +#: app/views/menu.html:247 msgid "Drivers" msgstr "" @@ -248,7 +249,7 @@ msgid "Edit the collection name" msgstr "" #: app/views/menu.html:121 -#: app/views/menu.html:247 +#: app/views/menu.html:251 msgid "Enable" msgstr "" @@ -280,7 +281,7 @@ msgstr "" msgid "Enter the parameters" msgstr "" -#: app/scripts/controllers/menu.js:328 +#: app/scripts/controllers/menu.js:324 msgid "Enter the remote hostname user@host (experimental)" msgstr "" @@ -288,7 +289,7 @@ msgstr "" msgid "Error: default toolchain not found in '{{dir}}'" msgstr "" -#: app/scripts/services/utils.js:670 +#: app/scripts/services/utils.js:675 msgid "Error: {{error}}" msgstr "" @@ -335,7 +336,7 @@ msgstr "" msgid "File" msgstr "" -#: app/scripts/services/project.js:425 +#: app/scripts/services/project.js:438 msgid "File {{file}} already exists in the project path. Do you want to replace it?" msgstr "" @@ -343,7 +344,7 @@ msgstr "" msgid "File {{file}} does not exist" msgstr "" -#: app/scripts/services/project.js:459 +#: app/scripts/services/project.js:472 msgid "File {{file}} imported" msgstr "" @@ -355,7 +356,7 @@ msgstr "" msgid "French" msgstr "" -#: app/scripts/controllers/menu.js:220 +#: app/scripts/controllers/menu.js:216 msgid "GTKWave exported" msgstr "" @@ -363,27 +364,27 @@ msgstr "" msgid "Galician" msgstr "" -#: app/views/menu.html:288 +#: app/views/menu.html:292 msgid "Help" msgstr "" -#: app/scripts/services/utils.js:543 +#: app/scripts/services/utils.js:548 msgid "Image" msgstr "" -#: app/scripts/controllers/menu.js:688 +#: app/scripts/controllers/menu.js:683 msgid "Image {{name}} saved" msgstr "" -#: app/views/menu.html:337 +#: app/views/menu.html:341 msgid "Information" msgstr "" -#: app/views/menu.html:325 +#: app/views/menu.html:329 msgid "Input" msgstr "" -#: app/views/menu.html:220 +#: app/views/menu.html:224 msgid "Install" msgstr "" @@ -443,6 +444,10 @@ msgstr "" msgid "Language" msgstr "" +#: app/scripts/services/project.js:105 +msgid "Load" +msgstr "" + #: app/scripts/services/blocks.js:186 #: app/scripts/services/blocks.js:864 msgid "Local parameter" @@ -452,7 +457,11 @@ msgstr "" msgid "Make virtual env..." msgstr "" -#: app/scripts/services/utils.js:527 +#: app/scripts/services/utils.js:755 +msgid "Maximum bus size: 96 bits" +msgstr "" + +#: app/scripts/services/utils.js:532 msgid "Name" msgstr "" @@ -464,15 +473,16 @@ msgstr "" msgid "New project {{name}} created" msgstr "" -#: app/scripts/controllers/menu.js:546 +#: app/scripts/controllers/menu.js:541 msgid "No collections stored" msgstr "" #: app/scripts/controllers/main.js:15 +#: app/scripts/services/project.js:143 msgid "OK" msgstr "" -#: app/scripts/services/project.js:364 +#: app/scripts/services/project.js:377 #: app/scripts/services/project.js:99 msgid "Old project format {{version}}" msgstr "" @@ -481,19 +491,19 @@ msgstr "" msgid "Open" msgstr "" -#: app/scripts/services/utils.js:550 +#: app/scripts/services/utils.js:555 msgid "Open SVG" msgstr "" -#: app/scripts/services/project.js:462 +#: app/scripts/services/project.js:475 msgid "Original file {{file}} does not exist" msgstr "" -#: app/views/menu.html:328 +#: app/views/menu.html:332 msgid "Output" msgstr "" -#: app/scripts/controllers/menu.js:202 +#: app/scripts/controllers/menu.js:198 msgid "PCF file exported" msgstr "" @@ -501,7 +511,7 @@ msgstr "" msgid "Paste" msgstr "" -#: app/scripts/services/utils.js:872 +#: app/scripts/services/utils.js:884 msgid "Please run: {{cmd}}" msgstr "" @@ -513,11 +523,11 @@ msgstr "" msgid "Project information" msgstr "" -#: app/scripts/services/project.js:125 +#: app/scripts/services/project.js:131 msgid "Project {{name}} loaded" msgstr "" -#: app/scripts/services/project.js:334 +#: app/scripts/services/project.js:346 msgid "Project {{name}} saved" msgstr "" @@ -529,7 +539,7 @@ msgstr "" msgid "Quit" msgstr "" -#: app/scripts/services/blocks.js:946 +#: app/scripts/services/blocks.js:948 #: app/views/design.html:5 msgid "Read only" msgstr "" @@ -546,20 +556,20 @@ msgstr "" msgid "Remote hostname" msgstr "" -#: app/views/menu.html:228 -#: app/views/menu.html:267 +#: app/views/menu.html:232 +#: app/views/menu.html:271 msgid "Remove" msgstr "" -#: app/views/menu.html:279 +#: app/views/menu.html:283 msgid "Remove all" msgstr "" -#: app/scripts/services/utils.js:552 +#: app/scripts/services/utils.js:557 msgid "Reset SVG" msgstr "" -#: app/views/menu.html:233 +#: app/views/menu.html:237 msgid "Reset default" msgstr "" @@ -571,7 +581,7 @@ msgstr "" msgid "Save" msgstr "" -#: app/scripts/services/utils.js:551 +#: app/scripts/services/utils.js:556 msgid "Save SVG" msgstr "" @@ -592,7 +602,7 @@ msgstr "" msgid "Show clock" msgstr "" -#: app/views/menu.html:301 +#: app/views/menu.html:305 msgid "Source code" msgstr "" @@ -608,7 +618,7 @@ msgstr "" msgid "Testbench" msgstr "" -#: app/scripts/controllers/menu.js:211 +#: app/scripts/controllers/menu.js:207 msgid "Testbench exported" msgstr "" @@ -616,7 +626,7 @@ msgstr "" msgid "The collection {{name}} already exists." msgstr "" -#: app/scripts/controllers/menu.js:465 +#: app/scripts/controllers/menu.js:463 msgid "The current FPGA I/O configuration will be lost. Do you want to change to {{name}} board?" msgstr "" @@ -632,15 +642,15 @@ msgstr "" msgid "The toolchain will be updated. This operation requires Internet connection. Do you want to continue?" msgstr "" -#: app/scripts/services/project.js:387 +#: app/scripts/services/project.js:400 msgid "This import operation requires a project path. You need to save the current project. Do you want to continue?" msgstr "" -#: app/scripts/services/project.js:105 +#: app/scripts/services/project.js:109 msgid "This project is designed for the {{name}} board." msgstr "" -#: app/views/menu.html:216 +#: app/views/menu.html:220 msgid "Toolchain" msgstr "" @@ -662,7 +672,7 @@ msgstr "" msgid "Toolchain removed" msgstr "" -#: app/views/menu.html:203 +#: app/views/menu.html:207 msgid "Tools" msgstr "" @@ -674,11 +684,11 @@ msgstr "" msgid "Unknown board" msgstr "" -#: app/scripts/app.js:37 +#: app/scripts/app.js:44 msgid "Untitled" msgstr "" -#: app/views/menu.html:223 +#: app/views/menu.html:227 msgid "Update" msgstr "" @@ -688,20 +698,20 @@ msgstr "" msgid "Update the block name" msgstr "" -#: app/views/menu.html:212 +#: app/views/menu.html:216 msgid "Upload" msgstr "" -#: app/views/menu.html:206 +#: app/views/menu.html:210 msgid "Verify" msgstr "" -#: app/scripts/controllers/menu.js:193 +#: app/scripts/controllers/menu.js:189 msgid "Verilog code exported" msgstr "" -#: app/scripts/services/utils.js:528 -#: app/views/menu.html:294 +#: app/scripts/services/utils.js:533 +#: app/views/menu.html:298 msgid "Version" msgstr "" @@ -709,7 +719,7 @@ msgstr "" msgid "View" msgstr "" -#: app/views/menu.html:291 +#: app/views/menu.html:295 msgid "View license" msgstr "" @@ -735,7 +745,7 @@ msgstr "" msgid "Wrong port name {{name}}" msgstr "" -#: app/scripts/services/project.js:133 +#: app/scripts/services/project.js:139 msgid "Wrong project format: {{name}}" msgstr "" @@ -743,7 +753,11 @@ msgstr "" msgid "Wrong remote hostname {{name}}" msgstr "" -#: app/scripts/controllers/menu.js:242 +#: app/scripts/services/project.js:110 +msgid "You can load it as it is or convert it for the {{name}} board." +msgstr "" + +#: app/scripts/controllers/menu.js:238 msgid "Your changes will be lost if you don’t save them" msgstr "" @@ -782,18 +796,18 @@ msgid "start_verify" msgstr "" #: app/scripts/services/drivers.js:103 -#: app/scripts/services/utils.js:847 +#: app/scripts/services/utils.js:859 msgid "{{app}} is required." msgstr "" -#: app/scripts/controllers/menu.js:398 +#: app/scripts/controllers/menu.js:396 msgid "{{board}} datasheet not defined" msgstr "" -#: app/scripts/controllers/menu.js:388 +#: app/scripts/controllers/menu.js:386 msgid "{{board}} pinout not defined" msgstr "" -#: app/scripts/controllers/menu.js:417 +#: app/scripts/controllers/menu.js:415 msgid "{{board}} rules not defined" msgstr "" diff --git a/app/scripts/app.js b/app/scripts/app.js index 9cc6f1dea..3235dba77 100644 --- a/app/scripts/app.js +++ b/app/scripts/app.js @@ -31,9 +31,16 @@ angular // Load collections collections.loadCollections(); // Load language - utils.loadLanguage(profile); - - setTimeout(function() { + utils.loadLanguage(profile, function() { + // Rearrange collections + collections.sort(); + // Initialize selected board + var selectedBoard = boards.selectBoard(profile.get('board')).name; + profile.set('board', selectedBoard); + // Initialize selected collection + var selectedCollection = collections.selectCollection(profile.get('collection')); + profile.set('collection', selectedCollection); + // Initialize title project.updateTitle(gettextCatalog.getString('Untitled')); - }, 200); + }); }); diff --git a/app/scripts/controllers/menu.js b/app/scripts/controllers/menu.js index a46ddd979..1fe8bdf2b 100644 --- a/app/scripts/controllers/menu.js +++ b/app/scripts/controllers/menu.js @@ -34,10 +34,6 @@ angular.module('icestudio') var zeroProject = true; // New project without changes - // Initialize - updateSelectedBoard(); - updateSelectedCollection(); - // Window events var win = gui.Window.get(); win.on('close', function() { @@ -353,6 +349,8 @@ angular.module('icestudio') graph.loadDesign(project.get('design'), { disabled: false }); //alertify.success(gettextCatalog.getString('Language {{name}} selected', { name: utils.bold(language) })); }); + // Rearrange the collections content + collections.sort(); } }; @@ -423,7 +421,7 @@ angular.module('icestudio') var readme = collection.content.readme; if (readme) { gui.Window.open('resources/viewers/markdown/readme.html?readme=' + readme, { - title: collection.name + ' - Data', + title: (collection.name ? collection.name : 'Default') + ' Collection - Data', focus: true, toolbar: false, resizable: true, @@ -472,16 +470,13 @@ angular.module('icestudio') } } function _boardSelected() { - var newBoard = graph.selectBoard(board); + var reset = true; + var newBoard = graph.selectBoard(board, reset); profile.set('board', newBoard.name); alertify.success(gettextCatalog.getString('Board {{name}} selected', { name: utils.bold(newBoard.info.label) })); } }; - function updateSelectedBoard() { - profile.set('board', boards.selectBoard(profile.get('board')).name); - } - //-- Tools diff --git a/app/scripts/graphics/joint.command.js b/app/scripts/graphics/joint.command.js index abf193b96..3726f01b1 100755 --- a/app/scripts/graphics/joint.command.js +++ b/app/scripts/graphics/joint.command.js @@ -72,6 +72,7 @@ joint.dia.CommandManager = Backbone.Model.extend({ if (!cmd.batch) { this.undoStack.push(cmd); + this.changesStack.push(cmd); this.triggerChange(); this.trigger('add', cmd); } else { @@ -357,14 +358,11 @@ joint.dia.CommandManager = Backbone.Model.extend({ undo: function() { var command = this.undoStack.pop(); - if (command && command[0] && command[0].action !== 'lang') { - this.changesStack.pop(); - this.triggerChange(); - } - if (command) { this.revertCommand(command); this.redoStack.push(command); + this.changesStack.pop(); + this.triggerChange(); } }, @@ -376,8 +374,11 @@ joint.dia.CommandManager = Backbone.Model.extend({ if (command) { this.applyCommand(command); this.undoStack.push(command); - if (command && command[0] && command[0].action !== 'lang') { - this.changesStack.push(command); + if (command) { + if (!(command[0] && command[0].action === 'lang')) { + // Avoid lang changes + this.changesStack.push(command); + } this.triggerChange(); } } diff --git a/app/scripts/graphics/joint.connectors.js b/app/scripts/graphics/joint.connectors.js index 8c141240b..5bf4871c8 100644 --- a/app/scripts/graphics/joint.connectors.js +++ b/app/scripts/graphics/joint.connectors.js @@ -28,13 +28,13 @@ joint.connectors.ice = function(sourcePoint, targetPoint, vertices) { _.each(vertices, function(vertex) { dVertices.push(vertex.x, vertex.y); }); full.push(sourcePoint.x + sx, sourcePoint.y + sy); - wrap.push(sourcePoint.x, sourcePoint.y); + wrap.push(sourcePoint.x - sx, sourcePoint.y - sy); full = full.concat(dVertices); wrap = wrap.concat(dVertices); full.push(targetPoint.x + tx, targetPoint.y + ty); - wrap.push(targetPoint.x, targetPoint.y); + wrap.push(targetPoint.x - tx, targetPoint.y - ty); return { full: full.join(' '), diff --git a/app/scripts/graphics/joint.shapes.js b/app/scripts/graphics/joint.shapes.js index b0d4a1286..6ec9f9bdb 100644 --- a/app/scripts/graphics/joint.shapes.js +++ b/app/scripts/graphics/joint.shapes.js @@ -43,8 +43,7 @@ joint.shapes.ice.Model = joint.shapes.basic.Generic.extend({ '.body': { width: 1, height: 1, - stroke: 'none', - 'fill-opacity': 0 + stroke: 'none' }, '.port-body': { r: 8, @@ -471,10 +470,16 @@ joint.shapes.ice.GenericView = joint.shapes.ice.ModelView.extend({ if (self.enter && !self.down) { self.tooltiptext.text(self.tooltip); self.tooltiptext.css('visibility', 'visible'); - if (self.tooltip.length > 30) { + if (self.tooltip.length > 13) { + self.tooltiptext.addClass('tooltip-medium'); + self.tooltiptext.removeClass('tooltip-large'); + } + else if (self.tooltip.length > 20) { self.tooltiptext.addClass('tooltip-large'); + self.tooltiptext.removeClass('tooltip-medium'); } else { + self.tooltiptext.removeClass('tooltip-medium'); self.tooltiptext.removeClass('tooltip-large'); } } @@ -550,10 +555,10 @@ joint.shapes.ice.GenericView = joint.shapes.ice.ModelView.extend({ for (var i in ports) { var port = ports[i]; if (port.clock) { - var top = Math.round((parseInt(i) + 0.5) * height / n / gridsize) * gridsize - 10; + var top = Math.round((parseInt(i) + 0.5) * height / n / gridsize) * gridsize - 9; this.$box.append('\ -
    \ - \ +
    \ + \
    '); } } @@ -720,7 +725,7 @@ joint.shapes.ice.IOView = joint.shapes.ice.ModelView.extend({ clearValues: function() { this.updating = true; var name = ''; - var value = 0; + var value = '0'; var data = JSON.parse(JSON.stringify(this.model.get('data'))); for (var i in data.pins) { var index = data.pins[i].index; @@ -890,14 +895,15 @@ joint.shapes.ice.CodeView = joint.shapes.ice.ModelView.extend({ this.updateBox(); this.updating = false; + this.prevZoom = 1; this.listenTo(this.model, 'process:ports', this.update); joint.dia.ElementView.prototype.initialize.apply(this, arguments); - var selector = this.$box.find('#' + editorLabel); + this.selector = this.$box.find('#' + editorLabel); // Prevent paper from handling pointerdown. - selector.on('mousedown click', function(event) { event.stopPropagation(); }); + this.selector.on('mousedown click', function(event) { event.stopPropagation(); }); this.deltas = []; this.counter = 0; @@ -905,10 +911,11 @@ joint.shapes.ice.CodeView = joint.shapes.ice.ModelView.extend({ var undoGroupingInterval = 200; var self = this; - this.editor = ace.edit(selector[0]); + this.editor = ace.edit(this.selector[0]); this.editor.$blockScrolling = Infinity; this.editor.commands.removeCommand('undo'); this.editor.commands.removeCommand('redo'); + this.editor.commands.removeCommand('touppercase'); this.editor.session.on('change', function(delta) { if (!self.updating) { // Check consecutive-change interval @@ -950,6 +957,17 @@ joint.shapes.ice.CodeView = joint.shapes.ice.ModelView.extend({ e.text = ''; } }); + this.editor.on('mousewheel', function(event) { + // Stop mousewheel event propagation when target is active + if (document.activeElement.parentNode.id === self.selector.attr('id')) { + // Enable only scroll + event.stopPropagation(); + } + else { + // Enable only zoom + event.preventDefault(); + } + }); this.setupResizer(); @@ -1013,6 +1031,15 @@ joint.shapes.ice.CodeView = joint.shapes.ice.ModelView.extend({ type: codeError.type }); this.editor.session.setAnnotations(annotations); + + var self = this; + var state = this.model.get('state'); + var annotationSize = Math.round(15 * state.zoom) + 'px'; + setTimeout(function() { + self.$box.find('.ace_error').css('background-size', annotationSize + ' ' + annotationSize); + self.$box.find('.ace_warning').css('background-size', annotationSize + ' ' + annotationSize); + self.$box.find('.ace_info').css('background-size', annotationSize + ' ' + annotationSize); + }, 20); }, clearAnnotations: function() { @@ -1036,14 +1063,56 @@ joint.shapes.ice.CodeView = joint.shapes.ice.ModelView.extend({ // Set font size if (this.editor) { - this.$box.find('.code-editor').css({ - margin: 8 * state.zoom, - 'border-radius': 5 * state.zoom - }); - this.editor.setFontSize(Math.round(aceFontSize * state.zoom)); + if (this.prevZoom !== state.zoom) { + this.prevZoom = state.zoom; + // Scale border + this.$box.find('.code-editor').css({ + margin: 8 * state.zoom, + 'border-radius': 5 * state.zoom + }); + // Scale annotations + var annotationSize = Math.round(15 * state.zoom) + 'px'; + this.$box.find('.ace_error').css('background-size', annotationSize + ' ' + annotationSize); + this.$box.find('.ace_warning').css('background-size', annotationSize + ' ' + annotationSize); + this.$box.find('.ace_info').css('background-size', annotationSize + ' ' + annotationSize); + // Scale padding + this.$box.find('.ace_text-layer').css('padding', '0px ' + Math.round(4 * state.zoom) + 'px'); + // Scale gutters + var rule = getCSSRule('.ace_folding-enabled > .ace_gutter-cell'); + if (rule) { + rule.style.paddingLeft = Math.round(19 * state.zoom) + 'px'; + rule.style.paddingRight = Math.round(13 * state.zoom) + 'px'; + } + // Scale font size + this.editor.setFontSize(Math.round(aceFontSize * state.zoom)); + } this.editor.resize(); } + function getCSSRule(ruleName) { + if (document.styleSheets) { + for (var i = 0; i < document.styleSheets.length; i++) { + var styleSheet = document.styleSheets[i]; + var ii = 0; + var cssRule = false; + do { + if (styleSheet.cssRules) { + cssRule = styleSheet.cssRules[ii]; + } else { + cssRule = styleSheet.rules[ii]; + } + if (cssRule) { + if (cssRule.selectorText === ruleName) { + return cssRule; + } + } + ii++; + } while (cssRule); + } + } + return false; + } + // Set ports width var width = WIRE_WIDTH * state.zoom; this.$('.port-wire').css('stroke-width', width); @@ -1122,6 +1191,7 @@ joint.shapes.ice.InfoView = joint.shapes.ice.ModelView.extend({ ' + editorLabel + '.setTheme("ace/theme/chrome");\ ' + editorLabel + '.renderer.setShowGutter(false);\ ' + editorLabel + '.setHighlightActiveLine(false);\ + ' + editorLabel + '.setShowPrintMargin(false);\ ' + editorLabel + '.setAutoScrollEditorIntoView(true);\ \
    \ @@ -1151,6 +1221,7 @@ joint.shapes.ice.InfoView = joint.shapes.ice.ModelView.extend({ this.editor.$blockScrolling = Infinity; this.editor.commands.removeCommand('undo'); this.editor.commands.removeCommand('redo'); + this.editor.commands.removeCommand('touppercase'); this.editor.session.on('change', function(delta) { if (!self.updating) { // Check consecutive-change interval @@ -1192,6 +1263,17 @@ joint.shapes.ice.InfoView = joint.shapes.ice.ModelView.extend({ e.text = ''; } }); + this.editor.on('mousewheel', function(event) { + // Stop mousewheel event propagation when target is active + if (document.activeElement.parentNode.id === self.editorSelector.attr('id')) { + // Enable only scroll + event.stopPropagation(); + } + else { + // Enable only zoom + event.preventDefault(); + } + }); this.setupResizer(); @@ -1302,10 +1384,14 @@ joint.shapes.ice.InfoView = joint.shapes.ice.ModelView.extend({ }); } else if (this.editor) { + // Scale border this.$box.find('.info-editor').css({ margin: 8 * state.zoom, 'border-radius': 5 * state.zoom }); + // Scale padding + this.$box.find('.ace_text-layer').css('padding', '0px ' + Math.round(4 * state.zoom) + 'px'); + // Scale font size this.editor.setFontSize(Math.round(aceFontSize * state.zoom)); this.editor.resize(); } @@ -1345,7 +1431,7 @@ joint.shapes.ice.Wire = joint.dia.Link.extend({ labelMarkup: [ '' ].join(''), @@ -1358,7 +1444,7 @@ joint.shapes.ice.Wire = joint.dia.Link.extend({ arrowheadMarkup: [ '', - '', + '', '' ].join(''), @@ -1393,7 +1479,7 @@ joint.shapes.ice.Wire = joint.dia.Link.extend({ text: '', y: '4px', 'font-weight': 'bold', - 'font-size': '13px', + 'font-size': '11px', 'text-anchor': 'middle' } } @@ -1615,6 +1701,8 @@ joint.shapes.ice.WireView = joint.dia.LinkView.extend({ } }); + var points = []; + // Update all the portWires combinations if (portWires.length > 0) { var markupTemplate = joint.util.template( @@ -1646,7 +1734,11 @@ joint.shapes.ice.WireView = joint.dia.LinkView.extend({ // Eval if intersects any segment of wire vB if (evalIntersection(vA[i], [vB[j], vB[j+1]])) { // Bifurcation found! - markersA.append(V(markupTemplate(vA[i])).node); + var point = vA[i]; + if (!contains(point, points)) { + points.push(point); + markersA.append(V(markupTemplate(point)).node); + } } } } @@ -1654,11 +1746,25 @@ joint.shapes.ice.WireView = joint.dia.LinkView.extend({ } } + function contains(point, points) { + var found = false; + _.each(points, function(p) { + if (p.x === point.x && p.y === point.y) { + found = true; + return; + } + }); + return found; + } + function v(wire) { var v = []; v.push(wire.sourcePoint); v = v.concat(wire.route); - v.push(wire.targetPoint); + v.push({ + x: wire.targetPoint.x + 9, + y: wire.targetPoint.y + }); return v; } @@ -1666,14 +1772,14 @@ joint.shapes.ice.WireView = joint.dia.LinkView.extend({ if (segment[0].x === segment[1].x) { // Vertical return ((point.x === segment[0].x) && - (point.y > Math.min(segment[0].y, segment[1].y)) && - (point.y < Math.max(segment[0].y, segment[1].y))); + (point.y > Math.min(segment[0].y, segment[1].y)) && + (point.y < Math.max(segment[0].y, segment[1].y))); } else { // Horizontal return ((point.y === segment[0].y) && - (point.x > Math.min(segment[0].x, segment[1].x)) && - (point.x < Math.max(segment[0].x, segment[1].x))); + (point.x > Math.min(segment[0].x, segment[1].x)) && + (point.x < Math.max(segment[0].x, segment[1].x))); } } } diff --git a/app/scripts/services/blocks.js b/app/scripts/services/blocks.js index 0d6b26707..91f67e116 100644 --- a/app/scripts/services/blocks.js +++ b/app/scripts/services/blocks.js @@ -914,11 +914,13 @@ angular.module('icestudio') // Restore previous connections for (var w in connectedWires) { var wire = connectedWires[w]; + var size = wire.get('size'); var source = wire.get('source'); var target = wire.get('target'); - if ((source.id === cell.id && containsPort(source.port, cell.get('rightPorts'))) || - (target.id === cell.id && containsPort(target.port, cell.get('leftPorts')) && source.port !== 'constant-out') || - (target.id === cell.id && containsPort(target.port, cell.get('topPorts')) && source.port === 'constant-out')) { + if ((source.id === cell.id && containsPort(source.port, size, cell.get('rightPorts'))) || + (target.id === cell.id && containsPort(target.port, size, cell.get('leftPorts')) && source.port !== 'constant-out') || + (target.id === cell.id && containsPort(target.port, size, cell.get('topPorts')) && source.port === 'constant-out')) + { graph.addCell(wire); } } @@ -929,10 +931,10 @@ angular.module('icestudio') }, blockInstance); } - function containsPort(port, ports) { + function containsPort(port, size, ports) { var found = false; for (var i in ports) { - if (port === ports[i].name) { + if (port === ports[i].name && size === ports[i].size) { found = true; break; } diff --git a/app/scripts/services/collections.js b/app/scripts/services/collections.js index 41cf266bf..579b07ca0 100644 --- a/app/scripts/services/collections.js +++ b/app/scripts/services/collections.js @@ -3,6 +3,7 @@ angular.module('icestudio') .service('collections', function(utils, common, + gettextCatalog, nodePath) { const DEFAULT = ''; @@ -85,4 +86,35 @@ angular.module('icestudio') return selectedCollection.name; }; + this.sort = function() { + for (var i in common.collections) { + var collection = common.collections[i]; + if (collection.content) { + _sort(collection.content.blocks); + _sort(collection.content.examples); + } + } + }; + + function _sort(items) { + if (items) { + items.sort(byName); + for (var i in items) { + _sort(items[i].children); + } + } + } + + function byName(a, b) { + a = gettextCatalog.getString(a.name); + b = gettextCatalog.getString(b.name); + if (a > b) { + return 1; + } + if (a < b) { + return -1; + } + return 0; + } + }); diff --git a/app/scripts/services/common.js b/app/scripts/services/common.js index 06e2b0048..b7dbfefb8 100644 --- a/app/scripts/services/common.js +++ b/app/scripts/services/common.js @@ -55,7 +55,6 @@ angular.module('icestudio') this.ENV_PIP = nodePath.join(this.ENV_BIN_DIR, 'pip'); this.ENV_APIO = nodePath.join(this.ENV_BIN_DIR, this.WIN32 ? 'apio.exe' : 'apio'); this.APIO_CMD = (this.WIN32 ? 'set' : 'export') + ' APIO_HOME_DIR=' + this.APIO_HOME_DIR + (this.WIN32 ? '& ' : '; ') + '"' + this.ENV_APIO + '"'; - this.SYSTEM_APIO = '/usr/bin/apio'; function safeDir(_dir, self) { if (self.WIN32) { diff --git a/app/scripts/services/compiler.js b/app/scripts/services/compiler.js index 7e6b9c95f..429c08694 100644 --- a/app/scripts/services/compiler.js +++ b/app/scripts/services/compiler.js @@ -10,20 +10,20 @@ angular.module('icestudio') var code = ''; switch(target) { case 'verilog': - code += header('//'); + code += header('//', opt); code += '`default_nettype none\n'; code += verilogCompiler('main', project, opt); break; case 'pcf': - code += header('#'); + code += header('#', opt); code += pcfCompiler(project, opt); break; case 'testbench': - code += header('//'); + code += header('//', opt); code += testbenchCompiler(project); break; case 'gtkwave': - code += header('[*]'); + code += header('[*]', opt); code += gtkwaveCompiler(project); break; default: @@ -32,12 +32,17 @@ angular.module('icestudio') return code; }; - function header(comment) { + function header(comment, opt) { var header = ''; var date = new Date(); - header += comment + ' Code generated by Icestudio ' + _package.version + '\n'; - header += comment + ' ' + date.toUTCString() + '\n'; - header += '\n'; + opt = opt || {}; + if (opt.header !== false) { + header += comment + ' Code generated by Icestudio ' + _package.version + '\n'; + if (opt.datetime !== false) { + header += comment + ' ' + date.toUTCString() + '\n'; + } + header += '\n'; + } return header; } diff --git a/app/scripts/services/graph.js b/app/scripts/services/graph.js index 7704f98f1..9f99d1ca3 100644 --- a/app/scripts/services/graph.js +++ b/app/scripts/services/graph.js @@ -136,8 +136,8 @@ angular.module('icestudio') }, validateConnection: function(cellViewS, magnetS, cellViewT, magnetT, end, linkView) { // Prevent output-output links - if (magnetS.getAttribute('type') === 'output' && - magnetT.getAttribute('type') === 'output') { + if (magnetS && magnetS.getAttribute('type') === 'output' && + magnetT && magnetT.getAttribute('type') === 'output') { if (magnetS !== magnetT) { // Show warning if source and target blocks are different warning(gettextCatalog.getString('Invalid connection')); @@ -145,15 +145,15 @@ angular.module('icestudio') return false; } // Ensure right -> left connections - if (magnetS.getAttribute('pos') === 'right') { - if (magnetT.getAttribute('pos') !== 'left') { + if (magnetS && magnetS.getAttribute('pos') === 'right') { + if (magnetT && magnetT.getAttribute('pos') !== 'left') { warning(gettextCatalog.getString('Invalid connection')); return false; } } // Ensure bottom -> top connections - if (magnetS.getAttribute('pos') === 'bottom') { - if (magnetT.getAttribute('pos') !== 'top') { + if (magnetS && magnetS.getAttribute('pos') === 'bottom') { + if (magnetT && magnetT.getAttribute('pos') !== 'top') { warning(gettextCatalog.getString('Invalid connection')); return false; } @@ -247,11 +247,10 @@ angular.module('icestudio') } } - var targetElement= element[0]; + var targetElement = element[0]; this.panAndZoom = svgPanZoom(targetElement.childNodes[0], { - viewportSelector: targetElement.childNodes[0].childNodes[0], fit: false, center: false, zoomEnabled: true, @@ -260,21 +259,21 @@ angular.module('icestudio') dblClickZoomEnabled: false, minZoom: ZOOM_MIN, maxZoom: ZOOM_MAX, + eventsListenerElement: targetElement, /*beforeZoom: function(oldzoom, newzoom) { },*/ onZoom: function(scale) { - state.zoom = scale; // Already rendered in pan - + state.zoom = scale; // Close expanded combo if (document.activeElement.className === 'select2-search__field') { $('select').select2('close'); } + updateCellBoxes(); }, /*beforePan: function(oldpan, newpan) { },*/ onPan: function(newPan) { state.pan = newPan; - selectionView.options.state = state; graph.trigger('state', state); updateCellBoxes(); } @@ -282,6 +281,7 @@ angular.module('icestudio') function updateCellBoxes() { var cells = graph.getCells(); + selectionView.options.state = state; _.each(cells, function(cell) { if (!cell.isLink()) { cell.attributes.state = state; @@ -665,7 +665,7 @@ angular.module('icestudio') graph.attributes.cells.models = cells; }; - this.selectBoard = function(board) { + this.selectBoard = function(board, reset) { graph.startBatch('change'); // Trigger board event var data = { @@ -674,7 +674,9 @@ angular.module('icestudio') }; graph.trigger('board', { data: data }); var newBoard = boards.selectBoard(board.name); - resetBlocks(); + if (reset) { + resetBlocks(); + } graph.stopBatch('change'); return newBoard; }; @@ -693,7 +695,7 @@ angular.module('icestudio') }; function resetBlocks() { - var data; + var data, connectedLinks; var cells = graph.getCells(); _.each(cells, function(cell) { if (cell.isLink()) { @@ -710,32 +712,47 @@ angular.module('icestudio') else if (type === 'basic.code') { // Reset rules in Code block ports data = utils.clone(cell.get('data')); + connectedLinks = graph.getConnectedLinks(cell); if (data && data.ports && data.ports.in) { - for (var j in data.ports.in) { - var port = data.ports.in[j]; - port.default = utils.hasInputRule(port.name); - } + _.each(data.ports.in, function(port) { + var connected = false; + _.each(connectedLinks, function(connectedLink) { + if (connectedLink.get('target').port === port.name) { + connected = true; + return false; + } + }); + port.default = utils.hasInputRule(port.name, !connected); + cell.set('data', data); + paper.findViewByModel(cell.id).updateBox(); + }); } - cell.set('data', data); - paper.findViewByModel(cell.id).updateBox(); } else if (type.indexOf('basic.') === -1) { // Reset rules in Generic block ports var block = common.allDependencies[type]; data = { ports: { in: [] }}; - for (var i in block.design.graph.blocks) { - var item = block.design.graph.blocks[i]; - if (item.type === 'basic.input') { - if (!item.data.range) { + connectedLinks = graph.getConnectedLinks(cell); + if (block.design.graph.blocks) { + _.each(block.design.graph.blocks, function(item) { + if (item.type === 'basic.input' && !item.data.range) { + console.log(item, connectedLinks); + var connected = false; + _.each(connectedLinks, function(connectedLink) { + if (connectedLink.get('target').port === item.id) { + connected = true; + return false; + } + }); data.ports.in.push({ name: item.id, - default: utils.hasInputRule((item.data.clock ? 'clk' : '') || item.data.name) + default: utils.hasInputRule((item.data.clock ? 'clk' : '') || item.data.name, !connected) }); } - } + cell.set('data', data); + paper.findViewByModel(cell.id).updateBox(); + }); } - cell.set('data', data); - paper.findViewByModel(cell.id).updateBox(); } }); } diff --git a/app/scripts/services/project.js b/app/scripts/services/project.js index f4afee9ad..9aaf0a0fd 100644 --- a/app/scripts/services/project.js +++ b/app/scripts/services/project.js @@ -101,15 +101,21 @@ angular.module('icestudio') project = _safeLoad(data, name); if (project.design.board !== common.selectedBoard.name) { var projectBoard = boards.boardLabel(project.design.board); + alertify.set('confirm', 'labels', { + 'ok': gettextCatalog.getString('Load'), + 'cancel': gettextCatalog.getString('Convert') + }); alertify.confirm( gettextCatalog.getString('This project is designed for the {{name}} board.', { name: utils.bold(projectBoard) }) + '
    ' + - gettextCatalog.getString('Do you want to convert it?'), + gettextCatalog.getString('You can load it as it is or convert it for the {{name}} board.', { name: utils.bold(common.selectedBoard.info.label) }), function() { - project.design.board = common.selectedBoard.name; - _load(true); + // Load + _load(); }, function() { - _load(); + // Convert + project.design.board = common.selectedBoard.name; + _load(true); }); } else { @@ -132,6 +138,12 @@ angular.module('icestudio') else { alertify.error(gettextCatalog.getString('Wrong project format: {{name}}', { name: utils.bold(name) }), 30); } + setTimeout(function() { + alertify.set('confirm', 'labels', { + 'ok': gettextCatalog.getString('OK'), + 'cancel': gettextCatalog.getString('Cancel') + }); + }, 100); } }; @@ -340,16 +352,17 @@ angular.module('icestudio') function sortGraph() { var cells = graph.getCells(); - // Sort cells by x-coordinate + // Sort Constant cells by x-coordinate cells = _.sortBy(cells, function(cell) { - if (!cell.isLink()) { + if (cell.get('type') === 'ice.Constant') { return cell.attributes.position.x; } }); - // Sort cells by y-coordinate + // Sort I/O cells by y-coordinate cells = _.sortBy(cells, function(cell) { - if (!cell.isLink()) { + if (cell.get('type') === 'ice.Input' || + cell.get('type') === 'ice.Output') { return cell.attributes.position.y; } }); diff --git a/app/scripts/services/shortcuts.js b/app/scripts/services/shortcuts.js index eff553569..556212710 100644 --- a/app/scripts/services/shortcuts.js +++ b/app/scripts/services/shortcuts.js @@ -18,8 +18,8 @@ angular.module('icestudio') this.execute = function(event, opt) { // Execute shortcut method // Options: - // - opt.prompt: allow shortcut when a prompt is shown - // - opt.disable: allow shortcut when the graph is disabled + // - opt.prompt: enable shortcut when a prompt is shown + // - opt.disable: enable shortcut when the graph is disabled var action = ''; var method = null; @@ -29,6 +29,7 @@ angular.module('icestudio') var options = shortcuts[action].opt || {}; var command = shortcuts[action][system]; if (event.keyCode === command.key && + event.altKey === (command.alt || false) && event.ctrlKey === (command.ctrl || false) && event.metaKey === (command.meta || false) && event.shiftKey === (command.shift || false) && @@ -71,11 +72,13 @@ angular.module('icestudio') }, saveProject: { linux: { label: 'Ctrl+S', ctrl: true, key: 83 }, - mac: { label: '⌘+S', meta: true, key: 83 } + mac: { label: '⌘+S', meta: true, key: 83 }, + opt: { prompt: true } }, saveProjectAs: { linux: { label: 'Ctrl+Shift+S', ctrl: true, shift: true, key: 83 }, - mac: { label: 'Shift+⌘+S', meta: true, shift: true, key: 83 } + mac: { label: 'Shift+⌘+S', meta: true, shift: true, key: 83 }, + opt: { prompt: true } }, quit: { linux: { label: 'Ctrl+Q', ctrl: true, key: 81 }, diff --git a/app/scripts/services/tools.js b/app/scripts/services/tools.js index 0d698e21d..db786b0ac 100644 --- a/app/scripts/services/tools.js +++ b/app/scripts/services/tools.js @@ -139,7 +139,10 @@ angular.module('icestudio') nodeFs.mkdirSync(common.BUILD_DIR); } project.update(); - var opt = { boardRules: profile.get('boardRules') }; + var opt = { + datetime: false, + boardRules: profile.get('boardRules') + }; if (opt.boardRules) { opt.initPorts = compiler.getInitPorts(project.get()); opt.initPins = compiler.getInitPins(project.get()); @@ -158,11 +161,11 @@ angular.module('icestudio') nodeFse.removeSync('!(main.*)'); // Sync included files - ret = this.syncFiles(/(\n|\s)\/\/\s*@include\s+([^\s]*\.(v|vh))(\n|\s)/g, code); + ret = this.syncFiles(/[\n|\s]\/\/\s*@include\s+([^\s]*\.(v|vh))(\n|\s)/g, code); // Sync list files if (ret) { - ret = this.syncFiles(/(\n|\s)[^\/]?\"(.*\.list?)\"/g, code); + ret = this.syncFiles(/[\n|\s][^\/]?\"(.*\.list?)\"/g, code); } return ret; @@ -172,7 +175,7 @@ angular.module('icestudio') var ret = true; var match; while (match = pattern.exec(code)) { - var file = match[2]; + var file = match[1]; var destPath = nodePath.join(common.BUILD_DIR, file); var origPath = nodePath.join(utils.dirname(project.filepath), file); @@ -271,15 +274,15 @@ angular.module('icestudio') // main.v:#: error: ... // main.v:#: warning: ... // main.v:#: syntax error - re = /main.v:([0-9]+):\s(error|warning):\s(.*?)\n/g; + re = /main.v:([0-9]+):\s(error|warning):\s(.*?)[\r|\n]/g; while (matchError = re.exec(stdout)) { codeErrors.push({ line: parseInt(matchError[1]), - msg: matchError[3], + msg: matchError[3].replace(/\sin\smain\..*$/, ''), type: matchError[2] }); } - re = /main.v:([0-9]+):\ssyntax\serror\n/g; + re = /main.v:([0-9]+):\ssyntax\serror[\r|\n]/g; while (matchError = re.exec(stdout)) { codeErrors.push({ line: parseInt(matchError[1]), @@ -289,9 +292,9 @@ angular.module('icestudio') } // - Yosys errors - // ERROR: ... main.v:#...\n - // Warning: ... main.v:#...\n - re = /(ERROR|Warning):\s(.*?)\smain\.v:([0-9]+)(.*?)\n/g; + // ERROR: ... main.v:#... + // Warning: ... main.v:#... + re = /(ERROR|Warning):\s(.*?)\smain\.v:([0-9]+)(.*?)[\r|\n]/g; while (matchError = re.exec(stdout)) { var msg = ''; var line = parseInt(matchError[3]); @@ -382,7 +385,7 @@ angular.module('icestudio') gettext('done_upload'); var message = 'done_' + label; alertify.success(gettextCatalog.getString(message)); - if ((label === 'build') && stdout) { + if ((label === 'build' || label === 'upload') && stdout) { // Show used resources in the FPGA /* PIOs 0 / 96 @@ -454,7 +457,7 @@ angular.module('icestudio') newCodeError = { type: codeError.type, line: codeError.line - module.begin - ((codeError.line === module.end) ? 1 : 0), - msg: (codeError.msg.length > 2) ? codeError.msg[0].toUpperCase() + codeError.msg.substring(1) : codeError.msg + msg: codeError.msg }; if (module.name.startsWith('main_')) { // Code block @@ -804,30 +807,17 @@ angular.module('icestudio') origName: data[1], blocks: [], examples: [], locale: [], package: '' }; } - data = zipEntry.entryName.match(/^([^\/]+)\/blocks\/.*\.ice$/); - if (data) { - _collections[data[1]].blocks.push(zipEntry.entryName); - } - data = zipEntry.entryName.match(/^([^\/]+)\/examples\/.*\.ice$/); - if (data) { - _collections[data[1]].examples.push(zipEntry.entryName); - } - data = zipEntry.entryName.match(/^([^\/]+)\/examples\/.*\.v$/); - if (data) { - _collections[data[1]].examples.push(zipEntry.entryName); - } - data = zipEntry.entryName.match(/^([^\/]+)\/examples\/.*\.vh$/); - if (data) { - _collections[data[1]].examples.push(zipEntry.entryName); - } - data = zipEntry.entryName.match(/^([^\/]+)\/examples\/.*\.list$/); - if (data) { - _collections[data[1]].examples.push(zipEntry.entryName); - } - data = zipEntry.entryName.match(/^([^\/]+)\/locale\/.*\.po$/); - if (data) { - _collections[data[1]].locale.push(zipEntry.entryName); - } + + addCollectionItem('blocks', 'ice', _collections, zipEntry); + addCollectionItem('blocks', 'v', _collections, zipEntry); + addCollectionItem('blocks', 'vh', _collections, zipEntry); + addCollectionItem('blocks', 'list', _collections, zipEntry); + addCollectionItem('examples', 'ice', _collections, zipEntry); + addCollectionItem('examples', 'v', _collections, zipEntry); + addCollectionItem('examples', 'vh', _collections, zipEntry); + addCollectionItem('examples', 'list', _collections, zipEntry); + addCollectionItem('locale', 'po', _collections, zipEntry); + data = zipEntry.entryName.match(/^([^\/]+)\/package\.json$/); if (data) { _collections[data[1]].package = zipEntry.entryName; @@ -841,6 +831,13 @@ angular.module('icestudio') return _collections; } + function addCollectionItem(key, ext, collections, zipEntry) { + var data = zipEntry.entryName.match(RegExp('^([^\/]+)\/' + key + '\/.*\.' + ext + '$')); + if (data) { + collections[data[1]][key].push(zipEntry.entryName); + } + } + function installCollection(collection, zip) { var i, dest = ''; var pattern = RegExp('^' + collection.origName); diff --git a/app/scripts/services/utils.js b/app/scripts/services/utils.js index 16e547cb9..bd73dfbd5 100644 --- a/app/scripts/services/utils.js +++ b/app/scripts/services/utils.js @@ -179,11 +179,11 @@ angular.module('icestudio') this.toolchainDisabled = false; this.getApioExecutable = function() { - var candidateApio = process.env.ICESTUDIO_APIO ? process.env.ICESTUDIO_APIO : common.SYSTEM_APIO; + var candidateApio = process.env.ICESTUDIO_APIO ? process.env.ICESTUDIO_APIO : _package.apio.external; if (nodeFs.existsSync(candidateApio)) { if (!this.toolchainDisabled) { // Show message only on start - alertify.message('Using system wide apio', 5); + alertify.message('Using external apio: ' + candidateApio, 5); } this.toolchainDisabled = true; return coverPath(candidateApio); @@ -341,7 +341,7 @@ angular.module('icestudio') return fileTree; } - this.setLocale = function(locale) { + this.setLocale = function(locale, callback) { // Update current locale format locale = splitLocale(locale); // Load supported languages @@ -359,6 +359,11 @@ angular.module('icestudio') gettextCatalog.loadRemote(filepath); } } + if (callback) { + setTimeout(function() { + callback(); + }, 50); + } // Return the best language return bestLang; }; @@ -563,8 +568,11 @@ angular.module('icestudio') $('#preview-svg').attr('src', blankImage); } + var prevOnshow = alertify.confirm().get('onshow') || function() {}; + alertify.confirm() .set('onshow', function() { + prevOnshow(); registerOpen(); registerSave(); registerReset(); @@ -648,10 +656,12 @@ angular.module('icestudio') if (callback) { callback(evt, values); } - alertify.confirm().set('onshow', function() {}); + // Restore onshow + alertify.confirm().set('onshow', prevOnshow); }) .set('oncancel', function(/*evt*/) { - alertify.confirm().set('onshow', function() {}); + // Restore onshow + alertify.confirm().set('onshow', prevOnshow); }); }; @@ -676,13 +686,13 @@ angular.module('icestudio') this.findIncludedFiles = function(code) { var ret = []; var patterns = [ - /(\n|\s)\/\/\s*@include\s+([^\s]*\.(v|vh))(\n|\s)/g, - /(\n|\s)[^\/]?\"(.*\.list?)\"/g + /[\n|\s]\/\/\s*@include\s+([^\s]*\.(v|vh))(\n|\s)/g, + /[\n|\s][^\/]?\"(.*\.list?)\"/g ]; for (var p in patterns) { var match; while (match = patterns[p].exec(code)) { - var file = match[2].replace(/ /g, ''); + var file = match[1].replace(/ /g, ''); if (ret.indexOf(file) === -1) { ret.push(file); } @@ -739,17 +749,24 @@ angular.module('icestudio') this.parsePortLabel = function(data) { // e.g: name[x:y] var match, ret = {}; + var maxSize = 95; var pattern = /([A-Za-z_]+[A-Za-z_0-9]*)?(\[([0-9]+):([0-9]+)\])?/g; match = pattern.exec(data); if (match && (match[0] === match.input)) { ret.name = match[1] ? match[1] : ''; ret.rangestr = match[2]; if (match[2]) { - if (match[3] > match[4]) { - ret.range = _.range(match[3], parseInt(match[4])-1, -1); + if (match[3] > maxSize || match[4] > maxSize) { + alertify.warning(gettextCatalog.getString('Maximum bus size: 96 bits'), 5); + return null; } else { - ret.range = _.range(match[3], parseInt(match[4])+1, +1); + if (match[3] > match[4]) { + ret.range = _.range(match[3], parseInt(match[4])-1, -1); + } + else { + ret.range = _.range(match[3], parseInt(match[4])+1, +1); + } } } return ret; @@ -992,7 +1009,8 @@ angular.module('icestudio') return subDependencies; }; - this.hasInputRule = function(port) { + this.hasInputRule = function(port, apply) { + apply = (apply === undefined) ? true : apply; var _default; var rules = common.selectedBoard.rules; if (rules) { @@ -1001,7 +1019,7 @@ angular.module('icestudio') for (var i in allInitPorts) { if (port === allInitPorts[i].port){ _default = allInitPorts[i]; - _default.apply = true; + _default.apply = apply; break; } } @@ -1034,18 +1052,18 @@ angular.module('icestudio') return evt.ctrlKey; }; - this.loadLanguage = function(profile) { + this.loadLanguage = function(profile, callback) { var self = this; profile.load(function() { var lang = profile.get('language'); if (lang) { - self.setLocale(lang); + self.setLocale(lang, callback); } else { // If lang is empty, use the system language nodeLangInfo(function(err, sysLang) { if (!err) { - profile.set('language', self.setLocale(sysLang)); + profile.set('language', self.setLocale(sysLang, callback)); } }); } diff --git a/app/styles/design.css b/app/styles/design.css index 95c6cbb53..e0fed3c0f 100644 --- a/app/styles/design.css +++ b/app/styles/design.css @@ -129,6 +129,11 @@ border-color: #777 transparent transparent transparent; } +.generic-block .tooltip-medium { + width: 180px; + margin-left: -90px; +} + .generic-block .tooltip-large { width: 240px; margin-left: -120px; @@ -160,6 +165,7 @@ color: #333; text-overflow: ellipsis; overflow: hidden; + white-space: nowrap; } .virtual-port { @@ -386,9 +392,6 @@ pointer-events: auto; } -.port-body:hover { -} - .joint-highlight-stroke.joint-theme-default { display: none; } diff --git a/app/views/menu.html b/app/views/menu.html index 72da9f14d..e99d888bd 100644 --- a/app/views/menu.html +++ b/app/views/menu.html @@ -184,11 +184,15 @@