From d34fd9341c61d13677e029cb187d4dacff5e44ea Mon Sep 17 00:00:00 2001 From: Normand Briere <nbriere@noware.ca> Date: Fri, 26 Oct 2018 20:31:01 -0400 Subject: [PATCH] Much better AO. --- timeflow/app/ui/LinkTabPane.java | 414 +++++++++++++++++++++++++++++++--------------------------- 1 files changed, 219 insertions(+), 195 deletions(-) diff --git a/timeflow/app/ui/LinkTabPane.java b/timeflow/app/ui/LinkTabPane.java index 1f4ee01..911461c 100755 --- a/timeflow/app/ui/LinkTabPane.java +++ b/timeflow/app/ui/LinkTabPane.java @@ -8,201 +8,225 @@ import java.util.*; // custom JTabbedPane-like thing. -public class LinkTabPane extends JPanel { - - ArrayList<String> tabNames=new ArrayList<String>(); - HashMap<String, JComponent> tabMap=new HashMap<String, JComponent>(); - String currentName; - CardLayout cards=new CardLayout(); - JPanel center=new JPanel(); - LinkTop top=new LinkTop(); - - public LinkTabPane() - { - setBackground(Color.white); - setLayout(new BorderLayout()); - add(top, BorderLayout.NORTH); - add(center, BorderLayout.CENTER); - center.setLayout(cards); - top.addMouseListener(new MouseAdapter() { - @Override - public void mousePressed(MouseEvent e) { - String s=top.getName(e.getX()); - if (s!=null) - { - String old=currentName; - setCurrentName(s); - firePropertyChange("tab", old, s); - } - }}); - } - - public String getTitleAt(int i) - { - return tabNames.get(i); - } - - public void setSelectedIndex(int i) - { - setCurrentName(getTitleAt(i)); - } - - public void addTab(JComponent component, String name, boolean left) - { - tabNames.add(name); - tabMap.put(name, component); - center.add(component, name); - top.addName(name, left); - repaint(); - if (currentName==null) - currentName=name; - } - - public String getCurrentName() - { - return currentName; - } - - public void setCurrentName(final String currentName) - { - this.currentName=currentName; - top.repaint(); - SwingUtilities.invokeLater(new Runnable() {public void run() {cards.show(center, currentName);}}); +public class LinkTabPane extends JPanel +{ - } - - class LinkTop extends JPanel - { - int left, right; - ArrayList<HotLink> leftHots=new ArrayList<HotLink>(); - ArrayList<HotLink> rightHots=new ArrayList<HotLink>(); - Font font=new Font("Verdana", Font.PLAIN, 14); - FontMetrics fm=getFontMetrics(font); - - LinkTop() - { - setLayout(new FlowLayout(FlowLayout.LEFT)); - setBackground(new Color(220,220,220)); - } - - public void paintComponent(Graphics g1) - { - int w=getSize().width, h=getSize().height; - Graphics2D g=(Graphics2D)g1; - g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); - g.setColor(getBackground()); - g.fillRect(0,0,w,h); - g.setColor(Color.gray); - for (int i=0; i<2; i++) - { - g.drawLine(0,i,w,i); - g.drawLine(0,h-1-i,w,h-1-i); - } - - for (HotLink hot: leftHots) - { - draw(g, hot, h, 0); - } - - for (HotLink hot: rightHots) - { - draw(g, hot, h, w); - } - - for (int i=0; i<leftHots.size(); i++) - { - - if (i<leftHots.size()-1) - { - HotLink hot=leftHots.get(i); - for (int j=0; j<1; j++) - g.drawLine(hot.x+hot.width-1-j, 7, hot.x+hot.width-1-j, h-7); - } - } - - for (int i=0; i<rightHots.size(); i++) - { - - if (i<rightHots.size()-1) - { - HotLink hot=rightHots.get(i); - for (int j=0; j<1; j++) - g.drawLine(hot.x+w-1-j, 7, hot.x+w-1-j, h-7); - } - } - } - - void draw(Graphics g, HotLink hot, int h, int dx) - { - int x=hot.x+dx; - if (hot.s.equals(currentName)) - { - g.setColor(Color.lightGray); - g.fillRect(x,2,hot.width,h-4); - g.setColor(Color.gray); - g.drawLine(x-1, 0, x-1, h); - g.drawLine(x+hot.width-1, 0, x+hot.width-1, h); - } - g.setColor(Color.darkGray); - g.setFont(font); - int sw=fm.stringWidth(hot.s); - g.drawString(hot.s, x+(hot.width-sw)/2, h-10); - - } - - String getName(int x) - { - for (HotLink h: leftHots) - { - if (h.x<=x && h.x+h.width>x) - return h.s; - } - for (HotLink h: rightHots) - { - int w=getSize().width; - if (h.x+w<=x && h.x+h.width+w>x) - return h.s; - } + ArrayList<String> tabNames = new ArrayList<String>(); + HashMap<String, JComponent> tabMap = new HashMap<String, JComponent>(); + String currentName; + CardLayout cards = new CardLayout(); + JPanel center = new JPanel(); + LinkTop top = new LinkTop(); - if (leftHots.size()>0) - return leftHots.get(leftHots.size()-1).s; - if (rightHots.size()>0) - return rightHots.get(0).s; - return null; - } - - void addName(String name, boolean leftward) - { - if (leftward) - { - int x=right; - int w=fm.stringWidth(name)+24; - leftHots.add(new HotLink(name, x, 0, w, 30)); - right+=w; - } - else - { - int x=left; - int w=fm.stringWidth(name)+24; - rightHots.add(new HotLink(name, x-w, 0, w, 30)); - left-=w; - } - } - - class HotLink extends Rectangle - { - String s; - HotLink(String s, int x, int y, int w, int h) - { - super(x,y,w,h); - this.s=s; - } - } - - public Dimension getPreferredSize() - { - return new Dimension(30,30); - } - } - + public LinkTabPane() + { + setBackground(Color.white); + setLayout(new BorderLayout()); + add(top, BorderLayout.NORTH); + add(center, BorderLayout.CENTER); + center.setLayout(cards); + top.addMouseListener(new MouseAdapter() + { + + @Override + public void mousePressed(MouseEvent e) + { + String s = top.getName(e.getX()); + if (s != null) + { + String old = currentName; + setCurrentName(s); + firePropertyChange("tab", old, s); + } + } + }); + } + + public String getTitleAt(int i) + { + return tabNames.get(i); + } + + public void setSelectedIndex(int i) + { + setCurrentName(getTitleAt(i)); + } + + public void addTab(JComponent component, String name, boolean left) + { + tabNames.add(name); + tabMap.put(name, component); + center.add(component, name); + top.addName(name, left); + repaint(); + if (currentName == null) + { + currentName = name; + } + } + + public String getCurrentName() + { + return currentName; + } + + public void setCurrentName(final String currentName) + { + this.currentName = currentName; + top.repaint(); + SwingUtilities.invokeLater(new Runnable() + { + public void run() + { + cards.show(center, currentName); + } + }); + + } + + class LinkTop extends JPanel + { + int left, right; + ArrayList<HotLink> leftHots = new ArrayList<HotLink>(); + ArrayList<HotLink> rightHots = new ArrayList<HotLink>(); + Font font = new Font("Verdana", Font.PLAIN, 14); + FontMetrics fm = getFontMetrics(font); + + LinkTop() + { + setLayout(new FlowLayout(FlowLayout.LEFT)); + setBackground(new Color(220, 220, 220)); + } + + public void paintComponent(Graphics g1) + { + int w = getSize().width, h = getSize().height; + Graphics2D g = (Graphics2D) g1; + g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); + g.setColor(getBackground()); + g.fillRect(0, 0, w, h); + g.setColor(Color.gray); + for (int i = 0; i < 2; i++) + { + g.drawLine(0, i, w, i); + g.drawLine(0, h - 1 - i, w, h - 1 - i); + } + + for (HotLink hot : leftHots) + { + draw(g, hot, h, 0); + } + + for (HotLink hot : rightHots) + { + draw(g, hot, h, w); + } + + for (int i = 0; i < leftHots.size(); i++) + { + + if (i < leftHots.size() - 1) + { + HotLink hot = leftHots.get(i); + for (int j = 0; j < 1; j++) + { + g.drawLine(hot.x + hot.width - 1 - j, 7, hot.x + hot.width - 1 - j, h - 7); + } + } + } + + for (int i = 0; i < rightHots.size(); i++) + { + + if (i < rightHots.size() - 1) + { + HotLink hot = rightHots.get(i); + for (int j = 0; j < 1; j++) + { + g.drawLine(hot.x + w - 1 - j, 7, hot.x + w - 1 - j, h - 7); + } + } + } + } + + void draw(Graphics g, HotLink hot, int h, int dx) + { + int x = hot.x + dx; + if (hot.s.equals(currentName)) + { + g.setColor(Color.lightGray); + g.fillRect(x, 2, hot.width, h - 4); + g.setColor(Color.gray); + g.drawLine(x - 1, 0, x - 1, h); + g.drawLine(x + hot.width - 1, 0, x + hot.width - 1, h); + } + g.setColor(Color.darkGray); + g.setFont(font); + int sw = fm.stringWidth(hot.s); + g.drawString(hot.s, x + (hot.width - sw) / 2, h - 10); + + } + + String getName(int x) + { + for (HotLink h : leftHots) + { + if (h.x <= x && h.x + h.width > x) + { + return h.s; + } + } + for (HotLink h : rightHots) + { + int w = getSize().width; + if (h.x + w <= x && h.x + h.width + w > x) + { + return h.s; + } + } + + if (leftHots.size() > 0) + { + return leftHots.get(leftHots.size() - 1).s; + } + if (rightHots.size() > 0) + { + return rightHots.get(0).s; + } + return null; + } + + void addName(String name, boolean leftward) + { + if (leftward) + { + int x = right; + int w = fm.stringWidth(name) + 24; + leftHots.add(new HotLink(name, x, 0, w, 30)); + right += w; + } else + { + int x = left; + int w = fm.stringWidth(name) + 24; + rightHots.add(new HotLink(name, x - w, 0, w, 30)); + left -= w; + } + } + + class HotLink extends Rectangle + { + String s; + + HotLink(String s, int x, int y, int w, int h) + { + super(x, y, w, h); + this.s = s; + } + } + + public Dimension getPreferredSize() + { + return new Dimension(30, 30); + } + } } -- Gitblit v1.6.2