Enhance to allow zooming to any level ( tested zooming from gl journal to the period tab in the calendar-year-period window )
Link to SF Tracker: http://sourceforge.net/support/tracker.php?aid=2887701
This commit is contained in:
parent
47022f6791
commit
f06f95ad72
|
@ -33,7 +33,9 @@ import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
|
import java.util.TreeMap;
|
||||||
import java.util.Vector;
|
import java.util.Vector;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
|
|
||||||
|
@ -664,6 +666,7 @@ public final class APanel extends CPanel
|
||||||
|
|
||||||
Dimension windowSize = m_mWorkbench.getWindowSize();
|
Dimension windowSize = m_mWorkbench.getWindowSize();
|
||||||
|
|
||||||
|
MQuery detailQuery = null;
|
||||||
/**
|
/**
|
||||||
* WorkBench Loop
|
* WorkBench Loop
|
||||||
*/
|
*/
|
||||||
|
@ -740,6 +743,16 @@ public final class APanel extends CPanel
|
||||||
// initial user query for single workbench tab
|
// initial user query for single workbench tab
|
||||||
if (m_mWorkbench.getWindowCount() == 1)
|
if (m_mWorkbench.getWindowCount() == 1)
|
||||||
{
|
{
|
||||||
|
if (query != null && query.getZoomTableName() != null && query.getZoomColumnName() != null
|
||||||
|
&& query.getZoomValue() instanceof Integer && (Integer)query.getZoomValue() > 0)
|
||||||
|
{
|
||||||
|
if (!query.getZoomTableName().equalsIgnoreCase(gTab.getTableName()))
|
||||||
|
{
|
||||||
|
detailQuery = query;
|
||||||
|
query = new MQuery();
|
||||||
|
query.addRestriction("1=2");
|
||||||
|
}
|
||||||
|
}
|
||||||
isCancel = false; //Goodwill
|
isCancel = false; //Goodwill
|
||||||
query = initialQuery (query, gTab);
|
query = initialQuery (query, gTab);
|
||||||
if (isCancel) return false; //Cancel opening window
|
if (isCancel) return false; //Cancel opening window
|
||||||
|
@ -879,7 +892,7 @@ public final class APanel extends CPanel
|
||||||
else
|
else
|
||||||
revalidate();
|
revalidate();
|
||||||
|
|
||||||
if (zoomToDetailTab(query)) {
|
if (detailQuery != null && zoomToDetailTab(detailQuery)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -903,57 +916,11 @@ public final class APanel extends CPanel
|
||||||
if (gTab.isSortTab())
|
if (gTab.isSortTab())
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (gTab.getTabLevel() == 1 && gTab.getTableName().equalsIgnoreCase(query.getZoomTableName()))
|
if (gTab.getTableName().equalsIgnoreCase(query.getZoomTableName()))
|
||||||
{
|
{
|
||||||
GridField[] fields = gTab.getFields();
|
if (doZoomToDetail(gTab, query, tab)) {
|
||||||
for (GridField field : fields)
|
return true;
|
||||||
{
|
}
|
||||||
if (field.getColumnName().equalsIgnoreCase(query.getZoomColumnName()))
|
|
||||||
{
|
|
||||||
if (query.getZoomValue() != null && query.getZoomValue() instanceof Integer)
|
|
||||||
{
|
|
||||||
if (!includedMap.containsKey(gTab.getAD_Tab_ID()))
|
|
||||||
{
|
|
||||||
m_mWorkbench.getMWindow(0).initTab(tab);
|
|
||||||
int index = tabPanel.findTabindex(gTab);
|
|
||||||
if (index >= 0)
|
|
||||||
{
|
|
||||||
GridController gc = (GridController) tabPanel.getComponentAt(index);
|
|
||||||
gc.activate();
|
|
||||||
gc.query(false, 0, 0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
GridTable table = gTab.getTableModel();
|
|
||||||
int count = table.getRowCount();
|
|
||||||
for(int i = 0; i < count; i++)
|
|
||||||
{
|
|
||||||
int id = table.getKeyID(i);
|
|
||||||
if (id == ((Integer)query.getZoomValue()).intValue())
|
|
||||||
{
|
|
||||||
if (!includedMap.containsKey(gTab.getAD_Tab_ID()))
|
|
||||||
{
|
|
||||||
int index = tabPanel.findTabindex(gTab);
|
|
||||||
if (index >= 0)
|
|
||||||
tabPanel.setSelectedIndex(index);
|
|
||||||
}
|
|
||||||
gTab.navigate(i);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (!includedMap.containsKey(gTab.getAD_Tab_ID()))
|
|
||||||
{
|
|
||||||
int index = tabPanel.findTabindex(gTab);
|
|
||||||
if (index >= 0)
|
|
||||||
tabPanel.setSelectedIndex(index);
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -961,6 +928,109 @@ public final class APanel extends CPanel
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private boolean doZoomToDetail(GridTab gTab, MQuery query, int tabIndex) {
|
||||||
|
GridField[] fields = gTab.getFields();
|
||||||
|
for (GridField field : fields)
|
||||||
|
{
|
||||||
|
if (field.getColumnName().equalsIgnoreCase(query.getZoomColumnName()))
|
||||||
|
{
|
||||||
|
m_mWorkbench.getMWindow(0).initTab(tabIndex);
|
||||||
|
int parentId = DB.getSQLValue(null, "SELECT " + gTab.getLinkColumnName() + " FROM " + gTab.getTableName() + " WHERE " + query.getWhereClause());
|
||||||
|
if (parentId > 0)
|
||||||
|
{
|
||||||
|
Map<Integer, Object[]>parentMap = new TreeMap<Integer, Object[]>();
|
||||||
|
int index = tabIndex;
|
||||||
|
int oldpid = parentId;
|
||||||
|
GridTab currentTab = gTab;
|
||||||
|
while (index > 0)
|
||||||
|
{
|
||||||
|
index--;
|
||||||
|
GridTab pTab = m_mWorkbench.getMWindow(0).getTab(index);
|
||||||
|
if (pTab.getTabLevel() < currentTab.getTabLevel())
|
||||||
|
{
|
||||||
|
m_mWorkbench.getMWindow(0).initTab(index);
|
||||||
|
if (index > 0)
|
||||||
|
{
|
||||||
|
if (pTab.getLinkColumnName() != null && pTab.getLinkColumnName().trim().length() > 0)
|
||||||
|
{
|
||||||
|
int pid = DB.getSQLValue(null, "SELECT " + pTab.getLinkColumnName() + " FROM " + pTab.getTableName() + " WHERE " + currentTab.getLinkColumnName() + " = ?", oldpid);
|
||||||
|
if (pid > 0)
|
||||||
|
{
|
||||||
|
parentMap.put(index, new Object[]{currentTab.getLinkColumnName(), oldpid});
|
||||||
|
oldpid = pid;
|
||||||
|
currentTab = pTab;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
parentMap.clear();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
parentMap.put(index, new Object[]{currentTab.getLinkColumnName(), oldpid});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for(Map.Entry<Integer, Object[]> entry : parentMap.entrySet())
|
||||||
|
{
|
||||||
|
GridTab pTab = m_mWorkbench.getMWindow(0).getTab(entry.getKey());
|
||||||
|
Object[] value = entry.getValue();
|
||||||
|
MQuery pquery = new MQuery(pTab.getAD_Table_ID());
|
||||||
|
pquery.addRestriction((String)value[0], "=", value[1]);
|
||||||
|
pTab.setQuery(pquery);
|
||||||
|
GridController gc = (GridController) tabPanel.getComponentAt(entry.getKey());
|
||||||
|
gc.activate();
|
||||||
|
gc.query(false, 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
MQuery targetQuery = new MQuery(gTab.getAD_Table_ID());
|
||||||
|
targetQuery.addRestriction(gTab.getLinkColumnName(), "=", parentId);
|
||||||
|
gTab.setQuery(targetQuery);
|
||||||
|
GridController gc = null;
|
||||||
|
if (!includedMap.containsKey(gTab.getAD_Tab_ID()))
|
||||||
|
{
|
||||||
|
int target = tabPanel.findTabindex(gTab);
|
||||||
|
gc = (GridController) tabPanel.getComponentAt(target);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
GridController parent = includedMap.get(gTab.getAD_Tab_ID());
|
||||||
|
gc = parent.findChild(gTab);
|
||||||
|
}
|
||||||
|
gc.activate();
|
||||||
|
gc.query(false, 0, 0);
|
||||||
|
|
||||||
|
GridTable table = gTab.getTableModel();
|
||||||
|
int count = table.getRowCount();
|
||||||
|
for(int i = 0; i < count; i++)
|
||||||
|
{
|
||||||
|
int id = table.getKeyID(i);
|
||||||
|
if (id == ((Integer)query.getZoomValue()).intValue())
|
||||||
|
{
|
||||||
|
if (!includedMap.containsKey(gTab.getAD_Tab_ID()))
|
||||||
|
{
|
||||||
|
tabPanel.setSelectedIndex(tabPanel.findTabindex(gTab));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
GridController parent = includedMap.get(gTab.getAD_Tab_ID());
|
||||||
|
int pindex = tabPanel.findTabindex(parent.getMTab());
|
||||||
|
if (pindex >= 0)
|
||||||
|
tabPanel.setSelectedIndex(pindex);
|
||||||
|
}
|
||||||
|
gTab.navigate(i);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get Current Window No
|
* Get Current Window No
|
||||||
* @return win no
|
* @return win no
|
||||||
|
|
|
@ -667,6 +667,20 @@ public class GridController extends CPanel
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public GridController findChild(GridTab gTab)
|
||||||
|
{
|
||||||
|
GridController gc = null;
|
||||||
|
for (GridSynchronizer s : synchronizerList )
|
||||||
|
{
|
||||||
|
if (s.getChild().getMTab().equals(gTab))
|
||||||
|
{
|
||||||
|
gc = s.getChild();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return gc;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Register ESC Actions
|
* Register ESC Actions
|
||||||
* - overwrite VTable's Keystrokes assignment for ESC
|
* - overwrite VTable's Keystrokes assignment for ESC
|
||||||
|
|
|
@ -73,4 +73,7 @@ public class GridSynchronizer implements PropertyChangeListener, StateChangeList
|
||||||
child.query (false, 0, role.getMaxQueryRecords());
|
child.query (false, 0, role.getMaxQueryRecords());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public GridController getChild() {
|
||||||
|
return child;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue