280 lines
7.3 KiB
Java
280 lines
7.3 KiB
Java
|
/*
|
||
|
* To change this template, choose Tools | Templates
|
||
|
* and open the template in the editor.
|
||
|
*/
|
||
|
package eric.GUI.window;
|
||
|
|
||
|
import eric.GUI.pipe_tools;
|
||
|
import eric.GUI.windowComponent;
|
||
|
import eric.GUI.themes;
|
||
|
import eric.JZirkelCanvas;
|
||
|
import java.awt.Dimension;
|
||
|
import java.awt.Event;
|
||
|
import java.awt.Graphics;
|
||
|
import java.awt.Graphics2D;
|
||
|
import java.awt.Image;
|
||
|
import java.awt.Point;
|
||
|
import java.awt.event.MouseEvent;
|
||
|
import javax.swing.JPopupMenu;
|
||
|
import javax.swing.SwingUtilities;
|
||
|
import javax.swing.event.PopupMenuEvent;
|
||
|
import javax.swing.event.PopupMenuListener;
|
||
|
|
||
|
/**
|
||
|
*
|
||
|
* @author erichake
|
||
|
*/
|
||
|
public class tab_btn extends windowComponent implements Comparable<tab_btn>, PopupMenuListener {
|
||
|
|
||
|
private tab_canvas_panel panel;
|
||
|
private Point origin;
|
||
|
private Point current;
|
||
|
private Point btnloc;
|
||
|
private boolean active=true;
|
||
|
private boolean over=false;
|
||
|
private tab_close_btn CloseBtn;
|
||
|
private tab_btn_label Label;
|
||
|
private String Tooltip="";
|
||
|
private static Image on_btn_right=themes.getImage("tab_btn_on_right_border.gif");
|
||
|
private static Image on_btn_left=themes.getImage("tab_btn_on_left_border.gif");
|
||
|
private static Image on_btn=themes.getImage("tab_btn_on.gif");
|
||
|
private static Image off_btn_right=themes.getImage("tab_btn_off_right_border.gif");
|
||
|
private static Image off_btn_left=themes.getImage("tab_btn_off_left_border.gif");
|
||
|
private static Image off_btn=themes.getImage("tab_btn_off.gif");
|
||
|
private static Image off_over_btn_right=themes.getImage("tab_btn_off_over_right_border.gif");
|
||
|
private static Image off_over_btn_left=themes.getImage("tab_btn_off_over_left_border.gif");
|
||
|
private static Image off_over_btn=themes.getImage("tab_btn_off_over.gif");
|
||
|
private static Image file_icon=themes.getImage("tab_file_icon.png");
|
||
|
private boolean Changed=false;
|
||
|
|
||
|
public void paintComponent(Graphics g) {
|
||
|
|
||
|
Dimension d=getSize();
|
||
|
final Graphics2D g2=windowComponent.getGraphics2D(g);
|
||
|
|
||
|
|
||
|
|
||
|
g2.drawImage(getBackgroundImage(), 0, 0, d.width, d.height,
|
||
|
this);
|
||
|
g2.drawImage(getLeftBorder(), 0, 0, themes.getTabCornerWidth(), d.height,
|
||
|
this);
|
||
|
g2.drawImage(getRightBorder(), d.width-themes.getTabCornerWidth(), 0, themes.getTabCornerWidth(), d.height,
|
||
|
this);
|
||
|
|
||
|
if (!JZirkelCanvas.isWorkBook()) {
|
||
|
g2.drawImage(file_icon, 4, 2, this);
|
||
|
}
|
||
|
// g2.setColor(Color.darkGray);
|
||
|
// g2.drawLine(0, d.height-1, d.width-1, d.height-1);
|
||
|
// g2.drawLine(d.width-1, d.height-1, d.width-1, 0);
|
||
|
// if (!active) {
|
||
|
// g2.drawLine(d.width-1, 0, 0, 0);
|
||
|
// }
|
||
|
|
||
|
}
|
||
|
|
||
|
public tab_btn(String label, String tooltip) {
|
||
|
super();
|
||
|
label=pipe_tools.processTabName(label);
|
||
|
Label=new tab_btn_label(label);
|
||
|
Tooltip=tooltip;
|
||
|
setLayout(null);
|
||
|
CloseBtn=new tab_close_btn();
|
||
|
panel=new tab_canvas_panel(this);
|
||
|
add(CloseBtn);
|
||
|
add(Label);
|
||
|
// setToolTipText(tooltip);
|
||
|
setOpaque(true);
|
||
|
}
|
||
|
|
||
|
public tab_btn(String label) {
|
||
|
this(label, label);
|
||
|
}
|
||
|
|
||
|
public void setChanged(boolean b) {
|
||
|
Changed=b;
|
||
|
Label.setChanged(b);
|
||
|
repaint();
|
||
|
}
|
||
|
|
||
|
public void setActive(boolean act) {
|
||
|
active=act;
|
||
|
if (active) {
|
||
|
ContentPane.setCurrentPanel(panel);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public boolean getActive() {
|
||
|
return active;
|
||
|
}
|
||
|
|
||
|
public void setOver(boolean ov) {
|
||
|
over=ov;
|
||
|
}
|
||
|
|
||
|
public tab_close_btn getTabCloseBtn() {
|
||
|
return CloseBtn;
|
||
|
}
|
||
|
|
||
|
public tab_btn_label getTabLabel() {
|
||
|
return Label;
|
||
|
}
|
||
|
|
||
|
public tab_canvas_panel getPanel() {
|
||
|
return panel;
|
||
|
}
|
||
|
|
||
|
public void setTabName(String name, String tooltip) {
|
||
|
name=pipe_tools.processTabName(name);
|
||
|
Label.setLabelText(name);
|
||
|
setToolTip(tooltip);
|
||
|
}
|
||
|
|
||
|
public void setToolTip(String tooltip){
|
||
|
Tooltip = tooltip;
|
||
|
setToolTipText(Tooltip);
|
||
|
}
|
||
|
|
||
|
public String getTabName() {
|
||
|
return Label.getLabelText();
|
||
|
}
|
||
|
|
||
|
public void editName() {
|
||
|
if (pipe_tools.isTabEditAccepted()) {
|
||
|
Label.edit();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public void init() {
|
||
|
setToolTipText(Tooltip);
|
||
|
getTabCloseBtn().init();
|
||
|
getTabLabel().init();
|
||
|
getPanel().init();
|
||
|
}
|
||
|
|
||
|
private Image getRightBorder(){
|
||
|
if (active) {
|
||
|
return tab_btn.on_btn_right;
|
||
|
}
|
||
|
if (over) {
|
||
|
return tab_btn.off_over_btn_right;
|
||
|
}
|
||
|
return tab_btn.off_btn_right;
|
||
|
}
|
||
|
|
||
|
private Image getLeftBorder(){
|
||
|
if (active) {
|
||
|
return tab_btn.on_btn_left;
|
||
|
}
|
||
|
if (over) {
|
||
|
return tab_btn.off_over_btn_left;
|
||
|
}
|
||
|
return tab_btn.off_btn_left;
|
||
|
}
|
||
|
|
||
|
|
||
|
private Image getBackgroundImage() {
|
||
|
if (active) {
|
||
|
return tab_btn.on_btn;
|
||
|
}
|
||
|
if (over) {
|
||
|
return tab_btn.off_over_btn;
|
||
|
}
|
||
|
return tab_btn.off_btn;
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public Point getToolTipLocation(MouseEvent event) {
|
||
|
return new Point(0, getSize().height+2);
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public void mousePressed(MouseEvent e) {
|
||
|
origin=pipe_tools.getWindow().getMouseLoc();
|
||
|
btnloc=getLocation();
|
||
|
tab_main_panel.setActiveBtn(this);
|
||
|
repaint();
|
||
|
// pipe_tools.onTabActivate();
|
||
|
// Right-clic :
|
||
|
if (e.getModifiers()==Event.META_MASK) {
|
||
|
JPopupMenu popup=tab_main_panel.getCtrlPopup();
|
||
|
popup.removePopupMenuListener(this);
|
||
|
popup.addPopupMenuListener(this);
|
||
|
popup.show(this, (getSize().width-popup.getPreferredSize().width)/2, -2-popup.getPreferredSize().height);
|
||
|
repaint();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public void mouseEntered(MouseEvent e) {
|
||
|
|
||
|
tab_main_panel.setOverBtn(this);
|
||
|
repaint();
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public void mouseExited(MouseEvent e) {
|
||
|
// Check whether the mouse cursor is still over the panel
|
||
|
|
||
|
// if (getMousePosition(true)!=null) {
|
||
|
// return;
|
||
|
// }
|
||
|
over=false;
|
||
|
repaint();
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public void mouseReleased(MouseEvent e) {
|
||
|
tab_main_panel.reorderBTNS(null);
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public void mouseDragged(MouseEvent e) {
|
||
|
getParent().setComponentZOrder(this, 0);
|
||
|
current=pipe_tools.getWindow().getMouseLoc();
|
||
|
if (current==null) {
|
||
|
return;
|
||
|
}
|
||
|
setLocation(btnloc.x+current.x-origin.x, btnloc.y);
|
||
|
tab_main_panel.reorderBTNS(this);
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public void mouseMoved(MouseEvent e) {
|
||
|
tab_main_panel.setOverBtn(this);
|
||
|
repaint();
|
||
|
|
||
|
}
|
||
|
|
||
|
public int compareTo(tab_btn o) {
|
||
|
int middle=(2*getBounds().x+getBounds().width)/2;
|
||
|
if ((middle>o.getBounds().x)) {
|
||
|
return 1;
|
||
|
|
||
|
}
|
||
|
if ((middle<o.getBounds().x)) {
|
||
|
return -1;
|
||
|
|
||
|
}
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
public void popupMenuWillBecomeVisible(PopupMenuEvent e) {
|
||
|
removeMouseListener(this);
|
||
|
}
|
||
|
|
||
|
public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {
|
||
|
repaint();
|
||
|
final tab_btn btn=this;
|
||
|
SwingUtilities.invokeLater(new Runnable() {
|
||
|
|
||
|
public void run() {
|
||
|
addMouseListener(btn);
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
|
||
|
public void popupMenuCanceled(PopupMenuEvent e) {
|
||
|
}
|
||
|
}
|