362 lines
12 KiB
Java
362 lines
12 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;
|
||
|
|
||
|
import eric.GUI.palette.PaletteManager;
|
||
|
import java.awt.AlphaComposite;
|
||
|
import java.awt.Color;
|
||
|
import java.awt.Graphics2D;
|
||
|
import java.awt.event.MouseEvent;
|
||
|
import java.awt.event.MouseListener;
|
||
|
import java.util.ArrayList;
|
||
|
|
||
|
import javax.swing.BorderFactory;
|
||
|
import javax.swing.BoxLayout;
|
||
|
import javax.swing.JButton;
|
||
|
import javax.swing.JDialog;
|
||
|
import eric.JEricPanel;
|
||
|
import javax.swing.JSeparator;
|
||
|
import javax.swing.SwingConstants;
|
||
|
|
||
|
import rene.gui.Global;
|
||
|
|
||
|
/**
|
||
|
*
|
||
|
* @author erichake
|
||
|
*/
|
||
|
class JCharacterPalette extends JDialog implements MouseListener {
|
||
|
|
||
|
/**
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
static int GENERICCODE=10;
|
||
|
JEricPanel Content, TabZone, ButtonZone;
|
||
|
JButton LBL;
|
||
|
JZirkelCanvas JZF;
|
||
|
int Linemax=10;
|
||
|
int Btnsize=18;
|
||
|
int Tabbtnsize=30;
|
||
|
|
||
|
public JCharacterPalette(final JZirkelCanvas jzf, final JButton lbl) {
|
||
|
// super(jzf.JPM.MainPalette,true);
|
||
|
super();
|
||
|
JZF=jzf;
|
||
|
|
||
|
LBL=lbl;
|
||
|
JTabBtn.Btns.clear();
|
||
|
setDefaultCloseOperation(javax.swing.WindowConstants.DO_NOTHING_ON_CLOSE);
|
||
|
setTitle("Caracter Palette");
|
||
|
this.setUndecorated(true);
|
||
|
Content=new JContent(Tabbtnsize);
|
||
|
// Content.setLayout(new BoxLayout(Content,BoxLayout.X_AXIS));
|
||
|
// Content.setBackground(new Color(50,50,50));
|
||
|
// Content.setBorder(BorderFactory.createLineBorder(new
|
||
|
// Color(0,0,0),1));
|
||
|
this.setContentPane(Content);
|
||
|
this.setAlwaysOnTop(true);
|
||
|
this.toFront();
|
||
|
ButtonZone=getnewcol();
|
||
|
TabZone=getnewcol();
|
||
|
TabZone.setOpaque(false);
|
||
|
initJTab();
|
||
|
initJButtons();
|
||
|
Content.add(TabZone);
|
||
|
Content.add(ButtonZone);
|
||
|
this.addMouseListener(new java.awt.event.MouseAdapter() {
|
||
|
|
||
|
@Override
|
||
|
public void mousePressed(final java.awt.event.MouseEvent evt) {
|
||
|
JZF.getPointLabel().setEnabledJLabel(true);
|
||
|
setVisible(false);
|
||
|
dispose();
|
||
|
}
|
||
|
});
|
||
|
this.addWindowListener(new java.awt.event.WindowAdapter() {
|
||
|
|
||
|
@Override
|
||
|
public void windowDeactivated(final java.awt.event.WindowEvent evt) {
|
||
|
JZF.getPointLabel().setEnabledJLabel(true);
|
||
|
setVisible(false);
|
||
|
dispose();
|
||
|
}
|
||
|
});
|
||
|
|
||
|
this.pack();
|
||
|
// JPointLabel.fixsize(Content,Content.getSize().width+1,Content.getSize().height+1);
|
||
|
// JPointLabel.fixsize(titles,this.getSize().width,20);
|
||
|
// this.pack();
|
||
|
final int x=LBL.getLocationOnScreen().x+LBL.getSize().width-this.getSize().width;
|
||
|
final int y=LBL.getLocationOnScreen().y+LBL.getSize().height;
|
||
|
this.setLocation(x, y);
|
||
|
|
||
|
JZF.getPointLabel().setEnabledJLabel(false);
|
||
|
|
||
|
this.setVisible(true);
|
||
|
|
||
|
}
|
||
|
|
||
|
private JEricPanel initJTab() {
|
||
|
JEricPanel col=null;
|
||
|
JButton mybtn=null;
|
||
|
|
||
|
col=new JEricPanel();
|
||
|
col.setLayout(new BoxLayout(col, BoxLayout.Y_AXIS));
|
||
|
col.setAlignmentY(0f);
|
||
|
mybtn=new JTabBtn(this, 0, "D");
|
||
|
JPointName.fixsize(mybtn, Tabbtnsize, Tabbtnsize);
|
||
|
col.add(mybtn);
|
||
|
mybtn=new JTabBtn(this, 1, "d");
|
||
|
JPointName.fixsize(mybtn, Tabbtnsize, Tabbtnsize);
|
||
|
col.add(mybtn);
|
||
|
mybtn=new JTabBtn(this, 2, "\u0394");
|
||
|
JPointName.fixsize(mybtn, Tabbtnsize, Tabbtnsize);
|
||
|
col.add(mybtn);
|
||
|
mybtn=new JTabBtn(this, 3, "\u03B4");
|
||
|
JPointName.fixsize(mybtn, Tabbtnsize, Tabbtnsize);
|
||
|
col.add(mybtn);
|
||
|
mybtn=new JTabBtn(this, GENERICCODE, "P1");
|
||
|
JPointName.fixsize(mybtn, Tabbtnsize, Tabbtnsize);
|
||
|
col.add(mybtn);
|
||
|
col.setOpaque(false);
|
||
|
JTabBtn.setSelectedJTitle(JZF.getPointLabel().getCurrentLetterSetCode());
|
||
|
TabZone.add(col);
|
||
|
// JPointLabel.fixsize(TabZone,Tabwidth,50);
|
||
|
return col;
|
||
|
}
|
||
|
|
||
|
private JButton getJButton(final String s) {
|
||
|
final JButton mybtn=new JButton(s);
|
||
|
mybtn.setBorder(BorderFactory.createEmptyBorder());
|
||
|
mybtn.setBorderPainted(false);
|
||
|
mybtn.setFocusPainted(false);
|
||
|
mybtn.setFocusable(false);
|
||
|
mybtn.setBackground(new Color(228, 222, 255));
|
||
|
mybtn.setOpaque(false);
|
||
|
mybtn.setContentAreaFilled(false);
|
||
|
if (JZF.getPointLabel().isLetterAccepted(mybtn.getText())) {
|
||
|
mybtn.addMouseListener(this);
|
||
|
} else {
|
||
|
mybtn.setEnabled(false);
|
||
|
mybtn.addMouseListener(new java.awt.event.MouseAdapter() {
|
||
|
|
||
|
@Override
|
||
|
public void mousePressed(final java.awt.event.MouseEvent evt) {
|
||
|
JZF.getPointLabel().setEnabledJLabel(true);
|
||
|
setVisible(false);
|
||
|
dispose();
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
mybtn.setFont(new java.awt.Font(Global.GlobalFont, 1, 11));
|
||
|
mybtn.setForeground(new Color(20, 20, 20));
|
||
|
JPointName.fixsize(mybtn, 18, 18);
|
||
|
return mybtn;
|
||
|
}
|
||
|
|
||
|
private static JEricPanel getnewline() {
|
||
|
final JEricPanel line=new JEricPanel();
|
||
|
line.setLayout(new BoxLayout(line, BoxLayout.X_AXIS));
|
||
|
line.setAlignmentX(0f);
|
||
|
line.setOpaque(false);
|
||
|
return line;
|
||
|
}
|
||
|
|
||
|
private static JEricPanel getnewcol() {
|
||
|
final JEricPanel col=new JEricPanel();
|
||
|
col.setLayout(new BoxLayout(col, BoxLayout.Y_AXIS));
|
||
|
col.setAlignmentY(0f);
|
||
|
col.setOpaque(true);
|
||
|
col.setBackground(new Color(250, 250, 250));
|
||
|
return col;
|
||
|
}
|
||
|
|
||
|
void initJButtons() {
|
||
|
JEricPanel line=null;
|
||
|
|
||
|
final String letters=JZF.getPointLabel().getCurrentLetterSet();
|
||
|
ButtonZone.removeAll();
|
||
|
for (int i=0; i<letters.length(); i++) {
|
||
|
if ((i%Linemax)==0) {
|
||
|
ButtonZone.add(line=getnewline());
|
||
|
}
|
||
|
line.add(getJButton(letters.substring(i, i+1)));
|
||
|
}
|
||
|
ButtonZone.add(new JSeparator());
|
||
|
for (int i=0; i<letters.length(); i++) {
|
||
|
if ((i%Linemax)==0) {
|
||
|
ButtonZone.add(line=getnewline());
|
||
|
}
|
||
|
line.add(getJButton(letters.substring(i, i+1)+"'"));
|
||
|
}
|
||
|
ButtonZone.add(new JSeparator());
|
||
|
for (int i=0; i<letters.length(); i++) {
|
||
|
if ((i%Linemax)==0) {
|
||
|
ButtonZone.add(line=getnewline());
|
||
|
}
|
||
|
line.add(getJButton(letters.substring(i, i+1)+"''"));
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public void mouseClicked(final MouseEvent e) {
|
||
|
}
|
||
|
|
||
|
public void mouseReleased(final MouseEvent e) {
|
||
|
if (e.getSource()!=null) {
|
||
|
if (!Global.getParameter("options.point.shownames", false)) {
|
||
|
Global.setParameter("options.point.shownames", true);
|
||
|
final String iconname=PaletteManager.geomSelectedIcon();
|
||
|
if (iconname.equals("point")) {
|
||
|
PaletteManager.setSelected_with_clic("showname", true);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
final JButton btn=(JButton) e.getSource();
|
||
|
final String s=btn.getText();
|
||
|
if (JZF.getPointLabel().isLetterAllowed(s)) {
|
||
|
JZF.getPointLabel().setSuffixChar("");
|
||
|
JZF.getPointLabel().setStartLetter(s);
|
||
|
} else if (s.endsWith("''")) {
|
||
|
JZF.getPointLabel().setSuffixChar("''");
|
||
|
JZF.getPointLabel().setStartLetter(s.substring(0, 1));
|
||
|
} else if (s.endsWith("'")) {
|
||
|
JZF.getPointLabel().setSuffixChar("'");
|
||
|
JZF.getPointLabel().setStartLetter(s.substring(0, 1));
|
||
|
}
|
||
|
JZF.getPointLabel().setEnabledJLabel(true);
|
||
|
setVisible(false);
|
||
|
dispose();
|
||
|
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public void mousePressed(final MouseEvent e) {
|
||
|
}
|
||
|
|
||
|
public void mouseEntered(final MouseEvent e) {
|
||
|
if (e.getSource()!=null) {
|
||
|
final JButton btn=(JButton) e.getSource();
|
||
|
btn.setBackground(new Color(236, 236, 249));
|
||
|
btn.setOpaque(true);
|
||
|
btn.setContentAreaFilled(true);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public void mouseExited(final MouseEvent e) {
|
||
|
if (e.getSource()!=null) {
|
||
|
final JButton btn=(JButton) e.getSource();
|
||
|
btn.setOpaque(false);
|
||
|
btn.setContentAreaFilled(false);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
class JTabBtn extends JButton {
|
||
|
|
||
|
/**
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
public static ArrayList Btns=new ArrayList<JTabBtn>();
|
||
|
int SetCode=0;
|
||
|
JCharacterPalette JCP;
|
||
|
|
||
|
public JTabBtn(final JCharacterPalette jcp, final int code, final String s) {
|
||
|
SetCode=code;
|
||
|
JCP=jcp;
|
||
|
setBorder(BorderFactory.createEmptyBorder());
|
||
|
setBorderPainted(false);
|
||
|
setFocusPainted(false);
|
||
|
setFocusable(false);
|
||
|
// setBackground(new Color(240,240,240));
|
||
|
setOpaque(false);
|
||
|
setContentAreaFilled(false);
|
||
|
setHorizontalAlignment(SwingConstants.CENTER);
|
||
|
setFont(new java.awt.Font(Global.GlobalFont, 1, 13));
|
||
|
addMouseListener(new java.awt.event.MouseAdapter() {
|
||
|
|
||
|
@Override
|
||
|
public void mouseReleased(final java.awt.event.MouseEvent evt) {
|
||
|
if (SetCode==JCharacterPalette.GENERICCODE) {
|
||
|
Global.setParameter("options.point.shownames", false);
|
||
|
JCP.JZF.getPointLabel().getBetterName(null, true);
|
||
|
JCP.dispose();
|
||
|
return;
|
||
|
}
|
||
|
JCP.JZF.getPointLabel().setLetterSet(SetCode);
|
||
|
JCP.initJButtons();
|
||
|
disableAllJTitles();
|
||
|
setEnabled(true);
|
||
|
JCP.pack();
|
||
|
JCP.repaint();
|
||
|
}
|
||
|
});
|
||
|
setText(s);
|
||
|
Btns.add(this);
|
||
|
}
|
||
|
|
||
|
static void disableAllJTitles() {
|
||
|
for (int i=0; i<Btns.size(); i++) {
|
||
|
final JButton btn=(JButton) Btns.get(i);
|
||
|
btn.setEnabled(false);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
static void setSelectedJTitle(final int code) {
|
||
|
disableAllJTitles();
|
||
|
if (code<Btns.size()) {
|
||
|
final JButton btn=(JButton) Btns.get(code);
|
||
|
btn.setEnabled(true);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
class JContent extends JEricPanel {
|
||
|
|
||
|
/**
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
int TS=0;
|
||
|
|
||
|
@Override
|
||
|
public void paintComponent(final java.awt.Graphics g) {
|
||
|
super.paintComponent(g);
|
||
|
final java.awt.Dimension d=this.getSize();
|
||
|
final Graphics2D g2=(Graphics2D) g;
|
||
|
g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER,
|
||
|
0.05f));
|
||
|
g2.setColor(new Color(0, 0, 255));
|
||
|
g2.fillRect(5, 5, TS-8, d.height-11);
|
||
|
g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER,
|
||
|
0.15f));
|
||
|
g2.drawRect(5, 5, TS-8, d.height-11);
|
||
|
g2.setComposite(AlphaComposite.getInstance(
|
||
|
AlphaComposite.SRC_OVER, 1f));
|
||
|
}
|
||
|
|
||
|
public JContent(final int tabsize) {
|
||
|
TS=tabsize;
|
||
|
setLayout(new BoxLayout(this, BoxLayout.X_AXIS));
|
||
|
setBackground(new Color(250, 250, 250));
|
||
|
setBorder(BorderFactory.createLineBorder(new Color(0, 0, 0), 1));
|
||
|
}
|
||
|
}
|