diff --git a/core/config/main.php b/core/config/main.php index bf6dfd2..9a7603c 100755 --- a/core/config/main.php +++ b/core/config/main.php @@ -94,5 +94,5 @@ $g_config['vote'] = "./tmp/vote/vote.txt"; $g_config['voteTopics'] = "./tmp/vote/voteTopics.txt_"; $g_config['use_js_cache'] = true; - $g_config['engine_version'] = 109; + $g_config['engine_version'] = 110; ?> diff --git a/i/css/home.css b/i/css/home.css index 0ebb6c1..3a8d06d 100755 --- a/i/css/home.css +++ b/i/css/home.css @@ -554,6 +554,31 @@ label.switcherText { padding: 6px; } +.incidence-matrix-controls { + display: flex; + align-items: center; + flex-wrap: wrap; + gap: 8px; + margin-top: 8px; +} + +.incidence-matrix-controls label { + margin: 0; + white-space: nowrap; +} + +#incidenceEdgeEnumeration { + flex: 1 1 150px; + width: auto; + min-width: 150px; +} + +#incidenceEdgeNamesList { + width: 100%; + min-width: 300px; + resize: vertical; +} + /* Left text */ .side-text-wrap { width: 40px; diff --git a/lang/bg/home.php b/lang/bg/home.php index 37fdee8..cb896fc 100644 --- a/lang/bg/home.php +++ b/lang/bg/home.php @@ -176,6 +176,9 @@ $g_lang["greek_add"] = " We have added Dutch translation 🇳🇱. Thank you Willie de Wit"; $g_lang["text_above_edge"] = "Текст над ребро"; + $g_lang["edge_enumeration"] = "Номериране на ребрата"; + $g_lang["no_enumeration"] = "Без номериране"; + $g_lang["edit_edge_names"] = "Редактиране на текстовете"; $g_lang["select_groupe_mac"] = "Използвайте Cmd⌘ за да изберете няколко обекта."; $g_lang["select_groupe_win"] = "Използвайте Ctrl за да изберете няколко обекта."; diff --git a/lang/ch/home.php b/lang/ch/home.php index ad67068..6a5d36d 100644 --- a/lang/ch/home.php +++ b/lang/ch/home.php @@ -178,6 +178,9 @@ $g_lang["greek_add"] = " 我们添加了中文翻译 🇳🇱. 感谢 Xingyi Zhang"; $g_lang["text_above_edge"] = "边上的文本"; + $g_lang["edge_enumeration"] = "边编号"; + $g_lang["no_enumeration"] = "不编号"; + $g_lang["edit_edge_names"] = "编辑边文本"; $g_lang["select_groupe_mac"] = "使用 Cmd⌘ 选择数个对象."; $g_lang["select_groupe_win"] = "使用 Ctrl 选择数个对象."; diff --git a/lang/cs/home.php b/lang/cs/home.php index 058ea2e..9ed63bd 100644 --- a/lang/cs/home.php +++ b/lang/cs/home.php @@ -177,6 +177,9 @@ $g_lang["greek_add"] = " Přidali jsme překlad do češtiny 🇨🇿. Děkujeme Jakubovi Mazuchovi!"; $g_lang["text_above_edge"] = "Text nad hranou"; + $g_lang["edge_enumeration"] = "Číslování hran"; + $g_lang["no_enumeration"] = "Bez číslování"; + $g_lang["edit_edge_names"] = "Upravit texty hran"; $g_lang["select_groupe_mac"] = "Pro označení více objektů použijte klávesy Cmd⌘."; $g_lang["select_groupe_win"] = "Pro označení více objektů použijte klávesy Ctrl."; diff --git a/lang/de/home.php b/lang/de/home.php index 9f49cd4..a474c3d 100644 --- a/lang/de/home.php +++ b/lang/de/home.php @@ -143,6 +143,9 @@ $g_lang["replace_edge"] = "aktulle ersetzen"; $g_lang["add_edge"] = "Einfügen (Multigraph)"; $g_lang["text_above_edge"] = "Text an der Kante"; + $g_lang["edge_enumeration"] = "Kantennummerierung"; + $g_lang["no_enumeration"] = "Keine Nummerierung"; + $g_lang["edit_edge_names"] = "Kantentexte bearbeiten"; $g_lang["select_groupe_mac"] = "Nutzen Sie Cmd⌘ um mehrere Objekten zu wählen."; $g_lang["select_groupe_win"] = "Nutzen Sie Strg um mehrere Objekten zu wählen."; $g_lang["drag_select_group"] = "Gruppe ziehen"; diff --git a/lang/el/home.php b/lang/el/home.php index b5d9add..f81843b 100644 --- a/lang/el/home.php +++ b/lang/el/home.php @@ -179,6 +179,9 @@ $g_lang["french_add"] = "Προσθέσαμε γαλλική μετάφραση 🇫🇷"; $g_lang["greece_add"] = "Προσθέσαμε ελληνική μετάφραση GR"; $g_lang["text_above_edge"] = "Κείμενο πάνω από την άκρη"; + $g_lang["edge_enumeration"] = "Αρίθμηση ακμών"; + $g_lang["no_enumeration"] = "Χωρίς αρίθμηση"; + $g_lang["edit_edge_names"] = "Επεξεργασία κειμένων ακμών"; $g_lang["select_groupe_mac"] = "Χρησιμοποιήστε Cmd⌘ για να επιλέξετε πολλαπλά αντικείμενα."; $g_lang["select_groupe_win"] = "Χρησιμοποιήστε Ctrl για να επιλέξετε πολλαπλά αντικείμενα."; diff --git a/lang/en/home.php b/lang/en/home.php index 74ac561..c74ebc3 100755 --- a/lang/en/home.php +++ b/lang/en/home.php @@ -178,6 +178,9 @@ $g_lang["greek_add"] = " We have added Dutch translation 🇳🇱. Thank you Willie de Wit"; $g_lang["text_above_edge"] = "Text above edge"; + $g_lang["edge_enumeration"] = "Edge enumeration"; + $g_lang["no_enumeration"] = "No enumeration"; + $g_lang["edit_edge_names"] = "Edit edge text"; $g_lang["select_groupe_mac"] = "Use Cmd⌘ to select several objects."; $g_lang["select_groupe_win"] = "Use Ctrl to select several objects."; diff --git a/lang/es/home.php b/lang/es/home.php index d433009..cab727e 100755 --- a/lang/es/home.php +++ b/lang/es/home.php @@ -178,6 +178,9 @@ $g_lang["greek_add"] = " Tenemos traducciones en griego 🇬🇷. Gracias KyriakosG78"; $g_lang["text_above_edge"] = "Textos sobre arista"; + $g_lang["edge_enumeration"] = "Numeración de aristas"; + $g_lang["no_enumeration"] = "Sin numeración"; + $g_lang["edit_edge_names"] = "Editar textos de aristas"; $g_lang["select_groupe_mac"] = "Usa Cmd⌘ para seleccionar varios objetos."; $g_lang["select_groupe_win"] = "Usa Ctrl para seleccionar varios objetos."; diff --git a/lang/fr/home.php b/lang/fr/home.php index 953a3b5..844f05a 100644 --- a/lang/fr/home.php +++ b/lang/fr/home.php @@ -145,6 +145,9 @@ $g_lang["replace_edge"] = "remplacer l'actuel"; $g_lang["add_edge"] = "ajout (multigraphe)"; $g_lang["text_above_edge"] = "Texte au-dessus du bord"; + $g_lang["edge_enumeration"] = "Numérotation des arêtes"; + $g_lang["no_enumeration"] = "Sans numérotation"; + $g_lang["edit_edge_names"] = "Modifier les textes des arêtes"; $g_lang["select_groupe_mac"] = "Utiliser Cmd⌘ pour sélectionner plusieurs objets."; $g_lang["select_groupe_win"] = "Utiliser Ctrl pour sélectionner plusieurs objets."; diff --git a/lang/nl/home.php b/lang/nl/home.php index caf5c4c..7599585 100644 --- a/lang/nl/home.php +++ b/lang/nl/home.php @@ -143,6 +143,9 @@ $g_lang["replace_edge"] = "vervang huidige"; $g_lang["add_edge"] = "Toevoegen (multigraaf)"; $g_lang["text_above_edge"] = "Tekst boven de lijn"; + $g_lang["edge_enumeration"] = "Lijnnummering"; + $g_lang["no_enumeration"] = "Geen nummering"; + $g_lang["edit_edge_names"] = "Lijnteksten bewerken"; $g_lang["select_groupe_mac"] = "Gebruik Cmd⌘ om meerdere objecten te selecteren."; $g_lang["select_groupe_win"] = "Gebruik Ctrl om meerdere objecten te selecteren."; $g_lang["drag_select_group"] = "Sleep groep"; diff --git a/lang/pl/home.php b/lang/pl/home.php index 81b0c0a..e573b16 100644 --- a/lang/pl/home.php +++ b/lang/pl/home.php @@ -178,6 +178,9 @@ $g_lang["greek_add"] = " Dodaliśmy polskie tłumaczenie, Patryk"; $g_lang["text_above_edge"] = "Tekst nad krawędzią"; + $g_lang["edge_enumeration"] = "Numerowanie krawędzi"; + $g_lang["no_enumeration"] = "Bez numerowania"; + $g_lang["edit_edge_names"] = "Edytuj teksty krawędzi"; $g_lang["select_groupe_mac"] = "Użyj Cmd⌘ by wybrać dane obiekty."; $g_lang["select_groupe_win"] = "Użyj Ctrl by wybrać dane obiekty."; diff --git a/lang/pt/home.php b/lang/pt/home.php index 289c5c2..23bdaf3 100644 --- a/lang/pt/home.php +++ b/lang/pt/home.php @@ -142,6 +142,9 @@ $g_lang["graph_is_general_message"] = ""; $g_lang["text_above_edge"] = "Text above edge"; + $g_lang["edge_enumeration"] = "Numeração das arestas"; + $g_lang["no_enumeration"] = "Sem numeração"; + $g_lang["edit_edge_names"] = "Editar textos das arestas"; $g_lang["select_groupe_mac"] = "Use Cmd⌘ to select several objects."; $g_lang["select_groupe_win"] = "Use Ctrl to select several objects."; diff --git a/lang/ru/home.php b/lang/ru/home.php index fe0d849..79ec0a6 100755 --- a/lang/ru/home.php +++ b/lang/ru/home.php @@ -181,6 +181,9 @@ $g_lang["graph_is_multi_message"] = "Мультиграф не поддерживает все алгоритмы"; $g_lang["graph_is_general_message"] = ""; $g_lang["text_above_edge"] = "Текст над дугой"; + $g_lang["edge_enumeration"] = "Нумерация дуг"; + $g_lang["no_enumeration"] = "Без нумерации"; + $g_lang["edit_edge_names"] = "Редактировать подписи дуг"; $g_lang["select_groupe_mac"] = "Выделите несколько объектов используя Cmd⌘."; $g_lang["select_groupe_win"] = "Выделите несколько объектов используя Ctrl."; diff --git a/lang/sv/home.php b/lang/sv/home.php index 2702335..eb08941 100644 --- a/lang/sv/home.php +++ b/lang/sv/home.php @@ -77,6 +77,9 @@ $g_lang["zoom_out"] = "Zooma ut"; $g_lang["move_workspace"] = "Flytta arbetsytan"; $g_lang["custom"] = "Anpassad text"; + $g_lang["edge_enumeration"] = "Kantnumrering"; + $g_lang["no_enumeration"] = "Ingen numrering"; + $g_lang["edit_edge_names"] = "Redigera kanttexter"; $g_lang["enter_vertex_title"] = "Ange text"; $g_lang["rename_vertex"] = "Byt namn på nod"; $g_lang["rename_text"] = "Byt namn "; diff --git a/lang/ua/home.php b/lang/ua/home.php index d893829..ff39669 100644 --- a/lang/ua/home.php +++ b/lang/ua/home.php @@ -179,6 +179,9 @@ $g_lang["graph_is_multi_message"] = "Мультиграф не підтримує всі алгоритми"; $g_lang["graph_is_general_message"] = ""; $g_lang["text_above_edge"] = "Текст над дугою"; + $g_lang["edge_enumeration"] = "Нумерація дуг"; + $g_lang["no_enumeration"] = "Без нумерації"; + $g_lang["edit_edge_names"] = "Редагувати підписи дуг"; $g_lang["select_groupe_mac"] = "Виділіть декілька обʼєктів використовуючи Cmd⌘."; $g_lang["select_groupe_win"] = "Виділіть декілька обʼєктів використовуючи Ctrl."; diff --git a/script/entities/graph/model/Graph.js b/script/entities/graph/model/Graph.js index bd24de2..5859658 100644 --- a/script/entities/graph/model/Graph.js +++ b/script/entities/graph/model/Graph.js @@ -869,7 +869,7 @@ Graph.prototype.TestIncidenceMatrix = function (matrix, rowsObj, colsObj, separa if (bGoodFormat) { - for (var i = 0; i < colsObj.cols[0].length; i++) + for (var i = 0; i < columnCount; i++) { var values = []; for (j = 0; j < colsObj.cols.length; ++j) @@ -908,7 +908,8 @@ Graph.prototype.SetIncidenceMatrix = function (matrix, viewportSize, currentEnum } var newVertices = []; var bWeightGraph = false; - for (var i = 0; i < cols[0].length; i++) + var columnCount = cols.length > 0 ? cols[0].length : 0; + for (var i = 0; i < columnCount; i++) { var edgeValue = []; var edgeIndex = []; @@ -965,17 +966,18 @@ Graph.prototype.SetIncidenceMatrix = function (matrix, viewportSize, currentEnum }); } - for (var i = cols.length; i < Math.max(this.vertices.length, cols.length); i++) + var rowCount = rows.length > 0 ? rows.length : this.vertices.length; + for (var i = rowCount; i < this.vertices.length; i++) { this.DeleteVertex(this.vertices[i]); - i--; + i--; } this.VerticesReposition(viewportSize, newVertices); } } -Graph.prototype.GetIncidenceMatrix = function () +Graph.prototype.GetIncidenceMatrix = function (res_columns_width) { var matrix = ""; let cols_width = []; @@ -1001,7 +1003,7 @@ Graph.prototype.GetIncidenceMatrix = function () for (var j = 0; j < this.edges.length; j++) { - let max_width = 0; + let max_width = Math.min(this.edges[j].GetUpText().toString().length, 2); for (var i = 0; i < this.vertices.length; i++) { let str = "" + get_edge_weight_str(i, j); @@ -1026,6 +1028,11 @@ Graph.prototype.GetIncidenceMatrix = function () matrix = matrix + "\n"; } + if (res_columns_width !== undefined) { + res_columns_width.length = 0; + res_columns_width.push(...cols_width); + } + return matrix; } diff --git a/script/features/show_incidence_matrix/index.js b/script/features/show_incidence_matrix/index.js index 94bbd71..e2fdcde 100644 --- a/script/features/show_incidence_matrix/index.js +++ b/script/features/show_incidence_matrix/index.js @@ -23,23 +23,45 @@ ShowIncidenceMatrix.prototype.show = function() { var handler = this; var dialogButtons = {}; - - $('#IncidenceMatrixField').unbind(); - $( "#IncidenceMatrixField" ).on('keyup change', function (eventObject) + let edgeNames = this.app.graph.edges.map(function(edge) { return edge.GetUpText(); }); + let edgeEnumSelect = $("#incidenceEdgeEnumeration"); + let edgeNamesDialog = $("#incidenceEdgeNamesDialog"); + let edgeNamesList = $("#incidenceEdgeNamesList"); + let currentColumns = []; + let currentColumnWidths = []; + let matrixIsValid = false; + let edgeEnumValue = this.app.currentEnumEdgesType || ""; + if (edgeEnumValue === "Custom") + { + edgeEnumValue = ""; + } + let selectedEdgeEnumValue = edgeEnumValue; + edgeEnumSelect.find("option:not(:first)").remove(); + this.app.GetEnumVerticesList().forEach(function(item) { + if (item.value !== "Custom") { - if (!handler.app.TestIncidenceMatrix($( "#IncidenceMatrixField" ).val(), [], [])) - { - $( "#BadIncidenceMatrixFormatMessage" ).show(); - } - else - { - $( "#BadIncidenceMatrixFormatMessage" ).hide(); - } - }); + edgeEnumSelect.append($("