CaRMtl/eric/bar/JPropertiesBar.java

326 lines
8.9 KiB
Java

/*
Copyright 2006 Eric Hakenholz
This file is part of C.a.R. software.
C.a.R. is a free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, version 3 of the License.
C.a.R. is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package eric.bar;
import eric.GUI.palette.PaletteManager;
import eric.GUI.pipe_tools;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Point;
import java.awt.Toolkit;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import eric.JEricPanel;
import rene.gui.Global;
import rene.zirkel.objects.ConstructionObject;
import eric.controls.JCanvasPanel;
import eric.macros.CreateMacroDialog;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import java.util.ArrayList;
import javax.swing.AbstractAction;
import javax.swing.KeyStroke;
/**
*
* @author erichake
*/
public class JPropertiesBar extends JFrame implements MouseListener,
MouseMotionListener {
static private int Bx=0, By=0, Bwidth=1078, Bheight=60;
CPane CP;
TitleBar titlebar;
static JControlProperties Content;
private MouseEvent pressed;
private Point location;
private static JPropertiesBar JPB=null;
public JPropertiesBar() {
JPB=this;
Bx=Global.getParameter("props.paletteX", 0);
if (Bx<Global.getScreenX()) {
Bx=Global.getScreenX();
}
By=Global.getScreenY();
CP=new CPane();
setContentPane(CP);
titlebar=new TitleBar(this, 18);
Content=new JControlProperties(Bwidth-titlebar.getSize().width,
Bheight);
Content.addPanel(Global.Loc("props.aspecttab"));
Content.addPanel(Global.Loc("props.numerictab"));
Content.addPanel(Global.Loc("props.conditionaltab"));
Content.selectTab(Global.getParameter("props.selectedtab", 0));
CP.add(titlebar);
CP.add(Content);
setSize(Bwidth+2, Bheight+2);
setLocation(Bx, By);
setUndecorated(true);
// Attention : setFocusable commenté pour la 3.5.5 beta 3, car cela interdit le
// "echap" défini juste après...
// setFocusable(true);
KeyStroke key=KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0);
getRootPane().getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(key, "escape");
getRootPane().getActionMap().put("escape", new AbstractAction() {
@Override
public void actionPerformed(final ActionEvent arg0) {
PaletteManager.setSelected_with_clic("move", true);
CreateMacroDialog.quit();
}
});
}
public static int getBarHeight() {
if ((JPB!=null)&&(JPB.isVisible())) {
return Bheight;
} else {
return 0;
}
}
public static void clearme() {
Content.clearme();
}
public void refresh() {
Content.refresh();
}
public void showme(final boolean vis) {
if (vis) {
setVisible(true);
pipe_tools.setWindowBounds();
pipe_tools.toFront();
} else {
setVisible(false);
}
}
public static void ShowHideBar(){
if (JPB!=null){
JPB.showme(!JPB.isVisible());
}
}
static public boolean isBarVisible() {
return ((JPB!=null)&&(JPB.isVisible()));
}
static public void EditObjects(ArrayList<ConstructionObject> v){
if ((JPB!=null)&&(v!=null)&&(v.size()>0)) {
JPB.setObjects(v);
}
}
static public void EditObject(final ConstructionObject o) {
EditObject(o, true, true);
}
static public void EditObject(final ConstructionObject o,
final boolean forcevisible, final boolean forcefocus) {
if ((JPB!=null)&&(o!=null)) {
JPB.setObject(o, forcevisible, forcefocus);
}
}
static public void EditObject(final JCanvasPanel jcp) {
if ((JPB!=null)&&(jcp.O!=null)) {
JPB.setObject(jcp);
}
}
static public void SelectPropertiesTab(final int i) {
JPB.selectTab(i);
}
static public void RefreshBar() {
if (JPB!=null) {
JPB.refresh();
}
}
// Only called at first launch (applet or application) :
static public void CreatePropertiesBar() {
JPB=new JPropertiesBar();
JPB.showme(false);
}
private void setObjects(ArrayList<ConstructionObject> v) {
showme(true);
Content.setObjects(v);
}
public void setObject(final ConstructionObject O,
final boolean forcevisible, final boolean forcefocus) {
if (forcevisible) {
showme(true);
}
if ((!this.isVisible())&&(!forcefocus)) {
return;
}
Content.setObject(O, forcevisible, forcefocus);
}
public void selectTab(final int i) {
Content.selectTab(i);
}
public void setObject(final JCanvasPanel jcp) {
showme(true);
Content.setObject(jcp);
}
private static void fixsize(final JComponent cp, final int w, final int h) {
final Dimension d=new Dimension(w, h);
cp.setMaximumSize(d);
cp.setMinimumSize(d);
cp.setPreferredSize(d);
cp.setSize(d);
}
private class TitleBar extends JEricPanel {
ImageIcon closeimg=new ImageIcon(getClass().getResource(
"gui/Pclose.png"));
ImageIcon closeoverimg=new ImageIcon(getClass().getResource(
"gui/Pcloseover.png"));
ImageIcon myicon=new ImageIcon(getClass().getResource(
"gui/titlebar.png"));
JButton closebtn;
JPropertiesBar Mother;
@Override
public void paintComponent(final java.awt.Graphics g) {
final java.awt.Dimension d=this.getSize();
g.drawImage(myicon.getImage(), 0, 0, d.width, d.height, this);
super.paintComponent(g);
}
public TitleBar(final JPropertiesBar parent, final int width) {
Mother=parent;
this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
// this.setAlignmentX(0F);
this.setOpaque(false);
fixsize(this, width, Bheight);
this.addMouseListener(parent);
this.addMouseMotionListener(parent);
closebtn=new JButton(closeimg);
closebtn.setRolloverIcon(closeoverimg);
closebtn.setBorder(BorderFactory.createEmptyBorder());
closebtn.setOpaque(false);
closebtn.setContentAreaFilled(false);
closebtn.addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(final MouseEvent e) {
// Mother.setVisible(false);
Mother.showme(false);
}
});
this.add(closebtn);
}
}
private class CPane extends JEricPanel {
public CPane() {
this.setLayout(new BoxLayout(this, BoxLayout.X_AXIS));
this.setOpaque(false);
this.setBorder(BorderFactory.createLineBorder(
new Color(80, 80, 80), 1));
}
}
private void setBarLocation(final MouseEvent me) {
location=getLocation(location);
int x=location.x-pressed.getX()+me.getX();
if (x<Global.getScreenX()+20) {
x=Global.getScreenX();
} else if (x+Bwidth>Global.getScreenX()+Global.getScreenW()-20) {
x=Global.getScreenX()+Global.getScreenW()-Bwidth;
}
setLocation(x, Global.getScreenY());
Toolkit.getDefaultToolkit().sync();
}
@Override
public void mouseDragged(final MouseEvent me) {
setBarLocation(me);
}
@Override
public void mousePressed(final MouseEvent me) {
pressed=me;
}
@Override
public void mouseMoved(final MouseEvent e) {
}
@Override
public void mouseReleased(final MouseEvent e) {
setBarLocation(e);
Global.setParameter("props.paletteX", getLocation().x);
Bx=getLocation().x;
By=getLocation().y;
pipe_tools.setWindowLocation();
pipe_tools.toFront();
}
@Override
public void mouseClicked(final MouseEvent e) {
}
@Override
public void mouseEntered(final MouseEvent e) {
}
@Override
public void mouseExited(final MouseEvent e) {
}
}