CaRMtl/eric/JPointName.java

279 lines
6.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;
import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
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.JButton;
import eric.JEricPanel;
import javax.swing.SwingConstants;
import rene.gui.Global;
import rene.zirkel.construction.Construction;
import rene.zirkel.objects.ConstructionObject;
/**
*
* @author erichake
*/
public class JPointName {
// private String StartLetter="\u03b6";
private static String GenericLetter = "P";
private static String majLettersSet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
private static String minLettersSet = "abcdefghijklmnopqrstuvwxyz";
private static String greekmajLettersSet = "\u0391\u0392\u0393\u0394\u0395\u0396"
+ "\u0397\u0398\u0399\u039A\u039B\u039C\u039D\u039E\u039F\u03A0\u03A1\u03A3"
+ "\u03A4\u03A5\u03A6\u03A7\u03A8\u03A9";
private static String greekminLettersSet = "\u03B1\u03B2\u03B3\u03B4\u03B5\u03B6\u03B7\u03B8\u03B9"
+ "\u03BA\u03BB\u03BC\u03BD\u03BE\u03BF\u03C0\u03C1\u03C3\u03C4\u03C5\u03C6"
+ "\u03C7\u03C8\u03C9";
private static ArrayList LettersSet = new ArrayList();
private String LetterSuffix = "";
// Ct should be the ZF.ZC.getConstruction() object :
private Construction ZCcn = null;
private JButton PaletteBtn = null;
private JZirkelCanvas JZF = null;
public static int minLettersSetCode = 1;
// private String Letters=majLettersSet;
// 0:majLettersSet , 1:minLettersSet , 2:greekmajLettersSet ,
// 3:greekminLettersSet
private int LetterSetCode = 0;
private int StartLetter = 0;
/**
* Creates a new instance of JPointLabel
*
* @param jzf
*/
public JPointName(final JZirkelCanvas jzf) {
JZF = jzf;
ZCcn = JZF.getZF().ZC.getConstruction();
PaletteBtn = new JPaletteButton(JZF);
}
public JPointName() {
LettersSet.add(majLettersSet);
LettersSet.add(minLettersSet);
LettersSet.add(greekmajLettersSet);
LettersSet.add(greekminLettersSet);
}
public String getCurrentLetterSet() {
return (String) LettersSet.get(LetterSetCode);
}
public int getCurrentLetterSetCode() {
return LetterSetCode;
}
static void fixsize(final Component 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);
}
public JButton getPaletteButton(){
return PaletteBtn;
}
public void addPaletteJLabel(final JEricPanel jp) {
fixsize(PaletteBtn, 28, jp.getSize().height);
jp.add(PaletteBtn);
}
public void setEnabledJLabel(final boolean bool) {
PaletteBtn.setEnabled(bool);
}
public void addSuffixChar() {
if (LetterSuffix.equals("''"))
LetterSuffix = "";
else
LetterSuffix += "'";
}
void setSuffixChar(final String suff) {
LetterSuffix = suff;
}
public static String getGenericName(final Construction myC) {
int i = 1;
ConstructionObject o = myC.find(GenericLetter + i);
while (o != null) {
i++;
o = myC.find(GenericLetter + i);
}
return (GenericLetter + i);
}
public String getBetterName(final Construction myC,
final boolean setPaletteTxt) {
final String Letters = getCurrentLetterSet();
String s = Letters.substring(StartLetter, StartLetter + 1);
if (ZCcn == null) {
s = getGenericName(myC);
} else if (Global.getParameter("options.point.shownames", false)) {
int i = Letters.indexOf(s);
final int k = i;
s += LetterSuffix;
ConstructionObject o = ZCcn.find(s);
while ((i < (Letters.length() - 1)) && (o != null)) {
i++;
s = Letters.substring(i, i + 1) + LetterSuffix;
o = ZCcn.find(s);
}
i = -1;
while ((i < k) && (o != null)) {
i++;
s = Letters.substring(i, i + 1) + LetterSuffix;
o = ZCcn.find(s);
}
if (o != null) {
s = getGenericName(ZCcn);
}
} else
s = getGenericName(ZCcn);
if ((PaletteBtn != null) && (setPaletteTxt))
PaletteBtn.setText(s);
return s;
}
public static int findSet(final String s) {
for (int i = 0; i < LettersSet.size(); i++) {
final String mySet = (String) LettersSet.get(i);
if (mySet.indexOf(s) != -1)
return i;
}
return -1;
}
public boolean isLetterAllowed(final String s) {
return (getCurrentLetterSet().indexOf(s) != -1);
}
public boolean isLetterAccepted(final String s) {
if (ZCcn != null)
return (ZCcn.find(s) == null);
else
return false;
}
public String setStartLetter(final String s) {
if (isLetterAllowed(s)) {
StartLetter = getCurrentLetterSet().indexOf(s);
}
return getBetterName(null, true);
}
public String setLetterSet(final int i) {
LetterSetCode = i;
StartLetter = 0;
return getBetterName(null, true);
}
}
class JPaletteButton extends JButton implements MouseListener {
/**
*
*/
private static final long serialVersionUID = 1L;
private final JZirkelCanvas JZF;
int[] x = { 0, 10, 0 };
int[] y = { 0, 10, 10 };
@Override
public void paintComponent(final java.awt.Graphics g) {
final Dimension d = this.getSize();
final int sze = 6;
x[0] = d.width - sze;
y[0] = d.height;
x[1] = d.width;
y[1] = d.height - sze;
x[2] = d.width;
y[2] = d.height;
final Graphics2D g2 = (Graphics2D) g;
g2.setComposite(AlphaComposite.SrcOver);
g2.setColor(new Color(50, 50, 50));
g2.fillPolygon(x, y, 3);
g2
.setComposite(AlphaComposite.getInstance(
AlphaComposite.SRC_OVER, 1f));
super.paintComponent(g);
}
public JPaletteButton(final JZirkelCanvas jzf) {
JZF = jzf;
setOpaque(false);
setContentAreaFilled(false);
setBorder(BorderFactory.createEmptyBorder());
setFont(new java.awt.Font(Global.GlobalFont, 1, 14));
setForeground(new Color(50, 50, 50));
setHorizontalAlignment(SwingConstants.CENTER);
setVerticalAlignment(SwingConstants.CENTER);
addMouseListener(this);
}
public void mouseClicked(final MouseEvent e) {
}
public void mousePressed(final MouseEvent e) {
System.out.println("mousePressed");
if (isEnabled()) {
JZF.getZF().setinfo("nom_points", false);
new JCharacterPalette(JZF, this);
}
}
public void mouseReleased(final MouseEvent e) {
}
public void mouseEntered(final MouseEvent e) {
}
public void mouseExited(final MouseEvent e) {
}
}