CaRMtl/pm/Client/ClientNetworkTools.java

269 lines
8.2 KiB
Java

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package pm.Client;
import eric.FileTools;
import eric.GUI.ZDialog.ZButton;
import eric.GUI.ZDialog.ZDialog;
import eric.GUI.ZDialog.ZTextFieldAndLabel;
import eric.GUI.palette.PaletteManager;
import eric.JZirkelCanvas;
import java.awt.event.KeyEvent;
import java.awt.event.MouseEvent;
import java.io.ByteArrayOutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Enumeration;
import rene.gui.Global;
import rene.util.MyVector;
import rene.util.xml.XmlWriter;
import rene.zirkel.ZirkelCanvas;
import rene.zirkel.constructors.ObjectConstructor;
import rene.zirkel.objects.ConstructionObject;
import rene.zirkel.objects.FunctionObject;
import rene.zirkel.objects.PlumbObject;
import rene.zirkel.objects.PointObject;
import rene.zirkel.objects.PrimitiveCircleObject;
import rene.zirkel.objects.PrimitiveLineObject;
/**
*
* @author PM
*/
public class ClientNetworkTools extends ZDialog{
private ZTextFieldAndLabel targetslist;
private ZButton send_work, send_objects;
private Communication com;
private int FWIDTH = 240;
private boolean point, line, circle, function, real_time;
public ClientNetworkTools(Communication com){
super("Network Tools", 0, 0, 366, 70, false, false);
//BWIDTH = 80;
this.com = com;
addContent();
}
public void init(int w, int h) {
int x = (w-D_WIDTH)/2;
int y = h-D_HEIGHT-4;
setBounds(x, y, D_WIDTH, D_HEIGHT);
}
private void addContent(){
send_work = new ZButton(Global.Loc("network.client.sendwork")) {
@Override
public void action(){
try {
String str = PaletteManager.geomSelectedIcon(); //(*)
PaletteManager.deselectgeomgroup(); //(*)
com.send(FileTools.getCurrentFileSource());
this.pressed(this);
PaletteManager.setSelected_with_clic(str, true); //(*)
/* these three lines are a trick to prevent
* the cursor to be placed in the next component,
* which is the field targetslist
* A more elegant solution have to be found..
*/
} catch (Exception ex) {
System.out.println("Erreur d'envoi");
}
}
};
targetslist = new ZTextFieldAndLabel(Global.Loc("job.gui.targets"), "", 0, CHEIGHT) {
@Override
public void actionMouse() {
PaletteManager.deselectgeomgroup();
ZirkelCanvas zc = JZirkelCanvas.getCurrentZC();
zc.setTool(new SelectionTool((ClientNetworkTools) this.getParent(), this));
zc.showStatus("Select Objects");
if(!this.getText().equals("")){
String[] names = this.getText().split(";");
for(String name : names){
ConstructionObject o = zc.getConstruction().find(name);
if(o!=null){
o.setSelected(true);
}
}
}
zc.repaint();
}
@Override
public void actionKey(KeyEvent k) {
//A programmer
}
};
send_objects = new ZButton(Global.Loc("network.client.share")) {
@Override
public void action(){
if(!targetslist.getText().equals("")){
String[] names = targetslist.getText().split(";");
final ByteArrayOutputStream bout = new ByteArrayOutputStream();
XmlWriter xml = new XmlWriter(new PrintWriter(new OutputStreamWriter(bout), true));
xml.printXml();
xml.startTagNewLine("Objects");
for(String name : names){
ConstructionObject o = JZirkelCanvas.getCurrentZC().getConstruction().find(name);
/*
Enumeration e = o.depending();
while(e.hasMoreElements()){
((ConstructionObject) e.nextElement()).save(xml);
}
o.save(xml);
*/
ArrayList<ConstructionObject> list = Collections.list(o.depending());
find_all_depending(list, xml);
o.save(xml);
o.setSelected(false);
}
JZirkelCanvas.getCurrentZC().repaint();
xml.endTagNewLine("Objects");
//cc.send(out.toString("utf-8"));
com.send("<Global>\n"+bout.toString());
targetslist.setText("");
this.pressed(this);
//System.out.println(out.toString());
}
}
};
this.add(send_work);
this.add(targetslist);
this.add(send_objects);
fixComponents();
}
public XmlWriter find_all_depending(ArrayList<ConstructionObject> list, XmlWriter xml) {
ArrayList<ConstructionObject> l ;
for(int i = 0; i<list.size(); i++) {
l = Collections.list(list.get(i).depending());
xml = find_all_depending(l, xml);
list.get(i).save(xml);
}
return xml;
}
@Override
public void fixComponents(){
send_work.setBounds((D_WIDTH-2*BWIDTH)/2, MARGINTOP1, 2*BWIDTH, CHEIGHT);
targetslist.setBounds(MARGINW, MARGINTOP2, FWIDTH, CHEIGHT);
send_objects.setBounds(FWIDTH+2*MARGINW, MARGINTOP2, BWIDTH, CHEIGHT);
}
@Override
public void doClose() {
com.close();
JZirkelCanvas.getCurrentZC().remove(this);
JZirkelCanvas.getCurrentZC().repaint();
JZirkelCanvas.getCurrentZC().set_cnt(null);
}
public void set_accepted_object(String obj, boolean bol){
if(obj.equals("point")){
point = bol;
} else if(obj.equals("line")){
line = bol;
} else if(obj.equals("circle")){
circle = bol;
} else if(obj.equals("function")){
function = bol;
}
}
public boolean get_accepted_object(String obj){
if(obj.equals("point")){
return point;
} else if(obj.equals("line")){
return line;
} else if(obj.equals("circle")){
return circle;
} else if(obj.equals("function")){
return function;
}
return false;
}
public void set_real_time(boolean bol){
real_time = bol;
}
public boolean get_real_time(){
return real_time;
}
@Override
public void send(String s){
com.send(s);
}
}
class SelectionTool extends ObjectConstructor{
private ZTextFieldAndLabel targetslist;
private ClientNetworkTools cnt = null;
public SelectionTool(ClientNetworkTools cnt, ZTextFieldAndLabel targetslist){
this.targetslist = targetslist;
this.cnt = cnt;
}
@Override
public void mousePressed(MouseEvent e, ZirkelCanvas zc){
final ConstructionObject o = zc.selectObject(e.getX(), e.getY());
if(o==null){
return;
}
if((cnt.get_accepted_object("point") && o instanceof PointObject)
|| (cnt.get_accepted_object("line") && o instanceof PrimitiveLineObject)
|| (cnt.get_accepted_object("circle") && o instanceof PrimitiveCircleObject)
|| (cnt.get_accepted_object("function") && o instanceof FunctionObject)){
if(o.selected()){
o.setSelected(false);
targetslist.setText(targetslist.getText().replaceAll(o.getName()+";", ""));
} else {
o.setSelected(true);
targetslist.setText(targetslist.getText()+o.getName()+";");
}
zc.repaint();
}
}
@Override
public void mouseMoved(final MouseEvent e, final ZirkelCanvas zc, final boolean simple) {
Enumeration en = zc.getConstruction().elements();
MyVector V = new MyVector();
while(en.hasMoreElements()){
ConstructionObject o = (ConstructionObject) en.nextElement();
if(o.nearto(e.getX(), e.getY(), zc)){
if((cnt.get_accepted_object("point") && o instanceof PointObject)
|| (cnt.get_accepted_object("line") && o instanceof PrimitiveLineObject)
|| (cnt.get_accepted_object("circle") && o instanceof PrimitiveCircleObject)
|| (cnt.get_accepted_object("function") && o instanceof FunctionObject)){
V.addElement(o);
break;
}
}
}
zc.indicate(V);
}
}