Trying to create VLayout type Portal Node that contains a simple Button creation and adding it to the Dashboard show case exanple
https://www.smartclient.com/smartcli...ortalDashboard
we added a TestLayout to ListPallets data
Code:
,
{
title:"TestLayout",
type:"VLayout",
defaults: {
width: "100%",
height: "100%",
autoDraw:false,
members: [
isc.IButton.create()
]
}
}
not sure if the dashboard was meant for creating custom layouts
here is the full test case :
Code:
// Palette Node used to create a default portal
var initialPortalPaletteNode = {
type: "PortalLayout",
defaults: {
width: "100%",
height: "100%",
canResizePortlets: true
}
};
// Grid to display the list of available dashboards
isc.ListGrid.create({
ID: "dashboardList",
dataSource: "dashboards",
autoFetchData: true,
selectionType: "single",
sortField: "description",
leaveScrollbarGap: false,
// Allow edit of portal description (via context menu)
canEdit: true,
editEvent: "none",
// And removal of dashboards
canRemoveRecords: true,
fields: [ { name: "description" } ],
cellContextMenuConstructor: "Menu",
cellContextClick : function (record, rowNum, colNum) {
// create the cellContextMenu if necessary
if (!this.cellContextMenu) {
this.cellContextMenu = this.createAutoChild("cellContextMenu");
}
var menuItems = [
{ title : "Rename", rowNum: rowNum, click : "target.startEditing(item.rowNum)" },
{ isSeparator: true },
{ title : "Edit", click : "target.clearCurrentDashboard(); target.editDashboard()" },
{ title : "Clone", click : "target.clearCurrentDashboard(); target.cloneDashboard()" }
];
this.cellContextMenu.setData(menuItems);
this.cellContextMenu.showContextMenu(this);
// return false to kill the standard context menu
return false;
},
recordDoubleClick : function (viewer, record, recordNum, field, fieldNum, value, rawValue) {
viewer.clearCurrentDashboard();
viewer.viewDashboard();
},
clearCurrentDashboard : function () {
editPane.destroyAll();
editPane.hide();
editToolbar.hide();
},
editDashboard : function () {
var record = this.getSelectedRecord();
if (record) {
editPane.setPortal(record.layout);
editPane.show();
editToolbar.show();
this.showPalette();
}
this._currentRecord = record;
},
viewDashboard : function () {
var record = this.getSelectedRecord();
if (record) {
editPane.addPaletteNodesFromXML(record.layout);
editPane.show();
editToolbar.hide();
this.hidePalette();
}
this._currentRecord = record;
},
newDashboard : function () {
this.clearCurrentDashboard();
this._currentRecord = null;
// Add a PortalLayout to the editPane
editPane.setInitialPortal(initialPortalPaletteNode);
editPane.show();
editToolbar.show();
this.showPalette();
this.saveDashboard();
},
cloneDashboard : function () {
var record = this.getSelectedRecord();
if (record) {
this.cloneRecord(record);
}
},
showPalette : function () {
selector.enableTab(1);
selector.selectTab(1);
},
hidePalette : function () {
selector.disableTab(1);
selector.selectTab(0);
},
refreshDashboard : function () {
this.clearCurrentDashboard();
this.editDashboard();
},
saveDashboard : function () {
var editNodes = editPane.serializeAllEditNodes({ indent: false });
if (this._currentRecord) {
this._currentRecord.layout = editNodes;
this.updateData(this._currentRecord);
} else {
var grid = this;
this.addData({ description: "New dashboard", layout: editNodes }, function (response, data, request) {
if (data && data.length > 0) {
grid.selectSingleRecord(data[0]);
grid._currentRecord = data[0];
}
});
}
},
cloneRecord : function (record) {
this.addData({ description: record.description, layout: record.layout});
}
});
isc.IButton.create({
ID: "viewButton",
title: "View",
autoFit: true,
click : function () {
dashboardList.clearCurrentDashboard();
dashboardList.viewDashboard();
}
});
isc.IButton.create({
ID: "editButton",
title: "Edit",
autoFit: true,
click : function () {
dashboardList.clearCurrentDashboard();
dashboardList.editDashboard();
}
});
isc.IButton.create({
ID: "newButton",
title: "New",
autoFit: true,
click : function () {
dashboardList.newDashboard();
}
});
isc.IButton.create({
ID: "cloneButton",
title: "Clone",
autoFit: true,
click : function () {
dashboardList.cloneDashboard();
}
});
isc.HLayout.create({
ID: "selectToolbar",
height: 30,
membersMargin: 10,
defaultLayoutAlign: "center",
members: [
isc.LayoutSpacer.create(),
viewButton,
editButton,
newButton,
cloneButton
]
})
isc.VLayout.create({
ID: "selectLayout",
members: [
dashboardList,
selectToolbar
]
});
// The ListPalette contains components available
// for use, with default settings.
isc.ListPalette.create({
ID: "listPalette",
leaveScrollbarGap: false,
// The regular ListGrid property
fields: [
{name: "title", title: "Component"}
],
// We are supplying the component data inline for this example.
// However, ListPalette is a subclass of ListGrid, so you could
// also use a dataSource.
data: [{
title: "Animals",
type: "ListGrid",
defaults: {
dataSource: "animals",
autoFetchData: true,
showFilterEditor: true
}
},{
title: "Supply Categories",
type: "ListGrid",
defaults: {
dataSource: "supplyCategory",
autoFetchData: true,
showFilterEditor: true
}
},{
title: "Supply Items",
type: "ListGrid",
defaults: {
dataSource: "supplyItem",
autoFetchData: true,
showFilterEditor: true
}
},
{
title:"TestLayout",
type:"VLayout",
defaults: {
width: "100%",
height: "100%",
autoDraw:false,
members: [
isc.IButton.create()
]
}
}
]
});
isc.TabSet.create({
ID: "selector",
height: "100%",
tabs: [
{title: "Dashboards", pane: selectLayout },
{title: "Palette", pane: listPalette, disabled: true }
]
});
isc.EditPane.create({
ID: "editPane",
visibility: "hidden",
extraPalettes: isc.HiddenPalette.create({
data: [
{ title: "ListGridField", type: "ListGridField" }
]
}),
setInitialPortal : function (paletteNode) {
var editNode = this.addFromPaletteNode(paletteNode);
this.getEditContext().defaultParent = editNode;
},
setPortal : function (xml) {
var editContext = this.getEditContext(),
editTree = editContext.getEditNodeTree(),
rootNode = editContext.getRootEditNode()
;
this.addPaletteNodesFromXML(xml, null, null, function (paletteNodes) {
// PortalLayout is assumed to be the first node under root.
var childNodes = editTree.getChildren(rootNode),
editNode = (childNodes && childNodes.length > 0 ? childNodes[0] : null)
;
editContext.defaultParent = editNode;
});
}
});
// Make the new editPane the default Edit Context for the palette,
// to support double-clicking on components in the palette to create them
listPalette.setDefaultEditContext(editPane);
editPane.setDefaultPalette(listPalette);
// Add a PortalLayout to the editPane
editPane.setInitialPortal(initialPortalPaletteNode);
isc.IButton.create({
ID: "saveButton",
title: "Save",
autoFit: true,
click : function () {
dashboardList.saveDashboard();
}
});
isc.IButton.create({
ID: "discardButton",
title: "Discard changes",
autoFit: true,
click : function () {
dashboardList.refreshDashboard();
}
});
isc.HLayout.create({
ID: "editToolbar",
height: 30,
membersMargin: 10,
defaultLayoutAlign: "center",
visibility: "hidden",
members: [
isc.LayoutSpacer.create(),
saveButton,
discardButton
]
})
isc.VLayout.create({
ID: "dashboardLayout",
width: "100%",
height: "100%",
members: [
editPane,
editToolbar
]
});
isc.SplitPane.create({
ID: "splitPane",
width: "100%",
height: "100%",
showLeftButton:true,
showRightButton:false,
detailPane: dashboardLayout,
navigationPane: selector,
navigationTitle: "Selector"
});
Comment