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/views/ListView.java | 499 ++++++++++++++++++++++++++++-------------------------- 1 files changed, 259 insertions(+), 240 deletions(-) diff --git a/timeflow/views/ListView.java b/timeflow/views/ListView.java index ec87f1c..1302bfa 100755 --- a/timeflow/views/ListView.java +++ b/timeflow/views/ListView.java @@ -20,247 +20,266 @@ import java.net.URL; import java.util.*; -public class ListView extends AbstractView { +public class ListView extends AbstractView +{ + private JEditorPane listDisplay; + private JComboBox sortMenu = new JComboBox(); + private ActComparator sort;//=ActComparator.byTime(); + private int maxPerPage = 50; + private int pageStart = 0; + private int lastSize = 0; + private ActList acts; + private Field sortField; + private JLabel pageLabel = new JLabel("Page", JLabel.LEFT); + private JComboBox pageMenu = new JComboBox(); + private boolean changing = false; + private JPanel controls; - private JEditorPane listDisplay; - private JComboBox sortMenu=new JComboBox(); - private ActComparator sort;//=ActComparator.byTime(); - private int maxPerPage=50; - private int pageStart=0; - private int lastSize=0; - private ActList acts; - private Field sortField; - - private JLabel pageLabel=new JLabel("Page", JLabel.LEFT); - private JComboBox pageMenu=new JComboBox(); - private boolean changing=false; - - private JPanel controls; - - public ListView(TFModel model) - { - super(model); - - listDisplay=HtmlDisplay.create(); - listDisplay.addHyperlinkListener(new LinkIt()); - JScrollPane scrollPane = new JScrollPane(listDisplay); - setLayout(new BorderLayout()); - add(scrollPane, BorderLayout.CENTER); - - - controls=new JPanel(); - controls.setLayout(null); - controls.setBackground(Color.white); - - int x=10, y=10; - int ch=25, pad=5, cw=160; - JLabel sortLabel=new JLabel("Sort Order", JLabel.LEFT); - controls.add(sortLabel); - sortLabel.setBounds(x,y,cw,ch); - y+=ch+pad; - - controls.add(sortMenu); - sortMenu.setBounds(x,y,cw,ch); - y+=ch+3*pad; - - controls.add(pageLabel); - pageLabel.setBounds(x,y,cw,ch); - y+=ch+pad; - controls.add(pageMenu); - pageMenu.setBounds(x,y,cw,ch); - - showPageMenu(false); - pageMenu.addActionListener(pageListener); - sortMenu.addActionListener(sortListener); - } - - protected JComponent _getControls() - { - return controls; - } - - ActionListener sortListener=new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - if (changing || sortMenu.getItemCount()<=0) // this means the action was fired after all items removed. - return; - sortField=getModel().getDB().getField((String)sortMenu.getSelectedItem()); - sort=sortField==null ? null : ActComparator.by(sortField); - setToFirstPage(); - makeList(); - }}; - - ActionListener pageListener=new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - if (changing) - return; - pageStart=maxPerPage*pageMenu.getSelectedIndex(); - System.out.println(e.getActionCommand()); - makeList(); - }}; - - @Override - protected void onscreen(boolean majorChange) - { - _note(null); - } - - public void _note(TFEvent e) { - changing=true; - if (e==null || e.affectsSchema() || e.affectsRowSet()) - { - sortMenu.removeActionListener(sortListener); - sortMenu.removeAllItems(); - pageStart=0; - java.util.List<Field> fields=getModel().getDB().getFields(); - Field firstField=null; - if (fields.size()>0) - firstField=fields.get(0); - for (Field f: fields) - { - sortMenu.addItem(f.getName()); - } - sortField=getModel().getDB().getField(VirtualField.START); - if (sortField!=null) - sortMenu.setSelectedItem(sortField.getName()); - else - sortField=firstField; - sortMenu.addActionListener(sortListener); - sort=null; - } - if (e!=null && e.affectsData()) - { - setToFirstPage(); - } - changing=false; - makeList(); - } - - private void setToFirstPage() - { - pageStart=0; - if (pageMenu.isVisible()) - { - pageMenu.removeActionListener(pageListener); - pageMenu.setSelectedIndex(0); - pageMenu.addActionListener(pageListener); - } - } - - void showPageMenu(boolean visible) - { - pageLabel.setVisible(visible); - pageMenu.setVisible(visible); - if (visible) - { - pageMenu.removeActionListener(pageListener); - pageMenu.setSelectedIndex(pageStart/maxPerPage); - pageMenu.addActionListener(pageListener); - } - } - - - void makeList() - { - HtmlFormat html=new HtmlFormat(); - html.setModel(getModel()); - StringBuffer page=new StringBuffer(); - - page.append(html.makeHeader()); - - - ActList as=getModel().getActs(); - if (as==null || as.size()==0 && getModel().getDB().size()==0) - { - page.append("<tr><td><h1><font color=#003399>Empty Database</font></h1></td></tr>"); - showPageMenu(false); - } - else - { - - if (sort==null) - { - Field timeField=getModel().getDB().getField(VirtualField.START); - if (timeField!=null) - sort=ActComparator.by(timeField); - } + public ListView(TFModel model) + { + super(model); - acts=as.copy(); - if (sort!=null) - Collections.sort(acts, sort); - - boolean pages=acts.size()>maxPerPage; - int last=Math.min(acts.size(), pageStart+maxPerPage); - if (pages) - { - int n=acts.size(); - if (lastSize!=n) - { - pageMenu.removeActionListener(pageListener); - pageMenu.removeAllItems(); - for (int i=0; i*maxPerPage<n;i++) - { - pageMenu.addItem("Items "+((i*maxPerPage)+1)+" to "+ - Math.min(n, (i+1)*maxPerPage)); - } - pageMenu.addActionListener(pageListener); - lastSize=n; - } - } - showPageMenu(pages); - - page.append("<tr><td><h1><font color=#003399>"+(pages? (pageStart+1)+"-"+(last) +" of ": "")+acts.size()+" Events</font></h1>"); - page.append("<br><br></td></tr>"); + listDisplay = HtmlDisplay.create(); + listDisplay.addHyperlinkListener(new LinkIt()); + JScrollPane scrollPane = new JScrollPane(listDisplay); + setLayout(new BorderLayout()); + add(scrollPane, BorderLayout.CENTER); - for (int i=pageStart; i<last; i++) - { - Act a=acts.get(i); - page.append(html.makeItem(a,i)); - } - } - page.append(html.makeFooter()); - listDisplay.setText(page.toString()); - listDisplay.setCaretPosition(0); - repaint(); - } - - - - - @Override - public String getName() { - return "List"; - } - - static class ArrayRenderer extends DefaultTableCellRenderer { - public void setValue(Object value) { - setText(Display.arrayToString((Object[])value)); - } - } - - public class LinkIt implements HyperlinkListener - { - public void hyperlinkUpdate(HyperlinkEvent e) - { - if (e.getEventType() != HyperlinkEvent.EventType.ACTIVATED) - return; - - String s=e.getDescription(); - System.out.println(s); - if (s.length()>0) - { - char c=s.charAt(0); - if (c=='e') // code for "edit" - { - int i=Integer.parseInt(s.substring(1)); - EditRecordPanel.edit(getModel(), acts.get(i)); - return; - } - - } - Display.launchBrowser(e.getURL().toString()); - - } - } + + controls = new JPanel(); + controls.setLayout(null); + controls.setBackground(Color.white); + + int x = 10, y = 10; + int ch = 25, pad = 5, cw = 160; + JLabel sortLabel = new JLabel("Sort Order", JLabel.LEFT); + controls.add(sortLabel); + sortLabel.setBounds(x, y, cw, ch); + y += ch + pad; + + controls.add(sortMenu); + sortMenu.setBounds(x, y, cw, ch); + y += ch + 3 * pad; + + controls.add(pageLabel); + pageLabel.setBounds(x, y, cw, ch); + y += ch + pad; + controls.add(pageMenu); + pageMenu.setBounds(x, y, cw, ch); + + showPageMenu(false); + pageMenu.addActionListener(pageListener); + sortMenu.addActionListener(sortListener); + } + + protected JComponent _getControls() + { + return controls; + } + ActionListener sortListener = new ActionListener() + { + + @Override + public void actionPerformed(ActionEvent e) + { + if (changing || sortMenu.getItemCount() <= 0) // this means the action was fired after all items removed. + { + return; + } + sortField = getModel().getDB().getField((String) sortMenu.getSelectedItem()); + sort = sortField == null ? null : ActComparator.by(sortField); + setToFirstPage(); + makeList(); + } + }; + ActionListener pageListener = new ActionListener() + { + + @Override + public void actionPerformed(ActionEvent e) + { + if (changing) + { + return; + } + pageStart = maxPerPage * pageMenu.getSelectedIndex(); + System.out.println(e.getActionCommand()); + makeList(); + } + }; + + @Override + protected void onscreen(boolean majorChange) + { + _note(null); + } + + public void _note(TFEvent e) + { + changing = true; + if (e == null || e.affectsSchema() || e.affectsRowSet()) + { + sortMenu.removeActionListener(sortListener); + sortMenu.removeAllItems(); + pageStart = 0; + java.util.List<Field> fields = getModel().getDB().getFields(); + Field firstField = null; + if (fields.size() > 0) + { + firstField = fields.get(0); + } + for (Field f : fields) + { + sortMenu.addItem(f.getName()); + } + sortField = getModel().getDB().getField(VirtualField.START); + if (sortField != null) + { + sortMenu.setSelectedItem(sortField.getName()); + } else + { + sortField = firstField; + } + sortMenu.addActionListener(sortListener); + sort = null; + } + if (e != null && e.affectsData()) + { + setToFirstPage(); + } + changing = false; + makeList(); + } + + private void setToFirstPage() + { + pageStart = 0; + if (pageMenu.isVisible()) + { + pageMenu.removeActionListener(pageListener); + pageMenu.setSelectedIndex(0); + pageMenu.addActionListener(pageListener); + } + } + + void showPageMenu(boolean visible) + { + pageLabel.setVisible(visible); + pageMenu.setVisible(visible); + if (visible) + { + pageMenu.removeActionListener(pageListener); + pageMenu.setSelectedIndex(pageStart / maxPerPage); + pageMenu.addActionListener(pageListener); + } + } + + void makeList() + { + HtmlFormat html = new HtmlFormat(); + html.setModel(getModel()); + StringBuffer page = new StringBuffer(); + + page.append(html.makeHeader()); + + ActList as = getModel().getActs(); + if (as == null || as.size() == 0 && getModel().getDB().size() == 0) + { + page.append("<tr><td><h1><font color=#003399>Empty Database</font></h1></td></tr>"); + showPageMenu(false); + } else + { + + if (sort == null) + { + Field timeField = getModel().getDB().getField(VirtualField.START); + if (timeField != null) + { + sort = ActComparator.by(timeField); + } + } + + acts = as.copy(); + if (sort != null) + { + Collections.sort(acts, sort); + } + + boolean pages = acts.size() > maxPerPage; + int last = Math.min(acts.size(), pageStart + maxPerPage); + if (pages) + { + int n = acts.size(); + if (lastSize != n) + { + pageMenu.removeActionListener(pageListener); + pageMenu.removeAllItems(); + for (int i = 0; i * maxPerPage < n; i++) + { + pageMenu.addItem("Items " + ((i * maxPerPage) + 1) + " to " + + Math.min(n, (i + 1) * maxPerPage)); + } + pageMenu.addActionListener(pageListener); + lastSize = n; + } + } + showPageMenu(pages); + + page.append("<tr><td><h1><font color=#003399>" + (pages ? (pageStart + 1) + "-" + (last) + " of " : "") + acts.size() + " Events</font></h1>"); + page.append("<br><br></td></tr>"); + + for (int i = pageStart; i < last; i++) + { + Act a = acts.get(i); + page.append(html.makeItem(a, i)); + } + } + page.append(html.makeFooter()); + listDisplay.setText(page.toString()); + listDisplay.setCaretPosition(0); + repaint(); + } + + @Override + public String getName() + { + return "List"; + } + + static class ArrayRenderer extends DefaultTableCellRenderer + { + + public void setValue(Object value) + { + setText(Display.arrayToString((Object[]) value)); + } + } + + public class LinkIt implements HyperlinkListener + { + + public void hyperlinkUpdate(HyperlinkEvent e) + { + if (e.getEventType() != HyperlinkEvent.EventType.ACTIVATED) + { + return; + } + + String s = e.getDescription(); + System.out.println(s); + if (s.length() > 0) + { + char c = s.charAt(0); + if (c == 'e') // code for "edit" + { + int i = Integer.parseInt(s.substring(1)); + EditRecordPanel.edit(getModel(), acts.get(i)); + return; + } + + } + Display.launchBrowser(e.getURL().toString()); + + } + } } -- Gitblit v1.6.2