mirror of
https://github.com/pgadmin-org/pgadmin4.git
synced 2026-08-07 11:45:07 -05:00
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:
committed by
Dave Page
parent
b917246be9
commit
6fb35f2649
@@ -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);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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());
|
||||
|
||||
Reference in New Issue
Block a user