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
+33 -38
View File
@@ -280,19 +280,19 @@ define('pgadmin.browser', [
scripts[n].push({'name': m, 'path': p, loaded: false});
},
// Build the default layout
buildDefaultLayout: function() {
var browserPanel = this.docker.addPanel('browser', wcDocker.DOCK.LEFT);
var dashboardPanel = this.docker.addPanel(
buildDefaultLayout: function(docker) {
var browserPanel = docker.addPanel('browser', wcDocker.DOCK.LEFT);
var dashboardPanel = docker.addPanel(
'dashboard', wcDocker.DOCK.RIGHT, browserPanel);
this.docker.addPanel('properties', wcDocker.DOCK.STACKED, dashboardPanel, {
docker.addPanel('properties', wcDocker.DOCK.STACKED, dashboardPanel, {
tabOrientation: wcDocker.TAB.TOP,
});
this.docker.addPanel('sql', wcDocker.DOCK.STACKED, dashboardPanel);
this.docker.addPanel(
docker.addPanel('sql', wcDocker.DOCK.STACKED, dashboardPanel);
docker.addPanel(
'statistics', wcDocker.DOCK.STACKED, dashboardPanel);
this.docker.addPanel(
docker.addPanel(
'dependencies', wcDocker.DOCK.STACKED, dashboardPanel);
this.docker.addPanel(
docker.addPanel(
'dependents', wcDocker.DOCK.STACKED, dashboardPanel);
},
// Enable/disable menu options
@@ -351,10 +351,10 @@ define('pgadmin.browser', [
$obj_mnu.append(create_submenu.$el);
}
},
save_current_layout: function(obj) {
if(obj.docker) {
var state = obj.docker.save();
var settings = { setting: 'Browser/Layout', value: state };
save_current_layout: function(layout_id, docker) {
if(docker) {
var layout = docker.save();
var settings = { setting: layout_id, value: layout };
$.ajax({
type: 'POST',
url: url_for('settings.store_bulk'),
@@ -362,6 +362,24 @@ define('pgadmin.browser', [
});
}
},
restore_layout: function(docker, layout, defaultLayoutCallback) {
// Try to restore the layout if there is one
if (layout != '') {
try {
docker.restore(layout);
}
catch(err) {
docker.clear();
if(defaultLayoutCallback) {
defaultLayoutCallback(docker);
}
}
} else {
if(defaultLayoutCallback) {
defaultLayoutCallback(docker);
}
}
},
init: function() {
var obj=this;
if (obj.initialized) {
@@ -395,33 +413,10 @@ define('pgadmin.browser', [
// Stored layout in database from the previous session
var layout = pgBrowser.utils.layout;
obj.restore_layout(obj.docker, layout, obj.buildDefaultLayout.bind(obj));
// Try to restore the layout if there is one
if (layout != '') {
try {
obj.docker.restore(layout);
}
catch(err) {
obj.docker.clear();
obj.buildDefaultLayout();
}
} else {
obj.buildDefaultLayout();
}
// Listen to panel attach/detach event so that last layout will be remembered
_.each(obj.panels, function(panel) {
if (panel.panel) {
panel.panel.on(wcDocker.EVENT.ATTACHED, function() {
obj.save_current_layout(obj);
});
panel.panel.on(wcDocker.EVENT.DETACHED, function() {
obj.save_current_layout(obj);
});
panel.panel.on(wcDocker.EVENT.MOVE_ENDED, function() {
obj.save_current_layout(obj);
});
}
obj.docker.on(wcDocker.EVENT.LAYOUT_CHANGED, function() {
obj.save_current_layout('Browser/Layout', obj.docker);
});
}
+1
View File
@@ -487,6 +487,7 @@ define('pgadmin.browser.node', [
showTitle: true,
isCloseable: true,
isPrivate: true,
isLayoutMember: false,
elContainer: true,
content: '<div class="obj_properties container-fluid"><div class="alert alert-info pg-panel-message">' + gettext('Please wait while we fetch information about the node from the server...') + '</div></div>',
onCreate: function(myPanel, $container) {
+3 -3
View File
@@ -17,7 +17,7 @@ define(
pgAdmin.Browser.Panel = function(options) {
var defaults = [
'name', 'title', 'width', 'height', 'showTitle', 'isCloseable',
'isPrivate', 'content', 'icon', 'events', 'onCreate', 'elContainer',
'isPrivate', 'isLayoutMember', 'content', 'icon', 'events', 'onCreate', 'elContainer',
'canHide', 'limit', 'extraClasses',
];
_.extend(this, _.pick(options, defaults));
@@ -31,6 +31,7 @@ define(
showTitle: true,
isCloseable: true,
isPrivate: false,
isLayoutMember: true,
content: '',
icon: '',
panel: null,
@@ -45,6 +46,7 @@ define(
title: that.title,
isPrivate: that.isPrivate,
limit: that.limit,
isLayoutMember: that.isLayoutMember,
onCreate: function(myPanel) {
$(myPanel).data('pgAdminName', that.name);
myPanel.initSize(that.width, that.height);
@@ -187,12 +189,10 @@ define(
return;
if (eventName == 'panelClosed') {
pgBrowser.save_current_layout(pgBrowser);
/* Pass the closed flag also */
pgAdmin.Dashboard.toggleVisibility(false, true);
} else if (eventName == 'panelVisibilityChanged') {
if (pgBrowser.tree) {
pgBrowser.save_current_layout(pgBrowser);
var selectedNode = pgBrowser.tree.selected();
if (!_.isUndefined(pgAdmin.Dashboard)) {
pgAdmin.Dashboard.toggleVisibility(pgBrowser.panels.dashboard.panel.isVisible());