diff --git a/client/src/org/compiere/apps/AMenu.java b/client/src/org/compiere/apps/AMenu.java index ead1bef236..54ba96bf16 100644 --- a/client/src/org/compiere/apps/AMenu.java +++ b/client/src/org/compiere/apps/AMenu.java @@ -35,7 +35,6 @@ import org.compiere.grid.tree.*; import org.compiere.model.*; import org.compiere.swing.*; import org.compiere.util.*; - /** * Application Menu Controller * @@ -272,6 +271,7 @@ public final class AMenu extends CFrame m_tabActivities++; m_tabWorkflow++; } + treePanel.setBorder(BorderFactory.createEmptyBorder(2,3,2,3)); centerPane.add(treePanel, Msg.getMsg(m_ctx, "Menu")); centerPane.add(new CScrollPane(wfActivity), Msg.getMsg (m_ctx, "WorkflowActivities") + ": 0"); centerPane.add(new CScrollPane(wfPanel), Msg.getMsg (m_ctx, "WorkflowPanel")); diff --git a/client/src/org/compiere/apps/Preference.java b/client/src/org/compiere/apps/Preference.java index 330815baf0..9dba24fac6 100644 --- a/client/src/org/compiere/apps/Preference.java +++ b/client/src/org/compiere/apps/Preference.java @@ -22,6 +22,7 @@ import java.io.*; import java.util.*; import java.util.logging.*; import javax.swing.*; +import javax.swing.border.Border; import javax.swing.event.*; import javax.swing.table.*; // @@ -126,6 +127,8 @@ public final class Preference extends CDialog private CButton bErrorSave = new CButton(Msg.getMsg(Env.getCtx(), "SaveFile")); private CButton bRoleInfo = new CButton(Msg.translate(Env.getCtx(), "AD_Role_ID")); + private CPanel configPanel = new CPanel(); + /** * Static Init. *
@@ -193,64 +196,96 @@ public final class Preference extends CDialog
 //		tabPane.add(customizePane,  Msg.getMsg(Env.getCtx(), "Preference"));
 		tabPane.add(customizePane,  Msg.getMsg(Env.getCtx(), "Preference"));
 		customizePane.setLayout(customizeLayout);
-		customizePane.add(infoArea,          new GridBagConstraints(0, 0, 3, 1, 0.0, 0.0
-			,GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(5, 5, 5, 5), 0, 0));
-		customizePane.add(uiTheme,    new GridBagConstraints(1, 1, 1, 1, 0.0, 0.0
-			,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0));
-		customizePane.add(bRoleInfo,    new GridBagConstraints(2, 1, 1, 1, 0.0, 0.0
-			,GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0));
-
-		customizePane.add(autoCommit,     new GridBagConstraints(1, 2, 1, 1, 0.0, 0.0
-			,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0));
-		customizePane.add(adempiereSys,     new GridBagConstraints(2, 2, 1, 1, 0.0, 0.0			
-			,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0));
+		customizePane.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
 		
-		customizePane.add(autoLogin,      new GridBagConstraints(1, 3, 1, 1, 0.0, 0.0
-			,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0));
-		customizePane.add(storePassword,     new GridBagConstraints(2, 3, 1, 1, 0.0, 0.0
-			,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0));
+		Border insetBorder = BorderFactory.createEmptyBorder(2, 2, 2, 0); 
+		CPanel loginPanel = new CPanel();
+		loginPanel.setBorder(BorderFactory.createTitledBorder("Login"));
+		loginPanel.setLayout(new GridLayout(1, 2));
+		autoLogin.setBorder(insetBorder);
+		storePassword.setBorder(insetBorder);
+		loginPanel.add(autoLogin);
+		loginPanel.add(storePassword);
+		customizePane.add(loginPanel, new GridBagConstraints(0, 0, 1, 1, 1.0, 0.0
+				,GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(2, 0, 2, 0), 0, 0));
 		
-		customizePane.add(showAcct,     new GridBagConstraints(1, 4, 1, 1, 0.0, 0.0
-			,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0));
-		customizePane.add(showTrl,   new GridBagConstraints(2, 4, 1, 1, 0.0, 0.0
-			,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0));
+		CPanel windowPanel = new CPanel();
+		windowPanel.setBorder(BorderFactory.createTitledBorder("Window"));
+		windowPanel.setLayout(new GridLayout(4, 2));
+		windowPanel.add(showAcct);showAcct.setBorder(insetBorder);
+		windowPanel.add(showTrl);showTrl.setBorder(insetBorder);
+		windowPanel.add(showAdvanced);showAdvanced.setBorder(insetBorder);
+		windowPanel.add(autoCommit);autoCommit.setBorder(insetBorder);
+		windowPanel.add(autoNew);autoNew.setBorder(insetBorder);
+		windowPanel.add(cacheWindow);cacheWindow.setBorder(insetBorder);
+		windowPanel.add(openWindowMaximized);openWindowMaximized.setBorder(insetBorder);
+		windowPanel.add(singleInstancePerWindow);singleInstancePerWindow.setBorder(insetBorder);
+		customizePane.add(windowPanel, new GridBagConstraints(0, 1, 1, 1, 1.0, 0.0
+				,GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(2, 0, 2, 0), 0, 0));
 		
-		customizePane.add(showAdvanced,	new GridBagConstraints(1, 5, 1, 1, 0.0, 0.0
-			,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0));
-		customizePane.add(autoNew,     new GridBagConstraints(2, 5, 1, 1, 0.0, 0.0			
-			,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0));
+		CPanel connPanel = new CPanel();
+		connPanel.setBorder(BorderFactory.createTitledBorder("Connection"));
+		connPanel.setLayout(new GridBagLayout());
+		connPanel.add(connectionProfileLabel,    new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0
+				,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(2, 2, 2, 0), 0, 0));
+		connPanel.add(connectionProfile,    new GridBagConstraints(1, 0, 1, 1, 1.0, 0.0
+			,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(2, 2, 2, 0), 0, 0));
+		connPanel.add(validateConnectionOnStartup,    new GridBagConstraints(0, 1, 2, 1, 1.0, 0.0
+				,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(2, 2, 2, 0), 0, 0));
+		customizePane.add(connPanel, new GridBagConstraints(0, 2, 1, 1, 1.0, 0.0
+				,GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(2, 0, 2, 0), 0, 0));
 		
-		customizePane.add(connectionProfileLabel,    new GridBagConstraints(0, 6, 1, 1, 0.0, 0.0
-			,GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0));
-		customizePane.add(connectionProfile,    new GridBagConstraints(1, 6, 1, 1, 0.0, 0.0
-			,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0));
-		customizePane.add(cacheWindow,     new GridBagConstraints(2, 6, 1, 1, 0.0, 0.0			
-			,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0));
-
-		customizePane.add(traceLabel,    new GridBagConstraints(0, 7, 1, 1, 0.0, 0.0
-			,GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(0, 0, 5, 5), 0, 0));
-		customizePane.add(traceLevel,       new GridBagConstraints(1, 7, 1, 1, 0.0, 0.0
-			,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0));
-		customizePane.add(traceFile,       new GridBagConstraints(2, 7, 1, 1, 0.0, 0.0
-			,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0));
+		CPanel tracePanel = new CPanel();
+		tracePanel.setBorder(BorderFactory.createTitledBorder("Trace"));
+		tracePanel.setLayout(new GridBagLayout());
+		tracePanel.add(traceLabel,    new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0
+			,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(2, 2, 2, 0), 0, 0));
+		tracePanel.add(traceLevel,       new GridBagConstraints(1, 0, 1, 1, 1.0, 0.0
+			,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(2, 2, 2, 0), 0, 0));
+		tracePanel.add(traceFile,       new GridBagConstraints(0, 1, 2, 1, 1.0, 0.0
+			,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(2, 2, 2, 0), 0, 0));
+		customizePane.add(tracePanel, new GridBagConstraints(0, 3, 1, 1, 1.0, 0.0
+				,GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(2, 0, 2, 0), 0, 0));
 		
-		customizePane.add(lPrinter,     new GridBagConstraints(0, 8, 1, 1, 0.0, 0.0
-			,GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0));
-		customizePane.add(fPrinter,         new GridBagConstraints(1, 8, 2, 1, 0.0, 0.0
-			,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0));
+		CPanel printPanel = new CPanel();
+		printPanel.setBorder(BorderFactory.createTitledBorder("Printing"));
+		printPanel.setLayout(new GridBagLayout());
+		printPanel.add(lPrinter,     new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0
+			,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(2, 2, 2, 0), 0, 0));
+		printPanel.add(fPrinter,         new GridBagConstraints(1, 0, 1, 1, 0.0, 0.0
+			,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(2, 2, 2, 0), 0, 0));
+		printPanel.add(printPreview,    new GridBagConstraints(0, 1, 2, 1, 1.0, 0.0
+				,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(2, 2, 2, 0), 0, 0));
+		customizePane.add(printPanel, new GridBagConstraints(0, 4, 1, 1, 1.0, 0.0
+				,GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(2, 0, 2, 0), 0, 0));
+		
+		CPanel otherPanel = new CPanel();
+		otherPanel.setBorder(BorderFactory.createEmptyBorder());
+		otherPanel.setLayout(new GridLayout());
+		CPanel datePanel = new CPanel();
+		datePanel.setLayout(new FlowLayout());
+		((FlowLayout)datePanel.getLayout()).setAlignment(FlowLayout.LEFT);
+		datePanel.add(lDate);
+		datePanel.add(fDate);
+		otherPanel.add(datePanel);datePanel.setBorder(insetBorder);
+		otherPanel.add(adempiereSys);adempiereSys.setBorder(insetBorder);
+		customizePane.add(otherPanel, new GridBagConstraints(0, 5, 1, 1, 1.0, 0.0
+				,GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(2, 0, 2, 0), 0, 0));
+		
+		CPanel themePanel = new CPanel();
+		themePanel.add(uiTheme);
+		//TODO
+		tabPane.add(themePanel, uiTheme.getText());
+		
+		configPanel.setLayout(new BorderLayout());
+		configPanel.add(infoArea, BorderLayout.CENTER);
+		CPanel configSouth = new CPanel();
+		configSouth.setLayout(new FlowLayout());
+		((FlowLayout)configSouth.getLayout()).setAlignment(FlowLayout.RIGHT);
+		configSouth.add(bRoleInfo);
+		configPanel.add(configSouth, BorderLayout.SOUTH);
+		tabPane.add(configPanel, "Info");
 		
-		customizePane.add(lDate,       new GridBagConstraints(0, 9, 1, 1, 0.0, 0.0
-			,GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0));
-		customizePane.add(fDate,        new GridBagConstraints(1, 9, 2, 1, 0.0, 0.0
-			,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0));
-		customizePane.add(printPreview,    new GridBagConstraints(2, 9, 1, 1, 0.0, 0.0
-			,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0));
-		customizePane.add(validateConnectionOnStartup,    new GridBagConstraints(1, 10, 1, 1, 0.0, 0.0
-				,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0));
-		customizePane.add(singleInstancePerWindow,    new GridBagConstraints(2, 10, 1, 1, 0.0, 0.0
-				,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0));
-		customizePane.add(openWindowMaximized,    new GridBagConstraints(1, 11, 1, 1, 0.0, 0.0
-				,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0));
 		//	Info
 //		tabPane.add(contextPane,  Msg.getMsg(Env.getCtx(), "Context"));
 		tabPane.add(contextPane,  Msg.getMsg(Env.getCtx(), "Context"));
@@ -519,9 +554,9 @@ public final class Preference extends CDialog
 		errorTable.setModel(model);
 		//
 		if (bErrorsOnly.isSelected())
-			tabPane.setTitleAt(2, Msg.getMsg(Env.getCtx(), "Errors") + " (" + data.size() + ")");
+			tabPane.setTitleAt(4, Msg.getMsg(Env.getCtx(), "Errors") + " (" + data.size() + ")");
 		else
-			tabPane.setTitleAt(2, Msg.getMsg(Env.getCtx(), "TraceInfo") + " (" + data.size() + ")");
+			tabPane.setTitleAt(4, Msg.getMsg(Env.getCtx(), "TraceInfo") + " (" + data.size() + ")");
 		errorTable.autoSize();
 	}	//	cmd_errorsOnly
 	
diff --git a/client/src/org/compiere/grid/tree/VTreePanel.java b/client/src/org/compiere/grid/tree/VTreePanel.java
index a1db42a11f..d400a9e2b7 100644
--- a/client/src/org/compiere/grid/tree/VTreePanel.java
+++ b/client/src/org/compiere/grid/tree/VTreePanel.java
@@ -16,14 +16,19 @@
  *****************************************************************************/
 package org.compiere.grid.tree;
 
+
 import java.awt.*;
 import java.awt.datatransfer.*;
 import java.awt.dnd.*;
 import java.awt.event.*;
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
 import java.sql.*;
 import java.util.*;
 import java.util.logging.*;
 import javax.swing.*;
+import javax.swing.plaf.SplitPaneUI;
+import javax.swing.plaf.basic.BasicSplitPaneUI;
 import javax.swing.tree.*;
 import org.compiere.apps.*;
 import org.compiere.model.*;
@@ -49,6 +54,8 @@ import org.compiere.util.*;
 public final class VTreePanel extends CPanel
 	implements ActionListener, DragGestureListener, DragSourceListener, DropTargetListener
 {
+	protected boolean m_lookAndFeelChanged = false;
+
 	/**
 	 *  Tree Panel for browsing and editing of a tree.
 	 *  Need to call initTree
@@ -73,8 +80,16 @@ public final class VTreePanel extends CPanel
 			centerSplitPane.setDividerSize(0);
 			popMenuTree.remove(mBarAdd);
 		}
-		else
+		else {
 			centerSplitPane.setDividerLocation(80);
+			UIManager.addPropertyChangeListener(new PropertyChangeListener() {
+				public void propertyChange(PropertyChangeEvent evt) {
+					if ("lookAndFeel".equals(evt.getPropertyName()))
+						m_lookAndFeelChanged = true;
+				}
+				
+			});
+		}
 		//  base settings
 		if (editable)
 			tree.setDropTarget(dropTarget);
@@ -108,7 +123,7 @@ public final class VTreePanel extends CPanel
 		//  Shortcut Bar
 		if (m_hasBar)
 		{
-			bar.removeAll();	//	remove all existing buttons
+			toolbar.removeAll();	//	remove all existing buttons
 			Enumeration en = m_root.preorderEnumeration();
 			while (en.hasMoreElements())
 			{
@@ -137,6 +152,7 @@ public final class VTreePanel extends CPanel
 	private CMenuItem mFrom = new CMenuItem();
 	private CMenuItem mTo = new CMenuItem();
 	private CPanel bar = new CPanel();
+	private JToolBar toolbar = new JToolBar(JToolBar.VERTICAL);
 	private CMenuItem mBarAdd = new CMenuItem();
 	private CMenuItem mBarRemove = new CMenuItem();
 	private BorderLayout southLayout = new BorderLayout();
@@ -192,6 +208,8 @@ public final class VTreePanel extends CPanel
 		tree.addKeyListener(keyListener);
 		tree.setCellRenderer(new VTreeCellRenderer());
 		treePane.getViewport().add(tree, null);
+		treePane.setBorder(new ShadowBorder());
+		tree.setBorder(BorderFactory.createEmptyBorder());
 //		treePane.setPreferredSize(new Dimension(50,200));
 //		tree.setPreferredSize(new Dimension(100,150));
 		//
@@ -214,6 +232,9 @@ public final class VTreePanel extends CPanel
 		//
 		centerSplitPane.add(treePane, JSplitPane.RIGHT);
 		centerSplitPane.add(bar, JSplitPane.LEFT);
+		centerSplitPane.setBorder(BorderFactory.createEmptyBorder());
+		removeSplitPaneBorder();
+
 		this.add(centerSplitPane, BorderLayout.CENTER);
 		//
 		mFrom.setText(Msg.getMsg(Env.getCtx(), "ItemMove"));
@@ -224,8 +245,15 @@ public final class VTreePanel extends CPanel
 		mTo.setActionCommand("To");
 		mTo.addActionListener(this);
 		//
-		bar.setLayout(new BoxLayout(bar, BoxLayout.Y_AXIS));
 		bar.setMinimumSize(new Dimension (50,50));
+		bar.setBorder(new ShadowBorder());
+		bar.setLayout(new FlowLayout());
+		((FlowLayout)bar.getLayout()).setAlignment(FlowLayout.LEFT);
+		bar.add(toolbar);
+		toolbar.setLayout(new GridBagLayout());
+		toolbar.setFloatable(false);
+		toolbar.setRollover(true);
+		toolbar.setBorder(BorderFactory.createEmptyBorder());
 
 		mBarAdd.setText(Msg.getMsg(Env.getCtx(), "BarAdd"));
 		mBarAdd.setActionCommand("BarAdd");
@@ -244,6 +272,16 @@ public final class VTreePanel extends CPanel
 	}   //  jbInit
 
 
+	private void removeSplitPaneBorder() {
+		if (centerSplitPane != null) {
+			SplitPaneUI splitPaneUI = centerSplitPane.getUI();
+	        if (splitPaneUI instanceof BasicSplitPaneUI) {
+	            BasicSplitPaneUI basicUI = (BasicSplitPaneUI) splitPaneUI;
+	            basicUI.getDivider().setBorder(BorderFactory.createEmptyBorder());
+	        }
+		}
+	}
+	
 	/**
 	 * 	Set Divider Location
 	 *	@param location location (80 default)
@@ -832,21 +870,25 @@ public final class VTreePanel extends CPanel
 	//	if (space != -1)
 	//		label = label.substring(0, space);
 
-		CButton button = new CButton(label);		//	Create the button
+		CButton button = new CButton(label);
+		button.setHorizontalAlignment(JButton.LEFT);
 		button.setToolTipText(nd.getDescription());
 		button.setActionCommand(String.valueOf(nd.getNode_ID()));
 		//
 		button.setMargin(new Insets(0, 0, 0, 0));
 		button.setIcon(nd.getIcon());
-		button.setBorderPainted(false);
-	//	button.setFocusPainted(false);
+		//button.setBorderPainted(false);
 		button.setRequestFocusEnabled(false);
 		//
 		button.addActionListener(this);
 		button.addMouseListener(mouseListener);
 		//
-		bar.add(button);
+		toolbar.add(button,
+			new GridBagConstraints(0, GridBagConstraints.RELATIVE,
+					1, 1, 1.0, 0.0, GridBagConstraints.NORTHWEST, 
+					GridBagConstraints.HORIZONTAL, new Insets(1,0,1,0), 4,2));
 		bar.validate();
+		
 		if (centerSplitPane.getDividerLocation() == -1)
 			centerSplitPane.setDividerLocation(button.getPreferredSize().width);
 		bar.repaint();
@@ -857,7 +899,7 @@ public final class VTreePanel extends CPanel
 	 */
 	private void barRemove()
 	{
-		bar.remove(m_buttonSelected);
+		toolbar.remove(m_buttonSelected);
 		bar.validate();
 		bar.repaint();
 		barDBupdate(false, Integer.parseInt(m_buttonSelected.getActionCommand()));
@@ -910,6 +952,15 @@ public final class VTreePanel extends CPanel
 		}
 	}   //  expandTree
 
+	@Override
+	public void paint(Graphics g) {
+		if (m_lookAndFeelChanged) {
+			m_lookAndFeelChanged = false;
+			if (m_hasBar) removeSplitPaneBorder();
+		}
+		super.paint(g);
+	}
+
 }   //  VTreePanel