├── debian ├── compat ├── docs ├── source │ └── format ├── control ├── rules ├── changelog └── copyright ├── icon.png ├── roboblocks ├── html │ ├── javascript │ │ ├── underscore │ │ │ ├── .gitignore │ │ │ ├── .editorconfig │ │ │ ├── .bower.json │ │ │ ├── LICENSE │ │ │ └── README.md │ │ ├── blockly-bq │ │ │ ├── README.md │ │ │ ├── arduino_compressed.js │ │ │ └── COPYING │ │ ├── requirejs │ │ │ └── .bower.json │ │ ├── jquery │ │ │ ├── .bower.json │ │ │ └── MIT-LICENSE.txt │ │ └── highlight │ │ │ ├── LICENSE │ │ │ ├── styles │ │ │ └── default.css │ │ │ ├── README.ru.md │ │ │ ├── README.md │ │ │ └── highlight.pack.js │ ├── media │ │ ├── 1x1.gif │ │ ├── anon.jpeg │ │ ├── click.mp3 │ │ ├── click.ogg │ │ ├── click.wav │ │ ├── delete.mp3 │ │ ├── delete.ogg │ │ ├── delete.wav │ │ ├── quote0.png │ │ ├── quote1.png │ │ ├── sprites.png │ │ ├── handopen.cur │ │ ├── progress.gif │ │ └── handclosed.cur │ ├── img │ │ └── blocks │ │ │ ├── lcd.png │ │ │ ├── bqmod01.png │ │ │ ├── bqmod02.png │ │ │ ├── bqmod03.png │ │ │ ├── bqmod04.png │ │ │ ├── bqmod05.png │ │ │ ├── bqmod06.png │ │ │ ├── bqmod07.png │ │ │ ├── bqmod08.png │ │ │ ├── bqmod09.png │ │ │ ├── bqmod10.png │ │ │ ├── bqmod11.png │ │ │ ├── zum01.png │ │ │ ├── zum02.png │ │ │ ├── zum03.png │ │ │ ├── zum04.png │ │ │ ├── zum05.png │ │ │ ├── zum06.png │ │ │ ├── zum07.png │ │ │ ├── bqservo01.png │ │ │ ├── bqservo03.png │ │ │ ├── alhambra-led-07.png │ │ │ └── Alhambra-button-03.png │ ├── visualino.css │ ├── profiles.js │ ├── blockly.extensions.js │ ├── lang.js │ ├── constants.js │ ├── index.html │ ├── COPYING.LESER.md │ └── README.md ├── roboblocks.pro ├── roboblocks.sh └── examples │ ├── 02-variables-text.bly │ ├── 04-led-blink.bly │ ├── 09-serial-counter.bly │ ├── 01-variables.bly │ ├── 06-led-blink-for.bly │ ├── 03-variables-serial.bly │ ├── 07-led-knight-rider.bly │ ├── 05-led-blink-3.bly │ ├── 10-serial-led-switch.bly │ └── 08-led-fade.bly ├── icons ├── cog_24x24.png ├── usb-24x24.png ├── visualino.icns ├── about-header.png ├── enter-16x16.png ├── splashscreen.png ├── upload_18x24.png ├── bar-chart-24x24.png ├── check_alt_24x24.png ├── download_18x24.png ├── chip-micro-24x24.png ├── arrow_right_alt1_24x24.png ├── magnifying_glass_24x24.png ├── document_alt_stroke_18x24.png ├── LICENSE-WPZOOM └── LICENSE-OPEN-ICONIC ├── visualino.json ├── AUTHORS ├── src ├── aboutdialog.cpp ├── aboutdialog.h ├── qblockswebview.h ├── jswebhelpers.h ├── graphwidget.h ├── Resources.qrc ├── qblockswebview.cpp ├── settingsdialog.h ├── jswebhelpers.cpp ├── settingsstore.h ├── src.pro ├── main.cpp ├── graphwidget.cpp ├── mainwindow.h ├── settingsdialog.cpp ├── aboutdialog.ui ├── settingsstore.cpp └── settingsdialog.ui ├── visualino.desktop ├── ts ├── ts.pro ├── visualino_pt-pt.ts ├── visualino_ca-es.ts └── visualino_pl-pl.ts ├── .gitignore ├── config.ini ├── manifest.json ├── visualino.pro ├── README.md ├── LICENSE └── INSTALL /debian/compat: -------------------------------------------------------------------------------- 1 | 9 2 | -------------------------------------------------------------------------------- /debian/docs: -------------------------------------------------------------------------------- 1 | AUTHORS 2 | README.md 3 | -------------------------------------------------------------------------------- /debian/source/format: -------------------------------------------------------------------------------- 1 | 3.0 (native) 2 | -------------------------------------------------------------------------------- /icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vrruiz/visualino/HEAD/icon.png -------------------------------------------------------------------------------- /roboblocks/html/javascript/underscore/.gitignore: -------------------------------------------------------------------------------- 1 | raw 2 | node_modules 3 | -------------------------------------------------------------------------------- /icons/cog_24x24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vrruiz/visualino/HEAD/icons/cog_24x24.png -------------------------------------------------------------------------------- /icons/usb-24x24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vrruiz/visualino/HEAD/icons/usb-24x24.png -------------------------------------------------------------------------------- /icons/visualino.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vrruiz/visualino/HEAD/icons/visualino.icns -------------------------------------------------------------------------------- /icons/about-header.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vrruiz/visualino/HEAD/icons/about-header.png -------------------------------------------------------------------------------- /icons/enter-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vrruiz/visualino/HEAD/icons/enter-16x16.png -------------------------------------------------------------------------------- /icons/splashscreen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vrruiz/visualino/HEAD/icons/splashscreen.png -------------------------------------------------------------------------------- /icons/upload_18x24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vrruiz/visualino/HEAD/icons/upload_18x24.png -------------------------------------------------------------------------------- /icons/bar-chart-24x24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vrruiz/visualino/HEAD/icons/bar-chart-24x24.png -------------------------------------------------------------------------------- /icons/check_alt_24x24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vrruiz/visualino/HEAD/icons/check_alt_24x24.png -------------------------------------------------------------------------------- /icons/download_18x24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vrruiz/visualino/HEAD/icons/download_18x24.png -------------------------------------------------------------------------------- /icons/chip-micro-24x24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vrruiz/visualino/HEAD/icons/chip-micro-24x24.png -------------------------------------------------------------------------------- /roboblocks/roboblocks.pro: -------------------------------------------------------------------------------- 1 | roboblocks.commands = ./roboblocks.sh 2 | QMAKE_EXTRA_TARGETS = roboblocks 3 | -------------------------------------------------------------------------------- /roboblocks/html/media/1x1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vrruiz/visualino/HEAD/roboblocks/html/media/1x1.gif -------------------------------------------------------------------------------- /icons/arrow_right_alt1_24x24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vrruiz/visualino/HEAD/icons/arrow_right_alt1_24x24.png -------------------------------------------------------------------------------- /icons/magnifying_glass_24x24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vrruiz/visualino/HEAD/icons/magnifying_glass_24x24.png -------------------------------------------------------------------------------- /roboblocks/html/media/anon.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vrruiz/visualino/HEAD/roboblocks/html/media/anon.jpeg -------------------------------------------------------------------------------- /roboblocks/html/media/click.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vrruiz/visualino/HEAD/roboblocks/html/media/click.mp3 -------------------------------------------------------------------------------- /roboblocks/html/media/click.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vrruiz/visualino/HEAD/roboblocks/html/media/click.ogg -------------------------------------------------------------------------------- /roboblocks/html/media/click.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vrruiz/visualino/HEAD/roboblocks/html/media/click.wav -------------------------------------------------------------------------------- /roboblocks/html/media/delete.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vrruiz/visualino/HEAD/roboblocks/html/media/delete.mp3 -------------------------------------------------------------------------------- /roboblocks/html/media/delete.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vrruiz/visualino/HEAD/roboblocks/html/media/delete.ogg -------------------------------------------------------------------------------- /roboblocks/html/media/delete.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vrruiz/visualino/HEAD/roboblocks/html/media/delete.wav -------------------------------------------------------------------------------- /roboblocks/html/media/quote0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vrruiz/visualino/HEAD/roboblocks/html/media/quote0.png -------------------------------------------------------------------------------- /roboblocks/html/media/quote1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vrruiz/visualino/HEAD/roboblocks/html/media/quote1.png -------------------------------------------------------------------------------- /roboblocks/html/media/sprites.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vrruiz/visualino/HEAD/roboblocks/html/media/sprites.png -------------------------------------------------------------------------------- /visualino.json: -------------------------------------------------------------------------------- 1 | { 2 | "policy_groups": [ 3 | "networking" 4 | ], 5 | "policy_version": 1.2 6 | } -------------------------------------------------------------------------------- /icons/document_alt_stroke_18x24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vrruiz/visualino/HEAD/icons/document_alt_stroke_18x24.png -------------------------------------------------------------------------------- /roboblocks/html/img/blocks/lcd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vrruiz/visualino/HEAD/roboblocks/html/img/blocks/lcd.png -------------------------------------------------------------------------------- /roboblocks/html/media/handopen.cur: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vrruiz/visualino/HEAD/roboblocks/html/media/handopen.cur -------------------------------------------------------------------------------- /roboblocks/html/media/progress.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vrruiz/visualino/HEAD/roboblocks/html/media/progress.gif -------------------------------------------------------------------------------- /roboblocks/html/img/blocks/bqmod01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vrruiz/visualino/HEAD/roboblocks/html/img/blocks/bqmod01.png -------------------------------------------------------------------------------- /roboblocks/html/img/blocks/bqmod02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vrruiz/visualino/HEAD/roboblocks/html/img/blocks/bqmod02.png -------------------------------------------------------------------------------- /roboblocks/html/img/blocks/bqmod03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vrruiz/visualino/HEAD/roboblocks/html/img/blocks/bqmod03.png -------------------------------------------------------------------------------- /roboblocks/html/img/blocks/bqmod04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vrruiz/visualino/HEAD/roboblocks/html/img/blocks/bqmod04.png -------------------------------------------------------------------------------- /roboblocks/html/img/blocks/bqmod05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vrruiz/visualino/HEAD/roboblocks/html/img/blocks/bqmod05.png -------------------------------------------------------------------------------- /roboblocks/html/img/blocks/bqmod06.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vrruiz/visualino/HEAD/roboblocks/html/img/blocks/bqmod06.png -------------------------------------------------------------------------------- /roboblocks/html/img/blocks/bqmod07.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vrruiz/visualino/HEAD/roboblocks/html/img/blocks/bqmod07.png -------------------------------------------------------------------------------- /roboblocks/html/img/blocks/bqmod08.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vrruiz/visualino/HEAD/roboblocks/html/img/blocks/bqmod08.png -------------------------------------------------------------------------------- /roboblocks/html/img/blocks/bqmod09.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vrruiz/visualino/HEAD/roboblocks/html/img/blocks/bqmod09.png -------------------------------------------------------------------------------- /roboblocks/html/img/blocks/bqmod10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vrruiz/visualino/HEAD/roboblocks/html/img/blocks/bqmod10.png -------------------------------------------------------------------------------- /roboblocks/html/img/blocks/bqmod11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vrruiz/visualino/HEAD/roboblocks/html/img/blocks/bqmod11.png -------------------------------------------------------------------------------- /roboblocks/html/img/blocks/zum01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vrruiz/visualino/HEAD/roboblocks/html/img/blocks/zum01.png -------------------------------------------------------------------------------- /roboblocks/html/img/blocks/zum02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vrruiz/visualino/HEAD/roboblocks/html/img/blocks/zum02.png -------------------------------------------------------------------------------- /roboblocks/html/img/blocks/zum03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vrruiz/visualino/HEAD/roboblocks/html/img/blocks/zum03.png -------------------------------------------------------------------------------- /roboblocks/html/img/blocks/zum04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vrruiz/visualino/HEAD/roboblocks/html/img/blocks/zum04.png -------------------------------------------------------------------------------- /roboblocks/html/img/blocks/zum05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vrruiz/visualino/HEAD/roboblocks/html/img/blocks/zum05.png -------------------------------------------------------------------------------- /roboblocks/html/img/blocks/zum06.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vrruiz/visualino/HEAD/roboblocks/html/img/blocks/zum06.png -------------------------------------------------------------------------------- /roboblocks/html/img/blocks/zum07.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vrruiz/visualino/HEAD/roboblocks/html/img/blocks/zum07.png -------------------------------------------------------------------------------- /roboblocks/html/media/handclosed.cur: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vrruiz/visualino/HEAD/roboblocks/html/media/handclosed.cur -------------------------------------------------------------------------------- /roboblocks/html/img/blocks/bqservo01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vrruiz/visualino/HEAD/roboblocks/html/img/blocks/bqservo01.png -------------------------------------------------------------------------------- /roboblocks/html/img/blocks/bqservo03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vrruiz/visualino/HEAD/roboblocks/html/img/blocks/bqservo03.png -------------------------------------------------------------------------------- /roboblocks/html/img/blocks/alhambra-led-07.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vrruiz/visualino/HEAD/roboblocks/html/img/blocks/alhambra-led-07.png -------------------------------------------------------------------------------- /roboblocks/html/img/blocks/Alhambra-button-03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vrruiz/visualino/HEAD/roboblocks/html/img/blocks/Alhambra-button-03.png -------------------------------------------------------------------------------- /icons/LICENSE-WPZOOM: -------------------------------------------------------------------------------- 1 | usb-24x24.png 2 | chip-micro-24x24.png 3 | 4 | Author: WPZOOM 5 | URL: https://www.iconfinder.com/iconsets/wpzoom-developer-icon-set 6 | License: Creative Commons (Attribution-Share Alike 3.0 Unported). 7 | -------------------------------------------------------------------------------- /AUTHORS: -------------------------------------------------------------------------------- 1 | Here is a list of CONTRIBUTORS to Visualino: 2 | 3 | Jordi Binefa 4 | Marcos Posada 5 | Víctor R. Ruiz 6 | José Antonio Vacas 7 | Dmitry Bardynin 8 | Andrew (AMOsPL) 9 | -------------------------------------------------------------------------------- /src/aboutdialog.cpp: -------------------------------------------------------------------------------- 1 | #include "aboutdialog.h" 2 | #include "ui_aboutdialog.h" 3 | 4 | AboutDialog::AboutDialog(QWidget *parent) : 5 | QDialog(parent), 6 | ui(new Ui::AboutDialog) 7 | { 8 | ui->setupUi(this); 9 | } 10 | 11 | AboutDialog::~AboutDialog() 12 | { 13 | delete ui; 14 | } 15 | -------------------------------------------------------------------------------- /visualino.desktop: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Type=Application 3 | Version=0.6 4 | Name=Visualino 5 | Comment=Visual Programming Environment for Arduino 6 | Icon=/usr/share/visualino/icons/icon.png 7 | Exec=visualino %f 8 | TryExec=visualino 9 | Categories=Education;Development; 10 | StartupNotify=true 11 | Terminal=false 12 | -------------------------------------------------------------------------------- /ts/ts.pro: -------------------------------------------------------------------------------- 1 | TEMPLATE = aux 2 | 3 | linux { 4 | first.commands = lupdate ../visualino.pro && lrelease ../visualino.pro 5 | QMAKE_EXTRA_TARGETS += first 6 | } 7 | 8 | win32 { 9 | first.commands = lupdate $$PWD/../visualino.pro && lrelease $$PWD/../visualino.pro 10 | QMAKE_EXTRA_TARGETS += first 11 | } 12 | 13 | 14 | QMAKE_CLEAN += *.qm 15 | -------------------------------------------------------------------------------- /roboblocks/html/javascript/underscore/.editorconfig: -------------------------------------------------------------------------------- 1 | # This file is for unifying the coding style for different editors and IDEs 2 | # editorconfig.org 3 | 4 | root = true 5 | 6 | [*] 7 | end_of_line = lf 8 | charset = utf-8 9 | trim_trailing_whitespace = true 10 | insert_final_newline = true 11 | 12 | [**.{js,json,html}] 13 | indent_style = space 14 | indent_size = 2 15 | -------------------------------------------------------------------------------- /roboblocks/roboblocks.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | ## This script imports and builds Roboblocks, the required 3 | ## Blockly-based HTML application that Visual Arduino 4 | ## embeds. 5 | set -ex 6 | git clone https://github.com/bq/roboblocks.git 7 | cd roboblocks/ 8 | npm install bower 9 | npm run bower 10 | cp -r bower_components/ src/ 11 | cp -r bower_components/blockly-bq/media/ src/ 12 | cp -r dist/* src/ 13 | -------------------------------------------------------------------------------- /src/aboutdialog.h: -------------------------------------------------------------------------------- 1 | #ifndef ABOUTDIALOG_H 2 | #define ABOUTDIALOG_H 3 | 4 | #include 5 | 6 | namespace Ui { 7 | class AboutDialog; 8 | } 9 | 10 | class AboutDialog : public QDialog 11 | { 12 | Q_OBJECT 13 | 14 | public: 15 | explicit AboutDialog(QWidget *parent = 0); 16 | ~AboutDialog(); 17 | 18 | private: 19 | Ui::AboutDialog *ui; 20 | }; 21 | 22 | #endif // ABOUTDIALOG_H 23 | -------------------------------------------------------------------------------- /roboblocks/html/javascript/blockly-bq/README.md: -------------------------------------------------------------------------------- 1 | blockly-bq 2 | ========== 3 | 4 | This project is a first fork of the [blockly](https://developers.google.com/blockly) visual programming library for [bitbloq](http://bitbloq.bq.com) modified until October, 23th, 2014. It's not simply a directive that encapsulates the blockly library, but a modified version of the library to provide better integration with [roboblocks](https://github.com/bq/roboblocks). 5 | 6 | 7 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Compiled Object files 2 | *.slo 3 | *.lo 4 | *.o 5 | *.obj 6 | 7 | # Compiled Dynamic libraries 8 | *.so 9 | *.dylib 10 | *.dll 11 | 12 | # Compiled Static libraries 13 | *.lai 14 | *.la 15 | *.a 16 | *.lib 17 | 18 | # Executables 19 | *.exe 20 | *.out 21 | *.app 22 | 23 | # Qt 24 | *.pro.user* 25 | build-* 26 | *.autosave 27 | 28 | # OSX 29 | .DS_Store 30 | 31 | blockly/* 32 | roboblocks/roboblocks/ 33 | 34 | # L10N 35 | *.qm 36 | 37 | # Makefiles 38 | Makefile 39 | -------------------------------------------------------------------------------- /roboblocks/html/visualino.css: -------------------------------------------------------------------------------- 1 | html, body { 2 | height: 100%; 3 | margin: 0; 4 | } 5 | 6 | #code { 7 | margin: 0; 8 | float: right; 9 | width: 33%; 10 | height: 100%; 11 | background-color: #F0F0F0; 12 | color: #5F5F5F; 13 | overflow: auto; 14 | } 15 | 16 | #wrap { 17 | height: 100%; 18 | width: 100%; 19 | margin: 0; 20 | } 21 | 22 | .treeLabelBlock { 23 | float: left; 24 | margin: 0 5px 0 5px; 25 | width: 10px; 26 | height: 100%; 27 | } 28 | -------------------------------------------------------------------------------- /config.ini: -------------------------------------------------------------------------------- 1 | [linux] 2 | arduino_ide_path = "/usr/bin/arduino" 3 | examples_path = "/usr/share/visualino/examples/" 4 | html_index = "/usr/share/visualino/html/index.html" 5 | 6 | [mac] 7 | arduino_ide_path = "~/Applications/Arduino.app/Contents/MacOS/JavaApplicationStub" 8 | examples_path = "examples/" 9 | html_index = "html/index.html" 10 | 11 | [windows] 12 | arduino_ide_path = "C:\\Program Files (x86)\\Arduino\\arduino_debug.exe" 13 | examples_path = "examples\\" 14 | html_index = "html\\index.html" 15 | 16 | -------------------------------------------------------------------------------- /manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "com.ubuntu.developer.vrruiz.visualino", 3 | "description": "Visual Programming Environment for Arduino.", 4 | "framework": "ubuntu-sdk-14.10-qml-dev3", 5 | "architecture": "all", 6 | "title": "Visualino", 7 | "hooks": { 8 | "visualino": { 9 | "apparmor": "visualino.json", 10 | "desktop": "visualino.desktop" 11 | } 12 | }, 13 | "version": "0.1", 14 | "maintainer": "Víctor R. Ruiz " 15 | } 16 | -------------------------------------------------------------------------------- /src/qblockswebview.h: -------------------------------------------------------------------------------- 1 | #ifndef QBLOCKSWEBVIEW_H 2 | #define QBLOCKSWEBVIEW_H 3 | 4 | #include 5 | #include 6 | 7 | class QBlocksWebView : public QWebView 8 | { 9 | public: 10 | QBlocksWebView(); 11 | QBlocksWebView(QWidget *parent = 0); 12 | 13 | void zoomIn(); 14 | void zoomOut(); 15 | 16 | private: 17 | // void wheelEvent(QWheelEvent *event); 18 | 19 | void init(); 20 | void doZoom(float scale); 21 | 22 | signals: 23 | 24 | public slots: 25 | }; 26 | 27 | #endif // QBLOCKSWEBVIEW_H 28 | -------------------------------------------------------------------------------- /src/jswebhelpers.h: -------------------------------------------------------------------------------- 1 | #ifndef JSWEBHELPERS_H 2 | #define JSWEBHELPERS_H 3 | 4 | #include 5 | 6 | class JsWebHelpers : public QObject 7 | { 8 | Q_OBJECT 9 | public: 10 | explicit JsWebHelpers(QObject *parent = 0); 11 | 12 | void resetSourceChanged(); 13 | int sourceChanges(); 14 | bool isSourceChanged(); 15 | 16 | Q_INVOKABLE void sourceChanged(); 17 | 18 | private: 19 | int source_changes; 20 | bool source_changed; 21 | 22 | signals: 23 | void changed(); 24 | 25 | public slots: 26 | 27 | }; 28 | 29 | #endif // JSWEBHELPERS_H 30 | -------------------------------------------------------------------------------- /src/graphwidget.h: -------------------------------------------------------------------------------- 1 | #ifndef GRAPHWIDGET_H 2 | #define GRAPHWIDGET_H 3 | 4 | #define MAX_DATA 1000 5 | 6 | #include 7 | #include 8 | 9 | class GraphWidget : public QWidget 10 | { 11 | Q_OBJECT 12 | public: 13 | explicit GraphWidget(QWidget *parent = 0); 14 | ~GraphWidget(); 15 | void append(long point); 16 | 17 | protected: 18 | QFont *font; 19 | QVector data; 20 | int max_value; 21 | int min_value; 22 | int count; 23 | 24 | void paintEvent(QPaintEvent *event); 25 | 26 | signals: 27 | 28 | public slots: 29 | 30 | }; 31 | 32 | #endif // GRAPHWIDGET_H 33 | -------------------------------------------------------------------------------- /visualino.pro: -------------------------------------------------------------------------------- 1 | TEMPLATE = subdirs 2 | SUBDIRS = ts src 3 | TRANSLATIONS = \ 4 | ts/visualino_ca-es.ts \ 5 | ts/visualino_es-es.ts \ 6 | ts/visualino_eu-es.ts \ 7 | ts/visualino_fr-fr.ts \ 8 | ts/visualino_gl-es.ts \ 9 | ts/visualino_it-it.ts \ 10 | ts/visualino_pl-pl.ts \ 11 | ts/visualino_pt-pt.ts \ 12 | ts/visualino_ru.ts 13 | 14 | macx { 15 | deploy.commands = macdeployqt $${OUT_PWD}/visualino.app 16 | QMAKE_EXTRA_TARGETS += deploy 17 | } 18 | 19 | win32 { 20 | deploy.commands = windeployqt --release $${OUT_PWD}/src/visualino.exe 21 | QMAKE_EXTRA_TARGETS += deploy 22 | } 23 | -------------------------------------------------------------------------------- /roboblocks/html/javascript/requirejs/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "requirejs", 3 | "version": "2.1.16", 4 | "homepage": "http://requirejs.org", 5 | "authors": [ 6 | "jrburke.com" 7 | ], 8 | "description": "A file and module loader for JavaScript", 9 | "main": "require.js", 10 | "keywords": [ 11 | "AMD" 12 | ], 13 | "license": "new BSD, and MIT", 14 | "_release": "2.1.16", 15 | "_resolution": { 16 | "type": "version", 17 | "tag": "2.1.16", 18 | "commit": "eceacaba419d3bc0cce05d114be25f0a57affac9" 19 | }, 20 | "_source": "git://github.com/jrburke/requirejs-bower.git", 21 | "_target": "~2.1.15", 22 | "_originalSource": "requirejs" 23 | } -------------------------------------------------------------------------------- /debian/control: -------------------------------------------------------------------------------- 1 | Source: visualino 2 | Section: electronics 3 | Maintainer: Víctor R. Ruiz 4 | Build-Depends: debhelper (>= 9), 5 | qtbase5-dev, 6 | qt5-qmake, 7 | libqt5webkit5-dev, 8 | libqt5serialport5-dev, 9 | qttools5-dev-tools 10 | Standards-Version: 3.9.6 11 | Homepage: http://www.visualino.net/ 12 | Vcs-Git: git://github.com/vrruiz/visualino.git 13 | 14 | Package: visualino 15 | Architecture: any 16 | Depends: ${shlibs:Depends}, ${misc:Depends}, 17 | libqt5network5, 18 | libqt5widgets5, 19 | libqt5webkit5, 20 | libqt5serialport5 21 | Description: Desktop visual environment to program Arduino 22 | Visualino embeds Bitbloq as a desktop application to 23 | offer a visual GUI to program Arduino. 24 | -------------------------------------------------------------------------------- /roboblocks/html/javascript/underscore/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "underscore", 3 | "version": "1.6.0", 4 | "main": "underscore.js", 5 | "keywords": [ 6 | "util", 7 | "functional", 8 | "server", 9 | "client", 10 | "browser" 11 | ], 12 | "ignore": [ 13 | "underscore-min.js", 14 | "docs", 15 | "test", 16 | "*.yml", 17 | "*.map", 18 | "CNAME", 19 | "index.html", 20 | "favicon.ico", 21 | "CONTRIBUTING.md" 22 | ], 23 | "homepage": "https://github.com/jashkenas/underscore", 24 | "_release": "1.6.0", 25 | "_resolution": { 26 | "type": "version", 27 | "tag": "1.6.0", 28 | "commit": "1f4bf626f23a99f7a676f5076dc1b1475554c8f7" 29 | }, 30 | "_source": "git://github.com/jashkenas/underscore.git", 31 | "_target": "~1.6.0", 32 | "_originalSource": "underscore" 33 | } -------------------------------------------------------------------------------- /src/Resources.qrc: -------------------------------------------------------------------------------- 1 | 2 | 3 | ../icons/arrow_right_alt1_24x24.png 4 | ../icons/check_alt_24x24.png 5 | ../icons/document_alt_stroke_18x24.png 6 | ../icons/download_18x24.png 7 | ../icons/upload_18x24.png 8 | ../icons/cog_24x24.png 9 | ../icons/magnifying_glass_24x24.png 10 | ../icons/chip-micro-24x24.png 11 | ../icons/usb-24x24.png 12 | ../icons/enter-16x16.png 13 | ../icons/bar-chart-24x24.png 14 | 15 | 16 | ../icons/splashscreen.png 17 | ../icons/about-header.png 18 | 19 | 20 | -------------------------------------------------------------------------------- /roboblocks/examples/02-variables-text.bly: -------------------------------------------------------------------------------- 1 | textAtextAltext -------------------------------------------------------------------------------- /src/qblockswebview.cpp: -------------------------------------------------------------------------------- 1 | #include "qblockswebview.h" 2 | 3 | QBlocksWebView::QBlocksWebView() { 4 | } 5 | 6 | QBlocksWebView::QBlocksWebView(QWidget *parent) 7 | : QWebView::QWebView(parent) { 8 | } 9 | 10 | /* 11 | * Deactivate. Bad usability. 12 | * 13 | void QBlocksWebView::wheelEvent(QWheelEvent *event) { 14 | // Capture mouse wheel events. 15 | // Zoom the WebView 16 | float scale = event->delta() / 120.0 / 10.0; 17 | doZoom(scale); 18 | } 19 | */ 20 | 21 | void QBlocksWebView::doZoom(float scale) { 22 | // Apply zoom (in: scale > 0, out: scale < 0) 23 | if ((scale > 0 && zoomFactor() < 1.5) || 24 | (scale < 0 && zoomFactor() > 0.5)) { 25 | setZoomFactor(scale + zoomFactor()); 26 | } 27 | } 28 | 29 | void QBlocksWebView::zoomIn() { 30 | doZoom(0.1); 31 | } 32 | 33 | void QBlocksWebView::zoomOut() { 34 | doZoom(-0.1); 35 | } 36 | -------------------------------------------------------------------------------- /roboblocks/examples/04-led-blink.bly: -------------------------------------------------------------------------------- 1 | HIGH12500LOW12500 -------------------------------------------------------------------------------- /src/settingsdialog.h: -------------------------------------------------------------------------------- 1 | #ifndef SETTINGSDIALOG_H 2 | #define SETTINGSDIALOG_H 3 | 4 | #include "settingsstore.h" 5 | 6 | #include 7 | #include 8 | 9 | namespace Ui { 10 | class SettingsDialog; 11 | } 12 | 13 | class SettingsDialog : public QDialog 14 | { 15 | Q_OBJECT 16 | 17 | public: 18 | explicit SettingsDialog(SettingsStore *settings, 19 | const QStringList &languageList, 20 | QWidget *parent = 0); 21 | ~SettingsDialog(); 22 | 23 | bool changed(); 24 | virtual void accept(); 25 | virtual void reject(); 26 | 27 | public slots: 28 | void arduinoIdePathOpenDialog(); 29 | void restoreSettings(); 30 | 31 | private: 32 | Ui::SettingsDialog *ui; 33 | SettingsStore *settings; 34 | QStringList languageList; 35 | bool settingsChanged; 36 | }; 37 | 38 | #endif // SETTINGSDIALOG_H 39 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Visualino 2 | ========= 3 | 4 | Visual programming environment for Arduino. 5 | 6 | 7 | Install 8 | ------- 9 | 10 | Check INSTALL file. 11 | 12 | 13 | Requirements 14 | ------------ 15 | 16 | In order to Visualino to execute sketches, install Arduino IDE >= 1.6. 17 | 18 | 19 | Configure 20 | --------- 21 | 22 | To setup the path to the Arduino IDE command line tool in your platform 23 | check the online documentation at [http://www.visualino.net/docs/](www.visualino.net/docs/). 24 | 25 | 26 | Support 27 | ------- 28 | 29 | Go to the [http://www.visualino.net/forum/](forum). 30 | 31 | 32 | Developer 33 | --------- 34 | 35 | Víctor R. Ruiz 36 | 37 | 38 | Credits 39 | ------- 40 | 41 | * [https://developers.google.com/blockly/](Google Blockly). 42 | * [https://github.com/bq/roboblocks](bq's roboblocks). 43 | 44 | 45 | License 46 | ------- 47 | 48 | Check LICENSE file. 49 | 50 | -------------------------------------------------------------------------------- /roboblocks/html/javascript/jquery/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "jquery", 3 | "version": "2.1.3", 4 | "main": "dist/jquery.js", 5 | "license": "MIT", 6 | "ignore": [ 7 | "**/.*", 8 | "build", 9 | "speed", 10 | "test", 11 | "*.md", 12 | "AUTHORS.txt", 13 | "Gruntfile.js", 14 | "package.json" 15 | ], 16 | "devDependencies": { 17 | "sizzle": "2.1.1-jquery.2.1.2", 18 | "requirejs": "2.1.10", 19 | "qunit": "1.14.0", 20 | "sinon": "1.8.1" 21 | }, 22 | "keywords": [ 23 | "jquery", 24 | "javascript", 25 | "library" 26 | ], 27 | "homepage": "https://github.com/jquery/jquery", 28 | "_release": "2.1.3", 29 | "_resolution": { 30 | "type": "version", 31 | "tag": "2.1.3", 32 | "commit": "8f2a9d9272d6ed7f32d3a484740ab342c02541e0" 33 | }, 34 | "_source": "git://github.com/jquery/jquery.git", 35 | "_target": "~2.1.1", 36 | "_originalSource": "jquery" 37 | } -------------------------------------------------------------------------------- /src/jswebhelpers.cpp: -------------------------------------------------------------------------------- 1 | #include "jswebhelpers.h" 2 | 3 | JsWebHelpers::JsWebHelpers(QObject *parent) : 4 | QObject(parent) 5 | { 6 | source_changed = false; 7 | source_changes = 0; 8 | } 9 | 10 | void JsWebHelpers::resetSourceChanged() { 11 | // Reset source changed status and reset count 12 | source_changed = false; 13 | source_changes = 0; 14 | } 15 | 16 | bool JsWebHelpers::isSourceChanged() { 17 | // Return the source changed status 18 | return source_changed; 19 | } 20 | 21 | int JsWebHelpers::sourceChanges() { 22 | // Number of changes to the source 23 | return source_changes; 24 | } 25 | 26 | void JsWebHelpers::sourceChanged() { 27 | // Callback for source changed signal, called from index.html through the 28 | // web brigde setup in MainWindow::onJavaScriptWindowObjectCleared() 29 | source_changed = true; 30 | source_changes++; 31 | // Emit signal 32 | emit changed(); 33 | } 34 | -------------------------------------------------------------------------------- /roboblocks/html/profiles.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | /* 4 | * Arduino Board profiles 5 | */ 6 | var profiles = { 7 | arduino: { 8 | description: 'Standard-compatible board', 9 | digital: [['0', '0'],['1', '1'],['2', '2'],['3', '3'],['4', '4'],['5', '5'],['6', '6'],['7', '7'],['8', '8'],['9', '9'],['10', '10'],['11', '11'],['12', '12'],['13', '13']], 10 | bluetooth: [['1', '1'],['2', '2'],['3', '3'],['4', '4'],['5', '5'],['6', '6'],['7', '7'],['8', '8'],['9', '9'],['10', '10'],['11', '11']], 11 | pwm: [['#3', '3'],['#5', '5'],['#6', '6'],['#9', '9'],['#10', '10'],['#11', '11']], 12 | analog: [['A0', 'A0'],['A1', 'A1'],['A2', 'A2'],['A3', 'A3'],['A4', 'A4'],['A5', 'A5']], 13 | serial: 9600, 14 | }, 15 | 'arduino_mega': { 16 | description: 'Mega-compatible board', 17 | }, 18 | }; 19 | 20 | 21 | // Set default profile to arduino standard-compatible board 22 | profiles['default'] = profiles.arduino; 23 | -------------------------------------------------------------------------------- /debian/rules: -------------------------------------------------------------------------------- 1 | #!/usr/bin/make -f 2 | # See debhelper(7) (uncomment to enable) 3 | # output every command that modifies files on the build system. 4 | export DH_VERBOSE = 1 5 | export DH_ALWAYS_EXCLUDE=CVS:.svn:.git:.gitignore:*.pyc:LICENSE:LICENSE.*:COPYING:COPYING.*: 6 | 7 | export QT_SELECT=qt5 8 | 9 | # see EXAMPLES in dpkg-buildflags(1) and read /usr/share/dpkg/* 10 | DPKG_EXPORT_BUILDFLAGS = 1 11 | include /usr/share/dpkg/default.mk 12 | 13 | # see FEATURE AREAS in dpkg-buildflags(1) 14 | #export DEB_BUILD_MAINT_OPTIONS = hardening=+all 15 | 16 | # see ENVIRONMENT in dpkg-buildflags(1) 17 | # package maintainers to append CFLAGS 18 | #export DEB_CFLAGS_MAINT_APPEND = -Wall -pedantic 19 | # package maintainers to append LDFLAGS 20 | #export DEB_LDFLAGS_MAINT_APPEND = -Wl,--as-needed 21 | 22 | 23 | # main packaging script based on dh7 syntax 24 | %: 25 | dh $@ 26 | 27 | # debmake generated override targets 28 | # This is example for Cmake (See http://bugs.debian.org/641051 ) 29 | #override_dh_auto_configure: 30 | # dh_auto_configure -- \ 31 | # -DCMAKE_LIBRARY_PATH=$(DEB_HOST_MULTIARCH) 32 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /roboblocks/examples/09-serial-counter.bly: -------------------------------------------------------------------------------- 1 | i0iiADDi11000 -------------------------------------------------------------------------------- /roboblocks/html/javascript/jquery/MIT-LICENSE.txt: -------------------------------------------------------------------------------- 1 | Copyright 2014 jQuery Foundation and other contributors 2 | http://jquery.com/ 3 | 4 | Permission is hereby granted, free of charge, to any person obtaining 5 | a copy of this software and associated documentation files (the 6 | "Software"), to deal in the Software without restriction, including 7 | without limitation the rights to use, copy, modify, merge, publish, 8 | distribute, sublicense, and/or sell copies of the Software, and to 9 | permit persons to whom the Software is furnished to do so, subject to 10 | the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be 13 | included in all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 16 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 17 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 18 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 19 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 20 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 21 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /icons/LICENSE-OPEN-ICONIC: -------------------------------------------------------------------------------- 1 | Files: enter-16x16.png bar-chart-24x24.png 2 | Author: Open Iconic — www.useiconic.com/open 3 | 4 | The MIT License (MIT) 5 | 6 | Permission is hereby granted, free of charge, to any person obtaining a copy 7 | of this software and associated documentation files (the "Software"), to deal 8 | in the Software without restriction, including without limitation the rights 9 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | copies of the Software, and to permit persons to whom the Software is 11 | furnished to do so, subject to the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be included in 14 | all copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | THE SOFTWARE. 23 | -------------------------------------------------------------------------------- /roboblocks/html/javascript/underscore/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2009-2014 Jeremy Ashkenas, DocumentCloud and Investigative 2 | Reporters & Editors 3 | 4 | Permission is hereby granted, free of charge, to any person 5 | obtaining a copy of this software and associated documentation 6 | files (the "Software"), to deal in the Software without 7 | restriction, including without limitation the rights to use, 8 | copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the 10 | Software is furnished to do so, subject to the following 11 | conditions: 12 | 13 | The above copyright notice and this permission notice shall be 14 | included in all copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 17 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 18 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 19 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 20 | HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 21 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 22 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 23 | OTHER DEALINGS IN THE SOFTWARE. 24 | -------------------------------------------------------------------------------- /roboblocks/html/blockly.extensions.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | /* global Blockly */ 3 | /* jshint sub:true */ 4 | 5 | /** 6 | * Generates toolbox XML with all blocks defined in Blockly.Blocks 7 | * @return {String} Blockly toolbox XML 8 | */ 9 | Blockly.createToolbox = function() { 10 | 11 | var blocks = {}; 12 | 13 | for (var block in this.Blocks) { 14 | // important check that this is objects own property 15 | // not from prototype prop inherited 16 | if (this.Blocks.hasOwnProperty(block) && this.Blocks[block] instanceof Object && this.Blocks[block].category) { 17 | var category = this.Blocks[block].category; 18 | blocks[category] = blocks[category] || []; 19 | blocks[category].push(block); 20 | } 21 | } 22 | 23 | var toolbox = ''; 39 | 40 | return toolbox; 41 | }; 42 | -------------------------------------------------------------------------------- /roboblocks/html/javascript/underscore/README.md: -------------------------------------------------------------------------------- 1 | __ 2 | /\ \ __ 3 | __ __ ___ \_\ \ __ _ __ ____ ___ ___ _ __ __ /\_\ ____ 4 | /\ \/\ \ /' _ `\ /'_ \ /'__`\/\ __\/ ,__\ / ___\ / __`\/\ __\/'__`\ \/\ \ /',__\ 5 | \ \ \_\ \/\ \/\ \/\ \ \ \/\ __/\ \ \//\__, `\/\ \__//\ \ \ \ \ \//\ __/ __ \ \ \/\__, `\ 6 | \ \____/\ \_\ \_\ \___,_\ \____\\ \_\\/\____/\ \____\ \____/\ \_\\ \____\/\_\ _\ \ \/\____/ 7 | \/___/ \/_/\/_/\/__,_ /\/____/ \/_/ \/___/ \/____/\/___/ \/_/ \/____/\/_//\ \_\ \/___/ 8 | \ \____/ 9 | \/___/ 10 | 11 | Underscore.js is a utility-belt library for JavaScript that provides 12 | support for the usual functional suspects (each, map, reduce, filter...) 13 | without extending any core JavaScript objects. 14 | 15 | For Docs, License, Tests, and pre-packed downloads, see: 16 | http://underscorejs.org 17 | 18 | Underscore is an open-sourced component of DocumentCloud: 19 | https://github.com/documentcloud 20 | 21 | Many thanks to our contributors: 22 | https://github.com/jashkenas/underscore/contributors 23 | -------------------------------------------------------------------------------- /roboblocks/examples/01-variables.bly: -------------------------------------------------------------------------------- 1 | i0n10iADDi1nADDn1 -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2014, Víctor R. Ruiz 2 | All rights reserved. 3 | 4 | Redistribution and use in source and binary forms, with or without 5 | modification, are permitted provided that the following conditions are met: 6 | 7 | * Redistributions of source code must retain the above copyright notice, this 8 | list of conditions and the following disclaimer. 9 | 10 | * Redistributions in binary form must reproduce the above copyright notice, 11 | this list of conditions and the following disclaimer in the documentation 12 | and/or other materials provided with the distribution. 13 | 14 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 15 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 17 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 18 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 20 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 21 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 22 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 23 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24 | -------------------------------------------------------------------------------- /roboblocks/html/lang.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | /* global RoboBlocks, options */ 3 | RoboBlocks.locales = { 4 | defaultLanguage: {}, 5 | languages: [] 6 | }; 7 | RoboBlocks.locales.getLang = function() { 8 | return this.defaultLanguage.lngCode; 9 | }; 10 | RoboBlocks.locales.getKey = function(key) { 11 | return this.defaultLanguage[key]; 12 | }; 13 | RoboBlocks.locales.setDefaultLang = function(langCode) { 14 | for (var i in this.languages) { 15 | if (this.languages[i].langCode === langCode) { 16 | this.defaultLanguage = this.languages[i].values; 17 | this.defaultLanguage.lngCode=langCode; 18 | } 19 | } 20 | }; 21 | RoboBlocks.locales.add = function(langCode, values) { 22 | if (!langCode) { 23 | return this.defaultLanguage; 24 | } 25 | if (langCode && !values) { 26 | if (!this.languages[langCode]) { 27 | throw new Error('Unknown language : ' + langCode); 28 | } 29 | //this.defaultLanguage = langCode; 30 | } 31 | if (values || !this.languages[langCode]) { 32 | this.languages.push({ 33 | langCode: langCode, 34 | values: values 35 | }); 36 | } 37 | return this; 38 | }; 39 | RoboBlocks.locales.initialize = function() { 40 | var lang = options.lang || window.roboblocksLanguage || 'en-GB'; 41 | this.setDefaultLang(lang); 42 | return this; 43 | }; 44 | -------------------------------------------------------------------------------- /src/settingsstore.h: -------------------------------------------------------------------------------- 1 | #ifndef SETTINGSSTORE_H 2 | #define SETTINGSSTORE_H 3 | 4 | #include 5 | #include 6 | #include 7 | #include 8 | 9 | #define CONFIG_INI "config.ini" 10 | 11 | class SettingsStore : public QObject 12 | { 13 | Q_OBJECT 14 | 15 | public: 16 | 17 | SettingsStore(const QString &fileName); 18 | ~SettingsStore(); 19 | bool save(); 20 | 21 | QString arduinoBoard(); 22 | QString arduinoIdePath(); 23 | QString defaultLanguage(); 24 | QString examplesPath(); 25 | QString htmlIndex(); 26 | bool iconLabels(); 27 | float zoomScale(); 28 | 29 | void copyDefaultSettings(const QString &fileName = CONFIG_INI, 30 | bool overwrite = false); 31 | void setArduinoBoard(const QString &value); 32 | void setArduinoIdePath(const QString &value); 33 | void setIconLabels(bool icon_labels); 34 | void setDefaultLanguage(const QString &value); 35 | void setExamplesPath(const QString &value); 36 | void setTmpDirName(const QString &value); 37 | void setTmpFileName(const QString &value); 38 | void setHtmlIndex(const QString &value); 39 | void setZoomScale(float value); 40 | 41 | private: 42 | QString platform; 43 | QString filename; 44 | QSettings *settings; 45 | 46 | QString relativePath(const QString &value, const QString &defaultValue); 47 | }; 48 | 49 | #endif // SETTINGSSTORE_H 50 | -------------------------------------------------------------------------------- /INSTALL: -------------------------------------------------------------------------------- 1 | HOW TO BUILD 2 | ============ 3 | 4 | The project needs Qt5 and qmake to build properly. It supports Linux, 5 | Windows and Mac platforms. 6 | 7 | 8 | Qt Creator 9 | ---------- 10 | 11 | The easiest way to build the project is using Qt Creator. Install a 12 | recent version with Qt5 support. Then open the project file src.pro 13 | and build. 14 | 15 | Command line 16 | ------------ 17 | 18 | ``` 19 | $ qmake 20 | $ make 21 | ``` 22 | 23 | 24 | Debian-based system 25 | ------------------- 26 | 27 | The project comes with debian build rules, in debian/ folder. To build it, 28 | install the required dependencies. 29 | 30 | ``` 31 | $ sudo apt-get install qtbase5-dev qt5-qmake libqt5webkit5-dev \ 32 | libqt5serialport5-dev qttools5-dev-tools libudev-dev \ 33 | build-essential debhelper 34 | $ dpkg-buildpackage 35 | ``` 36 | 37 | Fedora-based system 38 | ------------------- 39 | 40 | Install the required dependencies in Fedora 41 | 42 | ``` 43 | $ sudo dnf install qt-devel qt5-qtserialport-devel qt5-linguist qt5-qtwebkit-devel 44 | ``` 45 | 46 | Then open the ts.pro archive and change all "lupdate" by "lupdate-qt5" 47 | and all "lrelease" by "lrelease-qt5". Save changes 48 | In the console type: 49 | 50 | ``` 51 | $ make 52 | $ make install 53 | ``` 54 | 55 | If no errors appear then write 56 | 57 | ``` 58 | $ sudo mkdir /usr/share/visualino/ && cp -r roboblocks/html/ /usr/share/visualino/ 59 | ``` 60 | from the Visualino directory. 61 | 62 | -------------------------------------------------------------------------------- /roboblocks/examples/06-led-blink-for.bly: -------------------------------------------------------------------------------- 1 | i0i04HIGH12500LOW12500 -------------------------------------------------------------------------------- /roboblocks/html/javascript/highlight/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2006, Ivan Sagalaev 2 | All rights reserved. 3 | Redistribution and use in source and binary forms, with or without 4 | modification, are permitted provided that the following conditions are met: 5 | 6 | * Redistributions of source code must retain the above copyright 7 | notice, this list of conditions and the following disclaimer. 8 | * Redistributions in binary form must reproduce the above copyright 9 | notice, this list of conditions and the following disclaimer in the 10 | documentation and/or other materials provided with the distribution. 11 | * Neither the name of highlight.js nor the names of its contributors 12 | may be used to endorse or promote products derived from this software 13 | without specific prior written permission. 14 | 15 | THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY 16 | EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 17 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 18 | DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY 19 | DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 20 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 21 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 22 | ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 24 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25 | -------------------------------------------------------------------------------- /src/src.pro: -------------------------------------------------------------------------------- 1 | QT += core gui serialport widgets 2 | 3 | greaterThan(QT_MAJOR_VERSION, 4): QT += widgets webkit webkitwidgets 4 | 5 | TARGET = visualino 6 | TEMPLATE = app 7 | 8 | SOURCES += main.cpp\ 9 | mainwindow.cpp \ 10 | settingsdialog.cpp \ 11 | settingsstore.cpp \ 12 | graphwidget.cpp \ 13 | aboutdialog.cpp \ 14 | jswebhelpers.cpp \ 15 | qblockswebview.cpp 16 | 17 | HEADERS += mainwindow.h \ 18 | settingsdialog.h \ 19 | settingsstore.h \ 20 | graphwidget.h \ 21 | aboutdialog.h \ 22 | jswebhelpers.h \ 23 | qblockswebview.h 24 | 25 | FORMS += mainwindow.ui \ 26 | settingsdialog.ui \ 27 | aboutdialog.ui 28 | 29 | OTHER_FILES += ../config.ini ../ts/*.ts ../roboblocks/html/* ../icons/* 30 | 31 | RESOURCES += Resources.qrc 32 | 33 | DESTDIR = $${OUT_PWD} 34 | INSTALLS_DESTDIR = $${DESTDIR} 35 | 36 | macx { 37 | INSTALLS_DESTDIR = $${OUT_PWD}/visualino.app/Contents/MacOS/ 38 | ICON = ../icons/visualino.icns 39 | } 40 | 41 | unix { 42 | INSTALLS_DESTDIR=/usr/share/visualino/ 43 | } 44 | 45 | config.path = $${INSTALLS_DESTDIR} 46 | config.files = ../config.ini 47 | 48 | html.path = $${INSTALLS_DESTDIR}/html 49 | html.files = ../roboblocks/html/* 50 | 51 | examples.path = $${INSTALLS_DESTDIR}/examples 52 | examples.files = ../roboblocks/examples/* 53 | 54 | translation.path = $${INSTALLS_DESTDIR}/ts 55 | translation.files = ../ts/*.qm 56 | 57 | INSTALLS += config examples html translation 58 | 59 | unix { 60 | bin.path = /usr/bin/ 61 | bin.files = visualino 62 | 63 | desktop.path = /usr/share/applications/ 64 | desktop.files = ../visualino.desktop 65 | 66 | icons.path = $${INSTALLS_DESTDIR}/icons 67 | icons.files = ../icon.png 68 | 69 | INSTALLS += bin desktop icons 70 | } 71 | -------------------------------------------------------------------------------- /roboblocks/examples/03-variables-serial.bly: -------------------------------------------------------------------------------- 1 | i0n10iADDi1nADDn1i,n -------------------------------------------------------------------------------- /roboblocks/examples/07-led-knight-rider.bly: -------------------------------------------------------------------------------- 1 | pin0pin513HIGHpin200pin135HIGHpin200 -------------------------------------------------------------------------------- /roboblocks/examples/05-led-blink-3.bly: -------------------------------------------------------------------------------- 1 | i0LTi4HIGH12500LOW12500iADDi1 -------------------------------------------------------------------------------- /roboblocks/examples/10-serial-led-switch.bly: -------------------------------------------------------------------------------- 1 | message0messagemessageEQmessage48LOW12EQmessage49HIGH12 -------------------------------------------------------------------------------- /roboblocks/examples/08-led-fade.bly: -------------------------------------------------------------------------------- 1 | brigthness0brigthness025511brigthness200brigthness255011brigthness200 -------------------------------------------------------------------------------- /src/main.cpp: -------------------------------------------------------------------------------- 1 | #include "mainwindow.h" 2 | #include 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | #include "settingsstore.h" 9 | 10 | #define SPLASH 11 | 12 | int main(int argc, char *argv[]) 13 | { 14 | QApplication a(argc, argv); 15 | 16 | // Show splash 17 | #ifdef SPLASH 18 | QImage img(":/icons/splashscreen.png"); 19 | QPixmap pixmap = QPixmap::fromImage(img); 20 | QSplashScreen splash(pixmap, Qt::WindowStaysOnTopHint); 21 | splash.show(); 22 | a.processEvents(); 23 | #endif 24 | 25 | // Load Qt translations 26 | QTranslator qtTranslator; 27 | qtTranslator.load("qt_" + QLocale::system().name(), 28 | QLibraryInfo::location(QLibraryInfo::TranslationsPath)); 29 | a.installTranslator(&qtTranslator); 30 | 31 | // Load program translations 32 | SettingsStore *settings = new SettingsStore(CONFIG_INI); 33 | QString defaultLocale = settings->defaultLanguage(); 34 | delete settings; 35 | 36 | QTranslator appTranslator; 37 | QString tsFile = "visualino_" + defaultLocale.toLower(); 38 | QStringList directories; 39 | // List of directories to search 40 | // In Windows and Mac, the translation files must be located in the same 41 | // directory than the executable. In Linux, search also in /usr/share/. 42 | directories.append("./ts/"); 43 | directories.append(a.applicationDirPath() + "/ts/"); 44 | directories.append("/usr/share/visualino/ts/"); 45 | foreach (QString directory, directories) { 46 | bool loaded = appTranslator.load(tsFile, directory); 47 | if (loaded) { 48 | a.installTranslator(&appTranslator); 49 | break; 50 | } 51 | } 52 | 53 | // Create main window 54 | MainWindow w; 55 | 56 | // Hide splash, show main window 57 | #ifdef SPLASH 58 | w.hide(); 59 | 60 | QTimer::singleShot(2500, &splash, SLOT(close())); 61 | QTimer::singleShot(1500, &w, SLOT(unhide())); 62 | #else 63 | w.show(); 64 | #endif 65 | 66 | return a.exec(); 67 | } 68 | -------------------------------------------------------------------------------- /roboblocks/html/constants.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | /* global RoboBlocks, Blockly*/ 3 | RoboBlocks.locales.initialize(); 4 | RoboBlocks.variables = {}; 5 | RoboBlocks.isVariable = function(varValue) { 6 | for (var i in Blockly.Variables.allVariables()) { 7 | if (Blockly.Variables.allVariables()[i] === varValue) { 8 | return true; 9 | } 10 | } 11 | if (RoboBlocks.variables[varValue]!==undefined){ 12 | return true; 13 | } 14 | if (varValue.search('digitalRead\\(')>=0|| varValue.search('analogRead\\(')>=0){ 15 | return true; 16 | } 17 | return false; 18 | }; 19 | 20 | RoboBlocks.findPinMode=function(dropdown_pin){ 21 | var code=''; 22 | dropdown_pin = dropdown_pin.split(';\n'); 23 | for (var j in dropdown_pin) { 24 | if (dropdown_pin[j].search('pinMode') >= 0) { 25 | code += dropdown_pin[j] + ';\n'; 26 | } else { 27 | dropdown_pin = dropdown_pin[j]; 28 | } 29 | } 30 | return {'code':code, 'pin':dropdown_pin}; 31 | }; 32 | 33 | // help URLs 34 | RoboBlocks.GITHUB_SRC_URL = 'https://github.com/bq/roboblocks/tree/master/src/'; 35 | // RGB block colors 36 | RoboBlocks.LANG_COLOUR_BQ = '#D04141'; 37 | RoboBlocks.LANG_COLOUR_ZUM = '#CC7B44'; 38 | RoboBlocks.LANG_COLOUR_SERVO = '#CECE42'; 39 | RoboBlocks.LANG_COLOUR_LCD = '#ACCE42'; 40 | RoboBlocks.LANG_COLOUR_CONTROL = '#44CC44'; 41 | RoboBlocks.LANG_COLOUR_LOGIC = '#42CE91'; 42 | RoboBlocks.LANG_COLOUR_MATH = '#42CBCE'; 43 | RoboBlocks.LANG_COLOUR_TEXT = '#42A3CE'; 44 | RoboBlocks.LANG_COLOUR_COMMUNICATION = '#4263CE'; 45 | RoboBlocks.LANG_COLOUR_ADVANCED = '#9142CE'; 46 | RoboBlocks.LANG_COLOUR_VARIABLES = '#B244CC'; 47 | RoboBlocks.LANG_COLOUR_PROCEDURES = '#CE42B3'; 48 | RoboBlocks.setColors = function(colorArray) { 49 | RoboBlocks.LANG_COLOUR_BQ = colorArray[0]; 50 | RoboBlocks.LANG_COLOUR_ZUM = colorArray[1]; 51 | RoboBlocks.LANG_COLOUR_SERVO = colorArray[2]; 52 | RoboBlocks.LANG_COLOUR_LCD = colorArray[3]; 53 | RoboBlocks.LANG_COLOUR_CONTROL = colorArray[4]; 54 | RoboBlocks.LANG_COLOUR_LOGIC = colorArray[5]; 55 | RoboBlocks.LANG_COLOUR_MATH = colorArray[6]; 56 | RoboBlocks.LANG_COLOUR_TEXT = colorArray[7]; 57 | RoboBlocks.LANG_COLOUR_COMMUNICATION = colorArray[8]; 58 | RoboBlocks.LANG_COLOUR_ADVANCED = colorArray[9]; 59 | RoboBlocks.LANG_COLOUR_VARIABLES = colorArray[10]; 60 | RoboBlocks.LANG_COLOUR_PROCEDURES = colorArray[11]; 61 | }; -------------------------------------------------------------------------------- /src/graphwidget.cpp: -------------------------------------------------------------------------------- 1 | #include "graphwidget.h" 2 | #include 3 | #include 4 | #include 5 | #include 6 | 7 | #define COLUMN_WIDTH 5 8 | #define MAX_VALUE 1 9 | #define MIN_VALUE 0 10 | 11 | GraphWidget::GraphWidget(QWidget *parent) : 12 | QWidget(parent) 13 | { 14 | count = 0; 15 | max_value = MAX_VALUE; 16 | min_value = MIN_VALUE; 17 | font = new QFont("Courier", 8); 18 | } 19 | 20 | GraphWidget::~GraphWidget() { 21 | delete font; 22 | } 23 | 24 | void GraphWidget::append(long point) { 25 | if (data.count() == MAX_DATA) { 26 | // Remove first point 27 | data.removeFirst(); 28 | // Autoresize 29 | max_value = data.at(0); 30 | min_value = data.at(0); 31 | for (int i = 1; i < data.count(); i++) { 32 | long value = data.at(i); 33 | if (max_value < value) { 34 | max_value = value; 35 | } 36 | if (min_value > value) { 37 | min_value = value; 38 | } 39 | } 40 | } 41 | data.append(point); 42 | // Autoresize 43 | if (max_value < point) { 44 | max_value = point; 45 | } 46 | if (min_value > point) { 47 | min_value = point; 48 | } 49 | // Draw new data point 50 | repaint(); 51 | } 52 | 53 | 54 | void GraphWidget::paintEvent(QPaintEvent *event) { 55 | if (data.count() == 0) return; 56 | 57 | QPainter p(this); 58 | QSize s = size(); 59 | 60 | int num_columns = s.width() / COLUMN_WIDTH; 61 | 62 | // Ticks 63 | p.setPen(Qt::gray); 64 | p.setFont(*font); 65 | int div = 10; 66 | if (s.height() < 400) div = 5; 67 | for (int n = 1; n <= div; n++) { 68 | int y = s.height() / div * n; 69 | p.drawLine(0, y, s.width(), y); 70 | QString value(QString::number(max_value / div * (div - n))); 71 | p.drawText(0, y - 1, value); 72 | } 73 | p.drawLine(0, 0, s.width(), 0); 74 | p.drawText(0, 10, QString::number(max_value)); 75 | 76 | // Draw columns, from last to first 77 | int i = data.count() - 1; 78 | int n = 1; 79 | while (i >= 0 && n <= num_columns) { 80 | // Draw rectangle 81 | p.fillRect(s.width() - COLUMN_WIDTH * n + 1, 82 | s.height(), 83 | COLUMN_WIDTH - 1, 84 | -(s.height() * data.at(i) / max_value), 85 | QColor(134, 196, 64, 170)); 86 | i--; 87 | n++; 88 | } 89 | } 90 | -------------------------------------------------------------------------------- /roboblocks/html/javascript/highlight/styles/default.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Original style from softwaremaniacs.org (c) Ivan Sagalaev 4 | 5 | */ 6 | 7 | .hljs { 8 | display: block; 9 | overflow-x: none; 10 | padding: 0.5em; 11 | background: #f0f0f0; 12 | -webkit-text-size-adjust: none; 13 | } 14 | 15 | .hljs, 16 | .hljs-subst, 17 | .hljs-tag .hljs-title, 18 | .nginx .hljs-title { 19 | color: black; 20 | } 21 | 22 | .hljs-string, 23 | .hljs-title, 24 | .hljs-constant, 25 | .hljs-parent, 26 | .hljs-tag .hljs-value, 27 | .hljs-rule .hljs-value, 28 | .hljs-preprocessor, 29 | .hljs-pragma, 30 | .hljs-name, 31 | .haml .hljs-symbol, 32 | .ruby .hljs-symbol, 33 | .ruby .hljs-symbol .hljs-string, 34 | .hljs-template_tag, 35 | .django .hljs-variable, 36 | .smalltalk .hljs-class, 37 | .hljs-addition, 38 | .hljs-flow, 39 | .hljs-stream, 40 | .bash .hljs-variable, 41 | .pf .hljs-variable, 42 | .apache .hljs-tag, 43 | .apache .hljs-cbracket, 44 | .tex .hljs-command, 45 | .tex .hljs-special, 46 | .erlang_repl .hljs-function_or_atom, 47 | .asciidoc .hljs-header, 48 | .markdown .hljs-header, 49 | .coffeescript .hljs-attribute, 50 | .tp .hljs-variable { 51 | color: #800; 52 | } 53 | 54 | .smartquote, 55 | .hljs-comment, 56 | .hljs-annotation, 57 | .diff .hljs-header, 58 | .hljs-chunk, 59 | .asciidoc .hljs-blockquote, 60 | .markdown .hljs-blockquote { 61 | color: #888; 62 | } 63 | 64 | .hljs-number, 65 | .hljs-date, 66 | .hljs-regexp, 67 | .hljs-literal, 68 | .hljs-hexcolor, 69 | .smalltalk .hljs-symbol, 70 | .smalltalk .hljs-char, 71 | .go .hljs-constant, 72 | .hljs-change, 73 | .lasso .hljs-variable, 74 | .makefile .hljs-variable, 75 | .asciidoc .hljs-bullet, 76 | .markdown .hljs-bullet, 77 | .asciidoc .hljs-link_url, 78 | .markdown .hljs-link_url { 79 | color: #080; 80 | } 81 | 82 | .hljs-label, 83 | .ruby .hljs-string, 84 | .hljs-decorator, 85 | .hljs-filter .hljs-argument, 86 | .hljs-localvars, 87 | .hljs-array, 88 | .hljs-attr_selector, 89 | .hljs-important, 90 | .hljs-pseudo, 91 | .hljs-pi, 92 | .haml .hljs-bullet, 93 | .hljs-doctype, 94 | .hljs-deletion, 95 | .hljs-envvar, 96 | .hljs-shebang, 97 | .apache .hljs-sqbracket, 98 | .nginx .hljs-built_in, 99 | .tex .hljs-formula, 100 | .erlang_repl .hljs-reserved, 101 | .hljs-prompt, 102 | .asciidoc .hljs-link_label, 103 | .markdown .hljs-link_label, 104 | .vhdl .hljs-attribute, 105 | .clojure .hljs-attribute, 106 | .asciidoc .hljs-attribute, 107 | .lasso .hljs-attribute, 108 | .coffeescript .hljs-property, 109 | .hljs-phony { 110 | color: #88f; 111 | } 112 | 113 | .hljs-keyword, 114 | .hljs-id, 115 | .hljs-title, 116 | .hljs-built_in, 117 | .css .hljs-tag, 118 | .hljs-doctag, 119 | .smalltalk .hljs-class, 120 | .hljs-winutils, 121 | .bash .hljs-variable, 122 | .pf .hljs-variable, 123 | .apache .hljs-tag, 124 | .hljs-type, 125 | .hljs-typename, 126 | .tex .hljs-command, 127 | .asciidoc .hljs-strong, 128 | .markdown .hljs-strong, 129 | .hljs-request, 130 | .hljs-status, 131 | .tp .hljs-data, 132 | .tp .hljs-io { 133 | font-weight: bold; 134 | } 135 | 136 | .asciidoc .hljs-emphasis, 137 | .markdown .hljs-emphasis, 138 | .tp .hljs-units { 139 | font-style: italic; 140 | } 141 | 142 | .nginx .hljs-built_in { 143 | font-weight: normal; 144 | } 145 | 146 | .coffeescript .javascript, 147 | .javascript .xml, 148 | .lasso .markup, 149 | .tex .hljs-formula, 150 | .xml .javascript, 151 | .xml .vbscript, 152 | .xml .css, 153 | .xml .hljs-cdata { 154 | opacity: 0.5; 155 | } 156 | -------------------------------------------------------------------------------- /src/mainwindow.h: -------------------------------------------------------------------------------- 1 | #ifndef MAINWINDOW_H 2 | #define MAINWINDOW_H 3 | 4 | #include "graphwidget.h" 5 | #include "jswebhelpers.h" 6 | #include "settingsdialog.h" 7 | #include "settingsstore.h" 8 | 9 | #include 10 | #include 11 | #include 12 | #include 13 | 14 | namespace Ui { 15 | class MainWindow; 16 | } 17 | 18 | class MainWindow : public QMainWindow 19 | { 20 | Q_OBJECT 21 | 22 | public: 23 | explicit MainWindow(QWidget *parent = 0); 24 | ~MainWindow(); 25 | 26 | private: 27 | Ui::MainWindow *ui; 28 | QProcess *process; 29 | SettingsStore *settings; 30 | QString xmlFileName; 31 | QString xmlLoadContent; 32 | QStringList serialPortList; 33 | QSerialPort *serial; 34 | QString dataString; 35 | QList graphList; 36 | QStringList documentHistory; 37 | JsWebHelpers *webHelper; 38 | bool sourceChanging; 39 | bool sourceChanged; 40 | int documentHistoryStep; 41 | 42 | QString tmpDirName; 43 | QString tmpFileName; 44 | 45 | void actionSaveAndSaveAs(bool askFileName, const QString &directory = ""); 46 | void actionOpenInclude(const QString &title, 47 | bool clear = true, 48 | const QString &directory = ""); 49 | void arduinoExec(const QString &action); 50 | void documentHistoryReset(); 51 | QString escapeCharacters(const QString& string); 52 | QString getXml(); 53 | QString getCode(); 54 | void setXml(const QString &xml, bool clear = false); 55 | void iconLabels(); 56 | bool isCommaSeparatedNumbers(const QString data); 57 | bool listIsEqual(const QStringList &listOne, const QStringList &listTwo); 58 | void loadBlockly(); 59 | void openFileToWorkspace(const QString &xmlFileName, 60 | bool clear = true); 61 | void setArduinoBoard(); 62 | void setXmlFileName(const QString &fileName); 63 | void serialPortOpen(); 64 | void serialPortClose(); 65 | QStringList portList(); 66 | int saveXml(const QString &xmlFilePath); 67 | int saveSketch(const QString &inoFilePath); 68 | int checkSourceChanged(); 69 | 70 | void closeEvent(QCloseEvent *bar); 71 | 72 | protected: 73 | bool eventFilter(QObject *obj, QEvent *event); 74 | 75 | public slots: 76 | void actionAbout(); 77 | void actionCloseMessages(); 78 | void actionCode(); 79 | void actionExamples(); 80 | void actionExportSketch(); 81 | void actionIconLabels(); 82 | void actionInclude(); 83 | void actionInjectWebHelper(); 84 | void actionInsertLanguage(); 85 | void actionMessages(); 86 | void actionMonitor(); 87 | void actionMonitorSend(); 88 | void actionNew(); 89 | void actionOpen(); 90 | void actionOpenMessages(); 91 | void actionGraph(); 92 | void actionQuit(); 93 | void actionDocumentRedo(); 94 | void actionDocumentUndo(); 95 | void actionUpload(); 96 | void actionVerify(); 97 | void actionSave(); 98 | void actionSaveAs(); 99 | void actionSettings(); 100 | void actionZoomIn(); 101 | void actionZoomOut(); 102 | void onBoardChanged(); 103 | void onLoadFinished(bool finished); 104 | void onProcessFinished(int exitCode); 105 | void onProcessOutputUpdated(); 106 | void onProcessStarted(); 107 | void onSourceChanged(); 108 | void onStatusMessageChanged(const QString &message); 109 | void readSerial(); 110 | void unhide(); 111 | void updateSerialPorts(); 112 | }; 113 | 114 | #endif // MAINWINDOW_H 115 | -------------------------------------------------------------------------------- /debian/changelog: -------------------------------------------------------------------------------- 1 | visualino (0.7) wily; urgency=medium 2 | 3 | * Blocks for typed variables. 4 | * Block for serial.parseInt(). 5 | * Block for millis(). 6 | * Zoom in/out. 7 | * Add support for Arduino Duemilanove. 8 | * Add fields to setup LCD pins. 9 | * Fix problem with && operator in functions. 10 | * Blockly: Fix issue with xml.childNodes returning twice one element. 11 | 12 | -- Víctor R. Ruiz Sat, 06 Feb 2016 15:15:10 +0000 13 | 14 | visualino (0.6.2) wily; urgency=medium 15 | 16 | * Add Russian to dropdown list. 17 | 18 | -- Víctor R. Ruiz Wed, 16 Dec 2015 13:22:33 +0000 19 | 20 | visualino (0.6.1) wily; urgency=medium 21 | 22 | * Update examples with setupLoop block. 23 | * Add setupLoop block. 24 | * Update roboblocks (do/while). 25 | * Fix #15: Delete key in Mac makes the environment to disappear. 26 | * Smaller inline block images. 27 | * Update contributors. 28 | * Polish translation. 29 | * Russian translation. 30 | * Assign colors to block menus. 31 | * Syntax highlighting. 32 | * Polish UI translation. 33 | * Warning for unsaved changes. 34 | 35 | -- Víctor R. Ruiz Sun, 13 Dec 2015 00:56:44 +0000 36 | 37 | visualino (0.5.2) utopic; urgency=medium 38 | 39 | * Ubuntu PPA. 40 | 41 | -- Víctor R. Ruiz Sat, 18 Apr 2015 02:52:24 +0100 42 | 43 | visualino (0.5) utopic; urgency=medium 44 | 45 | * IDE: Add Examples feature. First batch of examples. 46 | * IDE: Fix write in serial. 47 | * IDE: Change label Settings to Preferences for coherence. 48 | * IDE: Show/hide icon labels. 49 | * About text modification. 50 | * IDE: Add about dialog. 51 | * IDE: Add restore defaults option to settings. 52 | * Change default config for Windows. This closes #1 #2 #3 53 | * IDE: Show labels for icons. 54 | * Graph: Support for multiple values 55 | * Graph: Fix remove first. 56 | * Contributors file. 57 | * Translation to Catalonian, by Jordi Binefa @JordiBinefa 58 | 59 | -- Víctor R. Ruiz Sun, 05 Apr 2015 22:47:14 +0100 60 | 61 | visualino (0.4) utopic; urgency=medium 62 | 63 | * Graph support. 64 | 65 | -- Víctor R. Ruiz Sun, 29 Mar 2015 21:41:15 +0100 66 | 67 | visualino (0.3-1) utopic; urgency=medium 68 | 69 | * Mac OS X specific paths and settings. 70 | * App icon for Mac OSX. 71 | * Remove unwanted toolbar. 72 | * Fix serial port naming in MacOSX. 73 | * Menu option for show/hide code view. 74 | 75 | -- Víctor R. Ruiz Wed, 11 Mar 2015 23:24:39 +0000 76 | 77 | visualino (0.3) utopic; urgency=medium 78 | 79 | * Include file support. 80 | * Remove debug line. 81 | * L10N support. 82 | * Support for Save as... 83 | * Show file name in status bar. 84 | * Export as sketch. 85 | * Clear workspace on open. 86 | * Monospaced font for console. Fix serial port combo update. 87 | * Remove unwanted toolbar. 88 | * Save selected board in settings file. 89 | 90 | -- Víctor R. Ruiz Sun, 08 Mar 2015 16:05:39 +0000 91 | 92 | visualino (0.2-1) utopic; urgency=medium 93 | 94 | * Set monitor action as checkable. 95 | * Roboblocks: Scrollbar for code block. 96 | * Fix save menu (connect to action). 97 | 98 | -- Víctor R. Ruiz Sun, 01 Mar 2015 12:27:17 +0000 99 | 100 | visualino (0.2) utopic; urgency=medium 101 | 102 | * Settings dialog. 103 | * Monitor dialog. 104 | * Included Roboblock sources. 105 | 106 | -- Víctor R. Ruiz Sat, 28 Feb 2015 20:53:53 +0000 107 | 108 | visualino (0.1) utopic; urgency=low 109 | 110 | * Initial release 111 | 112 | -- Víctor R. Ruiz Tue, 03 Feb 2015 00:26:56 +0000 113 | -------------------------------------------------------------------------------- /roboblocks/html/javascript/highlight/README.ru.md: -------------------------------------------------------------------------------- 1 | # Highlight.js 2 | 3 | Highlight.js — это подсветчик синтаксиса, написанный на JavaScript. Он работает 4 | и в браузере, и на сервере. Он работает с практически любой HTML разметкой, не 5 | зависит от каких-либо фреймворков и умеет автоматически определять язык. 6 | 7 | 8 | ## Начало работы 9 | 10 | Минимум, что нужно сделать для использования highlight.js на веб-странице — это 11 | подключить библиотеку, CSS-стили и вызывать [`initHighlightingOnLoad`][1]: 12 | 13 | ```html 14 | 15 | 16 | 17 | ``` 18 | 19 | Библиотека найдёт и раскрасит код внутри тегов `
`, попытавшись
 20 | автоматически определить язык. Когда автоопределение не срабатывает, можно явно
 21 | указать язык в атрибуте class:
 22 | 
 23 | ```html
 24 | 
...
25 | ``` 26 | 27 | Список поддерживаемых классов языков доступен в [справочнике по классам][8]. 28 | Класс также можно предваоить префиксами `language-` или `lang-`. 29 | 30 | Чтобы отключить подсветку для какого-то блока, используйте класс `nohighlight`: 31 | 32 | ```html 33 |
...
34 | ``` 35 | 36 | ## Инициализация вручную 37 | 38 | Чтобы иметь чуть больше контроля за инициализацией подсветки, вы можете 39 | использовать функции [`highlightBlock`][2] и [`configure`][3]. Таким образом 40 | можно управлять тем, *что* подсвечивать и *когда*. 41 | 42 | Вот пример инициализация, эквивалентной вызову [`initHighlightingOnLoad`][1], но 43 | с использованием jQuery: 44 | 45 | ```javascript 46 | $(document).ready(function() { 47 | $('pre code').each(function(i, block) { 48 | hljs.highlightBlock(block); 49 | }); 50 | }); 51 | ``` 52 | 53 | Вы можете использовать любые теги разметки вместо `
`. Если
 54 | используете контейнер, не сохраняющий переводы строк, вам нужно сказать
 55 | highlight.js использовать для них тег `
`: 56 | 57 | ```javascript 58 | hljs.configure({useBR: true}); 59 | 60 | $('div.code').each(function(i, block) { 61 | hljs.highlightBlock(block); 62 | }); 63 | ``` 64 | 65 | Другие опции можно найти в документации функции [`configure`][3]. 66 | 67 | 68 | ## Установка библиотеки 69 | 70 | Highlight.js можно использовать в браузере прямо с CDN хостинга или скачать 71 | индивидуальную сборку, а также установив модуль на сервере. На 72 | [страница загрузки][4] подробно описаны все варианты. 73 | 74 | Обратите внимание, что библиотека не предназначена для использования в виде 75 | исходного кода на GitHub, а требует отдельной сборки. Если вам не подходит ни 76 | один из готовых вариантов, читайте [документацию по сборке][5]. 77 | 78 | 79 | ## Лицензия 80 | 81 | Highlight.js распространяется под лицензией BSD. Подробнее читайте файл 82 | [LICENSE][10]. 83 | 84 | 85 | ## Ссылки 86 | 87 | Официальный сайт билиотеки расположен по адресу . 88 | 89 | Более подробная документация по API и другим темам расположена на 90 | . 91 | 92 | Авторы и контрибьютора перечислена в файле [AUTHORS.ru.txt][9] file. 93 | 94 | [1]: http://highlightjs.readthedocs.org/en/latest/api.html#inithighlightingonload 95 | [2]: http://highlightjs.readthedocs.org/en/latest/api.html#highlightblock-block 96 | [3]: http://highlightjs.readthedocs.org/en/latest/api.html#configure-options 97 | [4]: https://highlightjs.org/download/ 98 | [5]: http://highlightjs.readthedocs.org/en/latest/building-testing.html 99 | [8]: http://highlightjs.readthedocs.org/en/latest/css-classes-reference.html 100 | [9]: https://github.com/isagalaev/highlight.js/blob/master/AUTHORS.ru.txt 101 | [10]: https://github.com/isagalaev/highlight.js/blob/master/LICENSE 102 | -------------------------------------------------------------------------------- /src/settingsdialog.cpp: -------------------------------------------------------------------------------- 1 | #include "settingsdialog.h" 2 | #include "ui_settingsdialog.h" 3 | 4 | #include 5 | #include 6 | #include 7 | #include 8 | #include 9 | 10 | SettingsDialog::SettingsDialog(SettingsStore *settings, 11 | const QStringList &languageList, 12 | QWidget *parent) : 13 | QDialog(parent), 14 | ui(new Ui::SettingsDialog) 15 | { 16 | ui->setupUi(this); 17 | 18 | // Set values 19 | ui->arduinoIdePathEdit->setText(settings->arduinoIdePath()); 20 | 21 | // Set values for list of languages. languageList must be in 22 | // "languageCode-countryCode" format (e.g. "en-US"). 23 | ui->languageBox->clear(); 24 | this->languageList = languageList; 25 | // Generate a list with the language names for the combo box 26 | foreach (QString language, languageList) { 27 | QLocale locale(language); 28 | QString languageName = QString("%1 (%2)"). 29 | arg(QLocale::languageToString(locale.language())). 30 | arg(QLocale::countryToString(locale.country())); 31 | ui->languageBox->addItem(languageName); 32 | } 33 | // Set active language in the combo box, according to the setting 34 | ui->languageBox->setCurrentIndex( 35 | languageList.indexOf(settings->defaultLanguage())); 36 | 37 | this->settings = settings; 38 | settingsChanged = false; 39 | 40 | // Connect restore default button signal to slot. Can't be done in Qt Creator 41 | QPushButton *restoreButton = ui->buttonBox->button( 42 | QDialogButtonBox::RestoreDefaults); 43 | connect(restoreButton, 44 | SIGNAL(clicked(bool)), 45 | this, 46 | SLOT(restoreSettings())); 47 | } 48 | 49 | SettingsDialog::~SettingsDialog() 50 | { 51 | delete ui; 52 | } 53 | 54 | bool SettingsDialog::changed() { 55 | return settingsChanged; 56 | } 57 | 58 | void SettingsDialog::accept() { 59 | // Save settings to file and close dialog 60 | if (ui->arduinoIdePathEdit->text() != settings->arduinoIdePath()) { 61 | settings->setArduinoIdePath(ui->arduinoIdePathEdit->text()); 62 | settingsChanged = true; 63 | } 64 | 65 | // Convert selected item in the combo box to selected language 66 | QString language = languageList.at(ui->languageBox->currentIndex()); 67 | if (language != settings->defaultLanguage()) { 68 | settings->setDefaultLanguage(language); 69 | settingsChanged = true; 70 | } 71 | 72 | done(QDialog::Accepted); 73 | } 74 | 75 | void SettingsDialog::reject() { 76 | // Discard changes and close dialog 77 | done(QDialog::Rejected); 78 | } 79 | 80 | void SettingsDialog::arduinoIdePathOpenDialog() { 81 | // Show open file dialog 82 | QString newPath = QFileDialog::getOpenFileName( 83 | this, 84 | tr("Arduino IDE"), 85 | settings->arduinoIdePath() 86 | ); 87 | if (!newPath.isNull()) ui->arduinoIdePathEdit->setText(newPath); 88 | } 89 | 90 | void SettingsDialog::restoreSettings() { 91 | // Restore default settings 92 | QMessageBox::StandardButton confirm; 93 | // Confirm 94 | confirm = QMessageBox::question(this, 95 | tr("Default settings"), 96 | tr("Are you sure? This will " 97 | "erase your current preferences " 98 | "and replace them with the " 99 | "defaults."), 100 | QMessageBox::Yes | QMessageBox::No); 101 | if (confirm == QMessageBox::Yes) { 102 | // Do restore 103 | settings->copyDefaultSettings(CONFIG_INI, true); 104 | settingsChanged = true; 105 | done(QDialog::Accepted); 106 | } 107 | } 108 | -------------------------------------------------------------------------------- /roboblocks/html/javascript/highlight/README.md: -------------------------------------------------------------------------------- 1 | # Highlight.js 2 | 3 | [![Build Status](https://travis-ci.org/isagalaev/highlight.js.svg?branch=master)](https://travis-ci.org/isagalaev/highlight.js) 4 | 5 | Highlight.js is a syntax highlighter written in JavaScript. It works in 6 | the browser as well as on the server. It works with pretty much any 7 | markup, doesn’t depend on any framework and has automatic language 8 | detection. 9 | 10 | ## Getting Started 11 | 12 | The bare minimum for using highlight.js on a web page is linking to the 13 | library along with one of the styles and calling 14 | [`initHighlightingOnLoad`][1]: 15 | 16 | ```html 17 | 18 | 19 | 20 | ``` 21 | 22 | This will find and highlight code inside of `
` tags; it tries
 23 | to detect the language automatically. If automatic detection doesn’t
 24 | work for you, you can specify the language in the `class` attribute:
 25 | 
 26 | ```html
 27 | 
...
28 | ``` 29 | 30 | The list of supported language classes is available in the [class 31 | reference][2]. Classes can also be prefixed with either `language-` or 32 | `lang-`. 33 | 34 | To disable highlighting altogether use the `nohighlight` class: 35 | 36 | ```html 37 |
...
38 | ``` 39 | 40 | ## Custom Initialization 41 | 42 | When you need a bit more control over the initialization of 43 | highlight.js, you can use the [`highlightBlock`][3] and [`configure`][4] 44 | functions. This allows you to control *what* to highlight and *when*. 45 | 46 | Here’s an equivalent way to calling [`initHighlightingOnLoad`][1] using 47 | jQuery: 48 | 49 | ```javascript 50 | $(document).ready(function() { 51 | $('pre code').each(function(i, block) { 52 | hljs.highlightBlock(block); 53 | }); 54 | }); 55 | ``` 56 | 57 | You can use any tags instead of `
` to mark up your code. If
 58 | you don't use a container that preserve line breaks you will need to
 59 | configure highlight.js to use the `
` tag: 60 | 61 | ```javascript 62 | hljs.configure({useBR: true}); 63 | 64 | $('div.code').each(function(i, block) { 65 | hljs.highlightBlock(block); 66 | }); 67 | ``` 68 | 69 | For other options refer to the documentation for [`configure`][4]. 70 | 71 | ## Getting the Library 72 | 73 | You can get highlight.js as a hosted, or custom-build, browser script or 74 | as a server module. Right out of the box the browser script supports 75 | both AMD and CommonJS, so if you wish you can use RequireJS or 76 | Browserify without having to build from source. The server module also 77 | works perfectly fine with Browserify, but there is the option to use a 78 | build specific to browsers rather than something meant for a server. 79 | Head over to the [download page][5] for all the options. 80 | 81 | **Note:** the library is not supposed to work straight from the source 82 | on GitHub; it requires building. If none of the pre-packaged options 83 | work for you refer to the [building documentation][6]. 84 | 85 | ## License 86 | 87 | Highlight.js is released under the BSD License. See [LICENSE][7] file 88 | for details. 89 | 90 | ## Links 91 | 92 | The official site for the library is at . 93 | 94 | Further in-depth documentation for the API and other topics is at 95 | . 96 | 97 | Authors and contributors are listed in the [AUTHORS.en.txt][8] file. 98 | 99 | [1]: http://highlightjs.readthedocs.org/en/latest/api.html#inithighlightingonload 100 | [2]: http://highlightjs.readthedocs.org/en/latest/css-classes-reference.html 101 | [3]: http://highlightjs.readthedocs.org/en/latest/api.html#highlightblock-block 102 | [4]: http://highlightjs.readthedocs.org/en/latest/api.html#configure-options 103 | [5]: https://highlightjs.org/download/ 104 | [6]: http://highlightjs.readthedocs.org/en/latest/building-testing.html 105 | [7]: https://github.com/isagalaev/highlight.js/blob/master/LICENSE 106 | [8]: https://github.com/isagalaev/highlight.js/blob/master/AUTHORS.en.txt 107 | -------------------------------------------------------------------------------- /src/aboutdialog.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | AboutDialog 4 | 5 | 6 | 7 | 0 8 | 0 9 | 518 10 | 439 11 | 12 | 13 | 14 | Dialog 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | :/icons/about-header.png 24 | 25 | 26 | 27 | 28 | 29 | 30 | <html><head/><body><p>Visualino is open source software (MIT license). Visit the web site at <a href="http://www.visualino.net/"><span style=" text-decoration: underline; color:#0000ff;">visualino.net</span></a>.</p><p align="center">2014-2016 Víctor R. Ruiz &lt;<a href="mailto:rvr@linotipo.es"><span style=" text-decoration: underline; color:#0000ff;">rvr@linotipo.es</span></a>&gt;</p><p>It uses the following open source projects:</p><ul style="margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-list-indent: 1;"><li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://www.qt.io/"><span style=" text-decoration: underline; color:#0000ff;">Qt 5</span></a>, The Qt Company (LGPL license 2.1).</li><li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="https://developers.google.com/blockly/"><span style=" text-decoration: underline; color:#0000ff;">Google Blockly</span></a> (MIT license).</li><li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="https://github.com/bq/roboblocks"><span style=" text-decoration: underline; color:#0000ff;">Roboblocks</span></a>, bq (LGPL license).</li></ul><p>This project is done with the help of <a href="http://www.facebook.com/groups/arduinograncanaria"><span style=" text-decoration: underline; color:#0000ff;">Arduino Gran Canaria</span></a> members and other <a href="https://github.com/vrruiz/visualino/blob/master/AUTHORS"><span style=" text-decoration: underline; color:#0000ff;">contributors</span></a>.</p></body></html> 31 | 32 | 33 | true 34 | 35 | 36 | 20 37 | 38 | 39 | 40 | 41 | 42 | 43 | Qt::Horizontal 44 | 45 | 46 | QDialogButtonBox::Ok 47 | 48 | 49 | false 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | buttonBox 61 | accepted() 62 | AboutDialog 63 | accept() 64 | 65 | 66 | 248 67 | 254 68 | 69 | 70 | 157 71 | 274 72 | 73 | 74 | 75 | 76 | buttonBox 77 | rejected() 78 | AboutDialog 79 | reject() 80 | 81 | 82 | 316 83 | 260 84 | 85 | 86 | 286 87 | 274 88 | 89 | 90 | 91 | 92 | 93 | -------------------------------------------------------------------------------- /roboblocks/html/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Visualino - RoboBlocks PlayGround 7 | 8 | 9 | 10 | 11 | 14 |
15 |
16 |
17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 108 | 109 | 110 | -------------------------------------------------------------------------------- /roboblocks/html/javascript/blockly-bq/arduino_compressed.js: -------------------------------------------------------------------------------- 1 | // Do not edit this file; automatically generated by build.py. 2 | "use strict"; 3 | 4 | Blockly.Msg.DUPLICATE_BLOCK="Duplicate";Blockly.Msg.REMOVE_COMMENT="Remove Comment";Blockly.Msg.ADD_COMMENT="Add Comment";Blockly.Msg.EXTERNAL_INPUTS="External Inputs";Blockly.Msg.INLINE_INPUTS="Inline Inputs";Blockly.Msg.DELETE_BLOCK="Delete Block";Blockly.Msg.DELETE_X_BLOCKS="Delete %1 Blocks";Blockly.Msg.COLLAPSE_BLOCK="Collapse Block";Blockly.Msg.EXPAND_BLOCK="Expand Block";Blockly.Msg.DISABLE_BLOCK="Disable Block";Blockly.Msg.ENABLE_BLOCK="Enable Block";Blockly.Msg.HELP="Help"; 5 | Blockly.Msg.COLLAPSE_ALL="Collapse Blocks";Blockly.Msg.EXPAND_ALL="Expand Blocks";Blockly.Arduino=new Blockly.Generator("Arduino");Blockly.Arduino.RESERVED_WORDS_||(Blockly.Arduino.RESERVED_WORDS_="");Blockly.Arduino.RESERVED_WORDS_+="setup,loop,if,else,for,switch,case,while,do,break,continue,return,goto,define,include,HIGH,LOW,INPUT,OUTPUT,INPUT_PULLUP,true,false,interger, constants,floating,point,void,bookean,char,unsigned,byte,int,word,long,float,double,string,String,array,static, volatile,const,sizeof,pinMode,digitalWrite,digitalRead,analogReference,analogRead,analogWrite,tone,noTone,shiftOut,shitIn,pulseIn,millis,micros,delay,delayMicroseconds,min,max,abs,constrain,map,pow,sqrt,sin,cos,tan,randomSeed,random,lowByte,highByte,bitRead,bitWrite,bitSet,bitClear,bit,attachInterrupt,detachInterrupt,interrupts,noInterrupts"; 6 | Blockly.Arduino.ORDER_ATOMIC=0;Blockly.Arduino.ORDER_UNARY_POSTFIX=1;Blockly.Arduino.ORDER_UNARY_PREFIX=2;Blockly.Arduino.ORDER_MULTIPLICATIVE=3;Blockly.Arduino.ORDER_ADDITIVE=4;Blockly.Arduino.ORDER_SHIFT=5;Blockly.Arduino.ORDER_RELATIONAL=6;Blockly.Arduino.ORDER_EQUALITY=7;Blockly.Arduino.ORDER_BITWISE_AND=8;Blockly.Arduino.ORDER_BITWISE_XOR=9;Blockly.Arduino.ORDER_BITWISE_OR=10;Blockly.Arduino.ORDER_LOGICAL_AND=11;Blockly.Arduino.ORDER_LOGICAL_OR=12;Blockly.Arduino.ORDER_CONDITIONAL=13; 7 | Blockly.Arduino.ORDER_ASSIGNMENT=14;Blockly.Arduino.ORDER_NONE=99;var profile={arduino:{description:"Arduino standard-compatible board",digital:[["1","1"],["2","2"],["3","3"],["4","4"],["5","5"],["6","6"],["7","7"],["8","8"],["9","9"],["10","10"],["11","11"],["12","12"],["13","13"],["A0","A0"],["A1","A1"],["A2","A2"],["A3","A3"],["A4","A4"],["A5","A5"]],analog:[["A0","A0"],["A1","A1"],["A2","A2"],["A3","A3"],["A4","A4"],["A5","A5"]],serial:9600},arduino_mega:{description:"Arduino Mega-compatible board"}}; 8 | profile["default"]=profile.arduino;Blockly.Arduino.init=function(){Blockly.Arduino.definitions_={};Blockly.Arduino.setups_={};Blockly.Variables&&(Blockly.Arduino.variableDB_?Blockly.Arduino.variableDB_.reset():Blockly.Arduino.variableDB_=new Blockly.Names(Blockly.Arduino.RESERVED_WORDS_))}; 9 | Blockly.Arduino.finish=function(a){a=" "+a.replace(/\n/g,"\n ");a=a.replace(/\n\s+$/,"\n");a="void loop() \n{\n"+a+"\n}";var d=[],c=[],b=[],e=[],f;for(f in Blockly.Arduino.definitions_)b=Blockly.Arduino.definitions_[f],b.match(/^#include/)?d.push(b):0<=f.search("declare_var")?e.push(b):c.push(b);b=Blockly.Arduino.orderDefinitions(c);c=[];for(f in Blockly.Arduino.setups_)c.push(Blockly.Arduino.setups_[f]);a=(d.join("\n")+"\n\n/*** Global variables ***/\n"+e.join("")+"\n\n/*** Function declaration ***/\n"+ 10 | b[0]+"\nvoid setup() \n{\n "+c.join("\n ")+"\n}\n\n").replace(/\n\n+/g,"\n\n").replace(/\n*$/,"\n\n\n")+a+"\n\n/*** Function definition ***/\n"+b[1];a=a.replace(/"/g,'"');a=a.replace(/&quot;/g,'"');a=a.replace(/quot;/g,'"');a=a.replace(/&/g,"&");a=a.replace(/amp;/g,"");a=a.replace(/</g,"<");a=a.replace(/lt;/g,"<");a=a.replace(/>/g,">");return a=a.replace(/gt;/g,">")}; 11 | Blockly.Arduino.orderDefinitions=function(a){var d=[],c=[],b;for(b in a){var e=a[b].substring(0,a[b].search("\\)")+1);e.replace("\n","");""!==e&&(e+=";\n",d+=e,c+=a[b])}return[d,c]};Blockly.Arduino.scrubNakedValue=function(a){return a+";\n"};Blockly.Arduino.quote_=function(a){a=a.replace(/\\/g,"\\\\").replace(/\n/g,"\\\n").replace(/\$/g,"\\$").replace(/'/g,"\\'");return'"'+a+'"'}; 12 | Blockly.Arduino.scrub_=function(a,d){if(null===d)return"";var c="";if(!a.outputConnection||!a.outputConnection.targetConnection){var b=a.getCommentText();b&&(c+=Blockly.Generator.prefixLines(b,"// ")+"\n");for(var e=0;e 7 | License: MIT 8 | 9 | Files: examples/* 10 | html/* 11 | html/img/blocks/* 12 | html/media/* 13 | Copyright: 2015 bq 14 | License: LGPL-3+ 15 | 16 | Files: html/javascript/blockly-bq/* 17 | Copyright: 2011-2014 Google Inc. 18 | 2014 bq 19 | License: Apache-2.0 20 | 21 | Files: roboblocks/* 22 | Copyright: 2014-2015 Google 23 | License: Apache 24 | 25 | Files: html/javascript/jquery/* 26 | Copyright: 2014 jQuery Foundation and other contributors 27 | License: MIT 28 | 29 | Files: html/javascript/requirejs/* 30 | Copyright: 2010-2015 The Dojo Foundation 31 | License: MIT or BSD-3-clause 32 | 33 | Files: html/javascript/underscore/* 34 | Copyright: 2009-2014 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors 35 | License: MIT 36 | 37 | Files: html/visualino.css 38 | Copyright: 2014-2015 Víctor R. Ruiz 39 | License: MIT 40 | 41 | 42 | License: Apache-2.0 43 | Licensed under the Apache License, Version 2.0 (the "License"); 44 | you may not use this file except in compliance with the License. 45 | You may obtain a copy of the License at 46 | . 47 | http://www.apache.org/licenses/LICENSE-2.0 48 | . 49 | Unless required by applicable law or agreed to in writing, software 50 | distributed under the License is distributed on an "AS IS" BASIS, 51 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 52 | See the License for the specific language governing permissions and 53 | limitations under the License. 54 | . 55 | On Debian systems, the complete text of the Apache License Version 2.0 56 | can be found in "/usr/share/common-licenses/Apache-2.0". 57 | 58 | 59 | License: BSD-3-clause 60 | Redistribution and use in source and binary forms, with or without 61 | modification, are permitted provided that the following conditions are met: 62 | . 63 | * Redistributions of source code must retain the above copyright notice, this 64 | list of conditions and the following disclaimer. 65 | . 66 | * Redistributions in binary form must reproduce the above copyright notice, 67 | this list of conditions and the following disclaimer in the documentation 68 | and/or other materials provided with the distribution. 69 | . 70 | * Neither the name of [project] nor the names of its 71 | contributors may be used to endorse or promote products derived from 72 | this software without specific prior written permission. 73 | . 74 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 75 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 76 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 77 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 78 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 79 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 80 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 81 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 82 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 83 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 84 | 85 | 86 | License: LGPL-3+ 87 | This program is free software; you can redistribute it and/or modify 88 | it under the terms of the GNU Lesser General Public License as published by 89 | the Free Software Foundation; either version 3 of the License, or 90 | (at your option) any later version. 91 | . 92 | This program is distributed in the hope that it will be useful, 93 | but WITHOUT ANY WARRANTY; without even the implied warranty of 94 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 95 | GNU Lesser General Public License for more details. 96 | . 97 | You should have received a copy of the GNU Lesser General Public License along 98 | with this program; if not, see . 99 | . 100 | On Debian systems, the complete text of the GNU Library General 101 | Public License version 3 can be found in "/usr/share/common-licenses/LGPL-3". 102 | 103 | 104 | 105 | License: MIT 106 | Permission is hereby granted, free of charge, to any person obtaining a 107 | copy of this software and associated documentation files (the "Software"), 108 | to deal in the Software without restriction, including without limitation 109 | the rights to use, copy, modify, merge, publish, distribute, sublicense, 110 | and/or sell copies of the Software, and to permit persons to whom the 111 | Software is furnished to do so, subject to the following conditions: 112 | . 113 | The above copyright notice and this permission notice shall be included 114 | in all copies or substantial portions of the Software. 115 | . 116 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 117 | OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 118 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 119 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY 120 | CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 121 | TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 122 | SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 123 | -------------------------------------------------------------------------------- /src/settingsstore.cpp: -------------------------------------------------------------------------------- 1 | #include "settingsstore.h" 2 | 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | #include 9 | #include 10 | 11 | SettingsStore::SettingsStore(const QString &fileName) { 12 | // Set platform 13 | #ifdef Q_OS_LINUX 14 | platform = "linux/"; 15 | #elif defined(Q_OS_WIN) 16 | platform = "windows/"; 17 | #elif defined(Q_OS_MAC) 18 | platform = "mac/"; 19 | #endif 20 | 21 | 22 | // Read settings file 23 | settings = new QSettings(QSettings::IniFormat, 24 | QSettings::UserScope, 25 | "visualino", 26 | "visualino"); 27 | 28 | // If IDE path is empty, copy original settings 29 | if (settings->value(platform + "arduino_ide_path", "").toString() == "") { 30 | copyDefaultSettings(fileName); 31 | } 32 | } 33 | 34 | SettingsStore::~SettingsStore() { 35 | delete settings; 36 | } 37 | 38 | 39 | QString SettingsStore::arduinoBoard() { 40 | return settings->value(platform + "arduino_board", 41 | "arduino:avr:uno").toString(); 42 | } 43 | 44 | QString SettingsStore::arduinoIdePath() { 45 | return relativePath("arduino_ide_path", "/usr/bin/arduino"); 46 | } 47 | 48 | QString SettingsStore::defaultLanguage() { 49 | return settings->value(platform + "language", "en-GB").toString(); 50 | } 51 | 52 | QString SettingsStore::examplesPath() { 53 | return settings->value(platform + "examples_path", 54 | "/usr/share/visualino/examples/").toString(); 55 | } 56 | 57 | QString SettingsStore::htmlIndex() { 58 | return relativePath("html_index", "/usr/share/visualino/html/index.html"); 59 | } 60 | 61 | bool SettingsStore::iconLabels() { 62 | return settings->value(platform + "icon_labels", true).toBool(); 63 | } 64 | 65 | float SettingsStore::zoomScale() { 66 | return settings->value(platform + "zoom_scale", 1.0).toFloat(); 67 | } 68 | 69 | 70 | void SettingsStore::copyDefaultSettings(const QString &fileName, 71 | bool overwrite) { 72 | // Locate config.ini in standard locations 73 | QString settingsFile = QStandardPaths::locate( 74 | QStandardPaths::DataLocation, 75 | fileName, 76 | QStandardPaths::LocateFile); 77 | 78 | // If couldn't locate config.ini in DataLocation dirs, 79 | // search in the binary path. 80 | if (settingsFile.isEmpty()) { 81 | settingsFile = QDir(QCoreApplication::applicationDirPath()) 82 | .filePath(fileName); 83 | } 84 | 85 | // Set final settings path 86 | QString localSettingsFile = settings->fileName(); 87 | QString localSettingsDir = QFileInfo(localSettingsFile).absolutePath(); 88 | 89 | // Free settings file 90 | delete settings; 91 | 92 | // Create directory if it doesn't exist 93 | QDir dir(localSettingsDir); 94 | if (!dir.exists()) { 95 | dir.mkpath(localSettingsDir); 96 | } 97 | 98 | // Copy settings 99 | if (overwrite == true) { 100 | // Remove if already exists 101 | QFile localSettings(localSettingsFile); 102 | if (localSettings.exists() == true) { 103 | localSettings.remove(); 104 | } 105 | } 106 | QFile::copy(settingsFile, localSettingsFile); 107 | 108 | // Reload settings 109 | settings = new QSettings(QSettings::IniFormat, 110 | QSettings::UserScope, 111 | "visualino", 112 | "visualino"); 113 | } 114 | 115 | void SettingsStore::setArduinoBoard(const QString &value) { 116 | settings->setValue(platform + "arduino_board", value); 117 | } 118 | 119 | void SettingsStore::setArduinoIdePath(const QString &value) { 120 | settings->setValue(platform + "arduino_ide_path", value); 121 | } 122 | 123 | void SettingsStore::setTmpDirName(const QString &value) { 124 | settings->setValue(platform + "tmp_dir_name", value); 125 | } 126 | 127 | void SettingsStore::setTmpFileName(const QString &value) { 128 | settings->setValue(platform + "tmp_file_name", value); 129 | } 130 | 131 | void SettingsStore::setHtmlIndex(const QString &value) { 132 | settings->setValue(platform + "html_index", value); 133 | } 134 | 135 | void SettingsStore::setIconLabels(bool icon_labels) { 136 | settings->setValue(platform + "icon_labels", icon_labels); 137 | } 138 | 139 | void SettingsStore::setDefaultLanguage(const QString &value) { 140 | settings->setValue(platform + "language", value); 141 | } 142 | 143 | void SettingsStore::setExamplesPath(const QString &value) { 144 | settings->setValue(platform + "examples_path", value); 145 | } 146 | 147 | void SettingsStore::setZoomScale(float value) { 148 | settings->setValue(platform + "zoom_scale", value); 149 | } 150 | 151 | 152 | QString SettingsStore::relativePath(const QString &value, 153 | const QString &defaultValue) { 154 | 155 | QString settingsValue = settings->value(platform + value, 156 | defaultValue).toString(); 157 | 158 | if (settingsValue.left(2) == "~/") { 159 | // Substitute with home dir 160 | return QDir::homePath() + settingsValue.remove(0,1); 161 | } else if (QDir::isRelativePath(settingsValue)) { 162 | // Append the binary path if relative 163 | return QDir(QCoreApplication::applicationDirPath()). 164 | filePath(settingsValue); 165 | } 166 | 167 | return settingsValue; 168 | } 169 | -------------------------------------------------------------------------------- /src/settingsdialog.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | SettingsDialog 4 | 5 | 6 | 7 | 0 8 | 0 9 | 600 10 | 250 11 | 12 | 13 | 14 | Dialog 15 | 16 | 17 | 18 | QLayout::SetMaximumSize 19 | 20 | 21 | 22 | 23 | QLayout::SetMaximumSize 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 0 32 | 0 33 | 34 | 35 | 36 | 37 | 225 38 | 0 39 | 40 | 41 | 42 | 43 | 16777215 44 | 16777215 45 | 46 | 47 | 48 | Arduino IDE Program Path 49 | 50 | 51 | Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | false 65 | 66 | 67 | 68 | 69 | 70 | 71 | ... 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | true 83 | 84 | 85 | 86 | 0 87 | 0 88 | 89 | 90 | 91 | 92 | 225 93 | 0 94 | 95 | 96 | 97 | 98 | 16777215 99 | 16777215 100 | 101 | 102 | 103 | Language 104 | 105 | 106 | Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 107 | 108 | 109 | 110 | 111 | 112 | 113 | true 114 | 115 | 116 | 117 | 0 118 | 0 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | Qt::Horizontal 130 | 131 | 132 | 133 | 40 134 | 20 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | Qt::Horizontal 145 | 146 | 147 | QDialogButtonBox::Cancel|QDialogButtonBox::Ok|QDialogButtonBox::RestoreDefaults 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | buttonBox 159 | accepted() 160 | SettingsDialog 161 | accept() 162 | 163 | 164 | 258 165 | 239 166 | 167 | 168 | 157 169 | 274 170 | 171 | 172 | 173 | 174 | buttonBox 175 | rejected() 176 | SettingsDialog 177 | reject() 178 | 179 | 180 | 326 181 | 239 182 | 183 | 184 | 286 185 | 274 186 | 187 | 188 | 189 | 190 | arduinoIdePathButton 191 | clicked() 192 | SettingsDialog 193 | arduinoIdePathOpenDialog() 194 | 195 | 196 | 588 197 | 69 198 | 199 | 200 | 249 201 | 124 202 | 203 | 204 | 205 | 206 | 207 | arduinoIdePathOpenDialog() 208 | 209 | 210 | -------------------------------------------------------------------------------- /roboblocks/html/COPYING.LESER.md: -------------------------------------------------------------------------------- 1 | GNU LESSER GENERAL PUBLIC LICENSE 2 | Version 3, 29 June 2007 3 | 4 | Copyright (C) 2007 Free Software Foundation, Inc. 5 | Everyone is permitted to copy and distribute verbatim copies 6 | of this license document, but changing it is not allowed. 7 | 8 | 9 | This version of the GNU Lesser General Public License incorporates 10 | the terms and conditions of version 3 of the GNU General Public 11 | License, supplemented by the additional permissions listed below. 12 | 13 | 0. Additional Definitions. 14 | 15 | As used herein, "this License" refers to version 3 of the GNU Lesser 16 | General Public License, and the "GNU GPL" refers to version 3 of the GNU 17 | General Public License. 18 | 19 | "The Library" refers to a covered work governed by this License, 20 | other than an Application or a Combined Work as defined below. 21 | 22 | An "Application" is any work that makes use of an interface provided 23 | by the Library, but which is not otherwise based on the Library. 24 | Defining a subclass of a class defined by the Library is deemed a mode 25 | of using an interface provided by the Library. 26 | 27 | A "Combined Work" is a work produced by combining or linking an 28 | Application with the Library. The particular version of the Library 29 | with which the Combined Work was made is also called the "Linked 30 | Version". 31 | 32 | The "Minimal Corresponding Source" for a Combined Work means the 33 | Corresponding Source for the Combined Work, excluding any source code 34 | for portions of the Combined Work that, considered in isolation, are 35 | based on the Application, and not on the Linked Version. 36 | 37 | The "Corresponding Application Code" for a Combined Work means the 38 | object code and/or source code for the Application, including any data 39 | and utility programs needed for reproducing the Combined Work from the 40 | Application, but excluding the System Libraries of the Combined Work. 41 | 42 | 1. Exception to Section 3 of the GNU GPL. 43 | 44 | You may convey a covered work under sections 3 and 4 of this License 45 | without being bound by section 3 of the GNU GPL. 46 | 47 | 2. Conveying Modified Versions. 48 | 49 | If you modify a copy of the Library, and, in your modifications, a 50 | facility refers to a function or data to be supplied by an Application 51 | that uses the facility (other than as an argument passed when the 52 | facility is invoked), then you may convey a copy of the modified 53 | version: 54 | 55 | a) under this License, provided that you make a good faith effort to 56 | ensure that, in the event an Application does not supply the 57 | function or data, the facility still operates, and performs 58 | whatever part of its purpose remains meaningful, or 59 | 60 | b) under the GNU GPL, with none of the additional permissions of 61 | this License applicable to that copy. 62 | 63 | 3. Object Code Incorporating Material from Library Header Files. 64 | 65 | The object code form of an Application may incorporate material from 66 | a header file that is part of the Library. You may convey such object 67 | code under terms of your choice, provided that, if the incorporated 68 | material is not limited to numerical parameters, data structure 69 | layouts and accessors, or small macros, inline functions and templates 70 | (ten or fewer lines in length), you do both of the following: 71 | 72 | a) Give prominent notice with each copy of the object code that the 73 | Library is used in it and that the Library and its use are 74 | covered by this License. 75 | 76 | b) Accompany the object code with a copy of the GNU GPL and this license 77 | document. 78 | 79 | 4. Combined Works. 80 | 81 | You may convey a Combined Work under terms of your choice that, 82 | taken together, effectively do not restrict modification of the 83 | portions of the Library contained in the Combined Work and reverse 84 | engineering for debugging such modifications, if you also do each of 85 | the following: 86 | 87 | a) Give prominent notice with each copy of the Combined Work that 88 | the Library is used in it and that the Library and its use are 89 | covered by this License. 90 | 91 | b) Accompany the Combined Work with a copy of the GNU GPL and this license 92 | document. 93 | 94 | c) For a Combined Work that displays copyright notices during 95 | execution, include the copyright notice for the Library among 96 | these notices, as well as a reference directing the user to the 97 | copies of the GNU GPL and this license document. 98 | 99 | d) Do one of the following: 100 | 101 | 0) Convey the Minimal Corresponding Source under the terms of this 102 | License, and the Corresponding Application Code in a form 103 | suitable for, and under terms that permit, the user to 104 | recombine or relink the Application with a modified version of 105 | the Linked Version to produce a modified Combined Work, in the 106 | manner specified by section 6 of the GNU GPL for conveying 107 | Corresponding Source. 108 | 109 | 1) Use a suitable shared library mechanism for linking with the 110 | Library. A suitable mechanism is one that (a) uses at run time 111 | a copy of the Library already present on the user's computer 112 | system, and (b) will operate properly with a modified version 113 | of the Library that is interface-compatible with the Linked 114 | Version. 115 | 116 | e) Provide Installation Information, but only if you would otherwise 117 | be required to provide such information under section 6 of the 118 | GNU GPL, and only to the extent that such information is 119 | necessary to install and execute a modified version of the 120 | Combined Work produced by recombining or relinking the 121 | Application with a modified version of the Linked Version. (If 122 | you use option 4d0, the Installation Information must accompany 123 | the Minimal Corresponding Source and Corresponding Application 124 | Code. If you use option 4d1, you must provide the Installation 125 | Information in the manner specified by section 6 of the GNU GPL 126 | for conveying Corresponding Source.) 127 | 128 | 5. Combined Libraries. 129 | 130 | You may place library facilities that are a work based on the 131 | Library side by side in a single library together with other library 132 | facilities that are not Applications and are not covered by this 133 | License, and convey such a combined library under terms of your 134 | choice, if you do both of the following: 135 | 136 | a) Accompany the combined library with a copy of the same work based 137 | on the Library, uncombined with any other library facilities, 138 | conveyed under the terms of this License. 139 | 140 | b) Give prominent notice with the combined library that part of it 141 | is a work based on the Library, and explaining where to find the 142 | accompanying uncombined form of the same work. 143 | 144 | 6. Revised Versions of the GNU Lesser General Public License. 145 | 146 | The Free Software Foundation may publish revised and/or new versions 147 | of the GNU Lesser General Public License from time to time. Such new 148 | versions will be similar in spirit to the present version, but may 149 | differ in detail to address new problems or concerns. 150 | 151 | Each version is given a distinguishing version number. If the 152 | Library as you received it specifies that a certain numbered version 153 | of the GNU Lesser General Public License "or any later version" 154 | applies to it, you have the option of following the terms and 155 | conditions either of that published version or of any later version 156 | published by the Free Software Foundation. If the Library as you 157 | received it does not specify a version number of the GNU Lesser 158 | General Public License, you may choose any version of the GNU Lesser 159 | General Public License ever published by the Free Software Foundation. 160 | 161 | If the Library as you received it specifies that a proxy can decide 162 | whether future versions of the GNU Lesser General Public License shall 163 | apply, that proxy's public statement of acceptance of any version is 164 | permanent authorization for you to choose that version for the 165 | Library. 166 | -------------------------------------------------------------------------------- /roboblocks/html/javascript/highlight/highlight.pack.js: -------------------------------------------------------------------------------- 1 | !function(e){"undefined"!=typeof exports?e(exports):(window.hljs=e({}),"function"==typeof define&&define.amd&&define("hljs",[],function(){return window.hljs}))}(function(e){function n(e){return e.replace(/&/gm,"&").replace(//gm,">")}function t(e){return e.nodeName.toLowerCase()}function r(e,n){var t=e&&e.exec(n);return t&&0==t.index}function a(e){return/^(no-?highlight|plain|text)$/i.test(e)}function i(e){var n,t,r,i=e.className+" ";if(i+=e.parentNode?e.parentNode.className:"",t=/\blang(?:uage)?-([\w-]+)\b/i.exec(i))return w(t[1])?t[1]:"no-highlight";for(i=i.split(/\s+/),n=0,r=i.length;r>n;n++)if(w(i[n])||a(i[n]))return i[n]}function o(e,n){var t,r={};for(t in e)r[t]=e[t];if(n)for(t in n)r[t]=n[t];return r}function u(e){var n=[];return function r(e,a){for(var i=e.firstChild;i;i=i.nextSibling)3==i.nodeType?a+=i.nodeValue.length:1==i.nodeType&&(n.push({event:"start",offset:a,node:i}),a=r(i,a),t(i).match(/br|hr|img|input/)||n.push({event:"stop",offset:a,node:i}));return a}(e,0),n}function c(e,r,a){function i(){return e.length&&r.length?e[0].offset!=r[0].offset?e[0].offset"}function u(e){f+=""}function c(e){("start"==e.event?o:u)(e.node)}for(var s=0,f="",l=[];e.length||r.length;){var g=i();if(f+=n(a.substr(s,g[0].offset-s)),s=g[0].offset,g==e){l.reverse().forEach(u);do c(g.splice(0,1)[0]),g=i();while(g==e&&g.length&&g[0].offset==s);l.reverse().forEach(o)}else"start"==g[0].event?l.push(g[0].node):l.pop(),c(g.splice(0,1)[0])}return f+n(a.substr(s))}function s(e){function n(e){return e&&e.source||e}function t(t,r){return new RegExp(n(t),"m"+(e.cI?"i":"")+(r?"g":""))}function r(a,i){if(!a.compiled){if(a.compiled=!0,a.k=a.k||a.bK,a.k){var u={},c=function(n,t){e.cI&&(t=t.toLowerCase()),t.split(" ").forEach(function(e){var t=e.split("|");u[t[0]]=[n,t[1]?Number(t[1]):1]})};"string"==typeof a.k?c("keyword",a.k):Object.keys(a.k).forEach(function(e){c(e,a.k[e])}),a.k=u}a.lR=t(a.l||/\b\w+\b/,!0),i&&(a.bK&&(a.b="\\b("+a.bK.split(" ").join("|")+")\\b"),a.b||(a.b=/\B|\b/),a.bR=t(a.b),a.e||a.eW||(a.e=/\B|\b/),a.e&&(a.eR=t(a.e)),a.tE=n(a.e)||"",a.eW&&i.tE&&(a.tE+=(a.e?"|":"")+i.tE)),a.i&&(a.iR=t(a.i)),void 0===a.r&&(a.r=1),a.c||(a.c=[]);var s=[];a.c.forEach(function(e){e.v?e.v.forEach(function(n){s.push(o(e,n))}):s.push("self"==e?a:e)}),a.c=s,a.c.forEach(function(e){r(e,a)}),a.starts&&r(a.starts,i);var f=a.c.map(function(e){return e.bK?"\\.?("+e.b+")\\.?":e.b}).concat([a.tE,a.i]).map(n).filter(Boolean);a.t=f.length?t(f.join("|"),!0):{exec:function(){return null}}}}r(e)}function f(e,t,a,i){function o(e,n){for(var t=0;t";return i+=e+'">',i+n+o}function p(){if(!L.k)return n(y);var e="",t=0;L.lR.lastIndex=0;for(var r=L.lR.exec(y);r;){e+=n(y.substr(t,r.index-t));var a=g(L,r);a?(B+=a[1],e+=h(a[0],n(r[0]))):e+=n(r[0]),t=L.lR.lastIndex,r=L.lR.exec(y)}return e+n(y.substr(t))}function d(){var e="string"==typeof L.sL;if(e&&!x[L.sL])return n(y);var t=e?f(L.sL,y,!0,M[L.sL]):l(y,L.sL.length?L.sL:void 0);return L.r>0&&(B+=t.r),e&&(M[L.sL]=t.top),h(t.language,t.value,!1,!0)}function b(){return void 0!==L.sL?d():p()}function v(e,t){var r=e.cN?h(e.cN,"",!0):"";e.rB?(k+=r,y=""):e.eB?(k+=n(t)+r,y=""):(k+=r,y=t),L=Object.create(e,{parent:{value:L}})}function m(e,t){if(y+=e,void 0===t)return k+=b(),0;var r=o(t,L);if(r)return k+=b(),v(r,t),r.rB?0:t.length;var a=u(L,t);if(a){var i=L;i.rE||i.eE||(y+=t),k+=b();do L.cN&&(k+=""),B+=L.r,L=L.parent;while(L!=a.parent);return i.eE&&(k+=n(t)),y="",a.starts&&v(a.starts,""),i.rE?0:t.length}if(c(t,L))throw new Error('Illegal lexeme "'+t+'" for mode "'+(L.cN||"")+'"');return y+=t,t.length||1}var N=w(e);if(!N)throw new Error('Unknown language: "'+e+'"');s(N);var R,L=i||N,M={},k="";for(R=L;R!=N;R=R.parent)R.cN&&(k=h(R.cN,"",!0)+k);var y="",B=0;try{for(var C,j,I=0;;){if(L.t.lastIndex=I,C=L.t.exec(t),!C)break;j=m(t.substr(I,C.index-I),C[0]),I=C.index+j}for(m(t.substr(I)),R=L;R.parent;R=R.parent)R.cN&&(k+="");return{r:B,value:k,language:e,top:L}}catch(O){if(-1!=O.message.indexOf("Illegal"))return{r:0,value:n(t)};throw O}}function l(e,t){t=t||E.languages||Object.keys(x);var r={r:0,value:n(e)},a=r;return t.forEach(function(n){if(w(n)){var t=f(n,e,!1);t.language=n,t.r>a.r&&(a=t),t.r>r.r&&(a=r,r=t)}}),a.language&&(r.second_best=a),r}function g(e){return E.tabReplace&&(e=e.replace(/^((<[^>]+>|\t)+)/gm,function(e,n){return n.replace(/\t/g,E.tabReplace)})),E.useBR&&(e=e.replace(/\n/g,"
")),e}function h(e,n,t){var r=n?R[n]:t,a=[e.trim()];return e.match(/\bhljs\b/)||a.push("hljs"),-1===e.indexOf(r)&&a.push(r),a.join(" ").trim()}function p(e){var n=i(e);if(!a(n)){var t;E.useBR?(t=document.createElementNS("http://www.w3.org/1999/xhtml","div"),t.innerHTML=e.innerHTML.replace(/\n/g,"").replace(//g,"\n")):t=e;var r=t.textContent,o=n?f(n,r,!0):l(r),s=u(t);if(s.length){var p=document.createElementNS("http://www.w3.org/1999/xhtml","div");p.innerHTML=o.value,o.value=c(s,u(p),r)}o.value=g(o.value),e.innerHTML=o.value,e.className=h(e.className,n,o.language),e.result={language:o.language,re:o.r},o.second_best&&(e.second_best={language:o.second_best.language,re:o.second_best.r})}}function d(e){E=o(E,e)}function b(){if(!b.called){b.called=!0;var e=document.querySelectorAll("pre code");Array.prototype.forEach.call(e,p)}}function v(){addEventListener("DOMContentLoaded",b,!1),addEventListener("load",b,!1)}function m(n,t){var r=x[n]=t(e);r.aliases&&r.aliases.forEach(function(e){R[e]=n})}function N(){return Object.keys(x)}function w(e){return e=e.toLowerCase(),x[e]||x[R[e]]}var E={classPrefix:"hljs-",tabReplace:null,useBR:!1,languages:void 0},x={},R={};return e.highlight=f,e.highlightAuto=l,e.fixMarkup=g,e.highlightBlock=p,e.configure=d,e.initHighlighting=b,e.initHighlightingOnLoad=v,e.registerLanguage=m,e.listLanguages=N,e.getLanguage=w,e.inherit=o,e.IR="[a-zA-Z]\\w*",e.UIR="[a-zA-Z_]\\w*",e.NR="\\b\\d+(\\.\\d+)?",e.CNR="(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",e.BNR="\\b(0b[01]+)",e.RSR="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",e.BE={b:"\\\\[\\s\\S]",r:0},e.ASM={cN:"string",b:"'",e:"'",i:"\\n",c:[e.BE]},e.QSM={cN:"string",b:'"',e:'"',i:"\\n",c:[e.BE]},e.PWM={b:/\b(a|an|the|are|I|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such)\b/},e.C=function(n,t,r){var a=e.inherit({cN:"comment",b:n,e:t,c:[]},r||{});return a.c.push(e.PWM),a.c.push({cN:"doctag",b:"(?:TODO|FIXME|NOTE|BUG|XXX):",r:0}),a},e.CLCM=e.C("//","$"),e.CBCM=e.C("/\\*","\\*/"),e.HCM=e.C("#","$"),e.NM={cN:"number",b:e.NR,r:0},e.CNM={cN:"number",b:e.CNR,r:0},e.BNM={cN:"number",b:e.BNR,r:0},e.CSSNM={cN:"number",b:e.NR+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",r:0},e.RM={cN:"regexp",b:/\//,e:/\/[gimuy]*/,i:/\n/,c:[e.BE,{b:/\[/,e:/\]/,r:0,c:[e.BE]}]},e.TM={cN:"title",b:e.IR,r:0},e.UTM={cN:"title",b:e.UIR,r:0},e});hljs.registerLanguage("cpp",function(t){var e={cN:"keyword",b:"\\b[a-z\\d_]*_t\\b"},r={cN:"string",v:[t.inherit(t.QSM,{b:'((u8?|U)|L)?"'}),{b:'(u8?|U)?R"',e:'"',c:[t.BE]},{b:"'\\\\?.",e:"'",i:"."}]},s={cN:"number",v:[{b:"\\b(\\d+(\\.\\d*)?|\\.\\d+)(u|U|l|L|ul|UL|f|F)"},{b:t.CNR}]},i={cN:"preprocessor",b:"#",e:"$",k:"if else elif endif define undef warning error line pragma ifdef ifndef",c:[{b:/\\\n/,r:0},{bK:"include",e:"$",c:[r,{cN:"string",b:"<",e:">",i:"\\n"}]},r,s,t.CLCM,t.CBCM]},a=t.IR+"\\s*\\(",c={keyword:"int float while private char catch export virtual operator sizeof dynamic_cast|10 typedef const_cast|10 const struct for static_cast|10 union namespace unsigned long volatile static protected bool template mutable if public friend do goto auto void enum else break extern using class asm case typeid short reinterpret_cast|10 default double register explicit signed typename try this switch continue inline delete alignof constexpr decltype noexcept static_assert thread_local restrict _Bool complex _Complex _Imaginary atomic_bool atomic_char atomic_schar atomic_uchar atomic_short atomic_ushort atomic_int atomic_uint atomic_long atomic_ulong atomic_llong atomic_ullong",built_in:"std string cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap array shared_ptr abort abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf",literal:"true false nullptr NULL"};return{aliases:["c","cc","h","c++","h++","hpp"],k:c,i:"",k:c,c:["self",e]},{b:t.IR+"::",k:c},{bK:"new throw return else",r:0},{cN:"function",b:"("+t.IR+"[\\*&\\s]+)+"+a,rB:!0,e:/[{;=]/,eE:!0,k:c,i:/[^\w\s\*&]/,c:[{b:a,rB:!0,c:[t.TM],r:0},{cN:"params",b:/\(/,e:/\)/,k:c,r:0,c:[t.CLCM,t.CBCM,r,s]},t.CLCM,t.CBCM,i]}]}}); -------------------------------------------------------------------------------- /roboblocks/html/README.md: -------------------------------------------------------------------------------- 1 | RoboBlocks 2 | ========== 3 | 4 | [![Build Status](https://secure.travis-ci.org/bq/roboblocks.png?branch=master)](http://travis-ci.org/bq/roboblocks) 5 | 6 | Blockly blocks repository used in [bitbloq](http://bitbloq.bq.com) 7 | 8 | Getting Started 9 | --------------- 10 | 11 | This project requires [blockly-bq](https://github.com/bq/blockly) or [blockly](https://developers.google.com/blockly/) to work. 12 | 13 | ### Include Roboblocks in your project 14 | 15 | #### **With Bower & RequireJS** 16 | 17 | - Install roboblocks 18 | 19 | ``` 20 | bower install roboblocks --save-dev 21 | bower install blocklybq --save-dev 22 | ``` 23 | 24 | - Declare in RequireJS 25 | 26 | ```html 27 | 28 | 29 | 30 | 31 | RoboBlocks 32 | 33 | 34 | 35 | 36 | 87 | 88 | 89 | ``` 90 | 91 | #### **Manual** 92 | 93 | - Index example 94 | 95 | ```html 96 | 97 | 98 | 99 | 100 | RoboBlocks 101 | 102 | 103 | 104 | 105 | 121 | 122 | 123 | ``` 124 | 125 | ## Blockly Extensions 126 | 127 | Extensions added to Blockly and located in `src/blockly.extensions.js`. 128 | 129 | ### Blockly.createToolbox 130 | 131 | When Blockly has its blocks loaded, this method generates the XML file that defines the Blockly toolbox. 132 | 133 | 134 | 135 | ## How to contribute 136 | 137 | - Clone project 138 | 139 | ``` 140 | git clone http://github.com/bq/roboblock.git 141 | ``` 142 | 143 | - Initialize 144 | 145 | ``` 146 | npm install && bower install 147 | ``` 148 | - Create blocks (see next point) 149 | 150 | - Show playground 151 | 152 | ``` 153 | grunt server:test 154 | ``` 155 | 156 | - Test 157 | 158 | ``` 159 | grunt server:test 160 | ``` 161 | or 162 | ``` 163 | grunt test 164 | ``` 165 | 166 | - Build 167 | 168 | ``` 169 | grunt 170 | ``` 171 | 172 | ## Creating new blocks 173 | 174 | ### Block structure 175 | 176 | ``` 177 | src 178 | ├── blocks // blocks folder 179 | │ └── servo_move // block name 180 | │ ├── img // block image 181 | │ │ └── blocks 182 | │ │ └── *.png 183 | │ ├── servo_move.c.tpl // c code template 184 | │ ├── servo_move.js // block definition & code generation 185 | │ └── README.md // block documentation 186 | ├── profiles.js // supported profiles 187 | └── utils.js // some utils and Blockly extensions 188 | ``` 189 | 190 | ### Block implementation 191 | 192 | #### **servo_move.js example** 193 | 194 | ```javascript 195 | 'use strict'; 196 | /* global Blockly, options, profiles */ 197 | /* jshint sub:true */ 198 | 199 | /** 200 | * servo_move code generation 201 | * @return {String} Code generated with block parameters 202 | */ 203 | Blockly.Arduino.servo_move = function() { 204 | var dropdown_pin = this.getTitleValue('PIN'); 205 | var value_degree = Blockly.Arduino.valueToCode(this, 'DEGREE', Blockly.Arduino.ORDER_ATOMIC); 206 | value_degree = value_degree.replace('(', '').replace(')', ''); 207 | var delay_time = Blockly.Arduino.valueToCode(this, 'DELAY_TIME', Blockly.Arduino.ORDER_ATOMIC) || '10'; 208 | 209 | delay_time = delay_time.replace('(', '').replace(')', ''); 210 | 211 | Blockly.Arduino.definitions_['define_servo'] = '#include \n'; 212 | Blockly.Arduino.definitions_['var_servo' + dropdown_pin] = 'Servo servo_' + dropdown_pin + ';\n'; 213 | Blockly.Arduino.setups_['setup_servo_' + dropdown_pin] = 'servo_' + dropdown_pin + '.attach(' + dropdown_pin + ');\n'; 214 | 215 | // Code generation with compiled template 216 | var code = JST['servo_move']({ 217 | 'dropdown_pin': dropdown_pin, 218 | 'value_degree': value_degree, 219 | 'delay_time': delay_time 220 | }); 221 | 222 | return code; 223 | }; 224 | 225 | /** 226 | * servo_move block definition 227 | * @type {Object} 228 | */ 229 | Blockly.Blocks.servo_move = { 230 | category: 'Math', 231 | helpUrl: 'http://github.com/bq/roboblock/tree/master/src/blocks/servo_move', 232 | /** 233 | * servo_move initialization 234 | */ 235 | init: function() { 236 | this.setColour('25'); 237 | this.appendDummyInput('') 238 | .appendTitle('Servo') 239 | .appendTitle(new Blockly.FieldImage('img/blocks/bqservo01.png', 208 * options.zoom, 126 * options.zoom)) 240 | .appendTitle('PIN#') 241 | .appendTitle(new Blockly.FieldDropdown(profiles.default.digital), 'PIN'); 242 | this.appendValueInput('DEGREE', Number) 243 | .setCheck(Number) 244 | .setAlign(Blockly.ALIGN_RIGHT) 245 | .appendTitle('Degrees (0~180)'); 246 | this.appendValueInput('DELAY_TIME', Number) 247 | .setCheck(Number) 248 | .setAlign(Blockly.ALIGN_RIGHT) 249 | .appendTitle('Delay'); 250 | this.setPreviousStatement(true); 251 | this.setNextStatement(true); 252 | this.setTooltip('Move between 0~180 degree'); 253 | } 254 | }; 255 | ``` 256 | 257 | #### **Parameters** 258 | 259 | Blocks can be initialized with parameters when loaded with `RoboBlocks.load({...});`, and this parameters are available in `options` variable. 260 | ```javascript 261 | this.appendDummyInput('') 262 | .appendTitle('Servo') 263 | .appendTitle(new Blockly.FieldImage( 264 | 'img/blocks/bqservo01.png', 265 | 208 * options.zoom, 266 | 126 * options.zoom) 267 | ); 268 | ``` 269 | 270 | #### **Profiles** 271 | 272 | Default profiles are available and defined in `src/profiles.js`. This profiles are available in `profiles` variable. 273 | ```javascript 274 | this.appendDummyInput('') 275 | .appendTitle('Servo') 276 | .appendTitle('PIN#') 277 | .appendTitle( 278 | new Blockly.FieldDropdown(profiles.default.digital), 279 | 'PIN' 280 | ); 281 | ``` 282 | 283 | #### **Block image** 284 | 285 | Blocks images should be defined like this: 286 | ```javascript 287 | this.appendDummyInput('') 288 | .appendTitle(new Blockly.FieldImage( 289 | 'img/blocks/bqservo01.png', 290 | 208 * options.zoom, 291 | 126 * options.zoom) 292 | ); 293 | ``` 294 | And its images stored in `src/blocks/[block_name]/img/[filename].png`. 295 | When the project is compiled, all images are located in `dist/img/blocks/*.png`. 296 | 297 | ### Code template 298 | 299 | Blocks code are defined in `*.c.tpl` files as an [underscore](http://underscorejs.org/) templates but with following settings: 300 | ```javascript 301 | templateSettings: { 302 | evaluate: /\{\{#([\s\S]+?)\}\}/g, // {{# console.log("blah") }} 303 | interpolate : /\{\{\{(\s*\w+?\s*)\}\}\}/g, // {{ title }} 304 | escape : /\{\{(\s*\w+?\s*)\}\}(?!\})/g // {{{ title }}} 305 | } 306 | ``` 307 | With this settings, this template called `servo_move.c.tpl`: 308 | ``` 309 | servo_{{ dropdown_pin }}.write({{ value_degree }}); 310 | delay({{ delay_time }}); 311 | ``` 312 | When evaluated like this: 313 | ```javascript 314 | var code = this.JST['servo_move']({ 315 | 'dropdown_pin': 3, 316 | 'value_degree': 180, 317 | 'delay_time': 1000 318 | }); 319 | ``` 320 | Will generate the following code: 321 | ``` 322 | servo_3.write(180); 323 | delay(1000); 324 | ``` 325 | -------------------------------------------------------------------------------- /roboblocks/html/javascript/blockly-bq/COPYING: -------------------------------------------------------------------------------- 1 | 2 | Apache License 3 | Version 2.0, January 2011 4 | http://www.apache.org/licenses/ 5 | 6 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 7 | 8 | 1. Definitions. 9 | 10 | "License" shall mean the terms and conditions for use, reproduction, 11 | and distribution as defined by Sections 1 through 9 of this document. 12 | 13 | "Licensor" shall mean the copyright owner or entity authorized by 14 | the copyright owner that is granting the License. 15 | 16 | "Legal Entity" shall mean the union of the acting entity and all 17 | other entities that control, are controlled by, or are under common 18 | control with that entity. For the purposes of this definition, 19 | "control" means (i) the power, direct or indirect, to cause the 20 | direction or management of such entity, whether by contract or 21 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 22 | outstanding shares, or (iii) beneficial ownership of such entity. 23 | 24 | "You" (or "Your") shall mean an individual or Legal Entity 25 | exercising permissions granted by this License. 26 | 27 | "Source" form shall mean the preferred form for making modifications, 28 | including but not limited to software source code, documentation 29 | source, and configuration files. 30 | 31 | "Object" form shall mean any form resulting from mechanical 32 | transformation or translation of a Source form, including but 33 | not limited to compiled object code, generated documentation, 34 | and conversions to other media types. 35 | 36 | "Work" shall mean the work of authorship, whether in Source or 37 | Object form, made available under the License, as indicated by a 38 | copyright notice that is included in or attached to the work 39 | (an example is provided in the Appendix below). 40 | 41 | "Derivative Works" shall mean any work, whether in Source or Object 42 | form, that is based on (or derived from) the Work and for which the 43 | editorial revisions, annotations, elaborations, or other modifications 44 | represent, as a whole, an original work of authorship. For the purposes 45 | of this License, Derivative Works shall not include works that remain 46 | separable from, or merely link (or bind by name) to the interfaces of, 47 | the Work and Derivative Works thereof. 48 | 49 | "Contribution" shall mean any work of authorship, including 50 | the original version of the Work and any modifications or additions 51 | to that Work or Derivative Works thereof, that is intentionally 52 | submitted to Licensor for inclusion in the Work by the copyright owner 53 | or by an individual or Legal Entity authorized to submit on behalf of 54 | the copyright owner. For the purposes of this definition, "submitted" 55 | means any form of electronic, verbal, or written communication sent 56 | to the Licensor or its representatives, including but not limited to 57 | communication on electronic mailing lists, source code control systems, 58 | and issue tracking systems that are managed by, or on behalf of, the 59 | Licensor for the purpose of discussing and improving the Work, but 60 | excluding communication that is conspicuously marked or otherwise 61 | designated in writing by the copyright owner as "Not a Contribution." 62 | 63 | "Contributor" shall mean Licensor and any individual or Legal Entity 64 | on behalf of whom a Contribution has been received by Licensor and 65 | subsequently incorporated within the Work. 66 | 67 | 2. Grant of Copyright License. Subject to the terms and conditions of 68 | this License, each Contributor hereby grants to You a perpetual, 69 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 70 | copyright license to reproduce, prepare Derivative Works of, 71 | publicly display, publicly perform, sublicense, and distribute the 72 | Work and such Derivative Works in Source or Object form. 73 | 74 | 3. Grant of Patent License. Subject to the terms and conditions of 75 | this License, each Contributor hereby grants to You a perpetual, 76 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 77 | (except as stated in this section) patent license to make, have made, 78 | use, offer to sell, sell, import, and otherwise transfer the Work, 79 | where such license applies only to those patent claims licensable 80 | by such Contributor that are necessarily infringed by their 81 | Contribution(s) alone or by combination of their Contribution(s) 82 | with the Work to which such Contribution(s) was submitted. If You 83 | institute patent litigation against any entity (including a 84 | cross-claim or counterclaim in a lawsuit) alleging that the Work 85 | or a Contribution incorporated within the Work constitutes direct 86 | or contributory patent infringement, then any patent licenses 87 | granted to You under this License for that Work shall terminate 88 | as of the date such litigation is filed. 89 | 90 | 4. Redistribution. You may reproduce and distribute copies of the 91 | Work or Derivative Works thereof in any medium, with or without 92 | modifications, and in Source or Object form, provided that You 93 | meet the following conditions: 94 | 95 | (a) You must give any other recipients of the Work or 96 | Derivative Works a copy of this License; and 97 | 98 | (b) You must cause any modified files to carry prominent notices 99 | stating that You changed the files; and 100 | 101 | (c) You must retain, in the Source form of any Derivative Works 102 | that You distribute, all copyright, patent, trademark, and 103 | attribution notices from the Source form of the Work, 104 | excluding those notices that do not pertain to any part of 105 | the Derivative Works; and 106 | 107 | (d) If the Work includes a "NOTICE" text file as part of its 108 | distribution, then any Derivative Works that You distribute must 109 | include a readable copy of the attribution notices contained 110 | within such NOTICE file, excluding those notices that do not 111 | pertain to any part of the Derivative Works, in at least one 112 | of the following places: within a NOTICE text file distributed 113 | as part of the Derivative Works; within the Source form or 114 | documentation, if provided along with the Derivative Works; or, 115 | within a display generated by the Derivative Works, if and 116 | wherever such third-party notices normally appear. The contents 117 | of the NOTICE file are for informational purposes only and 118 | do not modify the License. You may add Your own attribution 119 | notices within Derivative Works that You distribute, alongside 120 | or as an addendum to the NOTICE text from the Work, provided 121 | that such additional attribution notices cannot be construed 122 | as modifying the License. 123 | 124 | You may add Your own copyright statement to Your modifications and 125 | may provide additional or different license terms and conditions 126 | for use, reproduction, or distribution of Your modifications, or 127 | for any such Derivative Works as a whole, provided Your use, 128 | reproduction, and distribution of the Work otherwise complies with 129 | the conditions stated in this License. 130 | 131 | 5. Submission of Contributions. Unless You explicitly state otherwise, 132 | any Contribution intentionally submitted for inclusion in the Work 133 | by You to the Licensor shall be under the terms and conditions of 134 | this License, without any additional terms or conditions. 135 | Notwithstanding the above, nothing herein shall supersede or modify 136 | the terms of any separate license agreement you may have executed 137 | with Licensor regarding such Contributions. 138 | 139 | 6. Trademarks. This License does not grant permission to use the trade 140 | names, trademarks, service marks, or product names of the Licensor, 141 | except as required for reasonable and customary use in describing the 142 | origin of the Work and reproducing the content of the NOTICE file. 143 | 144 | 7. Disclaimer of Warranty. Unless required by applicable law or 145 | agreed to in writing, Licensor provides the Work (and each 146 | Contributor provides its Contributions) on an "AS IS" BASIS, 147 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 148 | implied, including, without limitation, any warranties or conditions 149 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 150 | PARTICULAR PURPOSE. You are solely responsible for determining the 151 | appropriateness of using or redistributing the Work and assume any 152 | risks associated with Your exercise of permissions under this License. 153 | 154 | 8. Limitation of Liability. In no event and under no legal theory, 155 | whether in tort (including negligence), contract, or otherwise, 156 | unless required by applicable law (such as deliberate and grossly 157 | negligent acts) or agreed to in writing, shall any Contributor be 158 | liable to You for damages, including any direct, indirect, special, 159 | incidental, or consequential damages of any character arising as a 160 | result of this License or out of the use or inability to use the 161 | Work (including but not limited to damages for loss of goodwill, 162 | work stoppage, computer failure or malfunction, or any and all 163 | other commercial damages or losses), even if such Contributor 164 | has been advised of the possibility of such damages. 165 | 166 | 9. Accepting Warranty or Additional Liability. While redistributing 167 | the Work or Derivative Works thereof, You may choose to offer, 168 | and charge a fee for, acceptance of support, warranty, indemnity, 169 | or other liability obligations and/or rights consistent with this 170 | License. However, in accepting such obligations, You may act only 171 | on Your own behalf and on Your sole responsibility, not on behalf 172 | of any other Contributor, and only if You agree to indemnify, 173 | defend, and hold each Contributor harmless for any liability 174 | incurred by, or claims asserted against, such Contributor by reason 175 | of your accepting any such warranty or additional liability. 176 | 177 | END OF TERMS AND CONDITIONS 178 | -------------------------------------------------------------------------------- /ts/visualino_pt-pt.ts: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | AboutDialog 6 | 7 | 8 | Dialog 9 | 10 | 11 | 12 | 13 | <html><head/><body><p>Visualino is open source software (MIT license). Visit the web site at <a href="http://www.visualino.net/"><span style=" text-decoration: underline; color:#0000ff;">visualino.net</span></a>.</p><p align="center">2014-2016 Víctor R. Ruiz &lt;<a href="mailto:rvr@linotipo.es"><span style=" text-decoration: underline; color:#0000ff;">rvr@linotipo.es</span></a>&gt;</p><p>It uses the following open source projects:</p><ul style="margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-list-indent: 1;"><li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://www.qt.io/"><span style=" text-decoration: underline; color:#0000ff;">Qt 5</span></a>, The Qt Company (LGPL license 2.1).</li><li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="https://developers.google.com/blockly/"><span style=" text-decoration: underline; color:#0000ff;">Google Blockly</span></a> (MIT license).</li><li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="https://github.com/bq/roboblocks"><span style=" text-decoration: underline; color:#0000ff;">Roboblocks</span></a>, bq (LGPL license).</li></ul><p>This project is done with the help of <a href="http://www.facebook.com/groups/arduinograncanaria"><span style=" text-decoration: underline; color:#0000ff;">Arduino Gran Canaria</span></a> members and other <a href="https://github.com/vrruiz/visualino/blob/master/AUTHORS"><span style=" text-decoration: underline; color:#0000ff;">contributors</span></a>.</p></body></html> 14 | 15 | 16 | 17 | 18 | MainWindow 19 | 20 | 21 | Visualino 22 | 23 | 24 | 25 | 26 | X 27 | 28 | 29 | 30 | 31 | arduino:avr:uno 32 | 33 | 34 | 35 | 36 | arduino:avr:nano:cpu=atmega328 37 | 38 | 39 | 40 | 41 | arduino:avr:mega 42 | 43 | 44 | 45 | 46 | arduino:avr:diecimila 47 | 48 | 49 | 50 | 51 | arduino:avr:bt 52 | 53 | 54 | 55 | 56 | &File 57 | 58 | 59 | 60 | 61 | Export as... 62 | 63 | 64 | 65 | 66 | &Help 67 | 68 | 69 | 70 | 71 | &Tools 72 | 73 | 74 | 75 | 76 | toolBar 77 | 78 | 79 | 80 | 81 | 82 | 83 | Verify 84 | 85 | 86 | 87 | 88 | Ctrl+R 89 | 90 | 91 | 92 | 93 | 94 | 95 | Upload 96 | 97 | 98 | 99 | 100 | Open 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | Save 109 | 110 | 111 | 112 | 113 | 114 | New 115 | 116 | 117 | 118 | 119 | Ctrl+N 120 | 121 | 122 | 123 | 124 | Open... 125 | 126 | 127 | 128 | 129 | Ctrl+O 130 | 131 | 132 | 133 | 134 | Save... 135 | 136 | 137 | 138 | 139 | Ctrl+S 140 | 141 | 142 | 143 | 144 | Ctrl+U 145 | 146 | 147 | 148 | 149 | List of examples 150 | 151 | 152 | 153 | 154 | Examples... 155 | 156 | 157 | 158 | 159 | Graph 160 | 161 | 162 | 163 | 164 | Zoom + 165 | 166 | 167 | 168 | 169 | Ctrl++ 170 | 171 | 172 | 173 | 174 | Zoom - 175 | 176 | 177 | 178 | 179 | Ctrl+- 180 | 181 | 182 | 183 | 184 | 185 | Preferences 186 | 187 | 188 | 189 | 190 | Ctrl+, 191 | 192 | 193 | 194 | 195 | Quit 196 | 197 | 198 | 199 | 200 | Ctrl+Q 201 | 202 | 203 | 204 | 205 | About 206 | 207 | 208 | 209 | 210 | Show/hide messages 211 | 212 | 213 | 214 | 215 | 216 | Monitor 217 | 218 | 219 | 220 | 221 | Show/hide monitor 222 | 223 | 224 | 225 | 226 | Ctrl+Shift+M 227 | 228 | 229 | 230 | 231 | Sketch (.ino) 232 | 233 | 234 | 235 | 236 | Save as... 237 | 238 | 239 | 240 | 241 | Include... 242 | 243 | 244 | 245 | 246 | Include 247 | 248 | 249 | 250 | 251 | Show/hide code 252 | 253 | 254 | 255 | 256 | Show/hide icon labels 257 | 258 | 259 | 260 | 261 | Examples 262 | 263 | 264 | 265 | 266 | Export 267 | 268 | 269 | 270 | 271 | 272 | Couldn't open file to save content: %1. 273 | 274 | 275 | 276 | 277 | Done exporting: %1. 278 | 279 | 280 | 281 | 282 | Include file 283 | 284 | 285 | 286 | 287 | Open file 288 | 289 | 290 | 291 | 292 | Blockly Files %1 293 | 294 | 295 | 296 | 297 | Couldn't open file to read content: %1. 298 | 299 | 300 | 301 | 302 | Done saving. 303 | 304 | 305 | 306 | 307 | Please, restart the application to display the selected language. 308 | 309 | 310 | 311 | 312 | Finished. 313 | 314 | 315 | 316 | 317 | Building... 318 | 319 | 320 | 321 | 322 | There are unsaved changes that could be lost. Do you want to save them before continuing? 323 | 324 | 325 | 326 | 327 | SettingsDialog 328 | 329 | 330 | Dialog 331 | 332 | 333 | 334 | 335 | Arduino IDE Program Path 336 | 337 | 338 | 339 | 340 | ... 341 | 342 | 343 | 344 | 345 | Language 346 | 347 | 348 | 349 | 350 | Arduino IDE 351 | 352 | 353 | 354 | 355 | Default settings 356 | 357 | 358 | 359 | 360 | Are you sure? This will erase your current preferences and replace them with the defaults. 361 | 362 | 363 | 364 | 365 | -------------------------------------------------------------------------------- /ts/visualino_ca-es.ts: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | AboutDialog 6 | 7 | 8 | Dialog 9 | Diàleg 10 | 11 | 12 | 13 | <html><head/><body><p>Visualino is open source software (MIT license). Visit the web site at <a href="http://www.visualino.net/"><span style=" text-decoration: underline; color:#0000ff;">visualino.net</span></a>.</p><p align="center">2014-2016 Víctor R. Ruiz &lt;<a href="mailto:rvr@linotipo.es"><span style=" text-decoration: underline; color:#0000ff;">rvr@linotipo.es</span></a>&gt;</p><p>It uses the following open source projects:</p><ul style="margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-list-indent: 1;"><li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://www.qt.io/"><span style=" text-decoration: underline; color:#0000ff;">Qt 5</span></a>, The Qt Company (LGPL license 2.1).</li><li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="https://developers.google.com/blockly/"><span style=" text-decoration: underline; color:#0000ff;">Google Blockly</span></a> (MIT license).</li><li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="https://github.com/bq/roboblocks"><span style=" text-decoration: underline; color:#0000ff;">Roboblocks</span></a>, bq (LGPL license).</li></ul><p>This project is done with the help of <a href="http://www.facebook.com/groups/arduinograncanaria"><span style=" text-decoration: underline; color:#0000ff;">Arduino Gran Canaria</span></a> members and other <a href="https://github.com/vrruiz/visualino/blob/master/AUTHORS"><span style=" text-decoration: underline; color:#0000ff;">contributors</span></a>.</p></body></html> 14 | 15 | 16 | 17 | 18 | MainWindow 19 | 20 | 21 | Visualino 22 | 23 | 24 | 25 | 26 | X 27 | 28 | 29 | 30 | 31 | arduino:avr:uno 32 | 33 | 34 | 35 | 36 | arduino:avr:nano:cpu=atmega328 37 | 38 | 39 | 40 | 41 | arduino:avr:mega 42 | 43 | 44 | 45 | 46 | arduino:avr:diecimila 47 | 48 | 49 | 50 | 51 | arduino:avr:bt 52 | 53 | 54 | 55 | 56 | &File 57 | &Fitxer 58 | 59 | 60 | 61 | Export as... 62 | Exporta com... 63 | 64 | 65 | 66 | 67 | &Help 68 | A&juda 69 | 70 | 71 | 72 | &Tools 73 | Ei&nes 74 | 75 | 76 | 77 | toolBar 78 | 79 | 80 | 81 | 82 | 83 | 84 | Verify 85 | Verifica 86 | 87 | 88 | 89 | Ctrl+R 90 | 91 | 92 | 93 | 94 | 95 | 96 | Upload 97 | Puja 98 | 99 | 100 | 101 | Open 102 | Obre 103 | 104 | 105 | 106 | 107 | 108 | 109 | Save 110 | Desa 111 | 112 | 113 | 114 | 115 | New 116 | Nou 117 | 118 | 119 | 120 | List of examples 121 | 122 | 123 | 124 | 125 | Examples... 126 | 127 | 128 | 129 | 130 | Graph 131 | 132 | 133 | 134 | 135 | Zoom + 136 | 137 | 138 | 139 | 140 | Ctrl++ 141 | 142 | 143 | 144 | 145 | Zoom - 146 | 147 | 148 | 149 | 150 | Ctrl+- 151 | 152 | 153 | 154 | Settings 155 | Configuració 156 | 157 | 158 | 159 | Ctrl+N 160 | 161 | 162 | 163 | 164 | Open... 165 | Obre... 166 | 167 | 168 | 169 | Ctrl+O 170 | 171 | 172 | 173 | 174 | Save... 175 | Desa... 176 | 177 | 178 | 179 | Ctrl+S 180 | 181 | 182 | 183 | 184 | Ctrl+U 185 | 186 | 187 | 188 | 189 | 190 | Preferences 191 | Preferències 192 | 193 | 194 | 195 | Ctrl+, 196 | 197 | 198 | 199 | 200 | Quit 201 | Surt 202 | 203 | 204 | 205 | Ctrl+Q 206 | 207 | 208 | 209 | 210 | About 211 | Quant a 212 | 213 | 214 | 215 | Show/hide messages 216 | Ensenya/amaga missatges 217 | 218 | 219 | 220 | 221 | Monitor 222 | 223 | 224 | 225 | 226 | Show/hide monitor 227 | Ensenya/amaga monitor 228 | 229 | 230 | 231 | Ctrl+Shift+M 232 | 233 | 234 | 235 | 236 | Sketch (.ino) 237 | 238 | 239 | 240 | 241 | Save as... 242 | Desa com... 243 | 244 | 245 | 246 | Include... 247 | 248 | 249 | 250 | 251 | Include 252 | 253 | 254 | 255 | 256 | Show/hide code 257 | Ensenya/amaga codi 258 | 259 | 260 | 261 | Show/hide icon labels 262 | 263 | 264 | 265 | 266 | Examples 267 | 268 | 269 | 270 | 271 | Export 272 | 273 | 274 | 275 | 276 | 277 | Couldn't open file to save content: %1. 278 | No puc obrir arxiu per desar contingut: %1. 279 | 280 | 281 | 282 | Done exporting: %1. 283 | Fent exportació: %1. 284 | 285 | 286 | 287 | Include file 288 | Inclou arxiu 289 | 290 | 291 | 292 | Open file 293 | Obre arxiu 294 | 295 | 296 | 297 | Blockly Files %1 298 | Blocant arxius %1 299 | 300 | 301 | 302 | Couldn't open file to read content: %1. 303 | No puc obrir arxiu per llegir contingut: %1. 304 | 305 | 306 | 307 | Done saving. 308 | Desant. 309 | 310 | 311 | 312 | Please, restart the application to display the selected language. 313 | Si us plau, reinicieu l'aplicació per actualitzar la llengua 314 | 315 | 316 | 317 | Finished. 318 | Acabat. 319 | 320 | 321 | 322 | Building... 323 | Construint... 324 | 325 | 326 | 327 | There are unsaved changes that could be lost. Do you want to save them before continuing? 328 | 329 | 330 | 331 | 332 | SettingsDialog 333 | 334 | 335 | Dialog 336 | Diàleg 337 | 338 | 339 | 340 | Arduino IDE Program Path 341 | Ruta de l'IDE d'Arduino 342 | 343 | 344 | 345 | ... 346 | 347 | 348 | 349 | Roboblocks Path 350 | Ruta de Roboblocks 351 | 352 | 353 | 354 | Language 355 | Llengua 356 | 357 | 358 | 359 | Arduino IDE 360 | IDE d'Arduino 361 | 362 | 363 | 364 | Default settings 365 | 366 | 367 | 368 | 369 | Are you sure? This will erase your current preferences and replace them with the defaults. 370 | 371 | 372 | 373 | 374 | -------------------------------------------------------------------------------- /ts/visualino_pl-pl.ts: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | AboutDialog 6 | 7 | 8 | Dialog 9 | O Visualino 10 | 11 | 12 | 13 | <html><head/><body><p>Visualino is open source software (MIT license). Visit the web site at <a href="http://www.visualino.net/"><span style=" text-decoration: underline; color:#0000ff;">visualino.net</span></a>.</p><p align="center">2014-2016 Víctor R. Ruiz &lt;<a href="mailto:rvr@linotipo.es"><span style=" text-decoration: underline; color:#0000ff;">rvr@linotipo.es</span></a>&gt;</p><p>It uses the following open source projects:</p><ul style="margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-list-indent: 1;"><li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://www.qt.io/"><span style=" text-decoration: underline; color:#0000ff;">Qt 5</span></a>, The Qt Company (LGPL license 2.1).</li><li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="https://developers.google.com/blockly/"><span style=" text-decoration: underline; color:#0000ff;">Google Blockly</span></a> (MIT license).</li><li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="https://github.com/bq/roboblocks"><span style=" text-decoration: underline; color:#0000ff;">Roboblocks</span></a>, bq (LGPL license).</li></ul><p>This project is done with the help of <a href="http://www.facebook.com/groups/arduinograncanaria"><span style=" text-decoration: underline; color:#0000ff;">Arduino Gran Canaria</span></a> members and other <a href="https://github.com/vrruiz/visualino/blob/master/AUTHORS"><span style=" text-decoration: underline; color:#0000ff;">contributors</span></a>.</p></body></html> 14 | 15 | 16 | 17 | <html><head/><body><p>Visualino is open source software (MIT license). Visit the web site at <a href="http://www.visualino.net/"><span style=" text-decoration: underline; color:#0000ff;">visualino.net</span></a>.</p><p align="center">2014-2015 Víctor R. Ruiz &lt;<a href="mailto:rvr@linotipo.es"><span style=" text-decoration: underline; color:#0000ff;">rvr@linotipo.es</span></a>&gt;</p><p>It uses the following open source projects:</p><ul style="margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-list-indent: 1;"><li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://www.qt.io/"><span style=" text-decoration: underline; color:#0000ff;">Qt 5</span></a>, The Qt Company (LGPL license 2.1).</li><li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="https://developers.google.com/blockly/"><span style=" text-decoration: underline; color:#0000ff;">Google Blockly</span></a> (MIT license).</li><li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="https://github.com/bq/roboblocks"><span style=" text-decoration: underline; color:#0000ff;">Roboblocks</span></a>, bq (LGPL license).</li></ul><p>This project is done with the help of <a href="http://www.facebook.com/groups/arduinograncanaria"><span style=" text-decoration: underline; color:#0000ff;">Arduino Gran Canaria</span></a> members.</p></body></html> 18 | <html><head/><body><p>Visualino jest oprogramowaniem Open Source (licencja MIT). Odwiedź witrynę <a href="http://www.visualino.net/"><span style=" text-decoration: underline; color:#0000ff;">visualino.net</span></a>.</p><p align="center">2014-2015 Víctor R. Ruiz &lt;<a href="mailto:rvr@linotipo.es"><span style=" text-decoration: underline; color:#0000ff;">rvr@linotipo.es</span></a>&gt;</p><p>Użyto następujących plików projektów Open Source:</p><ul style="margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-list-indent: 1;"><li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://www.qt.io/"><span style=" text-decoration: underline; color:#0000ff;">Qt 5</span></a>, The Qt Company (licencja LGPL 2.1).</li><li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="https://developers.google.com/blockly/"><span style=" text-decoration: underline; color:#0000ff;">Google Blockly</span></a> (licencja MIT).</li><li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="https://github.com/bq/roboblocks"><span style=" text-decoration: underline; color:#0000ff;">Roboblocks</span></a>, bq (licencja LGPL).</li></ul><p>Ten projekt wykonano z pomocą członków <a href="http://www.facebook.com/groups/arduinograncanaria"><span style=" text-decoration: underline; color:#0000ff;">Arduino Gran Canaria</span></a>.</p></body></html> 19 | 20 | 21 | 22 | MainWindow 23 | 24 | 25 | Visualino 26 | 27 | 28 | 29 | 30 | X 31 | 32 | 33 | 34 | 35 | arduino:avr:uno 36 | 37 | 38 | 39 | 40 | arduino:avr:nano:cpu=atmega328 41 | 42 | 43 | 44 | 45 | arduino:avr:mega 46 | 47 | 48 | 49 | 50 | arduino:avr:diecimila 51 | 52 | 53 | 54 | 55 | arduino:avr:bt 56 | 57 | 58 | 59 | 60 | &File 61 | &Plik 62 | 63 | 64 | 65 | Export as... 66 | Eksportuj jako... 67 | 68 | 69 | 70 | 71 | &Help 72 | Pomo&c 73 | 74 | 75 | 76 | &Tools 77 | &Narzędzia 78 | 79 | 80 | 81 | toolBar 82 | Pasek narzędzi 83 | 84 | 85 | 86 | 87 | 88 | Verify 89 | Weryfikuj 90 | 91 | 92 | 93 | Ctrl+R 94 | 95 | 96 | 97 | 98 | 99 | 100 | Upload 101 | Wgraj 102 | 103 | 104 | 105 | Open 106 | Otwórz 107 | 108 | 109 | 110 | 111 | 112 | 113 | Save 114 | Zapisz 115 | 116 | 117 | 118 | 119 | New 120 | Nowy 121 | 122 | 123 | 124 | List of examples 125 | Lista przykładów 126 | 127 | 128 | 129 | Examples... 130 | Przykłady... 131 | 132 | 133 | 134 | Graph 135 | Wykres 136 | 137 | 138 | 139 | Zoom + 140 | 141 | 142 | 143 | 144 | Ctrl++ 145 | 146 | 147 | 148 | 149 | Zoom - 150 | 151 | 152 | 153 | 154 | Ctrl+- 155 | 156 | 157 | 158 | Settings 159 | Ustawienia 160 | 161 | 162 | 163 | Ctrl+N 164 | 165 | 166 | 167 | 168 | Open... 169 | Otwórz... 170 | 171 | 172 | 173 | Ctrl+O 174 | 175 | 176 | 177 | 178 | Save... 179 | Zapisz... 180 | 181 | 182 | 183 | Ctrl+S 184 | 185 | 186 | 187 | 188 | Ctrl+U 189 | 190 | 191 | 192 | 193 | 194 | Preferences 195 | Ustawienia 196 | 197 | 198 | 199 | Ctrl+, 200 | 201 | 202 | 203 | 204 | Quit 205 | Wyjście 206 | 207 | 208 | 209 | Ctrl+Q 210 | 211 | 212 | 213 | 214 | About 215 | O Visualino 216 | 217 | 218 | 219 | Show/hide messages 220 | Pokaż/ukryj komunikaty 221 | 222 | 223 | 224 | 225 | Monitor 226 | Podgląd 227 | 228 | 229 | 230 | Show/hide monitor 231 | Pokaż/ukryj podgląd 232 | 233 | 234 | 235 | Ctrl+Shift+M 236 | 237 | 238 | 239 | 240 | Sketch (.ino) 241 | 242 | 243 | 244 | 245 | Save as... 246 | Zapisz jako... 247 | 248 | 249 | 250 | Include... 251 | Dołącz... 252 | 253 | 254 | 255 | Include 256 | Dołącz 257 | 258 | 259 | 260 | Show/hide code 261 | Pokaż/ukryj kod 262 | 263 | 264 | 265 | Show/hide icon labels 266 | Pokaż/ukryj etykiety ikon 267 | 268 | 269 | 270 | Examples 271 | Przykłady 272 | 273 | 274 | 275 | Export 276 | Eksport 277 | 278 | 279 | 280 | 281 | Couldn't open file to save content: %1. 282 | Nie można otworzyć pliku do zapisu zawartości: %1. 283 | 284 | 285 | 286 | Done exporting: %1. 287 | Eksport wykonany: %1. 288 | 289 | 290 | 291 | Include file 292 | Dołącz plik 293 | 294 | 295 | 296 | Open file 297 | Otwórz plik 298 | 299 | 300 | 301 | Blockly Files %1 302 | Pliki Blockly %1 303 | 304 | 305 | 306 | Couldn't open file to read content: %1. 307 | Nie można otworzyć pliku do odczytu zawartości: %1. 308 | 309 | 310 | 311 | Done saving. 312 | Zapis wykonany. 313 | 314 | 315 | 316 | Please, restart the application to display the selected language. 317 | Proszę uruchomić ponownie aplikację aby pokazać ją w wybranym języku. 318 | 319 | 320 | 321 | Finished. 322 | Zakończone. 323 | 324 | 325 | 326 | Building... 327 | Buduję... 328 | 329 | 330 | 331 | There are unsaved changes that could be lost. Do you want to save them before continuing? 332 | Niezapisane zmiany zostaną utracone. Czy chcesz je teraz zachować? 333 | 334 | 335 | 336 | SettingsDialog 337 | 338 | 339 | Dialog 340 | Ustawienia 341 | 342 | 343 | 344 | Arduino IDE Program Path 345 | Ścieżka do programu Arduino IDE 346 | 347 | 348 | 349 | ... 350 | 351 | 352 | 353 | Roboblocks Path 354 | Ścieżka do Roboblocks 355 | 356 | 357 | 358 | Language 359 | Język 360 | 361 | 362 | 363 | Arduino IDE 364 | Środowisko Arduino IDE 365 | 366 | 367 | 368 | Default settings 369 | Ustawienia domyślne 370 | 371 | 372 | 373 | Are you sure? This will erase your current preferences and replace them with the defaults. 374 | Czy jesteś pewien? Bieżące ustawienia zostaną zastąpione ustawieniami domyślnymi. 375 | 376 | 377 | 378 | --------------------------------------------------------------------------------