diff --git a/lang/en/home.php b/lang/en/home.php index 82a4bcb..e46587d 100755 --- a/lang/en/home.php +++ b/lang/en/home.php @@ -18,7 +18,7 @@ $g_lang["orint_edge"] = "Directed"; $g_lang["not_orint_edge"] = "Undirected"; $g_lang["show_adjacency_matrix"] = "Adjacency Matrix"; - $g_lang["save"] = "Save"; + $g_lang["save"] = "Save graph"; $g_lang["cancel"] = "Cancel"; $g_lang["adjacency_matrix_description"] = "Setup adjacency matrix. Use comma \",\" as separator"; $g_lang["adjacency_matrix_bad_format"] = "Matrix is incorrect. Use comma \",\" as separator. Matrix should be square"; @@ -57,7 +57,8 @@ $g_lang["wrong_matrix_title"] = "Matrix has wrong format"; $g_lang["bad_adj_matrix_message"] = "Cannot create graph. Adjacency Matrix has wrong format. Click \"fix matrix\" button to fix matrix or \"help\" button to open help about Adjacency Matrix format"; $g_lang["bad_inc_matrix_message"] = "Cannot create graph. Incidence Matrix has wrong format. Click \"fix matrix\" button to fix matrix or \"help\" button to open help about Incidence Matrix format"; - $g_lang["save_image"] = "Save graph image"; + $g_lang["save_image"] = "Save workspace image"; + $g_lang["save_full_image"] = "Save full graph image"; $g_lang["open_saved_image_browser"] = "Open image in browser"; $g_lang["download_saved_image"] = "Download saved image"; $g_lang["save_image_dialog_title"] = "Save Graph Image"; diff --git a/lang/ru/home.php b/lang/ru/home.php index f1de65d..5f7e78e 100755 --- a/lang/ru/home.php +++ b/lang/ru/home.php @@ -18,7 +18,7 @@ $g_lang["orint_edge"] = "Ориентированную"; $g_lang["not_orint_edge"] = "Неориентированную"; $g_lang["show_adjacency_matrix"] = "Матрица смежности"; - $g_lang["save"] = "Сохранить"; + $g_lang["save"] = "Сохранить граф"; $g_lang["cancel"] = "Отмена"; $g_lang["adjacency_matrix_description"] = "Задайте матрицу смежности. Используйте запятую \",\" в качестве разделителя"; $g_lang["adjacency_matrix_bad_format"] = "Мартрица имеет неправильный формат. Используйте запятую \",\" в качестве разделителя. Матрица должна иметь одинаковое количество столбцов и строк."; @@ -57,7 +57,8 @@ $g_lang["wrong_matrix_title"] = "Матрица имеет неправильный формат"; $g_lang["bad_adj_matrix_message"] = "Ошибка создания графа. Матрица смежности имеет неправильный формат. Нажимте кнопку \"исправить матрицу\" чтобы исправить матрицу или кнопку \"справка\" чтобы открыть справку о формате матрицы"; $g_lang["bad_inc_matrix_message"] = "Ошибка создания графа. Матрица инцидентности имеет неправильный формат. Нажимте кнопку \"исправить матрицу\" чтобы исправить матрицу или кнопку \"справка\" чтобы открыть справку о формате матрицы"; - $g_lang["save_image"] = "Сохранить изображение графа"; + $g_lang["save_image"] = "Сохранить изображение рабочей области"; + $g_lang["save_full_image"] = "Сохранить изображение всего графа"; $g_lang["open_saved_image_browser"] = "Открыть изображение в браузере"; $g_lang["download_saved_image"] = "Скачать сохранённое изображение"; $g_lang["save_image_dialog_title"] = "Сохранение изображения графа"; diff --git a/script/Appilcation.js b/script/Appilcation.js index 634b69e..db7078d 100644 --- a/script/Appilcation.js +++ b/script/Appilcation.js @@ -131,6 +131,26 @@ Application.prototype._redrawGraph = function() return context; } +Application.prototype._OffscreenRedrawGraph = function() +{ + var bbox = this.graph.getGraphBBox(); + var canvas = document.createElement('canvas'); + canvas.width = bbox.size().x; + canvas.height = bbox.size().y; + var context = canvas.getContext('2d'); + + context.save(); + context.clearRect(0, 0, Math.max(this.canvas.width, this.GetRealWidth()), Math.max(this.canvas.height, this.GetRealHeight())); + context.translate(bbox.minPoint.inverse().x, bbox.minPoint.inverse().y); + + this.RedrawEdges(context); + this.RedrawNodes(context); + + context.restore(); + + return canvas; +} + Application.prototype.updateRenderPathLength = function() { this.renderPathLength = 0; @@ -515,6 +535,11 @@ Application.prototype.SetHandlerMode = function(mode) var savedDialogGraphImageHandler = new SavedDialogGraphImageHandler(this); savedDialogGraphImageHandler.show(); } + else if (mode == "saveDialogFullImage") + { + var savedDialogGraphImageHandler = new SavedDialogGraphImageHandler(this); + savedDialogGraphImageHandler.show(null, true); + } else if (mode == "eulerianLoop") { this.handler = new EulerianLoopGraphHandler(this); @@ -805,6 +830,35 @@ Application.prototype.SaveGraphImageOnDisk = function (showDialogCallback) return imageName; } + +Application.prototype.SaveFullGraphImageOnDisk = function (showDialogCallback) +{ + var imageName = this.GetNewGraphName(); + + this.stopRenderTimer(); + var canvas = this._OffscreenRedrawGraph(); + + var bbox = this.graph.getGraphBBox(); + + var rectParams = ""; + rectParams = "&x=0" + "&y=0" + "&width=" + bbox.size().x + "&height=" + bbox.size().y; + + var imageBase64Data = canvas.toDataURL(); + + $.ajax({ + type: "POST", + url: "/cgi-bin/saveImage.php?name=" + imageName + rectParams, + data: { + base64data : imageBase64Data + }, + dataType: "text", + success: function(data){ + showDialogCallback(); + } + }); + + return imageName; +} diff --git a/script/EventHandlers.js b/script/EventHandlers.js index 6998229..f896dcf 100644 --- a/script/EventHandlers.js +++ b/script/EventHandlers.js @@ -640,7 +640,7 @@ SavedDialogGraphImageHandler.prototype.pathObjects = null; // Objects. SavedDialogGraphImageHandler.prototype.objects = null; -SavedDialogGraphImageHandler.prototype.show = function(object) +SavedDialogGraphImageHandler.prototype.show = function(object, isFull = false) { var showDialogCallback = function () { @@ -673,7 +673,7 @@ SavedDialogGraphImageHandler.prototype.show = function(object) } - var imageName = this.app.SaveGraphImageOnDisk(showDialogCallback); + var imageName = isFull ? this.app.SaveFullGraphImageOnDisk(showDialogCallback) : this.app.SaveGraphImageOnDisk(showDialogCallback); } diff --git a/script/main.js b/script/main.js index be5c65c..22b8546 100644 --- a/script/main.js +++ b/script/main.js @@ -294,6 +294,12 @@ function postLoadPage() application.SetHandlerMode("saveDialogImage"); } + document.getElementById('SaveFullGraphImage').onclick = function () + { + userAction(this.id); + application.SetHandlerMode("saveDialogFullImage"); + } + document.getElementById('Zoom100').onclick = function () { userAction(this.id); diff --git a/tpl/home.php b/tpl/home.php index ec65479..46af2bf 100755 --- a/tpl/home.php +++ b/tpl/home.php @@ -43,6 +43,9 @@