bojangles-cvs Mailing List for bojangles
Status: Alpha
Brought to you by:
nehresma
You can subscribe to this list here.
2002 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
(43) |
Sep
(11) |
Oct
(3) |
Nov
|
Dec
|
---|
From: kai5263499 <boj...@li...> - 2002-10-08 18:29:52
|
kai5263499 Tue Oct 8 11:29:50 2002 EDT Added files: /bojangles xmlFileFilter.java Modified files: /bojangles Makefile MainWindow.java Log: Figured out how to open an existing document and read it in as if the user were redoing it all over again (using some "borrowed code from treePopupMenuAddActionPerformed()) Also added a file filter so we can only save/open .xml files (i'll add .gz capabilities later as i dont think its a priority right now) If you try to open an XML file, it only adds the root node now (a correlations NPE problem) Index: bojangles/Makefile diff -u bojangles/Makefile:1.1 bojangles/Makefile:1.2 --- bojangles/Makefile:1.1 Fri Sep 6 07:49:05 2002 +++ bojangles/Makefile Tue Oct 8 11:29:49 2002 @@ -14,6 +14,7 @@ RemoveButtonEditor.class \ RemoveButtonRenderer.class \ testAppPrefsDlg.class \ +xmlFileFilter.class \ MainWindow.class %.class: %.java Index: bojangles/MainWindow.java diff -u bojangles/MainWindow.java:1.37 bojangles/MainWindow.java:1.38 --- bojangles/MainWindow.java:1.37 Fri Oct 4 14:05:06 2002 +++ bojangles/MainWindow.java Tue Oct 8 11:29:49 2002 @@ -874,6 +874,8 @@ if(wantDlg) { JFileChooser fc = new JFileChooser(); + fc.addChoosableFileFilter(new xmlFileFilter()); + fc.setApproveButtonText("Save"); // Try to read in prefrences from the prefs.xml doc... if(sdir != null) fc.setCurrentDirectory(sdir); @@ -911,8 +913,10 @@ private void loadXML() { try{ JFileChooser fc = new JFileChooser(); + fc.addChoosableFileFilter(new xmlFileFilter()); + fc.setApproveButtonText("Open"); if(sdir != null) fc.setCurrentDirectory(sdir); - int returnVal = fc.showSaveDialog(this); + int returnVal = fc.showOpenDialog(this); if (returnVal == JFileChooser.APPROVE_OPTION) { File file = fc.getSelectedFile(); sdir = file.getAbsoluteFile(); @@ -924,21 +928,73 @@ } // Make a psudo document to create our main document from Document tempdoc = new SAXReader().read(file.getAbsolutePath()); - List list = tempdoc.selectNodes("/"); + java.util.List list = tempdoc.selectNodes("//outer_type/parent::*"); ListIterator li = list.listIterator(); + boolean firstElement; while (li.hasNext()) { - Node thinge = (Node)li.next(); - if(thingie.SelectSingleNode("/widget/class") == "container") { - //DIG! - } + Node thingie = (Node)li.next(); + String outerType = thingie.selectSingleNode("outer_type").getText(); + Document doc = (Document)widgetDefinitions.get(outerType); + Container parent = null; + Element parentEle = thingie.getParent(); + if(parentEle == null) { + // if we are the first thing in the tree, then set the parent equal to the displayPanel + parent = displayPanel; + firstElement = true; + } else { - //add it... + Hashtable h = correlations.getCorrelation(popupOnTreeNode); + //parent = (Container)h.get("widget"); + parent = displayPanel; + firstElement = true; + } + + // retrieve the name of the widget for this outerType + String name = doc.selectSingleNode("/widget/name").getText(); + + String path = null; + DefaultMutableTreeNode treeNode = null; + // are we starting at the begining of the new document? + if (firstElement) { + String rootText = name; + rootNode = new DefaultMutableTreeNode(rootText); + treeModel = new DefaultTreeModel(rootNode); + widgetTree.setModel(treeModel); + treeNode = rootNode; + path = xmlHandler.addElement(null, rootText, null); + } else { + if (!(parent instanceof Widget)) { + JOptionPane.showMessageDialog(null, "Attempt to add child widget to a parent that is not a widget!\nFile corrupted!", "Error", JOptionPane.ERROR_MESSAGE); + return; + } + name = name+System.currentTimeMillis(); + + Hashtable h = correlations.getCorrelation((Widget)parent); + DefaultMutableTreeNode parentTreeNode = (DefaultMutableTreeNode)h.get("node"); + String parentPath = (String)h.get("path"); + treeNode = new DefaultMutableTreeNode(name); + treeModel.insertNodeInto(treeNode, parentTreeNode, parentTreeNode.getChildCount()); + //widgetTree.expandPath(; + path = xmlHandler.addElement(parentPath, name, null); } + + // add the widget's defined properties to the application's XML document + addWidgetProperties(doc, path, name, outerType); + + Widget w = new Widget(path, xmlHandler, this); + w.addElementFocusListener(this); + parent.add(w); + + // set the initial starting point and height/width + setInitialWidgetProperties(w, doc, outerType); + + // map the element, path, and the treenode into the correlations table + correlations.addCorrelation(path, treeNode, w); } } else { System.out.println("Load canceled"); return; - } + } } catch (Exception e) { e.printStackTrace(); Index: bojangles/xmlFileFilter.java +++ bojangles/xmlFileFilter.java package bojangles; import java.io.*; public class xmlFileFilter extends javax.swing.filechooser.FileFilter { public boolean accept(File file) { String filename = file.getName(); return filename.endsWith(".xml"); } public String getDescription() { return "*.xml"; } } |
From: kai5263499 <boj...@li...> - 2002-10-04 21:05:11
|
kai5263499 Fri Oct 4 14:05:08 2002 EDT Modified files: /bojangles MainWindow.java Log: Cleaned up some things and started work on the file->open stuff... Index: bojangles/MainWindow.java diff -u bojangles/MainWindow.java:1.36 bojangles/MainWindow.java:1.37 --- bojangles/MainWindow.java:1.36 Wed Oct 2 11:59:02 2002 +++ bojangles/MainWindow.java Fri Oct 4 14:05:06 2002 @@ -909,26 +909,40 @@ } private void loadXML() { - - JFileChooser fc = new JFileChooser(); - if(sdir != null) fc.setCurrentDirectory(sdir); - - int returnVal = fc.showSaveDialog(this); - if (returnVal == JFileChooser.APPROVE_OPTION) { - File file = fc.getSelectedFile(); - sdir = file.getAbsoluteFile(); - - if (!file.exists()) { - String alertmsg = "File doesn't exist!"; - int choice = JOptionPane.showConfirmDialog(this,"File \"" + file.getName() + "\" does not exist!.",alertmsg,JOptionPane.OK_OPTION); - return; - } - xmlHandler.loadXML(file); - } else { - System.out.println("Load canceled"); - return; + try{ + JFileChooser fc = new JFileChooser(); + if(sdir != null) fc.setCurrentDirectory(sdir); + int returnVal = fc.showSaveDialog(this); + if (returnVal == JFileChooser.APPROVE_OPTION) { + File file = fc.getSelectedFile(); + sdir = file.getAbsoluteFile(); + + if (!file.exists()) { + String alertmsg = "File doesn't exist!"; + int choice = JOptionPane.showConfirmDialog(this,"File \"" + file.getAbsolutePath() + "\" does not exist!.",alertmsg,JOptionPane.OK_OPTION); + return; + } + // Make a psudo document to create our main document from + Document tempdoc = new SAXReader().read(file.getAbsolutePath()); + List list = tempdoc.selectNodes("/"); + ListIterator li = list.listIterator(); + while (li.hasNext()) { + Node thinge = (Node)li.next(); + if(thingie.SelectSingleNode("/widget/class") == "container") { + //DIG! + } + else { + //add it... + } + } + } else { + System.out.println("Load canceled"); + return; + } + } + catch (Exception e) { + e.printStackTrace(); } - } public void initGUI() { |
From: kai5263499 <boj...@li...> - 2002-10-02 18:59:04
|
kai5263499 Wed Oct 2 11:59:03 2002 EDT Modified files: /bojangles MainWindow.java Log: Finally got the entire deleting of a widget working... Now on to opening a document! Index: bojangles/MainWindow.java diff -u bojangles/MainWindow.java:1.35 bojangles/MainWindow.java:1.36 --- bojangles/MainWindow.java:1.35 Mon Sep 30 14:05:00 2002 +++ bojangles/MainWindow.java Wed Oct 2 11:59:02 2002 @@ -45,7 +45,6 @@ private JTree widgetTree; private PropertiesTableModel propertiesTableModel = null; private TreePath curSelectedItem; - protected JLabel statusBar; /** * The XML path to the currently selected widget. */ @@ -148,7 +147,6 @@ jScrollPane1 = new javax.swing.JScrollPane(); propertiesTable = new javax.swing.JTable(); jToolBar1 = new javax.swing.JToolBar(); - JLabel statusBar = new JLabel("Welcome to the jungle."); jButton1 = new javax.swing.JButton(); openBtn = new javax.swing.JButton(); jButton2 = new javax.swing.JButton(); @@ -260,7 +258,6 @@ jSplitPane1.setRightComponent(jScrollPane1); getContentPane().add(jSplitPane1, java.awt.BorderLayout.CENTER); - getContentPane().add(statusBar, java.awt.BorderLayout.SOUTH); jButton1.setBackground(new java.awt.Color(153, 153, 255)); jButton1.setText("print XML"); @@ -375,7 +372,7 @@ curSelectedItem = tp; if (-1 == row) { if (xmlHandler.doesPathExist(null)) { - statusBar.setText("This application already contains a top level widget."); + JOptionPane.showMessageDialog(null, "This application already contains a top level widget.", "Error", JOptionPane.ERROR_MESSAGE); return; } // menu was clicked on no particular row -- only enable the containers @@ -510,8 +507,7 @@ JPanel com_widget = (JPanel)h.get("widget"); // KILL DE WIDGET! and repaint - //widgetTree.remove(row); - widgetTree.toString(); + treeModel.removeNodeFromParent(n); parent_widget.remove(com_widget); parent_widget.repaint(); widgetTree.repaint(); @@ -651,7 +647,7 @@ path = xmlHandler.addElement(null, rootText, null); } else { if (!(parent instanceof Widget)) { - System.out.println("Attempt to add child widget to a parent that is not a widget!"); + JOptionPane.showMessageDialog(null, "Attempt to add child widget to a parent that is not a widget!", "Error", JOptionPane.ERROR_MESSAGE); return; } name = name+System.currentTimeMillis(); @@ -661,6 +657,7 @@ String parentPath = (String)h.get("path"); treeNode = new DefaultMutableTreeNode(name); treeModel.insertNodeInto(treeNode, parentTreeNode, parentTreeNode.getChildCount()); + //widgetTree.expandPath(; path = xmlHandler.addElement(parentPath, name, null); } @@ -959,8 +956,6 @@ TD_port = new javax.swing.JTextField(); TD_path = new javax.swing.JTextField(); JLabel jLabel5 = new javax.swing.JLabel(); - JLabel statusBar = new javax.swing.JLabel(); - dlgFrame.getContentPane().setLayout(null); jLabel1.setFont(new java.awt.Font("Dialog", 1, 18)); @@ -1024,8 +1019,6 @@ dlgFrame.getContentPane().add(jLabel5); jLabel5.setBounds(50, 50, 280, 16); - dlgFrame.getContentPane().add(statusBar); - statusBar.setBounds(0, 230, 400, 20); pack(); dlgFrame.setSize(407,269); dlgFrame.setResizable(false); |
From: kai5263499 <boj...@li...> - 2002-09-30 21:05:04
|
kai5263499 Mon Sep 30 14:05:01 2002 EDT Modified files: /bojangles MainWindow.java Log: Just need to get it out of the JTree and we will be set... Index: bojangles/MainWindow.java diff -u bojangles/MainWindow.java:1.34 bojangles/MainWindow.java:1.35 --- bojangles/MainWindow.java:1.34 Wed Sep 25 13:54:44 2002 +++ bojangles/MainWindow.java Mon Sep 30 14:05:00 2002 @@ -509,12 +509,16 @@ JPanel parent_widget = (JPanel)p.get("widget"); JPanel com_widget = (JPanel)h.get("widget"); - // KILL DE WIDGET! + // KILL DE WIDGET! and repaint + //widgetTree.remove(row); + widgetTree.toString(); parent_widget.remove(com_widget); - // remove rest here + parent_widget.repaint(); + widgetTree.repaint(); + + xmlHandler.removeElement(path); + System.out.println("I want to kill " + row); - // Redraw the parent - parent_widget.invalidate(); // remove this component from the parent container and then the document's xml then the correlation's file //System.out.println("parent: " + parent_widget.validate()); System.out.println("parent: " + parent_path); |
From: kai5263499 <boj...@li...> - 2002-09-25 20:54:46
|
kai5263499 Wed Sep 25 13:54:44 2002 EDT Modified files: /bojangles MainWindow.java Log: Happy-dance time, i got the widget to go away from the screen (now for the tree and XML and it's children... Index: bojangles/MainWindow.java diff -u bojangles/MainWindow.java:1.33 bojangles/MainWindow.java:1.34 --- bojangles/MainWindow.java:1.33 Mon Sep 23 14:19:45 2002 +++ bojangles/MainWindow.java Wed Sep 25 13:54:44 2002 @@ -483,42 +483,42 @@ } private void treeDelMenuItemActionPerformed(MouseEvent evt) { - // Kill de widget! + // First we setup treepaths and other information we'll need later int row = selectedRow; String who = curSelectedItem.toString(); //System.out.println(row); TreePath tp = widgetTree.getPathForRow(row); curSelectedItem = tp; - if (-1 == row) { - if (xmlHandler.doesPathExist(null)) { - // We can't delete nothing... - return; - } - } - else { - // retrieve the clicked on DefaultMutableTreeNode - Object pathArray[] = tp.getPath(); - DefaultMutableTreeNode n = (DefaultMutableTreeNode)pathArray[pathArray.length-1]; - Hashtable h = correlations.getCorrelation(n); - String path = (String)h.get("path"); - Component com_widget = (Container)h.get("widget"); - Container parent = null; - - // if we are the first thing in the tree, then set the parent equal to the displayPanel - if (null == popupOnTreeNode) - parent = displayPanel; - else { - Hashtable hip = correlations.getCorrelation(popupOnTreeNode); - parent = (Container)hip.get("widget"); - } - - // remove this component from the parent container and then the document's xml then the correlation's file - System.out.println("Parent: " + parent.getName()); - parent.remove(com_widget); - //doc. - //correlations.removeCorrelation(path); - System.out.println("Path: " + path); - } + // retrieve the clicked on DefaultMutableTreeNode + Object pathArray[] = tp.getPath(); + DefaultMutableTreeNode n = (DefaultMutableTreeNode)pathArray[pathArray.length-1]; + Hashtable h = correlations.getCorrelation(n); + String path = (String)h.get("path"); + StringTokenizer st = new StringTokenizer(path,"/"); + + // This is a hack to get the parent's XML path in the document + int roadkill = st.countTokens() - 1; + String parent_path = "/"; + for(int i = 1;i<=roadkill;i++) { + if(i + 1 > roadkill) parent_path = parent_path + st.nextToken(); + else parent_path = parent_path + st.nextToken() + "/"; + } + + // Now we take that and extract the parent and child widgets + Hashtable p = correlations.getCorrelation(parent_path); + JPanel parent_widget = (JPanel)p.get("widget"); + JPanel com_widget = (JPanel)h.get("widget"); + + // KILL DE WIDGET! + parent_widget.remove(com_widget); + // remove rest here + + // Redraw the parent + parent_widget.invalidate(); + // remove this component from the parent container and then the document's xml then the correlation's file + //System.out.println("parent: " + parent_widget.validate()); + System.out.println("parent: " + parent_path); + System.out.println("path: " + path); appModified(true); } |
From: kai5263499 <boj...@li...> - 2002-09-23 21:19:46
|
kai5263499 Mon Sep 23 14:19:45 2002 EDT Modified files: /bojangles MainWindow.java /bojangles/widgets Widget.java Log: I'm getting closer to making the delete thing work... Index: bojangles/MainWindow.java diff -u bojangles/MainWindow.java:1.32 bojangles/MainWindow.java:1.33 --- bojangles/MainWindow.java:1.32 Thu Sep 12 13:25:57 2002 +++ bojangles/MainWindow.java Mon Sep 23 14:19:45 2002 @@ -491,33 +491,34 @@ curSelectedItem = tp; if (-1 == row) { if (xmlHandler.doesPathExist(null)) { + // We can't delete nothing... return; } - } else { + } + else { // retrieve the clicked on DefaultMutableTreeNode Object pathArray[] = tp.getPath(); DefaultMutableTreeNode n = (DefaultMutableTreeNode)pathArray[pathArray.length-1]; Hashtable h = correlations.getCorrelation(n); String path = (String)h.get("path"); - System.out.println(path); - // get outer_type - String outerType = xmlHandler.getOuterType(path); - - if (null == outerType) return; - - // now for what we've really been wanting to get -- the widget's defined class - String widgetClass = ((Document)widgetDefinitions.get(outerType)).selectSingleNode("/widget/class").getText(); - if (widgetClass.equalsIgnoreCase("component")) { - - } else { - + Component com_widget = (Container)h.get("widget"); + Container parent = null; + + // if we are the first thing in the tree, then set the parent equal to the displayPanel + if (null == popupOnTreeNode) + parent = displayPanel; + else { + Hashtable hip = correlations.getCorrelation(popupOnTreeNode); + parent = (Container)hip.get("widget"); } - popupOnTreeNode = (DefaultMutableTreeNode)tp.getLastPathComponent(); + + // remove this component from the parent container and then the document's xml then the correlation's file + System.out.println("Parent: " + parent.getName()); + parent.remove(com_widget); + //doc. + //correlations.removeCorrelation(path); + System.out.println("Path: " + path); } - //treePopup.show((Component)evt.getSource(), evt.getX(), evt.getY()); - - System.out.println("I think: " + curSelectedItem.getPath().toString() + " has " + curSelectedItem.getLastPathComponent().toString() + " children..."); - System.out.println("There is no spoon..."); appModified(true); } @@ -623,7 +624,7 @@ } Container parent = null; - // if we are the first thing in the tree, t hen set the parent equal to the displayPanel + // if we are the first thing in the tree, then set the parent equal to the displayPanel if (null == popupOnTreeNode) parent = displayPanel; else { @@ -657,7 +658,6 @@ treeNode = new DefaultMutableTreeNode(name); treeModel.insertNodeInto(treeNode, parentTreeNode, parentTreeNode.getChildCount()); path = xmlHandler.addElement(parentPath, name, null); - appModified(true); } // add the widget's defined properties to the application's XML document @@ -672,6 +672,7 @@ // map the element, path, and the treenode into the correlations table correlations.addCorrelation(path, treeNode, w); + appModified(true); } private void addWidgetProperties(Document doc, String path, String name, String type) { @@ -1023,6 +1024,7 @@ statusBar.setBounds(0, 230, 400, 20); pack(); dlgFrame.setSize(407,269); + dlgFrame.setResizable(false); dlgframe = dlgFrame; } @@ -1030,4 +1032,4 @@ public static void main(String[] args) { MainWindow win = new MainWindow(); } -} \ No newline at end of file +} Index: bojangles/widgets/Widget.java diff -u bojangles/widgets/Widget.java:1.4 bojangles/widgets/Widget.java:1.5 --- bojangles/widgets/Widget.java:1.4 Thu Aug 22 06:43:26 2002 +++ bojangles/widgets/Widget.java Mon Sep 23 14:19:45 2002 @@ -122,6 +122,7 @@ } public void keyTyped(KeyEvent e) { + System.out.println("got: " + e.KEY_PRESSED); } |
From: kai5263499 <boj...@li...> - 2002-09-12 20:27:02
|
kai5263499 Thu Sep 12 13:27:01 2002 EDT Removed files: /bojangles testAppPrefsDlg.java Log: Got rid of the testAppsDlg class since I've incorperated it into mainwindow. |
From: kai5263499 <boj...@li...> - 2002-09-12 20:26:13
|
kai5263499 Thu Sep 12 13:26:09 2002 EDT Modified files: /bojangles MainWindow.java Log: Fixed the prefs dialog thing. Next I'll work on getting more prefrences to set (I'm thinking about using tabs). |
From: kai5263499 <boj...@li...> - 2002-09-12 03:20:12
|
kai5263499 Wed Sep 11 20:20:11 2002 EDT Modified files: /bojangles MainWindow.java Log: Added a statusbar to display information we want the user to see without interrupting their workflow (like the "only one page" thing) WW Index: bojangles/MainWindow.java diff -u bojangles/MainWindow.java:1.30 bojangles/MainWindow.java:1.31 --- bojangles/MainWindow.java:1.30 Fri Sep 6 07:49:05 2002 +++ bojangles/MainWindow.java Wed Sep 11 20:20:10 2002 @@ -45,6 +45,7 @@ private JTree widgetTree; private PropertiesTableModel propertiesTableModel = null; private TreePath curSelectedItem; + private JLabel statusBar; /** * The XML path to the currently selected widget. */ @@ -144,6 +145,7 @@ jScrollPane1 = new javax.swing.JScrollPane(); propertiesTable = new javax.swing.JTable(); jToolBar1 = new javax.swing.JToolBar(); + JLabel statusBar = new JLabel("Welcome to the jungle."); jButton1 = new javax.swing.JButton(); openBtn = new javax.swing.JButton(); jButton2 = new javax.swing.JButton(); @@ -254,7 +256,8 @@ jSplitPane1.setRightComponent(jScrollPane1); getContentPane().add(jSplitPane1, java.awt.BorderLayout.CENTER); - + getContentPane().add(statusBar, java.awt.BorderLayout.SOUTH); + jButton1.setBackground(new java.awt.Color(153, 153, 255)); jButton1.setText("print XML"); jButton1.addActionListener(new java.awt.event.ActionListener() { @@ -360,7 +363,7 @@ curSelectedItem = tp; if (-1 == row) { if (xmlHandler.doesPathExist(null)) { - JOptionPane.showMessageDialog(null, "This application already contains a top level widget.", "Error", JOptionPane.ERROR_MESSAGE); + statusBar.setText("This application already contains a top level widget."); return; } // menu was clicked on no particular row -- only enable the containers |
From: kai5263499 <boj...@li...> - 2002-09-06 14:49:07
|
kai5263499 Fri Sep 6 07:49:06 2002 EDT Added files: /bojangles Makefile Removed files: /bojangles buildBJ Modified files: /bojangles MainWindow.java Log: Swapped around my custom build script for a more formal Makefile script. make clean make make jar Index: bojangles/MainWindow.java diff -u bojangles/MainWindow.java:1.29 bojangles/MainWindow.java:1.30 --- bojangles/MainWindow.java:1.29 Thu Sep 5 11:12:22 2002 +++ bojangles/MainWindow.java Fri Sep 6 07:49:05 2002 @@ -426,7 +426,6 @@ System.out.println("URL af is: http://" + prefHost + ":" + prefPort + "/" + prefPath + "/" + sdir.getName()); } Runtime rt = Runtime.getRuntime(); - Thread tester = new Thread(); Process p = rt.exec(prefBrowser + " http://" + prefHost + ":" + prefPort + "/" + prefPath + "/" + sdir.getName()); } catch (Exception e) { |
From: kai5263499 <boj...@li...> - 2002-09-05 18:12:24
|
kai5263499 Thu Sep 5 11:12:22 2002 EDT Added files: /bojangles bojangles.midi Modified files: /bojangles MainWindow.java Log: Added a Mr-Bojangles midi to the startup code. (don't worry, I included a menuItem to stop the midi too). |
From: kai5263499 <boj...@li...> - 2002-09-04 21:03:07
|
kai5263499 Wed Sep 4 14:03:05 2002 EDT Modified files: /bojangles MainWindow.java testAppPrefsDlg.java Log: Finally figured out how to remove widgets (I think) we'll see if this last until i get home and play with it. Index: bojangles/MainWindow.java diff -u bojangles/MainWindow.java:1.27 bojangles/MainWindow.java:1.28 --- bojangles/MainWindow.java:1.27 Tue Sep 3 14:01:53 2002 +++ bojangles/MainWindow.java Wed Sep 4 14:02:58 2002 @@ -63,7 +63,7 @@ private String prefHost, prefPort, prefPath, prefBrowser, prefLastFile; private Element prefRootEle, tlFileSaved, tBrowse, tHost, tPort, tPath, sizeEle, ptheight, ptwidth; private Document prefDocument = null; - private int prefPT_h, prefPT_w; + private int prefPT_h, prefPT_w, selectedRow; /** Creates new form MainWindow */ public MainWindow() { @@ -324,6 +324,8 @@ // get the TreePath for the where the menu was clicked -- this will // decide what menu items are enabled and disabled int row = widgetTree.getRowForLocation(evt.getX(), evt.getY()); + //System.out.println(row); + selectedRow= row; TreePath tp = widgetTree.getPathForRow(row); curSelectedItem = tp; if (-1 == row) { @@ -383,15 +385,12 @@ try { testAppPrefsDlg testappprefsdlg = new testAppPrefsDlg(); - while(!testappprefsdlg.ready) { - this.wait(); - } + this.wait(); } catch (InterruptedException e) { e.printStackTrace(); } - // Write it to pref.xml! System.out.println("URL af is: http://" + prefHost + ":" + prefPort + "/" + prefPath + "/" + sdir.getName()); @@ -424,14 +423,11 @@ private void treeDelMenuItemActionPerformed(MouseEvent evt) { // Kill de widget! - //int row = widgetTree.getRowForLocation(evt.getX(), evt.getY()); + int row = selectedRow; String who = curSelectedItem.toString(); - - // get the TreePath for the where the menu was clicked -- this will - // decide what menu items are enabled and disabled - int row = widgetTree.getRowForLocation(evt.getX(), evt.getY()); - TreePath tp = widgetTree.getPathForRow(row); - curSelectedItem = tp; + //System.out.println(row); + TreePath tp = widgetTree.getPathForRow(row); + curSelectedItem = tp; if (-1 == row) { if (xmlHandler.doesPathExist(null)) { JOptionPane.showMessageDialog(null, "You can't have less than 0 components...", "Error", JOptionPane.ERROR_MESSAGE); @@ -446,7 +442,7 @@ System.out.println(path); // get outer_type String outerType = xmlHandler.getOuterType(path); - + if (null == outerType) return; // now for what we've really been wanting to get -- the widget's defined class @@ -460,7 +456,7 @@ } //treePopup.show((Component)evt.getSource(), evt.getX(), evt.getY()); - //System.out.println("I think: " + curSelectedItem.getPath().toString() + " has " + curSelectedItem.getLastPathComponent().toString() + " children..."); + System.out.println("I think: " + curSelectedItem.getPath().toString() + " has " + curSelectedItem.getLastPathComponent().toString() + " children..."); System.out.println("There is no spoon..."); appModified(true); } @@ -698,13 +694,15 @@ File[] files = new File("widget_definitions").listFiles(); if (null == files) { System.out.println("Unable to find the widget definitions. " + System.getProperty("os.name")); - doExit(1); + JFileChooser fc = new JFileChooser(); + files = fc.getSelectedFiles(); + if(null==files) doExit(1); } for (int i=0;i<files.length;i++) { String name = files[i].getName(); // Loop through the widget definition XML files. But exclude the example widget file. - if (name.endsWith(".xml") && !name.equalsIgnoreCase("EXAMPLE.xml")) { + if (name.endsWith(".xml") && !name.equals("EXAMPLE.xml")) { try { System.out.println("Loading widget definition from " + name); Document document = new SAXReader().read("widget_definitions/" + name); @@ -847,7 +845,6 @@ private void loadXML() { JFileChooser fc = new JFileChooser(); - // Try to read in prefrences from the prefs.xml doc... if(sdir != null) fc.setCurrentDirectory(sdir); int returnVal = fc.showSaveDialog(this); @@ -860,17 +857,16 @@ int choice = JOptionPane.showConfirmDialog(this,"File \"" + file.getName() + "\" does not exist!.",alertmsg,JOptionPane.OK_OPTION); return; } - // file to save as and wether or not to compress it, now thats hard coded because i havent added a checkbox to the above filechooser xmlHandler.loadXML(file); } else { - System.out.println("Save canceled"); + System.out.println("Load canceled"); return; } } public void initGUI() { - if(sdir != null) this.setTitle(sdir.getName()); + if(sdir != null && sdir.getName() != "null" && sdir.getName() != "") this.setTitle(sdir.getName()); else this.setTitle("New App"); // something is going to be done with this... ImageIcon bjImage = new ImageIcon("bojangles.png"); Index: bojangles/testAppPrefsDlg.java diff -u bojangles/testAppPrefsDlg.java:1.6 bojangles/testAppPrefsDlg.java:1.7 --- bojangles/testAppPrefsDlg.java:1.6 Tue Sep 3 14:01:53 2002 +++ bojangles/testAppPrefsDlg.java Wed Sep 4 14:02:59 2002 @@ -144,6 +144,7 @@ pathStr = path.getText(); browserStr = browser.getText(); ready = true; + super.notifyAll(); } // Variables declaration - do not modify |
From: kai5263499 <boj...@li...> - 2002-09-03 21:01:58
|
kai5263499 Tue Sep 3 14:01:54 2002 EDT Modified files: /bojangles MainWindow.java testAppPrefsDlg.java Log: More work done on synchronizing the mainwindow class and the testappprefsdlg class (so the mainwindow class witll wait for the other one to finish before trying to read it's variables...). Hope yall are all setteling back into your classes up there. Index: bojangles/MainWindow.java diff -u bojangles/MainWindow.java:1.26 bojangles/MainWindow.java:1.27 --- bojangles/MainWindow.java:1.26 Mon Sep 2 20:18:41 2002 +++ bojangles/MainWindow.java Tue Sep 3 14:01:53 2002 @@ -380,16 +380,18 @@ saveXML(false); } if(!prefsSet) { - testAppPrefsDlg testappprefsdlg = new testAppPrefsDlg(); - while(!testappprefsdlg.ready) { - wait(50); + + try { + testAppPrefsDlg testappprefsdlg = new testAppPrefsDlg(); + while(!testappprefsdlg.ready) { + this.wait(); + } + } + catch (InterruptedException e) { + e.printStackTrace(); } - testappprefsdlg.show(); - prefBrowser = testappprefsdlg.browserStr; - prefHost = testappprefsdlg.hostStr; - prefPort = testappprefsdlg.portStr; - prefPath = testappprefsdlg.pathStr; + // Write it to pref.xml! System.out.println("URL af is: http://" + prefHost + ":" + prefPort + "/" + prefPath + "/" + sdir.getName()); Index: bojangles/testAppPrefsDlg.java diff -u bojangles/testAppPrefsDlg.java:1.5 bojangles/testAppPrefsDlg.java:1.6 --- bojangles/testAppPrefsDlg.java:1.5 Mon Sep 2 20:18:41 2002 +++ bojangles/testAppPrefsDlg.java Tue Sep 3 14:01:53 2002 @@ -8,20 +8,31 @@ * <p>Copyright: Copyright (c) 2002 under the GPL</p> * @author Wes */ - -public class testAppPrefsDlg extends javax.swing.JDialog { +//javax.swing.JDialog +public class testAppPrefsDlg extends javax.swing.JDialog implements Runnable { + Thread thread; public String hostStr; public String portStr; public String pathStr; public String browserStr; - public boolean ready = false; + volatile boolean ready = false; /** Creates new form testAppPrefsDlg */ public testAppPrefsDlg() { - initComponents(); - setSize(407,269); + thread = new Thread(this, "testappprefsdlg"); + initComponents(); + setSize(407,269); + thread.start(); } + public void newSuspend() { + ready = false; + } + + synchronized public void newResume() { + ready = true; + } + /** This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is @@ -151,5 +162,13 @@ private javax.swing.JLabel statusBar; private javax.swing.JTextField port; // End of variables declaration + public static void main() { + + } + public void run() { + System.out.println("run?"); + new MainWindow(); + show(); + } } |
From: kai5263499 <boj...@li...> - 2002-09-03 03:18:43
|
kai5263499 Mon Sep 2 20:18:41 2002 EDT Modified files: /bojangles testAppPrefsDlg.java MainWindow.java Log: Added a sleep() routiene to make mainwindow wait until testappdlg is done. Index: bojangles/testAppPrefsDlg.java diff -u bojangles/testAppPrefsDlg.java:1.4 bojangles/testAppPrefsDlg.java:1.5 --- bojangles/testAppPrefsDlg.java:1.4 Thu Aug 29 13:21:58 2002 +++ bojangles/testAppPrefsDlg.java Mon Sep 2 20:18:41 2002 @@ -18,8 +18,8 @@ public boolean ready = false; /** Creates new form testAppPrefsDlg */ public testAppPrefsDlg() { - initComponents(); - setSize(407,269); + initComponents(); + setSize(407,269); } /** This method is called from within the constructor to @@ -101,7 +101,7 @@ getContentPane().add(port); port.setBounds(180, 130, 200, 20); - path.setText("/kardia"); + path.setText("kardia"); getContentPane().add(path); path.setBounds(180, 160, 200, 20); @@ -151,5 +151,5 @@ private javax.swing.JLabel statusBar; private javax.swing.JTextField port; // End of variables declaration - + } Index: bojangles/MainWindow.java diff -u bojangles/MainWindow.java:1.25 bojangles/MainWindow.java:1.26 --- bojangles/MainWindow.java:1.25 Thu Aug 29 13:21:57 2002 +++ bojangles/MainWindow.java Mon Sep 2 20:18:41 2002 @@ -381,6 +381,9 @@ } if(!prefsSet) { testAppPrefsDlg testappprefsdlg = new testAppPrefsDlg(); + while(!testappprefsdlg.ready) { + wait(50); + } testappprefsdlg.show(); prefBrowser = testappprefsdlg.browserStr; |
From: kai5263499 <boj...@li...> - 2002-08-29 20:21:59
|
kai5263499 Thu Aug 29 13:21:58 2002 EDT Modified files: /bojangles/xml XmlHandler.java /bojangles MainWindow.java testAppPrefsDlg.java Log: Got the dialog to show up, now i need to synchronize it so i can get the variables from it (i.e. halt the code until they press 'allrightythen' on the prefs dialog box). Also, I've gotten further along with deleting objects (which will ultimatly tell me how to add elements from a loaded XML file). |
From: kai5263499 <boj...@li...> - 2002-08-29 00:22:20
|
kai5263499 Wed Aug 28 17:22:17 2002 EDT Modified files: /bojangles testAppPrefsDlg.java MainWindow.java MainWindow.form Log: Minor bug fixes Index: bojangles/testAppPrefsDlg.java diff -u bojangles/testAppPrefsDlg.java:1.2 bojangles/testAppPrefsDlg.java:1.3 --- bojangles/testAppPrefsDlg.java:1.2 Wed Aug 28 16:48:45 2002 +++ bojangles/testAppPrefsDlg.java Wed Aug 28 17:22:17 2002 @@ -26,7 +26,7 @@ * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. */ - private void initComponents() {//GEN-BEGIN:initComponents + private void initComponents() { jLabel1 = new javax.swing.JLabel(); jSeparator1 = new javax.swing.JSeparator(); jLabel2 = new javax.swing.JLabel(); @@ -83,11 +83,6 @@ jButton2.setBounds(210, 200, 160, 26); browser.setText("/usr/bin/mozilla"); - browser.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - browserActionPerformed(evt); - } - }); getContentPane().add(browser); browser.setBounds(180, 70, 200, 20); @@ -113,14 +108,10 @@ statusBar.setBounds(0, 230, 400, 20); pack(); - }//GEN-END:initComponents - - private void browserActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_browserActionPerformed - // Add your handling code here: - }//GEN-LAST:event_browserActionPerformed + } /** Closes the dialog */ - private void closeDialog(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_closeDialog + private void closeDialog(java.awt.event.WindowEvent evt) { setVisible(false); // Set class variables this.portStr = port.getText(); @@ -130,9 +121,9 @@ // Commit suicide dispose(); - }//GEN-LAST:event_closeDialog + } - // Variables declaration - do not modify//GEN-BEGIN:variables + // Variables declaration - do not modify private javax.swing.JButton jButton2; private javax.swing.JSeparator jSeparator1; private javax.swing.JButton jButton1; @@ -147,10 +138,6 @@ private javax.swing.JLabel jLabel1; private javax.swing.JLabel statusBar; private javax.swing.JTextField port; - // End of variables declaration//GEN-END:variables + // End of variables declaration - public static void main(String args[]) { - new testAppPrefsDlg().show(); - System.out.println("burp"); - } } Index: bojangles/MainWindow.java diff -u bojangles/MainWindow.java:1.23 bojangles/MainWindow.java:1.24 --- bojangles/MainWindow.java:1.23 Wed Aug 28 14:26:39 2002 +++ bojangles/MainWindow.java Wed Aug 28 17:22:17 2002 @@ -380,6 +380,8 @@ if(!prefsSet) { // HELP! this class won't display the dlg box for anything... testAppPrefsDlg testappprefsdlg = new testAppPrefsDlg(); + testappprefsdlg.show(); + System.out.println("burp"); System.out.println("after testAppPrefDlg"); prefBrowser = testappprefsdlg.browserStr; prefHost = testappprefsdlg.hostStr; Index: bojangles/MainWindow.form diff -u bojangles/MainWindow.form:1.2 bojangles/MainWindow.form:1.3 --- bojangles/MainWindow.form:1.2 Sat Aug 24 11:16:23 2002 +++ bojangles/MainWindow.form Wed Aug 28 17:22:17 2002 @@ -146,21 +146,6 @@ </Constraint> </Constraints> </Component> - <Container class="bojangles.DisplayPanel" name="displayPanel"> - - <AuxValues> - <AuxValue name="JavaCodeGenerator_InitCodePost" type="java.lang.String" value=""/> - <AuxValue name="JavaCodeGenerator_CreateCodeCustom" type="java.lang.String" value="new DisplayPanel();"/> - <AuxValue name="JavaCodeGenerator_CreateCodePost" type="java.lang.String" value=""/> - </AuxValues> - <Constraints> - <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.support.JSplitPaneSupportLayout" value="org.netbeans.modules.form.compat2.layouts.support.JSplitPaneSupportLayout$JSplitPaneConstraintsDescription"> - <JSplitPaneConstraints position="right"/> - </Constraint> - </Constraints> - - <Layout class="org.netbeans.modules.form.compat2.layouts.support.JLayeredPaneSupportLayout"/> - </Container> </SubComponents> </Container> <Container class="javax.swing.JScrollPane" name="jScrollPane1"> |
From: kai5263499 <boj...@li...> - 2002-08-28 23:48:46
|
kai5263499 Wed Aug 28 16:48:45 2002 EDT Modified files: /bojangles testAppPrefsDlg.java Log: Forgot to commit the changes I made to this (although it still dont work...) Index: bojangles/testAppPrefsDlg.java diff -u bojangles/testAppPrefsDlg.java:1.1 bojangles/testAppPrefsDlg.java:1.2 --- bojangles/testAppPrefsDlg.java:1.1 Thu Aug 22 06:44:21 2002 +++ bojangles/testAppPrefsDlg.java Wed Aug 28 16:48:45 2002 @@ -17,8 +17,7 @@ public String browserStr; /** Creates new form testAppPrefsDlg */ - public testAppPrefsDlg(java.awt.Frame parent, boolean modal) { - super(parent, modal); + public testAppPrefsDlg() { initComponents(); } @@ -151,6 +150,7 @@ // End of variables declaration//GEN-END:variables public static void main(String args[]) { - new testAppPrefsDlg(new javax.swing.JFrame(), true).show(); + new testAppPrefsDlg().show(); + System.out.println("burp"); } } |
From: kai5263499 <boj...@li...> - 2002-08-28 21:26:43
|
kai5263499 Wed Aug 28 14:26:39 2002 EDT Added files: /bojangles/images bojangles.png Modified files: /bojangles MainWindow.java /bojangles/xml XmlHandler.java Log: Worked on prefrences. I got it to add prefrences to the prefs.xml file (and tomorrow I'll make all sizes and stuff "sticky"). I also added the bojangles logo that Luke made. I instate it, but i can't figure out the best place to put it. (I'm thinking about using it in a splash screen with a progress bar triggering on loadWidgets...) |
From: kai5263499 <boj...@li...> - 2002-08-27 21:12:17
|
kai5263499 Tue Aug 27 14:12:17 2002 EDT Modified files: /bojangles MainWindow.java /bojangles/xml XmlHandler.java Log: Connected the open button to the loadXML() function and tried to get it semi-working... Index: bojangles/MainWindow.java diff -u bojangles/MainWindow.java:1.21 bojangles/MainWindow.java:1.22 --- bojangles/MainWindow.java:1.21 Mon Aug 26 11:27:19 2002 +++ bojangles/MainWindow.java Tue Aug 27 14:12:16 2002 @@ -359,11 +359,11 @@ } private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) { - saveXML(false); + saveXML(false); } private void openBtnActionPerformed(java.awt.event.ActionEvent evt) { - System.out.println("nope, i dont work yet... i'm just holding space"); + loadXML(); } private void testAppBtnActionPerformed(java.awt.event.ActionEvent evt) { @@ -414,7 +414,7 @@ // Kill de widget! //int row = widgetTree.getRowForLocation(evt.getX(), evt.getY()); String who = curSelectedItem.toString(); - System.out.println("I think: " + who); + System.out.println("I think: " + who + " has " + curSelectedItem.getLastPathComponent().toString() + " children..."); System.out.println("There is no spoon..."); appModified(true); } @@ -796,19 +796,14 @@ if (returnVal == JFileChooser.APPROVE_OPTION) { File file = fc.getSelectedFile(); sdir = file.getAbsoluteFile(); - prefDocument.selectSingleNode("/prefrences/prefSaveDir").setText(sdir.getPath()); - prefDocument.selectSingleNode("/prefrences/prefSaveFile").setText(sdir.getName()); - if (file.exists()) { - String suremsg = "Are you sure you want to overwrite?"; - int choice = JOptionPane.showConfirmDialog(this,"File \"" + file.getName() + "\" will be overwritten.",suremsg,JOptionPane.YES_NO_OPTION); - if(choice == JOptionPane.NO_OPTION) return; - System.out.println("Saved " + file.getName()); - curTitle = file.getName(); - appModified(false); + if (!file.exists()) { + String alertmsg = "File doesn't exist!"; + int choice = JOptionPane.showConfirmDialog(this,"File \"" + file.getName() + "\" does not exist!.",alertmsg,JOptionPane.OK_OPTION); + return; } // file to save as and wether or not to compress it, now thats hard coded because i havent added a checkbox to the above filechooser - xmlHandler.saveXML(file, true); + xmlHandler.loadXML(file); } else { System.out.println("Save canceled"); return; Index: bojangles/xml/XmlHandler.java diff -u bojangles/xml/XmlHandler.java:1.17 bojangles/xml/XmlHandler.java:1.18 --- bojangles/xml/XmlHandler.java:1.17 Sat Aug 24 17:35:08 2002 +++ bojangles/xml/XmlHandler.java Tue Aug 27 14:12:16 2002 @@ -30,7 +30,7 @@ public void loadXML(File file) { try { - doc = new SAXReader().read(file.getPath()); + doc = new SAXReader().read(file.getAbsolutePath() + file.getName()); } catch (DocumentException e) { e.printStackTrace(); } |
From: kai5263499 <boj...@li...> - 2002-08-26 18:27:20
|
kai5263499 Mon Aug 26 11:27:19 2002 EDT Modified files: /bojangles MainWindow.java Log: Post-lunch update... Changed the window close listner to go through doExit to exit. Index: bojangles/MainWindow.java diff -u bojangles/MainWindow.java:1.20 bojangles/MainWindow.java:1.21 --- bojangles/MainWindow.java:1.20 Sat Aug 24 18:02:11 2002 +++ bojangles/MainWindow.java Mon Aug 26 11:27:19 2002 @@ -157,7 +157,7 @@ }); addWindowListener(new java.awt.event.WindowAdapter() { public void windowClosing(java.awt.event.WindowEvent evt) { - System.exit(0); + doExit(0); } }); @@ -729,8 +729,8 @@ } // Add custom size settings to document (this one is for Nathan ;-) - //prefDocument.selectSingleNode("/prefrences/sizes/PTHeight").setText(String.valueOf(propertiesTable.getPreferredScrollableViewportSize().height)); - //prefDocument.selectSingleNode("/prefrences/sizes/PTWidth").setText(String.valueOf(propertiesTable.getPreferredScrollableViewportSize().width)); + prefDocument.selectSingleNode("/prefrences/sizes/PTHeight").setText(String.valueOf(propertiesTable.getPreferredScrollableViewportSize().height)); + prefDocument.selectSingleNode("/prefrences/sizes/PTWidth").setText(String.valueOf(propertiesTable.getPreferredScrollableViewportSize().width)); // Save prefs.xml file try { |
From: nehresma <boj...@li...> - 2002-08-26 13:55:52
|
nehresma Mon Aug 26 06:55:52 2002 EDT Modified files: /bojangles DisplayPanel.java Log: removed dependency of DisplayPanel on the old style Page widget Index: bojangles/DisplayPanel.java diff -u bojangles/DisplayPanel.java:1.1.1.1 bojangles/DisplayPanel.java:1.2 --- bojangles/DisplayPanel.java:1.1.1.1 Sat Aug 3 08:42:35 2002 +++ bojangles/DisplayPanel.java Mon Aug 26 06:55:51 2002 @@ -1,7 +1,5 @@ package bojangles; -import bojangles.widgets.Page; - /* * DisplayPanel.java * @@ -13,31 +11,12 @@ * @author nathan */ public class DisplayPanel extends javax.swing.JLayeredPane { - Page page; - /** Creates new form BeanForm */ public DisplayPanel() { initComponents(); setLayout(null); } - /** This method is called from within the constructor to - * initialize the form. - * WARNING: Do NOT modify this code. The content of this method is - * always regenerated by the Form Editor. - */ - private void initComponents() {//GEN-BEGIN:initComponents - - }//GEN-END:initComponents - - public void addPage(Page page) { - this.page = page; - page.setBounds(10,10,500,400); - add(page, 0); - repaint(); + private void initComponents() { } - - // Variables declaration - do not modify//GEN-BEGIN:variables - // End of variables declaration//GEN-END:variables - } |
From: kai5263499 <boj...@li...> - 2002-08-26 13:18:44
|
kai5263499 Mon Aug 26 06:18:43 2002 EDT Added files: /bojangles/images bg_church.png bg_person.png bgnd.png bgnd2.png go-disabled.gif go-down.gif go-normal.gif go-up.gif query-disabled.gif query-down.gif query-normal.gif query-up.gif save-disabled.gif save-down.gif save-normal.gif save-up.gif stock_jump-to.png stock_new.png stock_save.png stock_search.png Log: Blatently ripped centrallix images for use in creation of imagebuttons... |
From: nehresma <boj...@li...> - 2002-08-25 01:26:05
|
nehresma Sat Aug 24 18:26:01 2002 EDT Removed files: /bojangles/widgets Page.java PictureButton.java TextButton.java Log: removing the old classes for several widgets as discussed on the list, now that our widget definitions are in XML. |
From: nehresma <boj...@li...> - 2002-08-25 01:02:13
|
nehresma Sat Aug 24 18:02:12 2002 EDT Modified files: /bojangles MainWindow.java Log: added handling of windowClosing back in (thanks to dman to pointing this out) Index: bojangles/MainWindow.java diff -u bojangles/MainWindow.java:1.19 bojangles/MainWindow.java:1.20 --- bojangles/MainWindow.java:1.19 Sat Aug 24 17:26:31 2002 +++ bojangles/MainWindow.java Sat Aug 24 18:02:11 2002 @@ -155,6 +155,11 @@ treeDelMenuItemActionPerformed(evt); } }); + addWindowListener(new java.awt.event.WindowAdapter() { + public void windowClosing(java.awt.event.WindowEvent evt) { + System.exit(0); + } + }); jSplitPane1.setDividerLocation(680); jSplitPane1.setDividerSize(6); |
From: nehresma <boj...@li...> - 2002-08-25 00:35:09
|
nehresma Sat Aug 24 17:35:09 2002 EDT Modified files: /bojangles/xml XmlHandler.java Log: fix for SAXReader instantiation Index: bojangles/xml/XmlHandler.java diff -u bojangles/xml/XmlHandler.java:1.16 bojangles/xml/XmlHandler.java:1.17 --- bojangles/xml/XmlHandler.java:1.16 Sat Aug 24 17:26:31 2002 +++ bojangles/xml/XmlHandler.java Sat Aug 24 17:35:08 2002 @@ -29,7 +29,11 @@ } public void loadXML(File file) { - //doc = new SAXReader().read(); + try { + doc = new SAXReader().read(file.getPath()); + } catch (DocumentException e) { + e.printStackTrace(); + } // OK, the XML is right, now we just need to update the GUI } |