IDEMPIERE-369 Master Detail layout improvements. Fixed navigation from detail to header lost the detail tab's current selected row position. Fixed data ignore for new row doesn't refresh detail pane.
This commit is contained in:
parent
89b02ce27d
commit
3354e6d4b1
|
@ -3223,4 +3223,8 @@ public class GridTab implements DataStatusListener, Evaluatee, Serializable
|
|||
|
||||
return col;
|
||||
}
|
||||
|
||||
public boolean isNew() {
|
||||
return isOpen() && getCurrentRow() >= 0 && getCurrentRow() == m_mTable.getNewRow();
|
||||
}
|
||||
} // GridTab
|
||||
|
|
|
@ -147,6 +147,8 @@ DataStatusListener, IADTabpanel
|
|||
|
||||
private Component detailPane;
|
||||
|
||||
public static final String ON_TOGGLE_EVENT = "onToggle";
|
||||
|
||||
public ADTabpanel()
|
||||
{
|
||||
init();
|
||||
|
@ -777,7 +779,7 @@ DataStatusListener, IADTabpanel
|
|||
{
|
||||
if (event.getTarget() == listPanel.getListbox())
|
||||
{
|
||||
Events.sendEvent(this, new Event("onToggle", this));
|
||||
Events.sendEvent(this, new Event(ON_TOGGLE_EVENT, this));
|
||||
}
|
||||
else if (event.getTarget() == treePanel.getTree()) {
|
||||
Treeitem item = treePanel.getTree().getSelectedItem();
|
||||
|
|
|
@ -106,7 +106,6 @@ public class ADWindowContent extends AbstractADWindowContent
|
|||
toolbar.setParent(div);
|
||||
toolbar.setWindowNo(getWindowNo());
|
||||
breadCrumb = new BreadCrumb(getWindowNo());
|
||||
breadCrumb.setStyle("background-color: #e9e9e9");
|
||||
breadCrumb.setToolbarListener(this);
|
||||
div.appendChild(breadCrumb);
|
||||
|
||||
|
|
|
@ -918,7 +918,7 @@ public abstract class AbstractADWindowContent extends AbstractUIPart implements
|
|||
*/
|
||||
public void onEvent(Event event)
|
||||
{
|
||||
if ("onSelectionChanged".equals(event.getName()))
|
||||
if (CompositeADTabbox.ON_SELECTION_CHANGED_EVENT.equals(event.getName()))
|
||||
{
|
||||
Object eventData = event.getData();
|
||||
|
||||
|
@ -928,14 +928,14 @@ public abstract class AbstractADWindowContent extends AbstractUIPart implements
|
|||
int newTabIndex = (Integer)indexes[1];
|
||||
|
||||
final int originalTabIndex = adTabbox.getSelectedIndex();
|
||||
final int originalTabRow = adTabbox.getSelectedGridTab().getCurrentRow();
|
||||
setActiveTab(newTabIndex, new Callback<Boolean>() {
|
||||
|
||||
@Override
|
||||
public void onCallback(Boolean result) {
|
||||
if (result)
|
||||
{
|
||||
//force sync model
|
||||
adTabbox.refresh();
|
||||
adTabbox.setDetailpaneSelection(originalTabIndex, originalTabRow);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -1548,6 +1548,7 @@ public abstract class AbstractADWindowContent extends AbstractUIPart implements
|
|||
public void onIgnore()
|
||||
{
|
||||
IADTabpanel dirtyTabpanel = adTabbox.getDirtyADTabpanel();
|
||||
boolean newrecod = adTabbox.getSelectedGridTab().isNew();
|
||||
if (dirtyTabpanel != null && dirtyTabpanel.getGridTab().isSortTab())
|
||||
{
|
||||
dirtyTabpanel.refresh();
|
||||
|
@ -1556,11 +1557,14 @@ public abstract class AbstractADWindowContent extends AbstractUIPart implements
|
|||
else
|
||||
{
|
||||
adTabbox.dataIgnore();
|
||||
if (dirtyTabpanel != null) {
|
||||
toolbar.enableIgnore(false);
|
||||
if (newrecod) {
|
||||
onRefresh(true);
|
||||
} else if (dirtyTabpanel != null) {
|
||||
dirtyTabpanel.getGridTab().dataRefresh(true); // update statusbar & toolbar
|
||||
dirtyTabpanel.dynamicDisplay(0);
|
||||
}
|
||||
toolbar.enableIgnore(false);
|
||||
}
|
||||
|
||||
}
|
||||
if (dirtyTabpanel != null)
|
||||
focusToTabpanel(dirtyTabpanel);
|
||||
|
@ -1583,7 +1587,8 @@ public abstract class AbstractADWindowContent extends AbstractUIPart implements
|
|||
breadCrumb.setStatusLine(statusLine);
|
||||
}
|
||||
if (dirtyTabpanel != null) {
|
||||
onDetailRecord();
|
||||
if (dirtyTabpanel == adTabbox.getSelectedDetailADTabpanel())
|
||||
onDetailRecord();
|
||||
focusToTabpanel(dirtyTabpanel);
|
||||
} else {
|
||||
focusToActivePanel();
|
||||
|
|
|
@ -53,13 +53,11 @@ import org.zkoss.zul.Vlayout;
|
|||
*/
|
||||
public class CompositeADTabbox extends AbstractADTabbox
|
||||
{
|
||||
private static final String ON_TOGGLE_EVENT = "onToggle";
|
||||
|
||||
private static final String ON_SWITCH_VIEW_EVENT = "onSwitchView";
|
||||
|
||||
private static final String ON_ACTIVATE_EVENT = "onActivate";
|
||||
|
||||
private static final String ON_SELECTION_CHANGED_EVENT = "onSelectionChanged";
|
||||
public static final String ON_SELECTION_CHANGED_EVENT = "onSelectionChanged";
|
||||
|
||||
public static final String ADTAB_INDEX_ATTRIBUTE = "adtab.index";
|
||||
|
||||
|
@ -265,7 +263,7 @@ public class CompositeADTabbox extends AbstractADTabbox
|
|||
}
|
||||
});
|
||||
|
||||
tabPanel.addEventListener(ON_TOGGLE_EVENT, new EventListener<Event>() {
|
||||
tabPanel.addEventListener(ADTabpanel.ON_TOGGLE_EVENT, new EventListener<Event>() {
|
||||
|
||||
@Override
|
||||
public void onEvent(Event event) throws Exception {
|
||||
|
@ -471,8 +469,8 @@ public class CompositeADTabbox extends AbstractADTabbox
|
|||
return null;
|
||||
}
|
||||
|
||||
public void refresh() {
|
||||
}
|
||||
// public void refresh() {
|
||||
// }
|
||||
|
||||
class SyncDataStatusListener implements DataStatusListener {
|
||||
|
||||
|
@ -643,4 +641,23 @@ public class CompositeADTabbox extends AbstractADTabbox
|
|||
public void updateDetailPaneToolbar(boolean changed, boolean readOnly) {
|
||||
detailPane.updateToolbar(changed, readOnly);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setDetailpaneSelection(int tabIndex, int currentRow) {
|
||||
if (detailPane.getTabcount() > 0) {
|
||||
for(int i = 0; i < detailPane.getTabcount(); i++) {
|
||||
IADTabpanel adtab = detailPane.getADTabpanel(i);
|
||||
int index = (Integer) adtab.getAttribute(ADTAB_INDEX_ATTRIBUTE);
|
||||
if (index == tabIndex) {
|
||||
if (i != detailPane.getSelectedIndex()) {
|
||||
detailPane.setSelectedIndex(i);
|
||||
detailPane.fireActivateDetailEvent();
|
||||
}
|
||||
if (adtab.getGridTab().getCurrentRow() != currentRow)
|
||||
adtab.getGridTab().setCurrentRow(currentRow, true);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -91,10 +91,7 @@ public class DetailPane extends Panel implements EventListener<Event> {
|
|||
tabbox.addEventListener(Events.ON_SELECT, new EventListener<Event>() {
|
||||
@Override
|
||||
public void onEvent(Event event) throws Exception {
|
||||
int index = tabbox.getSelectedIndex();
|
||||
IADTabpanel tabPanel = (IADTabpanel) tabbox.getTabpanel(index).getChildren().get(1);
|
||||
Event activateEvent = new Event(ON_ACTIVATE_DETAIL_EVENT, tabPanel, prevSelectedIndex);
|
||||
Events.sendEvent(activateEvent);
|
||||
fireActivateDetailEvent();
|
||||
}
|
||||
});
|
||||
tabbox.setStyle(TABBOX_STYLE);
|
||||
|
@ -411,4 +408,11 @@ public class DetailPane extends Panel implements EventListener<Event> {
|
|||
Event openEvent = new Event(ON_EDIT_EVENT, DetailPane.this);
|
||||
eventListener.onEvent(openEvent);
|
||||
}
|
||||
|
||||
public void fireActivateDetailEvent() {
|
||||
int index = tabbox.getSelectedIndex();
|
||||
IADTabpanel tabPanel = (IADTabpanel) tabbox.getTabpanel(index).getChildren().get(1);
|
||||
Event activateEvent = new Event(ON_ACTIVATE_DETAIL_EVENT, tabPanel, prevSelectedIndex);
|
||||
Events.sendEvent(activateEvent);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -123,8 +123,6 @@ public interface IADTabbox extends UIPart {
|
|||
|
||||
public boolean dataSave(boolean onSaveEvent);
|
||||
|
||||
public void refresh();
|
||||
|
||||
public void setDetailPaneStatusMessage(String status, boolean error);
|
||||
|
||||
IADTabpanel getSelectedDetailADTabpanel();
|
||||
|
@ -132,4 +130,6 @@ public interface IADTabbox extends UIPart {
|
|||
IADTabpanel getDirtyADTabpanel();
|
||||
|
||||
public void updateDetailPaneToolbar(boolean changed, boolean readOnly);
|
||||
|
||||
public void setDetailpaneSelection(int tabIndex, int currentRow);
|
||||
}
|
||||
|
|
|
@ -472,7 +472,7 @@ div.wc-modal, div.wc-modal-none, div.wc-highlighted, div.wc-highlighted-none {
|
|||
|
||||
.adwindow-breadcrumb {
|
||||
height: 30px;
|
||||
background-color: transparent;
|
||||
background-color: #EEEEEE;
|
||||
padding-left: 2px;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue