Overhaul the layout saving code so it includes the Query Tool and Debugger, and stores the layout when change events are detected rather than (unreliably) on exit. Fixes #4084

This commit is contained in:
Aditya Toshniwal
2019-03-26 11:08:45 -04:00
committed by Dave Page
parent b917246be9
commit 6fb35f2649
14 changed files with 167 additions and 130 deletions

View File

@@ -29,6 +29,7 @@ from pgadmin.utils.ajax import bad_request
from pgadmin.utils.ajax import make_json_response, \
internal_server_error
from pgadmin.utils.driver import get_driver
from pgadmin.settings import get_setting
from config import PG_DEFAULT_DRIVER
from pgadmin.model import db, DebuggerFunctionArguments
@@ -589,6 +590,8 @@ def direct_new(trans_id):
function_arguments += ')'
layout = get_setting('Debugger/Layout')
return render_template(
"debugger/direct.html",
_=gettext,
@@ -598,7 +601,8 @@ def direct_new(trans_id):
is_desktop_mode=current_app.PGADMIN_RUNTIME,
is_linux=is_linux_platform,
client_platform=user_agent.platform,
function_name_with_arguments=obj['function_name'] + function_arguments
function_name_with_arguments=obj['function_name'] + function_arguments,
layout=layout
)

View File

@@ -1534,7 +1534,7 @@ define([
_.extend(DirectDebug.prototype, {
/* We should get the transaction id from the server during initialization here */
init: function(trans_id, debug_type, function_name_with_arguments) {
load: function(trans_id, debug_type, function_name_with_arguments, layout) {
// We do not want to initialize the module multiple times.
var self = this;
_.bindAll(pgTools.DirectDebug, 'messages');
@@ -1554,6 +1554,7 @@ define([
this.is_user_aborted_debugging = false;
this.is_polling_required = true; // Flag to stop unwanted ajax calls
this.function_name_with_arguments = function_name_with_arguments;
this.layout = layout;
let browser = window.opener ?
window.opener.pgAdmin.Browser : window.top.pgAdmin.Browser;
@@ -1710,6 +1711,18 @@ define([
}
},
buildDefaultLayout: function(docker) {
let code_editor_panel = docker.addPanel('code', wcDocker.DOCK.TOP);
let parameters_panel = docker.addPanel('parameters', wcDocker.DOCK.BOTTOM, code_editor_panel);
docker.addPanel('local_variables',wcDocker.DOCK.STACKED, parameters_panel, {
tabOrientation: wcDocker.TAB.TOP,
});
docker.addPanel('messages', wcDocker.DOCK.STACKED, parameters_panel);
docker.addPanel('results', wcDocker.DOCK.STACKED, parameters_panel);
docker.addPanel('stack_pane', wcDocker.DOCK.STACKED, parameters_panel);
},
// Create the debugger layout with splitter and display the appropriate data received from server.
intializePanels: function() {
var self = this;
@@ -1780,23 +1793,19 @@ define([
stack_pane.load(self.docker);
});
self.code_editor_panel = self.docker.addPanel('code', wcDocker.DOCK.TOP);
self.parameters_panel = self.docker.addPanel(
'parameters', wcDocker.DOCK.BOTTOM, self.code_editor_panel
);
self.local_variables_panel = self.docker.addPanel(
'local_variables',
wcDocker.DOCK.STACKED,
self.parameters_panel, {
tabOrientation: wcDocker.TAB.TOP,
}
);
self.messages_panel = self.docker.addPanel(
'messages', wcDocker.DOCK.STACKED, self.parameters_panel);
self.results_panel = self.docker.addPanel(
'results', wcDocker.DOCK.STACKED, self.parameters_panel);
self.stack_pane_panel = self.docker.addPanel(
'stack_pane', wcDocker.DOCK.STACKED, self.parameters_panel);
// restore the layout if present else fallback to buildDefaultLayout
pgBrowser.restore_layout(self.docker, self.layout, this.buildDefaultLayout.bind(this));
self.docker.on(wcDocker.EVENT.LAYOUT_CHANGED, function() {
pgBrowser.save_current_layout('Debugger/Layout', self.docker);
});
self.code_editor_panel = self.docker.findPanels('code')[0];
self.parameters_panel = self.docker.findPanels('parameters')[0];
self.local_variables_panel = self.docker.findPanels('local_variables')[0];
self.messages_panel = self.docker.findPanels('messages')[0];
self.results_panel = self.docker.findPanels('results')[0];
self.stack_pane_panel = self.docker.findPanels('stack_pane')[0];
var editor_pane = $('<div id="stack_editor_pane" ' +
'class="pg-panel-content info"></div>');

View File

@@ -9,7 +9,7 @@ try {
var pgDirectDebug = pgDirectDebug || pgAdmin.Tools.DirectDebug;
var $ = pgDirectDebug.jquery;
pgDirectDebug.init({{ uniqueId }}, {{ debug_type }}, '{{ function_name_with_arguments }}');
pgDirectDebug.load({{ uniqueId }}, {{ debug_type }}, '{{ function_name_with_arguments }}', '{{layout|safe}}');
window.onbeforeunload = function(ev) {
$.ajax({
url: "{{ url_for('debugger.index') }}close/{{ uniqueId }}",