Skip to content

Commit d64b596

Browse files
committed
Merge branch 'main' of github.com:wpilibsuite/systemcore-blocks-interface into pr_blockly_events
2 parents ea439cc + 3bef9e0 commit d64b596

File tree

12 files changed

+372
-332
lines changed

12 files changed

+372
-332
lines changed

README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,6 @@ WARNING! This is not ready for use and is under heavy development of basic featu
1212
7. Make sure any python backends are running on your PC.
1313

1414
## Known Issues
15-
1. Mechanisms aren't limited to init
16-
2. Mechanisms aren't limited to only Robot or Mechanism class
17-
3. No way to specify whether an opmode is auto or teleop
15+
In addition to those listed in the issues on github, there are some major pieces not ready yet.
16+
1. Deploy doesn't connect to backend
17+
1. No ability to download or upload blocks code

src/i18n/locales/en/translation.json

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@
3434
"SPANISH": "Spanish",
3535
"HEBREW": "Hebrew",
3636
"HELP": "Help",
37-
"ABOUT": "About",
3837
"SELECT_HIDDEN": "Select Hidden",
3938
"NO_HIDDEN_MECHANISMS": "No Hidden Mechanisms",
4039
"NO_HIDDEN_OPMODES": "No Hidden Opmodes",
@@ -69,6 +68,13 @@
6968
"COPY_TYPE_TITLE": "Copy {{type}}: {{title}}",
7069
"RENAME": "Rename",
7170
"NO_FILES_FOUND": "No {{type}} files found",
71+
"DELETE": "Delete",
72+
"CANCEL": "Cancel",
73+
"CLOSE_TAB": "Close Tab",
74+
"CLOSE_OTHER_TABS": "Close Other tabs",
75+
"RENAME_ELLIPSIS": "Rename...",
76+
"DELETE_ELLIPSIS": "Delete...",
77+
"COPY_ELLIPSIS": "Copy...",
7278
"MECHANISMS": "Mechanisms",
7379
"OPMODES": "OpModes",
7480
"ABOUT": {
@@ -89,6 +95,28 @@
8995
"ERROR_LOADING_DEPENDENCIES": "Error loading dependencies.",
9096
"COPYRIGHT": "© 2025 FIRST. All rights reserved."
9197
},
98+
"INVALID_CLASS_NAME": "{{name}} is not a valid name. Please enter a different name.",
99+
"CLASS_NAME_ALREADY_EXISTS": "Another Mechanism or OpMode is already named {{name}}. Please enter a different name.",
100+
"THEME_MODAL": {
101+
"LIGHT": "Light Theme",
102+
"LIGHT_DESCRIPTION": "Clean and bright interface for daytime use",
103+
"DARK": "Dark Theme",
104+
"DARK_DESCRIPTION": "Easy on the eyes for low-light environments",
105+
"TRITANOPIA": "Tritanopia Theme",
106+
"TRITANOPIA_DESCRIPTION": "Designed for those with Tritanopia color blindness",
107+
"TRITANOPIA_DARK": "Tritanopia Dark",
108+
"TRITANOPIA_DARK_DESCRIPTION": "Dark theme for those with Tritanopia color blindness",
109+
"DEUTERANOPIA": "Deuteranopia Theme",
110+
"DEUTERANOPIA_DESCRIPTION": "Designed for those with Deuteranopia color blindness",
111+
"DEUTERANOPIA_DARK": "Deuteranopia Dark",
112+
"DEUTERANOPIA_DARK_DESCRIPTION": "Dark theme for those with Deuteranopia color blindness",
113+
"SELECTION": "Theme Selection",
114+
"APPLY": "Apply Theme",
115+
"CHOOSE_DESCRIPTION": "Choose a theme that best suits your preference and working environment.",
116+
"PRIMARY_BUTTON": "Primary",
117+
"PREVIEW": "Theme Preview",
118+
"PREVIEW_DESCRIPTION": "The selected theme will be applied to the entire application interface."
119+
},
92120
"BLOCKLY":{
93121
"OF_TYPE": "of type",
94122
"WITH": "with",

src/i18n/locales/es/translation.json

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@
3131
"SPANISH": "Español",
3232
"HEBREW": "Hebreo",
3333
"HELP": "Ayuda",
34-
"ABOUT": "Acerca de",
3534
"SELECT_HIDDEN": "Seleccionar Oculto",
3635
"NO_HIDDEN_MECHANISMS": "No Hay Mecanismos Ocultos",
3736
"NO_HIDDEN_OPMODES": "No Hay Opmodes Ocultos",
@@ -66,6 +65,13 @@
6665
"COPY_TYPE_TITLE": "Copiar {{type}}: {{title}}",
6766
"RENAME": "Renombrar",
6867
"NO_FILES_FOUND": "No se encontraron archivos de {{type}}",
68+
"DELETE": "Eliminar",
69+
"CANCEL": "Cancelar",
70+
"CLOSE_TAB": "Cerrar Pestaña",
71+
"CLOSE_OTHER_TABS": "Cerrar Otras Pestañas",
72+
"RENAME_ELLIPSIS": "Renombrar...",
73+
"DELETE_ELLIPSIS": "Eliminar...",
74+
"COPY_ELLIPSIS": "Copiar...",
6975
"addTabDialog": {
7076
"title": "Agregar Pestaña",
7177
"search": "Buscar..."
@@ -90,6 +96,28 @@
9096
"ERROR_LOADING_DEPENDENCIES": "Error al cargar dependencias.",
9197
"COPYRIGHT": "© 2025 FIRST. Todos los derechos reservados."
9298
},
99+
"INVALID_CLASS_NAME": "{{name}} no es un nombre válido. Por favor ingrese un nombre diferente.",
100+
"CLASS_NAME_ALREADY_EXISTS": "Otro Mecanismo u OpMode ya se llama {{name}}. Por favor ingrese un nombre diferente.",
101+
"THEME_MODAL": {
102+
"LIGHT": "Tema Claro",
103+
"LIGHT_DESCRIPTION": "Interfaz limpia y brillante para uso diurno",
104+
"DARK": "Tema Oscuro",
105+
"DARK_DESCRIPTION": "Fácil para los ojos en ambientes de poca luz",
106+
"TRITANOPIA": "Tema Tritanopia",
107+
"TRITANOPIA_DESCRIPTION": "Diseñado para personas con daltonismo Tritanopia",
108+
"TRITANOPIA_DARK": "Tritanopia Oscuro",
109+
"TRITANOPIA_DARK_DESCRIPTION": "Tema oscuro para personas con daltonismo Tritanopia",
110+
"DEUTERANOPIA": "Tema Deuteranopia",
111+
"DEUTERANOPIA_DESCRIPTION": "Diseñado para personas con daltonismo Deuteranopia",
112+
"DEUTERANOPIA_DARK": "Deuteranopia Oscuro",
113+
"DEUTERANOPIA_DARK_DESCRIPTION": "Tema oscuro para personas con daltonismo Deuteranopia",
114+
"SELECTION": "Selección de Tema",
115+
"APPLY": "Aplicar Tema",
116+
"CHOOSE_DESCRIPTION": "Elija un tema que mejor se adapte a sus preferencias y entorno de trabajo.",
117+
"PRIMARY_BUTTON": "Primario",
118+
"PREVIEW": "Vista Previa del Tema",
119+
"PREVIEW_DESCRIPTION": "El tema seleccionado se aplicará a toda la interfaz de la aplicación."
120+
},
93121
"BLOCKLY": {
94122
"OF_TYPE": "de tipo",
95123
"WITH": "con",

src/i18n/locales/he/translation.json

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@
3434
"SPANISH": "ספרדית",
3535
"HEBREW": "עברית",
3636
"HELP": "עזרה",
37-
"ABOUT": "אודות",
3837
"SELECT_HIDDEN": "בחר נסתר",
3938
"NO_HIDDEN_MECHANISMS": "אין מנגנונים נסתרים",
4039
"NO_HIDDEN_OPMODES": "אין אופמודים נסתרים",
@@ -69,6 +68,13 @@
6968
"COPY_TYPE_TITLE": "העתקת {{type}}: {{title}}",
7069
"RENAME": "שנה שם",
7170
"NO_FILES_FOUND": "לא נמצאו קבצי {{type}}",
71+
"DELETE": "מחק",
72+
"CANCEL": "בטל",
73+
"CLOSE_TAB": "סגור לשונית",
74+
"CLOSE_OTHER_TABS": "סגור לשוניות אחרות",
75+
"RENAME_ELLIPSIS": "שנה שם...",
76+
"DELETE_ELLIPSIS": "מחק...",
77+
"COPY_ELLIPSIS": "העתק...",
7278
"MECHANISMS": "מנגנונים",
7379
"OPMODES": "אופמודים",
7480
"ABOUT": {
@@ -89,6 +95,28 @@
8995
"ERROR_LOADING_DEPENDENCIES": "שגיאה בטעינת תלויות.",
9096
"COPYRIGHT": "© 2025 FIRST. כל הזכויות שמורות."
9197
},
98+
"INVALID_CLASS_NAME": "{{name}} אינו שם תקין. אנא הזן שם אחר.",
99+
"CLASS_NAME_ALREADY_EXISTS": "מנגנון או אופמוד אחר כבר נקרא {{name}}. אנא הזן שם אחר.",
100+
"THEME_MODAL": {
101+
"LIGHT": "ערכת נושא בהירה",
102+
"LIGHT_DESCRIPTION": "ממשק נקי ובהיר לשימוש ביום",
103+
"DARK": "ערכת נושא כהה",
104+
"DARK_DESCRIPTION": "קל על העיניים בסביבות עם תאורה נמוכה",
105+
"TRITANOPIA": "ערכת נושא טריטנופיה",
106+
"TRITANOPIA_DESCRIPTION": "מעוצב עבור אנשים עם עיוורון צבעים טריטנופיה",
107+
"TRITANOPIA_DARK": "טריטנופיה כהה",
108+
"TRITANOPIA_DARK_DESCRIPTION": "ערכת נושא כהה עבור אנשים עם עיוורון צבעים טריטנופיה",
109+
"DEUTERANOPIA": "ערכת נושא דיוטרנופיה",
110+
"DEUTERANOPIA_DESCRIPTION": "מעוצב עבור אנשים עם עיוורון צבעים דיוטרנופיה",
111+
"DEUTERANOPIA_DARK": "דיוטרנופיה כהה",
112+
"DEUTERANOPIA_DARK_DESCRIPTION": "ערכת נושא כהה עבור אנשים עם עיוורון צבעים דיוטרנופיה",
113+
"SELECTION": "בחירת ערכת נושא",
114+
"APPLY": "החל ערכת נושא",
115+
"CHOOSE_DESCRIPTION": "בחר ערכת נושא שמתאימה ביותר להעדפותיך וסביבת העבודה שלך.",
116+
"PRIMARY_BUTTON": "ראשי",
117+
"PREVIEW": "תצוגה מקדימה של ערכת נושא",
118+
"PREVIEW_DESCRIPTION": "ערכת הנושא הנבחרת תוחל על כל ממשק האפליקציה."
119+
},
92120
"BLOCKLY": {
93121
"OF_TYPE": "מטיפוס",
94122
"WITH": "עם",

src/reactComponents/ClassNameComponent.tsx

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import * as I18Next from 'react-i18next';
2525
import * as React from 'react';
2626
import * as commonStorage from '../storage/common_storage';
2727
import * as storageProject from '../storage/project';
28+
import * as storageNames from '../storage/names';
2829

2930
/** Props for the ClassNameComponent. */
3031
interface ClassNameComponentProps {
@@ -66,8 +67,15 @@ export default function ClassNameComponent(props: ClassNameComponentProps): Reac
6667
return;
6768
}
6869

69-
const {ok, error} = storageProject.isClassNameOk(props.project, newClassName);
70-
if (ok) {
70+
let error = '';
71+
72+
if (!storageNames.isValidClassName(newClassName)) {
73+
error = t('INVALID_CLASS_NAME', { name: newClassName });
74+
} else if (storageProject.findModuleByClassName(props.project!, newClassName) != null) {
75+
error = t('CLASS_NAME_ALREADY_EXISTS', { name: newClassName });
76+
}
77+
78+
if (!error) {
7179
clearError();
7280
props.onAddNewItem();
7381
} else {

0 commit comments

Comments
 (0)