reduced minimum width of NavigationMenu

This commit is contained in:
Ralf Wisser
2023-01-03 14:51:52 +01:00
parent ab3ae0e8d8
commit 237e310602
4 changed files with 69 additions and 67 deletions

Binary file not shown.

View File

@@ -15,7 +15,6 @@
*/
package net.sf.jailer.ui.databrowser;
import java.awt.BasicStroke;
import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Color;
@@ -32,12 +31,10 @@ import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Image;
import java.awt.Insets;
import java.awt.LayoutManager;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.RenderingHints;
import java.awt.Shape;
import java.awt.Stroke;
import java.awt.Toolkit;
import java.awt.Window;
import java.awt.datatransfer.DataFlavor;
@@ -62,7 +59,8 @@ import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowFocusListener;
import java.awt.event.WindowListener;
import java.awt.geom.Path2D;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.beans.PropertyVetoException;
import java.io.BufferedReader;
import java.io.File;
@@ -87,9 +85,11 @@ import java.util.TreeSet;
import java.util.Vector;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.function.BiConsumer;
import java.util.stream.Collectors;
import javax.swing.AbstractButton;
import javax.swing.BoxLayout;
import javax.swing.ButtonGroup;
import javax.swing.ComboBoxModel;
import javax.swing.DefaultComboBoxModel;
@@ -192,7 +192,6 @@ import net.sf.jailer.ui.syntaxtextarea.DataModelBasedSQLCompletionProvider;
import net.sf.jailer.ui.syntaxtextarea.RSyntaxTextAreaWithSQLSyntaxStyle;
import net.sf.jailer.ui.util.AnimationController;
import net.sf.jailer.ui.util.CompoundIcon;
import net.sf.jailer.ui.util.MovePanel;
import net.sf.jailer.ui.util.CompoundIcon.Axis;
import net.sf.jailer.ui.util.RotatedIcon;
import net.sf.jailer.ui.util.SmallButton;
@@ -246,6 +245,11 @@ public class DataBrowser extends javax.swing.JFrame {
* The execution context.
*/
private final ExecutionContext executionContext;
/**
* Initial width of search panel.
*/
private static final int INITIAL_SEARCH_PANEL_WIDTH = 228;
private final JComboBox2<String> tablesComboBox;
@@ -359,6 +363,9 @@ public class DataBrowser extends javax.swing.JFrame {
initMenu();
initNavTree();
initTabSelectionAnimationManager();
searchPanelSplitSizerPanel.setCursor(Cursor.getPredefinedCursor(Cursor.W_RESIZE_CURSOR));
searchPanelSplitSizerPanel.add(createSearchPanelSplitSizer());
searchPanelSplitSizerPanel.setVisible(searchPanelContainer.isVisible());
modelNavigationSplitSizerPanel.setCursor(Cursor.getPredefinedCursor(Cursor.W_RESIZE_CURSOR));
modelNavigationSplitSizerPanel.setVisible(false);
@@ -468,45 +475,11 @@ public class DataBrowser extends javax.swing.JFrame {
linkToolbarButton(tbZoom3Button, mediumLayoutRadioButtonMenuItem);
linkToolbarButton(tbZoom4Button, largeLayoutRadioButtonMenuItem);
searchPanelContainer.getParent().remove(searchPanelContainer);
searchPanelContainer = new JPanel() {
final int WIDTH = 260;
@Override
public Dimension getPreferredSize() {
return new Dimension(WIDTH, super.getPreferredSize().height);
}
@Override
public Dimension getMinimumSize() {
return new Dimension(WIDTH, super.getMinimumSize().height);
}
@Override
public Dimension getMaximumSize() {
return new Dimension(WIDTH, super.getMaximumSize().height);
}
};
searchPanelContainer.setLayout(new java.awt.BorderLayout());
GridBagConstraints gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 1;
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
switch (UIUtil.plaf) {
case NATIVE:
// nothing to do
break;
case FLAT:
// nothing to do
break;
case NIMBUS:
gridBagConstraints.insets = new Insets(3, 0, 0, 0);
break;
}
jPanel4.add(searchPanelContainer, gridBagConstraints);
setSearchPanelWidth(INITIAL_SEARCH_PANEL_WIDTH);
searchBarToggleButton.setSelected(!Boolean.FALSE.equals(UISettings.restore("searchBarToggleButton")));
searchPanelContainer.setVisible(searchBarToggleButton.isSelected());
searchPanelSplitSizerPanel.setVisible(searchPanelContainer.isVisible());
whereConditionEditorCloseButton = new SmallButton(closeIcon, closeOverIcon, false) {
@Override
protected void onClick(MouseEvent e) {
@@ -537,7 +510,8 @@ public class DataBrowser extends javax.swing.JFrame {
searchBarEditor.whereConditionEditorPanel = whereConditionEditorPanel;
whereConditionEditorSubject = null;
searchPanelContainer.setVisible(false);
searchPanelSplitSizerPanel.setVisible(searchPanelContainer.isVisible());
UpdateInfoManager.checkUpdateAvailability(updateInfoPanel, updateInfoLabel, downloadMenuItem, "B");
UIUtil.initPLAFMenuItem(plafMenu, this);
if (datamodel != null) {
@@ -581,7 +555,7 @@ public class DataBrowser extends javax.swing.JFrame {
tablesComboBox.grabFocus();
gridBagConstraints = new GridBagConstraints();
GridBagConstraints gridBagConstraints = new GridBagConstraints();
gridBagConstraints.gridx = 2;
gridBagConstraints.gridy = 1;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
@@ -1409,9 +1383,42 @@ public class DataBrowser extends javax.swing.JFrame {
initDnD(this);
}
private void setSearchPanelWidth(int width) {
searchPanelContainer.setMinimumSize(new Dimension(width, searchPanelContainer.getMinimumSize().height));
searchPanelContainer.setPreferredSize(new Dimension(width, searchPanelContainer.getPreferredSize().height));
searchPanelContainer.setMaximumSize(new Dimension(width, searchPanelContainer.getMaximumSize().height));
}
private static final int SPLIT_SIZER_MIN_WIDTH = 20;
private Component createModelNavSplitSizer() {
return createSplitSizer((xDelta, yDelta) -> {
modelNavigationGapPanel.setMinimumSize(new Dimension((int) (modelNavigationGapPanel.getMinimumSize().getWidth() + xDelta), 1));
modelNavigationGapPanel.setPreferredSize(modelNavigationGapPanel.getMinimumSize());
modelNavigationGapPanel.revalidate();
modelNavigationScrollPane.setVisible(modelNavigationGapPanel.getMinimumSize().getWidth() >= SPLIT_SIZER_MIN_WIDTH);
}, () -> {
modelNavigationScrollPane.setVisible(true);
if (modelNavigationGapPanel.getMinimumSize().getWidth() < SPLIT_SIZER_MIN_WIDTH) {
modelNavigationButtonV.doClick();
}
}, 22, 1);
}
private Component createSearchPanelSplitSizer() {
return createSplitSizer((xDelta, yDelta) -> {
setSearchPanelWidth(searchPanelContainer.getMinimumSize().width + xDelta);
searchPanelContainer.revalidate();
}, () -> {
if (searchPanelContainer.getMinimumSize().width < SPLIT_SIZER_MIN_WIDTH) {
searchBarToggleButton.doClick();
setSearchPanelWidth(INITIAL_SEARCH_PANEL_WIDTH);
}
}, 0, 1);
}
private Component createSplitSizer(BiConsumer<Integer, Integer> deltaConsumer, Runnable onRelease, int vOffset, int hOffset) {
return new JPanel() {
int MIN_WIDTH = 20;
{
MouseInputAdapter ml = new MouseInputAdapter() {
private Point origPos;
@@ -1423,10 +1430,8 @@ public class DataBrowser extends javax.swing.JFrame {
Point newPos = e.getPoint();
SwingUtilities.convertPointToScreen(newPos, DataBrowser.this);
int xDelta = newPos.x - origPos.x;
modelNavigationGapPanel.setMinimumSize(new Dimension((int) (modelNavigationGapPanel.getMinimumSize().getWidth() + xDelta), 1));
modelNavigationGapPanel.setPreferredSize(modelNavigationGapPanel.getMinimumSize());
modelNavigationGapPanel.revalidate();
modelNavigationScrollPane.setVisible(modelNavigationGapPanel.getMinimumSize().getWidth() >= MIN_WIDTH);
int yDelta = newPos.y - origPos.y;
deltaConsumer.accept(xDelta, yDelta);
}
@Override
@@ -1438,10 +1443,7 @@ public class DataBrowser extends javax.swing.JFrame {
@Override
public void mouseReleased(MouseEvent e) {
origPos = null;
modelNavigationScrollPane.setVisible(true);
if (modelNavigationGapPanel.getMinimumSize().getWidth() < MIN_WIDTH) {
modelNavigationButtonV.doClick();
}
onRelease.run();
}
};
addMouseListener(ml);
@@ -1457,7 +1459,7 @@ public class DataBrowser extends javax.swing.JFrame {
g2d.clipRect(0, 0, dim.width, dim.height);
Image image = splitIcon.getImage();
g2d.drawImage(image, (dim.width - image.getWidth(null)) / 2 - 1, ((dim.height - 22) - image.getHeight(null)) / 2, null);
g2d.drawImage(image, (dim.width - image.getWidth(null)) / 2 - hOffset, ((dim.height - vOffset) - image.getHeight(null)) / 2, null);
g2d.setClip(clip);
}
@@ -1825,12 +1827,13 @@ public class DataBrowser extends javax.swing.JFrame {
updateDataModel(schemaName, withViews, withSynonyms);
}
};
panel.tabbedPane.addTab("Closure Border", borderBrowserTabPane);
JPanel borderBrowserTabPaneContainer = new JPanel(new BorderLayout());
panel.tabbedPane.addTab("Closure Border", borderBrowserTabPaneContainer);
panel.tabbedPane.addTab("Data Model", dataModelPanel);
panel.tabbedPane.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
updateBorderBrowser();
updateBorderBrowser(borderBrowserTabPaneContainer);
updateDataModelView(null);
showDataModelMenuItem
.setSelected(metaDataDetailsPanel.tabbedPane.getSelectedComponent() == dataModelPanel);
@@ -4454,7 +4457,7 @@ public class DataBrowser extends javax.swing.JFrame {
private void updateIFramesBar() {
updateNavigationTree();
updateBorderBrowser();
updateBorderBrowser(null);
updateHiddenPanel();
// iFramesPanel is obsolete
@@ -4590,14 +4593,16 @@ public class DataBrowser extends javax.swing.JFrame {
private boolean disableBorderBrowserUpdates = false;
private void updateBorderBrowser() {
private void updateBorderBrowser(JPanel borderBrowserTabPaneContainer) {
if (disableBorderBrowserUpdates
|| metaDataDetailsPanel.tabbedPane.getSelectedComponent() != borderBrowserTabPane) {
|| metaDataDetailsPanel.tabbedPane.getSelectedComponent() != borderBrowserTabPaneContainer) {
return;
}
try {
UIUtil.setWaitCursor(this);
if (borderBrowserTabPaneContainer != null) {
borderBrowserTabPaneContainer.add(borderBrowserTabPane);
}
Collection<AssociationModel> model = new ArrayList<AssociationModel>();
if (desktop != null) {
titleLabel.setText(" Related Rows");
@@ -4722,7 +4727,7 @@ public class DataBrowser extends javax.swing.JFrame {
} finally {
UIUtil.resetWaitCursor(this);
disableBorderBrowserUpdates = false;
updateBorderBrowser();
updateBorderBrowser(null);
}
}
@@ -4854,6 +4859,7 @@ public class DataBrowser extends javax.swing.JFrame {
: null;
searchPanelContainer.removeAll();
searchPanelContainer.setVisible(table != null && searchBarToggleButton.isSelected());
searchPanelSplitSizerPanel.setVisible(searchPanelContainer.isVisible());
searchBarToggleButton.setEnabled(rowBrowser != null && SessionForUI.isWCEditorSupported(session));
if (table != null) {
BrowserContentCellEditor cellEditor = rowBrowser.browserContentPane.browserContentCellEditor;
@@ -5973,6 +5979,7 @@ public class DataBrowser extends javax.swing.JFrame {
private void searchBarToggleButtonActionPerformed(java.awt.event.ActionEvent evt) {// GEN-FIRST:event_searchBarToggleButtonActionPerformed
UISettings.store("searchBarToggleButton", searchBarToggleButton.isSelected());
searchPanelContainer.setVisible(searchBarToggleButton.isSelected());
searchPanelSplitSizerPanel.setVisible(searchPanelContainer.isVisible());
}// GEN-LAST:event_searchBarToggleButtonActionPerformed
private void tbZoomOutButtonActionPerformed(java.awt.event.ActionEvent evt) {// GEN-FIRST:event_tbZoomOutButtonActionPerformed

View File

@@ -160,7 +160,7 @@ public abstract class Desktop extends JDesktopPane {
* Default width of a row-browser frame.
*/
private final int BROWSERTABLE_DEFAULT_MIN_X = 0;
private final int BROWSERTABLE_DEFAULT_MIN_Y = 1;
private final int BROWSERTABLE_DEFAULT_MIN_Y = 0;
public static final int BROWSERTABLE_DEFAULT_HEIGHT = 460;
public static final int BROWSERTABLE_DEFAULT_WIDTH = 476;
@@ -4360,8 +4360,6 @@ public abstract class Desktop extends JDesktopPane {
rowsClosure.hAlignedPath.add(parent.browserContentPane);
}
for (RowBrowser ancBr = parent; ancBr != null; ancBr = ancBr.parent) {
// TODO
// TODO local (or full)?
if (ancBr.isHidden() || ancBr.internalFrame.getY() == tableBrowser.parent.internalFrame.getY()) {
rowsClosure.hAlignedPath.add(ancBr.browserContentPane);
} else {
@@ -4411,8 +4409,4 @@ public abstract class Desktop extends JDesktopPane {
// TODO display names for associations? (using unique fk-column list?)
// TODO
// TODO transp. col.search, panel nach auswah wert sofort weg
// TODO column filter UI component: do user understand, that underlying transparent comp. is editable?
}

View File

@@ -227,6 +227,7 @@ public abstract class WhereConditionEditorPanel extends javax.swing.JPanel {
gridBagConstraints.gridy = 4;
gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.insets = new Insets(0, 0, 0, 2);
clearButton = new JButton("Clear", UIUtil.scaleIcon(this, clearIcon));
clearButton.addActionListener(e -> {
if (allDisabled) {