Implemented full features and integration of Displays with the

DisplayManager form.
secondmonitor
sigonasr2 5 years ago
parent f8f6cabf06
commit 4d76f9db12
  1. 13
      DivaBot/config.txt
  2. 186
      DivaBot/src/sig/Display.java
  3. 271
      DivaBot/src/sig/DisplayManager.java
  4. 170
      DivaBot/src/sig/DrawCanvas.java
  5. 8
      DivaBot/src/sig/ListTransferHandler.java
  6. 2
      DivaBot/src/sig/MyRobot.java

@ -1,3 +1,10 @@
WIDTH 546 LAST_HEIGHT 48
HEIGHT 384 WIDTH 1071
BACKGROUND -10092442 HEIGHT 765
BACKGROUND -6697729
LAST_TEXT -6723841
LAST_FONT Serif.italic
LAST_FONTSIZE 32
LAST_BACKGROUND -16776961
LAST_WIDTH 200
LAST_DELAY 10000

@ -0,0 +1,186 @@
package sig;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.util.HashMap;
public class Display {
Color backgroundCol=Color.BLUE;
Color textCol=Color.WHITE;
Font font=new Font("Batang",Font.PLAIN,32);
int fontSize=32;
int x;
int y;
int width=200;
int height=48;
int delay=10000;
String[] labels;
String currentText;
int cycle=0;
boolean deleted=false;
Display() {
HashMap<String,String> config = MyRobot.p.configData;
if (config.containsKey("LAST_BACKGROUND")) {
try {
backgroundCol=new Color(Integer.parseInt(config.get("LAST_BACKGROUND")));
} catch (NumberFormatException e) {
backgroundCol=Color.BLUE;
}
}
if (config.containsKey("LAST_TEXT")) {
try {
textCol=new Color(Integer.parseInt(config.get("LAST_TEXT")));
} catch (NumberFormatException e) {
textCol=Color.WHITE;
}
}
if (config.containsKey("LAST_WIDTH")) {
try {
width=Integer.parseInt(config.get("LAST_WIDTH"));
} catch (NumberFormatException e) {
width=200;
}
}
if (config.containsKey("LAST_HEIGHT")) {
try {
height=Integer.parseInt(config.get("LAST_HEIGHT"));
} catch (NumberFormatException e) {
height=48;
}
}
x=0;
y=0;
if (config.containsKey("LAST_DELAY")) {
try {
delay=Integer.parseInt(config.get("LAST_DELAY"));
} catch (NumberFormatException e) {
delay=10000;
}
}
cycle=0;
if (config.containsKey("LAST_FONTSIZE")) {
try {
fontSize=Integer.parseInt(config.get("LAST_FONTSIZE"));
} catch (NumberFormatException e) {
fontSize=32;
}
}
if (config.containsKey("LAST_FONT")) {
try {
font = new Font(config.get("LAST_FONT"),Font.PLAIN,fontSize);
} catch (NumberFormatException e) {
font = new Font("Batang",Font.PLAIN,fontSize);
}
}
labels = new String[]{"Add a label!"};
currentText=interpretLabel(labels[cycle]);
Thread t = new Thread() {
public void run() {
try {
while (!deleted) {
AdvanceCycle();
MyRobot.p.repaint();
Thread.sleep(delay);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
private void AdvanceCycle() {
cycle=(cycle+1)%labels.length;
currentText=interpretLabel(labels[cycle]);
}
};
t.start();
}
public void draw(Graphics g) {
g.setColor(backgroundCol);
g.fill3DRect(x, y, width, height, true);
g.setColor(textCol);
g.setFont(font);
g.drawString(currentText,x,y+fontSize);
}
private String interpretLabel(String string){
DrawCanvas data = MyRobot.p;
try {
switch (string) {
case "Best Play":{
if (data.bestPlayTime>System.currentTimeMillis()-10000) {
return "New Record!";
} else {
return ((data.bestPlay!=null)?data.bestPlay.display():"");
}
}
case "Overall Rating":{
if (data.ratingTime>System.currentTimeMillis()-10000) {
return "Rating up! "+data.lastRating+" -> "+data.overallrating;
} else {
return Integer.toString(data.overallrating);
}
}
case "Song Difficulty":{
return data.difficultyRating + " - " + fullNameDifficulty(data.difficulty);
}
case "Song Title (Japanese)":{
return data.songname + " by "+data.artist;
}
case "Song Title (Romanized)":{
return ((data.romanizedname.length()>0)?data.romanizedname:data.englishname) + " by "+data.artist;
}
case "Song Title (Japanese+Romanized)":{
return (data.songname + " - " + ((data.romanizedname.length()>0)?data.romanizedname:data.englishname)) + " by "+data.artist;
}
case "Song Title (English)":{
return data.englishname + " by "+data.artist;
}
case "Song Title (Japanese+Romanized+ENG)":{
return (data.songname + " - " + ((data.romanizedname.length()>0)?(data.romanizedname.equalsIgnoreCase(data.englishname))?data.romanizedname:data.romanizedname+" ("+data.englishname+")":data.englishname)) + " by "+data.artist;
}
case "Play Count":{
return Integer.toString(data.plays)+" play"+((data.plays!=1)?"s":"");
}
case "Pass/Play Count":{
return Integer.toString(data.passes) + "/" + Integer.toString(data.plays)+" play"+((data.plays!=1)?"s":"");
}
case "Pass/Play Count (+%)":{
return (data.passes)+"/"+(data.plays)+" play"+((data.plays!=1)?"s":"")+" "+"("+((int)(Math.floor(((float)data.passes)/data.plays*100)))+"% pass rate)";
}
case "FC Count":{
return data.fcCount +" FC"+(data.fcCount==1?"":"s");
}
case "FC Count (+%)":{
return data.fcCount +" FC"+(data.fcCount==1?"":"s")+" "+((int)(Math.floor(((float)data.fcCount)/data.plays*100)))+"% FC rate";
}
default:{
return string;
}
}
} catch(NullPointerException e) {
return string;
}
}
private String fullNameDifficulty(String difficulty) {
switch (difficulty) {
case "E":{
return "Easy";
}
case "N":{
return "Normal";
}
case "H":{
return "Hard";
}
case "EX":{
return "Extreme";
}
case "EXEX":{
return "Extra Extreme";
}
}
return "";
}
}

@ -9,6 +9,8 @@ import java.awt.GridBagConstraints;
import java.awt.GridBagLayout; import java.awt.GridBagLayout;
import java.awt.event.ActionEvent; import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.MouseEvent; import java.awt.event.MouseEvent;
import java.awt.event.MouseListener; import java.awt.event.MouseListener;
import java.io.File; import java.io.File;
@ -30,36 +32,42 @@ import javax.swing.JScrollPane;
import javax.swing.JTextField; import javax.swing.JTextField;
import javax.swing.ListCellRenderer; import javax.swing.ListCellRenderer;
import javax.swing.ListSelectionModel; import javax.swing.ListSelectionModel;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener; import javax.swing.event.ListSelectionListener;
import javax.swing.text.BadLocationException;
public class DisplayManager extends JPanel implements MouseListener,ListSelectionListener{ public class DisplayManager extends JPanel implements MouseListener,ListSelectionListener,ItemListener{
JFrame f = new JFrame(); public static JFrame f = new JFrame();
GridBagConstraints g = new GridBagConstraints(); static GridBagConstraints g = new GridBagConstraints();
Font[] fontList = null; static Font[] fontList = null;
ColorButton colorButton; static ColorButton colorButton;
ColorButton colorButton2; static ColorButton colorButton2;
JTextField fontSizeInput; static JTextField fontSizeInput;
JTextField widthInput; static JTextField widthInput;
JTextField heightInput; static JTextField heightInput;
JTextField delayInput; static JTextField delayInput;
DefaultListModel model = new DefaultListModel(); static DefaultListModel model = new DefaultListModel();
DefaultListModel model2 = new DefaultListModel(); static DefaultListModel model2 = new DefaultListModel();
static JComboBox fonts;
JList labels = new JList(model); JList labels = new JList(model);
JList displayedLabels = new JList(model2); JList displayedLabels = new JList(model2);
String[] AVAILABLELABELS = new String[] { public static Display selectedDisplay;
static String[] AVAILABLELABELS = new String[] {
"Best Play", "Best Play",
"Overall Rating", "Overall Rating",
"Song Difficulty", "Song Difficulty",
"Song Title (Japanese)", "Song Title (Japanese)",
"Song Title (Romanized)", "Song Title (Romanized)",
"Song Title (Japanese+Romanized)",
"Song Title (English)", "Song Title (English)",
"Play", "Song Title (Japanese+Romanized+ENG)",
"Play/Pass Count (+%)", "Play Count",
"Play/Pass Count (+%)", "Pass/Play Count",
"Pass/Play Count (+%)",
"FC Count", "FC Count",
"FC/Play Count", "FC Count (+%)"
"FC/Play Count (+%)"
}; };
DisplayManager() throws IOException { DisplayManager() throws IOException {
@ -70,8 +78,9 @@ public class DisplayManager extends JPanel implements MouseListener,ListSelectio
List<Font> tempFontList = new ArrayList(Arrays.asList(GraphicsEnvironment.getLocalGraphicsEnvironment().getAllFonts())); List<Font> tempFontList = new ArrayList(Arrays.asList(GraphicsEnvironment.getLocalGraphicsEnvironment().getAllFonts()));
for (int i=0;i<tempFontList.size();i++) { for (int i=0;i<tempFontList.size();i++) {
//System.out.println(tempFontList.get(i));
if (!tempFontList.get(i).canDisplay(12479) || tempFontList.get(i).getFontName().equals("Dialog.plain")) { if (!tempFontList.get(i).canDisplay(12479) || tempFontList.get(i).getFontName().equals("Dialog.plain")) {
tempFontList.remove(i); tempFontList.remove(i--);
} }
} }
@ -81,26 +90,85 @@ public class DisplayManager extends JPanel implements MouseListener,ListSelectio
g.anchor=GridBagConstraints.EAST; g.anchor=GridBagConstraints.EAST;
addComponent(1,1,3,1,new JLabel("Background Color")); addComponent(1,1,3,1,new JLabel("Background Color"));
g.anchor=GridBagConstraints.WEST; g.anchor=GridBagConstraints.WEST;
colorButton = (ColorButton)addComponent(4,1,4,1,new ColorButton("Color")); colorButton = (ColorButton)addComponent(4,1,4,1,new ColorButton("Color","background"));
JComboBox fonts = new JComboBox(fontList) { fonts = new JComboBox(fontList) {
@Override @Override
public Dimension getPreferredSize() { public Dimension getPreferredSize() {
return new Dimension(300,40); return new Dimension(300,40);
} }
}; };
if (MyRobot.p.configData.containsKey("LAST_BACKGROUND")) {
colorButton.setBackground(new Color(Integer.parseInt(MyRobot.p.configData.get("LAST_BACKGROUND"))));
}
addComponent(9,1,2,1,new JLabel(" ")); addComponent(9,1,2,1,new JLabel(" "));
fonts.setRenderer(new FontRenderer()); fonts.setRenderer(new FontRenderer());
fonts.setMaximumRowCount(5); fonts.setMaximumRowCount(5);
fonts.addItemListener(this);
g.anchor=GridBagConstraints.EAST; g.anchor=GridBagConstraints.EAST;
addComponent(1,3,3,1,new JLabel("Font")); addComponent(1,3,3,1,new JLabel("Font"));
g.anchor=GridBagConstraints.WEST; g.anchor=GridBagConstraints.WEST;
addComponent(4,3,4,1,fonts); addComponent(4,3,4,1,fonts);
if (MyRobot.p.configData.containsKey("LAST_FONT")) {
for (int i=0;i<fontList.length;i++) {
if (MyRobot.p.configData.get("LAST_FONT").equals(fontList[i].getFontName())) {
fonts.setSelectedItem(fontList[i]);
break;
}
}
//fonts.setSelectedItem(new Font(MyRobot.p.configData.get("LAST_FONT"),Font.PLAIN,32));
}
g.anchor=GridBagConstraints.EAST; g.anchor=GridBagConstraints.EAST;
addComponent(1,5,3,1,new JLabel("Font Color")); addComponent(1,5,3,1,new JLabel("Font Color"));
g.anchor=GridBagConstraints.WEST; g.anchor=GridBagConstraints.WEST;
colorButton = (ColorButton)addComponent(4,5,4,1,new ColorButton("Color")); colorButton2 = (ColorButton)addComponent(4,5,2,1,new ColorButton("Color","foreground"));
colorButton2.setColor(Color.WHITE);
if (MyRobot.p.configData.containsKey("LAST_TEXT")) {
colorButton.setBackground(new Color(Integer.parseInt(MyRobot.p.configData.get("LAST_TEXT"))));
}
g.anchor=GridBagConstraints.EAST; g.anchor=GridBagConstraints.EAST;
addComponent(1,7,1,1,new JLabel("Width")); addComponent(7,5,1,1,new JLabel("Size"));
g.anchor=GridBagConstraints.WEST;
fontSizeInput = (JTextField)addComponent(8,5,1,1,new JTextField() {
@Override
public Dimension getPreferredSize() {
return new Dimension(50,20);
}
});
if (MyRobot.p.configData.containsKey("LAST_FONTSIZE")) {
fontSizeInput.setText(MyRobot.p.configData.get("LAST_FONTSIZE"));
}
fontSizeInput.getDocument().addDocumentListener(new DocumentListener() {
void updateField(JTextField c, DocumentEvent e) {
try {
selectedDisplay.font=new Font(selectedDisplay.font.getFontName(),Font.PLAIN,Integer.parseInt(e.getDocument().getText(0, e.getDocument().getLength())));
selectedDisplay.fontSize=Integer.parseInt(e.getDocument().getText(0, e.getDocument().getLength()));
MyRobot.p.repaint();
c.setBackground(Color.WHITE);
} catch (NullPointerException | NumberFormatException | BadLocationException e1) {
c.setBackground(Color.RED);
}
}
@Override
public void insertUpdate(DocumentEvent e) {
updateField(fontSizeInput,e);
}
@Override
public void removeUpdate(DocumentEvent e) {
updateField(fontSizeInput,e);
}
@Override
public void changedUpdate(DocumentEvent e) {
}
});
//addComponent(1,5,3,1,new JLabel("Font Color"));
g.anchor=GridBagConstraints.EAST;
addComponent(2,7,1,1,new JLabel("Width"));
g.anchor=GridBagConstraints.WEST; g.anchor=GridBagConstraints.WEST;
widthInput = (JTextField)addComponent(3,7,1,1,new JTextField() { widthInput = (JTextField)addComponent(3,7,1,1,new JTextField() {
@Override @Override
@ -108,6 +176,36 @@ public class DisplayManager extends JPanel implements MouseListener,ListSelectio
return new Dimension(50,20); return new Dimension(50,20);
} }
}); });
if (MyRobot.p.configData.containsKey("LAST_WIDTH")) {
widthInput.setText(MyRobot.p.configData.get("LAST_WIDTH"));
}
widthInput.getDocument().addDocumentListener(new DocumentListener() {
void updateField(JTextField c, DocumentEvent e) {
try {
selectedDisplay.width=Integer.parseInt(e.getDocument().getText(0, e.getDocument().getLength()));
MyRobot.p.repaint();
c.setBackground(Color.WHITE);
} catch (NullPointerException | NumberFormatException | BadLocationException e1) {
c.setBackground(Color.RED);
}
}
@Override
public void insertUpdate(DocumentEvent e) {
updateField(widthInput,e);
}
@Override
public void removeUpdate(DocumentEvent e) {
updateField(widthInput,e);
}
@Override
public void changedUpdate(DocumentEvent e) {
}
});
g.anchor=GridBagConstraints.EAST; g.anchor=GridBagConstraints.EAST;
addComponent(4,7,2,1,new JLabel("Height")); addComponent(4,7,2,1,new JLabel("Height"));
g.anchor=GridBagConstraints.WEST; g.anchor=GridBagConstraints.WEST;
@ -117,6 +215,36 @@ public class DisplayManager extends JPanel implements MouseListener,ListSelectio
return new Dimension(50,20); return new Dimension(50,20);
} }
}); });
if (MyRobot.p.configData.containsKey("LAST_HEIGHT")) {
heightInput.setText(MyRobot.p.configData.get("LAST_HEIGHT"));
}
heightInput.getDocument().addDocumentListener(new DocumentListener() {
void updateField(JTextField c, DocumentEvent e) {
try {
selectedDisplay.height=Integer.parseInt(e.getDocument().getText(0, e.getDocument().getLength()));
MyRobot.p.repaint();
c.setBackground(Color.WHITE);
} catch (NullPointerException | NumberFormatException | BadLocationException e1) {
c.setBackground(Color.RED);
}
}
@Override
public void insertUpdate(DocumentEvent e) {
updateField(heightInput,e);
}
@Override
public void removeUpdate(DocumentEvent e) {
updateField(heightInput,e);
}
@Override
public void changedUpdate(DocumentEvent e) {
}
});
g.anchor=GridBagConstraints.WEST; g.anchor=GridBagConstraints.WEST;
addComponent(1,10,6,1,new JLabel(" ")); addComponent(1,10,6,1,new JLabel(" "));
g.anchor=GridBagConstraints.WEST; g.anchor=GridBagConstraints.WEST;
@ -126,6 +254,36 @@ public class DisplayManager extends JPanel implements MouseListener,ListSelectio
return new Dimension(50,20); return new Dimension(50,20);
} }
}); });
delayInput.getDocument().addDocumentListener(new DocumentListener() {
void updateField(JTextField c, DocumentEvent e) {
try {
selectedDisplay.delay=Integer.parseInt(e.getDocument().getText(0, e.getDocument().getLength()));
MyRobot.p.repaint();
c.setBackground(Color.WHITE);
} catch (NullPointerException | NumberFormatException | BadLocationException e1) {
c.setBackground(Color.RED);
}
}
@Override
public void insertUpdate(DocumentEvent e) {
updateField(delayInput,e);
}
@Override
public void removeUpdate(DocumentEvent e) {
updateField(delayInput,e);
}
@Override
public void changedUpdate(DocumentEvent e) {
}
});
if (MyRobot.p.configData.containsKey("LAST_DELAY")) {
delayInput.setText(MyRobot.p.configData.get("LAST_DELAY"));
}
g.anchor=GridBagConstraints.WEST; g.anchor=GridBagConstraints.WEST;
addComponent(6,10,1,1,new JLabel("ms")); addComponent(6,10,1,1,new JLabel("ms"));
@ -170,12 +328,13 @@ public class DisplayManager extends JPanel implements MouseListener,ListSelectio
addComponent(7,12,2,1,new JLabel("Active Labels:")); addComponent(7,12,2,1,new JLabel("Active Labels:"));
widthInput.setText("200"); widthInput.setText("200");
heightInput.setText("200"); heightInput.setText("48");
fontSizeInput.setText("32");
delayInput.setText("10000"); delayInput.setText("10000");
f.add(this); f.add(this);
f.pack(); f.pack();
f.setResizable(false); f.setResizable(false);
//f.setVisible(true); f.setVisible(false);
} }
private Component addComponent(int x, int y, int w, int h,Component component) { private Component addComponent(int x, int y, int w, int h,Component component) {
g.gridx=x; g.gridx=x;
@ -185,6 +344,46 @@ public class DisplayManager extends JPanel implements MouseListener,ListSelectio
this.add(component,g); this.add(component,g);
return component; return component;
} }
public static void setupSettings(Display d) {
selectedDisplay=d;
colorButton.setBackground(d.backgroundCol);
MyRobot.p.configData.put("LAST_BACKGROUND",Integer.toString(d.backgroundCol.getRGB()));
colorButton2.setBackground(d.textCol);
MyRobot.p.configData.put("LAST_TEXT",Integer.toString(d.textCol.getRGB()));
for (int i=0;i<fonts.getItemCount();i++) {
if (d.font.getFontName().equals(((Font)(fonts.getItemAt(i))).getFontName())) {
fonts.setSelectedItem(fonts.getItemAt(i));
break;
}
}
MyRobot.p.configData.put("LAST_FONT",d.font.getFontName());
widthInput.setText(Integer.toString(d.width));
MyRobot.p.configData.put("LAST_WIDTH",Integer.toString(d.width));
heightInput.setText(Integer.toString(d.height));
MyRobot.p.configData.put("LAST_HEIGHT",Integer.toString(d.height));
delayInput.setText(Integer.toString(d.delay));
MyRobot.p.configData.put("LAST_DELAY",Integer.toString(d.delay));
fontSizeInput.setText(Integer.toString(d.fontSize));
MyRobot.p.configData.put("LAST_FONTSIZE",Integer.toString(d.fontSize));
model.clear();
model2.clear();
for (int i=0;i<d.labels.length;i++) {
if (!d.labels[i].equalsIgnoreCase("Add a label!")) {
model2.add(i, d.labels[i]);
}
}
first:
for (int j=0;j<AVAILABLELABELS.length;j++) {
String labelCheck = AVAILABLELABELS[j];
for (int i=0;i<d.labels.length;i++) {
if (labelCheck.equalsIgnoreCase(d.labels[i])) {
continue first;
}
}
model.add(model.getSize(),labelCheck);
}
f.setVisible(true);
}
class FontRenderer extends JLabel class FontRenderer extends JLabel
implements ListCellRenderer { implements ListCellRenderer {
@ -215,7 +414,8 @@ public class DisplayManager extends JPanel implements MouseListener,ListSelectio
class ColorButton extends JButton{ class ColorButton extends JButton{
protected Color col = Color.BLUE; protected Color col = Color.BLUE;
public ColorButton(String string) { String type = "background";
public ColorButton(String string,final String type) {
super(string); super(string);
this.setColor(col); this.setColor(col);
this.addActionListener(new ActionListener(){ this.addActionListener(new ActionListener(){
@ -224,6 +424,16 @@ public class DisplayManager extends JPanel implements MouseListener,ListSelectio
Color c = MyRobot.CP.getColor(col); Color c = MyRobot.CP.getColor(col);
if (c!=null) { if (c!=null) {
((ColorButton)(e.getSource())).setColor(c); ((ColorButton)(e.getSource())).setColor(c);
switch (type) {
case "background":{
selectedDisplay.backgroundCol=c;
MyRobot.p.repaint();
}break;
case "foreground":{
selectedDisplay.textCol=c;
MyRobot.p.repaint();
}break;
}
} }
} }
}); });
@ -272,7 +482,12 @@ public class DisplayManager extends JPanel implements MouseListener,ListSelectio
} }
@Override @Override
public void valueChanged(ListSelectionEvent e) { public void valueChanged(ListSelectionEvent e) {
// TODO Auto-generated method stub }
@Override
public void itemStateChanged(ItemEvent e) {
if (selectedDisplay!=null) {
selectedDisplay.font=new Font(((Font)fonts.getSelectedItem()).getFontName(),Font.PLAIN,selectedDisplay.fontSize);
MyRobot.p.repaint();
}
} }
} }

@ -18,6 +18,7 @@ import java.awt.event.KeyEvent;
import java.awt.event.KeyListener; import java.awt.event.KeyListener;
import java.awt.event.MouseEvent; import java.awt.event.MouseEvent;
import java.awt.event.MouseListener; import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.event.WindowEvent; import java.awt.event.WindowEvent;
import java.awt.event.WindowListener; import java.awt.event.WindowListener;
import java.awt.font.TextAttribute; import java.awt.font.TextAttribute;
@ -28,12 +29,15 @@ import java.io.IOException;
import java.net.URLEncoder; import java.net.URLEncoder;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.text.AttributedString; import java.text.AttributedString;
import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List;
import java.util.Locale; import java.util.Locale;
import java.util.Timer; import java.util.Timer;
import java.util.TimerTask; import java.util.TimerTask;
import javax.imageio.ImageIO; import javax.imageio.ImageIO;
import javax.swing.JOptionPane;
import javax.swing.JPanel; import javax.swing.JPanel;
import org.json.JSONArray; import org.json.JSONArray;
@ -45,7 +49,7 @@ import sig.utils.FileUtils;
import sig.utils.ImageUtils; import sig.utils.ImageUtils;
import sig.utils.TextUtils; import sig.utils.TextUtils;
public class DrawCanvas extends JPanel implements KeyListener,ComponentListener,WindowListener,MouseListener{ public class DrawCanvas extends JPanel implements KeyListener,ComponentListener,WindowListener,MouseListener,MouseMotionListener{
String difficulty; String difficulty;
String panelText; String panelText;
//Font programFont = new Font("Alata Regular", Font.PLAIN, 32); //Font programFont = new Font("Alata Regular", Font.PLAIN, 32);
@ -76,6 +80,9 @@ public class DrawCanvas extends JPanel implements KeyListener,ComponentListener,
boolean targetBuffer=false; boolean targetBuffer=false;
static Color background = new Color(170,170,170); static Color background = new Color(170,170,170);
public static HashMap<String,String> configData = new HashMap<String,String>(); public static HashMap<String,String> configData = new HashMap<String,String>();
List<Display> displays = new ArrayList<Display>();
public static Display selectedDisplay = null;
public static Display draggedDisplay = null;
DrawCanvas() throws FontFormatException, IOException { DrawCanvas() throws FontFormatException, IOException {
loadConfig(); loadConfig();
addConfigButton = ImageIO.read(new File("addDisplay.png")); addConfigButton = ImageIO.read(new File("addDisplay.png"));
@ -209,41 +216,9 @@ public class DrawCanvas extends JPanel implements KeyListener,ComponentListener,
g2.drawImage(addConfigButton,getWidth()-addConfigButton.getWidth()+1,0,this); g2.drawImage(addConfigButton,getWidth()-addConfigButton.getWidth()+1,0,this);
g2.drawImage(backgroundColorButton,getWidth()-backgroundColorButton.getWidth()+1,backgroundColorButton.getHeight()+1,this); g2.drawImage(backgroundColorButton,getWidth()-backgroundColorButton.getWidth()+1,backgroundColorButton.getHeight()+1,this);
for (int i=0;i<displays.size();i++) {
// String songDisplay = ((romanizedname.length()>0)?romanizedname:englishname) + " - " + artist; displays.get(i).draw(g);
// Rectangle2D bounds = TextUtils.calculateStringBoundsFont(songDisplay, programFont); }
// if (bounds.getWidth()>675) {
// DrawUtils.drawOutlineText(g2, programFontSmall, 8, 42, 1, Color.WHITE, new Color(0,0,0,64), songDisplay);
// } else {
// DrawUtils.drawOutlineText(g2, programFont, 8, 42, 1, Color.WHITE, new Color(0,0,0,64), songDisplay);
// }
//
// if ((bestPlayTime>System.currentTimeMillis()-10000)) {
// DrawUtils.drawOutlineText(g2, programFont, 8, 935+42, 1, new Color(220,220,255,(int)Math.min(((System.currentTimeMillis()-bestPlayTime))/5,255)), new Color(0,0,0,64),"New Record!");
// } else {
// DrawUtils.drawOutlineText(g2, programFontSmall, 8, 935+42, 1, Color.WHITE, new Color(0,0,0,64),((bestPlay!=null)?bestPlay.display():""));
// }
// if ((ratingTime>System.currentTimeMillis()-10000)) {
// DrawUtils.drawOutlineText(g2, programFontSmall, 484+8, 935+42, 1, new Color(220,220,255,(int)Math.min(((System.currentTimeMillis()-ratingTime))/5,255)), new Color(0,0,0,64),"Rating up! "+lastRating+" -> "+overallrating);
// } else {
// DrawUtils.drawOutlineText(g2, programFont, 484+8, 935+42, 1, Color.WHITE, new Color(0,0,0,64),Integer.toString(overallrating));
// }
// if (displayTimer%3==0) {
// DrawUtils.drawOutlineText(g2, programFont, 968+8, 935+42, 1, Color.WHITE, new Color(0,0,0,64),difficultyRating + " - " + fullNameDifficulty());
// } else
// if (displayTimer%3==1) {
// if (plays>0) {
// DrawUtils.drawOutlineText(g2, programFontSmall, 968+8, 935+42, 1, Color.WHITE, new Color(0,0,0,64),""+(passes)+"/"+(plays)+" play"+((plays!=1)?"s":"")+" "+"("+((int)(Math.floor(((float)passes)/plays*100)))+"% pass rate)");
// } else {
// DrawUtils.drawOutlineText(g2, programFont, 968+8, 935+42, 1, Color.WHITE, new Color(0,0,0,64),"No plays");
// }
// } else {
// if (fcCount>0) {
// DrawUtils.drawOutlineText(g2, programFont, 968+8, 935+42, 1, Color.WHITE, new Color(0,0,0,64),fcCount +" FC"+(fcCount==1?"":"s")+" "+((int)(Math.floor(((float)fcCount)/plays*100)))+"% FC rate");
// } else {
// DrawUtils.drawOutlineText(g2, programFont, 968+8, 935+42, 1, Color.WHITE, new Color(0,0,0,64),difficultyRating + " - " + fullNameDifficulty());
// }
// }
} }
private String fullNameDifficulty() { private String fullNameDifficulty() {
@ -275,6 +250,20 @@ public class DrawCanvas extends JPanel implements KeyListener,ComponentListener,
@Override @Override
public void keyPressed(KeyEvent e) { public void keyPressed(KeyEvent e) {
if (selectedDisplay!=null && e.getKeyCode()==KeyEvent.VK_DELETE) {
DeleteDisplay();
}
}
private void DeleteDisplay() {
if (selectedDisplay!=null) {
int dialogResult = JOptionPane.showConfirmDialog (null, "Are you sure you would like to delete this display box?","Warning",JOptionPane.YES_NO_OPTION);
if(dialogResult == JOptionPane.YES_OPTION){
selectedDisplay.deleted=true;
selectedDisplay=(displays.remove(selectedDisplay))?null:selectedDisplay;
repaint();
}
}
} }
@Override @Override
@ -354,34 +343,83 @@ public class DrawCanvas extends JPanel implements KeyListener,ComponentListener,
@Override @Override
public void mousePressed(MouseEvent e) { public void mousePressed(MouseEvent e) {
Point cursor = e.getPoint(); Point cursor = GetCursorPosition(e);
cursor.translate(-MyRobot.FRAME.getInsets().left,-MyRobot.FRAME.getInsets().top); switch (e.getButton()) {
System.out.println(cursor+"/"+addConfigButton.getHeight()); case MouseEvent.BUTTON3:{
if (cursor.x>=getWidth()-addConfigButton.getWidth()&& selectedDisplay=null;
for (int i=0;i<displays.size();i++) {
Display d = displays.get(i);
if (cursor.x>=d.x&&
cursor.x<=d.x+d.width&&
cursor.y>=d.y&&
cursor.y<=d.y+d.height) {
selectedDisplay=d;
break;
}
}
DeleteDisplay();
}break;
case MouseEvent.BUTTON1:{
//System.out.println(cursor+"/"+addConfigButton.getHeight());
if (cursor.x>=getWidth()-addConfigButton.getWidth()&&
cursor.x<=getWidth()&&
cursor.y>=0&&
cursor.y<=addConfigButton.getHeight()) {
Display d = new Display();
displays.add(d);
selectedDisplay=d;
DisplayManager.setupSettings(selectedDisplay);
return;
} else
if (cursor.x>=getWidth()-addConfigButton.getWidth()&&
cursor.x<=getWidth()&& cursor.x<=getWidth()&&
cursor.y>=0&& cursor.y>=addConfigButton.getHeight()+1&&
cursor.y<=addConfigButton.getHeight()) { cursor.y<=addConfigButton.getHeight()+1+addConfigButton.getHeight()) {
MyRobot.FRAME.setCursor(new Cursor(Cursor.HAND_CURSOR)); Color c = MyRobot.CP.getBackgroundColor();
} else if (c!=null) {
if (cursor.x>=getWidth()-addConfigButton.getWidth()&& configData.put("BACKGROUND",Integer.toString(c.getRGB()));
cursor.x<=getWidth()&& applyConfig();
cursor.y>=addConfigButton.getHeight()+1&& }
cursor.y<=addConfigButton.getHeight()+1+addConfigButton.getHeight()) { return;
Color c = MyRobot.CP.getBackgroundColor(); }
if (c!=null) {
configData.put("BACKGROUND",Integer.toString(c.getRGB())); Display previousDisplay = selectedDisplay;
applyConfig(); selectedDisplay=null;
} for (int i=0;i<displays.size();i++) {
} else Display d = displays.get(i);
{ if (cursor.x>=d.x&&
MyRobot.FRAME.setCursor(Cursor.getDefaultCursor()); cursor.x<=d.x+d.width&&
cursor.y>=d.y&&
cursor.y<=d.y+d.height) {
selectedDisplay=d;
break;
}
}
if (selectedDisplay==null) {
MyRobot.FRAME.setCursor(Cursor.getDefaultCursor());
DisplayManager.f.setVisible(false);
} else {
MyRobot.FRAME.setCursor(new Cursor(Cursor.MOVE_CURSOR));
draggedDisplay=selectedDisplay;
if (selectedDisplay.equals(previousDisplay)) {
//System.out.println("Double click");
DisplayManager.setupSettings(selectedDisplay);
}
}
}break;
} }
} }
private Point GetCursorPosition(MouseEvent e) {
Point cursor = e.getPoint();
cursor.translate(-MyRobot.FRAME.getInsets().left,-MyRobot.FRAME.getInsets().top);
return cursor;
}
@Override @Override
public void mouseReleased(MouseEvent e) { public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub draggedDisplay=null;
} }
@Override @Override
@ -395,4 +433,20 @@ public class DrawCanvas extends JPanel implements KeyListener,ComponentListener,
// TODO Auto-generated method stub // TODO Auto-generated method stub
} }
@Override
public void mouseDragged(MouseEvent e) {
if (draggedDisplay!=null) {
Point cursor = GetCursorPosition(e);
draggedDisplay.x=(int)(Math.floor((cursor.x-draggedDisplay.width/2)/8)*8);
draggedDisplay.y=(int)(Math.floor((cursor.y-draggedDisplay.height/2)/8)*8);
MyRobot.p.repaint();
}
}
@Override
public void mouseMoved(MouseEvent e) {
// TODO Auto-generated method stub
}
} }

@ -104,7 +104,13 @@ public class ListTransferHandler extends TransferHandler {
} }
} }
} }
System.out.println("Selected indexes: "+Arrays.toString(indices)); String[] labels = new String[listModel.getSize()];
for (int i=0;i<listModel.getSize();i++) {
labels[i]=(String)listModel.get(i);
}
DisplayManager.selectedDisplay.labels=labels;
MyRobot.p.repaint();
//System.out.println("Selected indexes: "+Arrays.toString(indices));
for (int i=0;i<indices.length;i++) { for (int i=0;i<indices.length;i++) {
if (addIndex<indices[i]) { if (addIndex<indices[i]) {
listModel.add(addIndex, listModel.get(indices[i])); listModel.add(addIndex, listModel.get(indices[i]));

@ -602,6 +602,8 @@ public class MyRobot{
FRAME.addComponentListener(p); FRAME.addComponentListener(p);
FRAME.addWindowListener(p); FRAME.addWindowListener(p);
FRAME.addMouseListener(p); FRAME.addMouseListener(p);
FRAME.addMouseMotionListener(p);
FRAME.addKeyListener(p);
if (DrawCanvas.configData.containsKey("WIDTH")&&DrawCanvas.configData.containsKey("HEIGHT")) { if (DrawCanvas.configData.containsKey("WIDTH")&&DrawCanvas.configData.containsKey("HEIGHT")) {
try { try {
FRAME.setSize( FRAME.setSize(

Loading…
Cancel
Save