From: <mg...@us...> - 2006-10-16 16:03:51
|
Revision: 159 http://svn.sourceforge.net/obo/?rev=159&view=rev Author: mgibson Date: 2006-10-16 09:03:41 -0700 (Mon, 16 Oct 2006) Log Message: ----------- so now the completion list when a syn term is set the term name is what ends up in the box - what im discovering is im really sort of overworking JComboBox and having it go against its natural nature - and in hind sight i should just built my own - oh well - so on selection of a syn term the selection listener would listen and set the text field to the term name - BUT the JComboBox would subsequently (and also previously i think) set the text field as well and set it to the syn text in the selection - in other words what im doing is wierd having the selection and the subsequent text be different - but i noticed this was happening viea JComboBox.configureEditor - so i overrode & supressed that method entirely - i thought this may mess up other things but in testing it out it actually seems fine - if a bug does come out then the next step is to supress with a flag - and the flag is set in this particular completion case also fisxed bug where exact matches were coming in as "0" woops Modified Paths: -------------- phenote/trunk/src/java/phenote/gui/field/AbstractAutoCompList.java phenote/trunk/src/java/phenote/gui/field/CompListSearcher.java phenote/trunk/src/java/phenote/gui/field/CompletionTerm.java phenote/trunk/src/java/phenote/gui/field/RelationCompList.java phenote/trunk/src/java/phenote/gui/field/TermCompList.java Modified: phenote/trunk/src/java/phenote/gui/field/AbstractAutoCompList.java =================================================================== --- phenote/trunk/src/java/phenote/gui/field/AbstractAutoCompList.java 2006-10-13 19:08:49 UTC (rev 158) +++ phenote/trunk/src/java/phenote/gui/field/AbstractAutoCompList.java 2006-10-16 16:03:41 UTC (rev 159) @@ -7,6 +7,7 @@ import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.util.Vector; +import javax.swing.ComboBoxEditor; import javax.swing.JComboBox; import javax.swing.JList; import javax.swing.JTextField; @@ -71,9 +72,12 @@ setUI(new MetalListComboUI()); setEditable(true); setPreferredSize(new Dimension(350,22)); + setMaximumSize(new Dimension(350,22)); AutoTextFieldEditor autoTextFieldEditor = new AutoTextFieldEditor(); this.setEditor(autoTextFieldEditor); - //setFont(new Font("Courier",Font.PLAIN,12)); + //setFont(new Font("Courier",Font.PLAIN,12)); yuck + //setFont(new Font("Lucida Console",Font.PLAIN,12)); not fixed + setFont(new Font("Lucida Typewriter",Font.PLAIN,10)); //setOntology(ontology); //searchParams = sp; // singleton access? part of ontology? compListSearcher = s; @@ -113,6 +117,8 @@ this.doCompletion = doCompletion; this.keyTyped = doCompletion; // key has to be typed for completion getEditor().setItem(text); + //log().debug("setting text "+text); + //new Throwable().printStackTrace(); this.doCompletion = true; // set back to default } @@ -138,7 +144,9 @@ /** BasicComboBoxEditor uses JTextField as its editing component but is * only available as a protected variable - odd - adds auto doc & auto key listeners to combo box edit field */ + adds auto doc & auto key listeners to combo box edit field + I think the purpose of this class is to set its editor var to AutoTextField + subclass of JTextField */ private class AutoTextFieldEditor extends BasicComboBoxEditor { private AutoTextFieldEditor() { @@ -181,8 +189,15 @@ // but this is needed from mouse release on selection set text // is called and will cause completion list to come up after sel // w/o it + //log().debug("AutoTextField.setText "+text); + //new Throwable().printStackTrace(); doCompletion = false; - super.setText(text); + //this is problematic for syns & such where string is diff than term name + // JComboBox sets this text AFTER got event and set to name + //super.setText(text); + // this works as only time setText is called with cngCL false is with + // selection - or at least so it seems + super.setText(getCurrentTermRelName()); doCompletion = true; } @@ -192,20 +207,12 @@ } } - public void simulateLKeyStroke() { - autoTextField.processKeyEvent(new KeyEvent(this,KeyEvent.KEY_PRESSED,0,0,KeyEvent.VK_L,'l')); - autoTextField.processKeyEvent(new KeyEvent(this,KeyEvent.KEY_TYPED,0,0,KeyEvent.VK_UNDEFINED,'l')); - } - - public void simulateKeyStroke(int keyCode, char c) { - KeyEvent k = new KeyEvent(this,KeyEvent.KEY_PRESSED,0,0,keyCode,c); - autoTextField.processKeyEvent(k); - k.setKeyCode(KeyEvent.KEY_RELEASED); - autoTextField.processKeyEvent(k); - k = new KeyEvent(this,KeyEvent.KEY_TYPED,0,0,KeyEvent.VK_UNDEFINED,c); - autoTextField.processKeyEvent(k); - } + + /** Return the name of the current term or relation - was gonna call this + item name but that gets confused with "items" in combo box */ + protected abstract String getCurrentTermRelName(); + private class AutoKeyListener extends KeyAdapter { // keyTyped doesnt seem to catch backspace in 1.5 - but did in 1.4 - odd // public void keyTyped(KeyEvent e) { @@ -402,6 +409,23 @@ throws ex if in fact current user input is not a valid item */ protected abstract void setCurrentValidItem() throws OboException; + /** Override - configureEditor is called when user selects item and sets text + field to item selected, unfortunately this happens after the listening + code in this class that sets to term name (not syn name), and then the syn + name gets set - so this is to catch & repress the subsequent syn name + setting - hope that makes sense heres the jdocs from JComboBox for this method: + Initializes the editor with the specified item. It seems to be ok as far + as i can tell to supress this method entirely - if this ends up being + problematic then this should be coulpled with a flag set in setCurrentValidItem + or a related method to supress the syn coming after term set */ + public void configureEditor(ComboBoxEditor anEditor,Object anItem) { + //log().debug("configure editor called"+anItem); + //new Throwable().printStackTrace(); + // it appears to be ok to supress this entirely + // super.configureEditor(anEditor,anItem); // ??? supress + } + + protected abstract void editModel(); private Logger log; @@ -409,6 +433,20 @@ if (log == null) log = Logger.getLogger(getClass()); return log; } + public void simulateLKeyStroke() { + autoTextField.processKeyEvent(new KeyEvent(this,KeyEvent.KEY_PRESSED,0,0,KeyEvent.VK_L,'l')); + autoTextField.processKeyEvent(new KeyEvent(this,KeyEvent.KEY_TYPED,0,0,KeyEvent.VK_UNDEFINED,'l')); + } + + public void simulateKeyStroke(int keyCode, char c) { + KeyEvent k = new KeyEvent(this,KeyEvent.KEY_PRESSED,0,0,keyCode,c); + autoTextField.processKeyEvent(k); + k.setKeyCode(KeyEvent.KEY_RELEASED); + autoTextField.processKeyEvent(k); + k = new KeyEvent(this,KeyEvent.KEY_TYPED,0,0,KeyEvent.VK_UNDEFINED,c); + autoTextField.processKeyEvent(k); + } + } class OboException extends Exception { Modified: phenote/trunk/src/java/phenote/gui/field/CompListSearcher.java =================================================================== --- phenote/trunk/src/java/phenote/gui/field/CompListSearcher.java 2006-10-13 19:08:49 UTC (rev 158) +++ phenote/trunk/src/java/phenote/gui/field/CompListSearcher.java 2006-10-16 16:03:41 UTC (rev 159) @@ -192,9 +192,10 @@ definitions.add(ct); // start with/contains? } - private void addTerm(CompletionTerm ct, List startsWith, List contains) { + private void addTerm(CompletionTerm ct, List<CompletionTerm> startsWith, + List<CompletionTerm> contains) { if (ct.isExactMatch()) // for syns as well? sure why not? - startsWith.add(0); + startsWith.add(0,ct); else if (ct.isStartsWithMatch()) startsWith.add(ct); else Modified: phenote/trunk/src/java/phenote/gui/field/CompletionTerm.java =================================================================== --- phenote/trunk/src/java/phenote/gui/field/CompletionTerm.java 2006-10-13 19:08:49 UTC (rev 158) +++ phenote/trunk/src/java/phenote/gui/field/CompletionTerm.java 2006-10-16 16:03:41 UTC (rev 159) @@ -8,13 +8,14 @@ /** This is basically a view object for the auto completer for terms/OBOClass */ public class CompletionTerm { - OBOClass term; - boolean termMatch = false; - boolean synonymMatch = false; - boolean definitionMatch = false; - boolean exactMatch = false; - boolean startsWith = false; - boolean contains = false; // do we need this? + private OBOClass term; + private boolean termMatch = false; + private boolean isSynMatch = false; + private String synMatchString; + private boolean definitionMatch = false; + private boolean exactMatch = false; + private boolean startsWith = false; + private boolean contains = false; // do we need this? CompletionTerm(OBOClass term) { this.term = term; @@ -23,7 +24,7 @@ OBOClass getOboClass() { return term; } boolean isTermMatch() { return termMatch; } - boolean isSynMatch() { return synonymMatch; } + boolean isSynMatch() { return isSynMatch; } boolean isDefinitionMatch() { return definitionMatch; } boolean isExactMatch() { return exactMatch; } @@ -34,7 +35,13 @@ } private String compListDisplayString() { - StringBuffer s = new StringBuffer(term.getName()); + StringBuffer s = new StringBuffer(); + if (isSynMatch()) + s.append(synMatchString).append("[syn]"); + else + s.append(getName()); + if (isDefinitionMatch()) + s.append("[def]"); if (term.isObsolete()) s.append("[obs]"); return s.toString(); @@ -64,7 +71,8 @@ for (Object o : getSyns()) { String syn = o.toString(); if (stringMatches(input,syn)) { - synonymMatch = true; + isSynMatch = true; + synMatchString = syn; return true; } } Modified: phenote/trunk/src/java/phenote/gui/field/RelationCompList.java =================================================================== --- phenote/trunk/src/java/phenote/gui/field/RelationCompList.java 2006-10-13 19:08:49 UTC (rev 158) +++ phenote/trunk/src/java/phenote/gui/field/RelationCompList.java 2006-10-16 16:03:41 UTC (rev 159) @@ -39,6 +39,13 @@ setRel(getSelectedRelation()); } + protected String getCurrentTermRelName() { + if (currentRel!= null) + return currentRel.getName(); + else + return ""; + } + /** for relationships (post comp rel) */ void setRel(OBOProperty rel) { if (rel == null) { Modified: phenote/trunk/src/java/phenote/gui/field/TermCompList.java =================================================================== --- phenote/trunk/src/java/phenote/gui/field/TermCompList.java 2006-10-13 19:08:49 UTC (rev 158) +++ phenote/trunk/src/java/phenote/gui/field/TermCompList.java 2006-10-16 16:03:41 UTC (rev 159) @@ -22,30 +22,11 @@ private OBOClass currentOboClass=null; TermCompList(CompListSearcher s,boolean editModel) { - super(s,editModel); enableTermInfoListening(); - // this inner class enables retrieving of JList for mouse over - // this will probably throw errors if non metal look & feel is used -// setUI(new MetalListComboUI()); -// //setFont(new Font("Courier",Font.PLAIN,12)); + } -// setOntology(ontology); -// searchParams = sp; // singleton access? part of ontology? -// setEditable(true); -// AutoTextFieldEditor autoTextFieldEditor = new AutoTextFieldEditor(); -// this.setEditor(autoTextFieldEditor); -// setPreferredSize(new Dimension(350,22)); -// enableTermInfoListening(true); // default -// //addCompletionListListener(compList); - -// //if (editModel) // ComboBoxActionListener edits the model -// this.editModel = editModel; -// addActionListener(new ComboBoxActionListener()); - - } - protected Vector getSearchItems(String input) { return getCompListSearcher().getStringMatchTerms(input); } @@ -57,6 +38,13 @@ //currentOboClass = getSelectedOboClass(); } + protected String getCurrentTermRelName() { + if (currentOboClass!= null) + return currentOboClass.getName(); + else + return ""; + } + /** rename setTerm? */ void setOboClass(OBOClass term) { if (term == null) { @@ -99,15 +87,6 @@ return (CompletionTerm)obj; } -// // strings get in somehow - need to figure out where they are coming from -// private OBOClass oboClassDowncast(Object obj) throws OboException { -// if (obj == null) throw new OboException(); -// if ( ! (obj instanceof OBOClass)) { -// //log.info("Item in completion list not obo class "+obj.getClass()); -// throw new OboException("Item in completion list not obo class "+obj.getClass()); -// } -// return (OBOClass)obj; -// } protected void editModel() { OBOClass oboClass; @@ -167,7 +146,7 @@ //System.out.println("sel val "+selectedValue.getClass()+" name "+selectedValue); // the selected item should be an OBOClass if (!(selectedValue instanceof CompletionTerm)) { - log.debug("selected completion term is not CompTerm "+selectedValue.getClass()); + log().debug("selected completion term is not CompTerm "+selectedValue.getClass()); return; } CompletionTerm ct = (CompletionTerm)selectedValue; @@ -200,6 +179,33 @@ } } + // this inner class enables retrieving of JList for mouse over + // this will probably throw errors if non metal look & feel is used +// setUI(new MetalListComboUI()); +// //setFont(new Font("Courier",Font.PLAIN,12)); + +// setOntology(ontology); +// searchParams = sp; // singleton access? part of ontology? +// setEditable(true); +// AutoTextFieldEditor autoTextFieldEditor = new AutoTextFieldEditor(); +// this.setEditor(autoTextFieldEditor); +// setPreferredSize(new Dimension(350,22)); + +// enableTermInfoListening(true); // default +// //addCompletionListListener(compList); + +// //if (editModel) // ComboBoxActionListener edits the model +// this.editModel = editModel; +// addActionListener(new ComboBoxActionListener()); +// // strings get in somehow - need to figure out where they are coming from +// private OBOClass oboClassDowncast(Object obj) throws OboException { +// if (obj == null) throw new OboException(); +// if ( ! (obj instanceof OBOClass)) { +// //log.info("Item in completion list not obo class "+obj.getClass()); +// throw new OboException("Item in completion list not obo class "+obj.getClass()); +// } +// return (OBOClass)obj; +// } // private OBOClass getCompListOboClass(int index) { // Object obj = defaultComboBoxModel.getElementAt(index); // return oboClassDowncast(obj); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mg...@us...> - 2006-11-16 23:28:17
|
Revision: 201 http://svn.sourceforge.net/obo/?rev=201&view=rev Author: mgibson Date: 2006-11-16 15:28:15 -0800 (Thu, 16 Nov 2006) Log Message: ----------- undo is no longer so awkward for free text fields where before it was undoing letter by letter - not it undoes the all things typed until focus changes which is usually the whole field - well in any case its the last chunk of text the user added to the field this was done by doing the commits to model on focus change rather than key types - which i think is fine - this will also work for checks to see if the input is proper like : for dbxref ids broke out free text field from char field gui - its a has a not a isa - wasnt sure though Modified Paths: -------------- phenote/trunk/src/java/phenote/gui/field/CharFieldGui.java Added Paths: ----------- phenote/trunk/src/java/phenote/gui/field/FreeTextField.java Modified: phenote/trunk/src/java/phenote/gui/field/CharFieldGui.java =================================================================== --- phenote/trunk/src/java/phenote/gui/field/CharFieldGui.java 2006-11-11 00:18:18 UTC (rev 200) +++ phenote/trunk/src/java/phenote/gui/field/CharFieldGui.java 2006-11-16 23:28:15 UTC (rev 201) @@ -1,19 +1,16 @@ package phenote.gui.field; -import java.util.List; -import java.awt.Toolkit; +//import java.util.List; +//import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.Container; -import java.awt.datatransfer.Clipboard; -import java.awt.datatransfer.DataFlavor; -import java.awt.datatransfer.Transferable; import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JLabel; -import javax.swing.JTextField; -import javax.swing.event.DocumentListener; -import javax.swing.event.DocumentEvent; +//import javax.swing.JTextField; +//import javax.swing.event.DocumentListener; +//import javax.swing.event.DocumentEvent; import org.apache.log4j.Logger; @@ -28,9 +25,9 @@ import phenote.datamodel.OntologyManager; import phenote.edit.CharChangeEvent; import phenote.edit.CharChangeListener; -import phenote.edit.CompoundTransaction; +//import phenote.edit.CompoundTransaction; import phenote.edit.EditManager; -import phenote.edit.UpdateTransaction; +//import phenote.edit.UpdateTransaction; import phenote.gui.selection.CharSelectionListener; import phenote.gui.selection.CharSelectionEvent; import phenote.gui.selection.SelectionManager; @@ -45,7 +42,8 @@ private RelationCompList relCompList; private TermCompList termCompList; private CompListSearcher compListSearcher; - private JTextField textField; + //private JTextField textField; + private FreeTextField freeTextField; private boolean isCompList = false; private CharField charField; private FieldPanel fieldPanel; @@ -97,6 +95,8 @@ EditManager.inst().addCharChangeListener(new FieldCharChangeListener()); } + boolean updateGuiOnly() { return updateGuiOnly; } + /** edits from post comp come in here i believe (term info used to but now thats done with UseTermEvent) */ private class FieldCharChangeListener implements CharChangeListener { @@ -247,46 +247,46 @@ private void initTextField(String label) { isCompList = false; fieldPanel.addLabel(label); - textField = new JTextField(25); - textField.setEditable(true); - // addGenericDocumentListener... - textField.getDocument().addDocumentListener(new TextFieldDocumentListener()); - fieldPanel.addFieldGui(textField); + freeTextField = new FreeTextField(this); +// textField = new JTextField(25); +// textField.setEditable(true); +// textField.getDocument().addDocumentListener(new TextFieldDocumentListener()); +// textField.addKeyListener(new TextKeyListener()); + fieldPanel.addFieldGui(freeTextField.getComponent()); + } - textField.addKeyListener(new TextKeyListener()); + private FreeTextField getFreeTextField() { return freeTextField; } - } +// /** key listener for free text fields for Cmd-V pasting for macs */ +// private class TextKeyListener extends java.awt.event.KeyAdapter { +// public void keyPressed(java.awt.event.KeyEvent e) { +// // on a mac Command-V is paste. this aint so with java/metal look&feel +// if (e.getKeyChar() == 'v' +// && e.getKeyModifiersText(e.getModifiers()).equals("Command")) { +// //log().debug("got cmd V paste"); +// //System.getClipboard +// Clipboard c = Toolkit.getDefaultToolkit().getSystemClipboard(); +// try { +// Transferable t = c.getContents(null); // null? +// Object s = t.getTransferData(DataFlavor.stringFlavor); +// // this isnt quite right as it should just insert the text not wipe +// // it out - but probably sufficient for now? +// if (s != null) +// setText(s.toString()); +// } catch (Exception ex) { System.out.println("failed paste "+ex); } +// } +// } +// } - /** key listener for free text fields for Cmd-V pasting for macs */ - private class TextKeyListener extends java.awt.event.KeyAdapter { - public void keyPressed(java.awt.event.KeyEvent e) { - // on a mac Command-V is paste. this aint so with java/metal look&feel - if (e.getKeyChar() == 'v' - && e.getKeyModifiersText(e.getModifiers()).equals("Command")) { - //log().debug("got cmd V paste"); - //System.getClipboard - Clipboard c = Toolkit.getDefaultToolkit().getSystemClipboard(); - try { - Transferable t = c.getContents(null); // null? - Object s = t.getTransferData(DataFlavor.stringFlavor); - // this isnt quite right as it should just insert the text not wipe - // it out - but probably sufficient for now? - if (s != null) - setText(s.toString()); - } catch (Exception ex) { System.out.println("failed paste "+ex); } - } - } - } - void setText(String text) { // set/getText interface to combo & text field? if (isCompList) getCompList().setText(text); - else textField.setText(text); + else getFreeTextField().setText(text); } String getText() { if (isCompList) return getCompList().getText(); - else return textField.getText(); + else return getFreeTextField().getText(); } /** clears gui not model - for multi select - may want to set to * or something? */ void setGuiForMultiSelect() { @@ -319,34 +319,34 @@ return SelectionManager.inst().getFirstSelectedCharacter(); } - private List<CharacterI> getSelectedChars() { - return SelectionManager.inst().getSelectedChars(); - } +// List<CharacterI> getSelectedChars() { +// return SelectionManager.inst().getSelectedChars(); +// } - // separate char text field class? - /** This is where the model gets updated (for free text fields) */ - private class TextFieldDocumentListener implements DocumentListener { - //private String previousVal = null; - public void changedUpdate(DocumentEvent e) { updateModel(); } - public void insertUpdate(DocumentEvent e) { updateModel(); } - public void removeUpdate(DocumentEvent e) { updateModel(); } - private void updateModel() { - // if only updating gui (multi select clear) then dont update model - if (updateGuiOnly) return; - // on delete last pheno row clearing of text will trigger this - //if (!characterTablePanel.hasRows()) return; - //String genotype = lumpField.getText(); - //characterTablePanel.setSelectedGenotype(genotype); - List<CharacterI> chars = getSelectedChars(); - // i believe this isnt using oboClass as we just have string - // of course it isnt this is free text - String v = getText(); - //UpdateTransaction ut = new UpdateTransaction(char,getCharFieldEnum(),v); - CompoundTransaction ct = new CompoundTransaction(chars,getCharFieldEnum(),v); - EditManager.inst().updateModel(CharFieldGui.this,ct); - //previousVal = v; // undo - } - } +// // separate char text field class? +// /** This is where the model gets updated (for free text fields) */ +// private class TextFieldDocumentListener implements DocumentListener { +// //private String previousVal = null; +// public void changedUpdate(DocumentEvent e) { updateModel(); } +// public void insertUpdate(DocumentEvent e) { updateModel(); } +// public void removeUpdate(DocumentEvent e) { updateModel(); } +// private void updateModel() { +// // if only updating gui (multi select clear) then dont update model +// if (updateGuiOnly) return; +// // on delete last pheno row clearing of text will trigger this +// //if (!characterTablePanel.hasRows()) return; +// //String genotype = lumpField.getText(); +// //characterTablePanel.setSelectedGenotype(genotype); +// List<CharacterI> chars = getSelectedChars(); +// // i believe this isnt using oboClass as we just have string +// // of course it isnt this is free text +// String v = getText(); +// //UpdateTransaction ut = new UpdateTransaction(char,getCharFieldEnum(),v); +// CompoundTransaction ct = new CompoundTransaction(chars,getCharFieldEnum(),v); +// EditManager.inst().updateModel(CharFieldGui.this,ct); +// //previousVal = v; // undo +// } +// } private class FieldCharSelectListener implements CharSelectionListener { public void charactersSelected(CharSelectionEvent e) { Added: phenote/trunk/src/java/phenote/gui/field/FreeTextField.java =================================================================== --- phenote/trunk/src/java/phenote/gui/field/FreeTextField.java (rev 0) +++ phenote/trunk/src/java/phenote/gui/field/FreeTextField.java 2006-11-16 23:28:15 UTC (rev 201) @@ -0,0 +1,104 @@ +package phenote.gui.field; + +import java.util.List; +import java.awt.Toolkit; +import java.awt.event.FocusEvent; +import java.awt.event.FocusListener; +import java.awt.datatransfer.Clipboard; +import java.awt.datatransfer.DataFlavor; +import java.awt.datatransfer.Transferable; +import java.awt.event.KeyAdapter; +import java.awt.event.KeyEvent; +import javax.swing.JTextField; +import javax.swing.event.DocumentListener; +import javax.swing.event.DocumentEvent; + +import phenote.datamodel.CharacterI; +import phenote.datamodel.CharFieldEnum; +import phenote.edit.CompoundTransaction; +import phenote.edit.EditManager; +import phenote.gui.selection.SelectionManager; + +// should this be a subclass of charfieldGui? maybe? +class FreeTextField { + + private JTextField textField; + private CharFieldGui charFieldGui; + private boolean guiTextHasChanged = false; + + //private void initTextField(String label) { + FreeTextField(CharFieldGui cfg) { + charFieldGui = cfg; + textField = new JTextField(25); + textField.setEditable(true); + textField.getDocument().addDocumentListener(new TextFieldDocumentListener()); + textField.addFocusListener(new FreeFocusListener()); + textField.addKeyListener(new TextKeyListener()); + } + + JTextField getComponent() { return textField; } + + void setText(String text) { + textField.setText(text); + } + String getText() { return textField.getText(); } + + private boolean updateGuiOnly() { return charFieldGui.updateGuiOnly(); } + + /** key listener for free text fields for Cmd-V pasting for macs */ + private class TextKeyListener extends KeyAdapter { + public void keyPressed(KeyEvent e) { + // on a mac Command-V is paste. this aint so with java/metal look&feel + if (e.getKeyChar() == 'v' + && e.getKeyModifiersText(e.getModifiers()).equals("Command")) { + //log().debug("got cmd V paste"); + //System.getClipboard + Clipboard c = Toolkit.getDefaultToolkit().getSystemClipboard(); + try { + Transferable t = c.getContents(null); // null? + Object s = t.getTransferData(DataFlavor.stringFlavor); + // this isnt quite right as it should just insert the text not wipe + // it out - but probably sufficient for now? + if (s != null) + setText(s.toString()); + } catch (Exception ex) { System.out.println("failed paste "+ex); } + } + } + } + + /** if the focus has changed and the gui has been edited then edit the model */ + private class FreeFocusListener implements FocusListener { + public void focusGained(FocusEvent e) {} + public void focusLost(FocusEvent e) { + updateModel(); + } + } + + private void updateModel() { + // if only updating gui (multi select clear) then dont update model + if (updateGuiOnly()) return; + if (!guiTextHasChanged) return; // gui hasnt been edited + List<CharacterI> chars = getSelectedChars(); + String v = getText(); + CompoundTransaction ct = new CompoundTransaction(chars,getCharFieldEnum(),v); + EditManager.inst().updateModel(charFieldGui,ct); // cfg source + guiTextHasChanged = false; // reset flag + } + + private List<CharacterI> getSelectedChars() { + return SelectionManager.inst().getSelectedChars(); + } + + private CharFieldEnum getCharFieldEnum() { return charFieldGui.getCharFieldEnum(); } + + + /** This is where it is noted that the gui has been edited, only update + the model on focus change if the gui has been actually edited */ + private class TextFieldDocumentListener implements DocumentListener { + public void changedUpdate(DocumentEvent e) { setGuiChanged(); } + public void insertUpdate(DocumentEvent e) { setGuiChanged(); } + public void removeUpdate(DocumentEvent e) { setGuiChanged(); } + private void setGuiChanged() { guiTextHasChanged = true; } + } + +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mg...@us...> - 2007-04-30 23:45:49
|
Revision: 528 http://svn.sourceforge.net/obo/?rev=528&view=rev Author: mgibson Date: 2007-04-30 16:45:50 -0700 (Mon, 30 Apr 2007) Log Message: ----------- fixed bug where text from free text fields was "sticking" when selecting a new character with no text in that field Modified Paths: -------------- phenote/trunk/src/java/phenote/gui/field/AbstractAutoCompList.java phenote/trunk/src/java/phenote/gui/field/CharFieldGui.java phenote/trunk/src/java/phenote/gui/field/FreeTextField.java Modified: phenote/trunk/src/java/phenote/gui/field/AbstractAutoCompList.java =================================================================== --- phenote/trunk/src/java/phenote/gui/field/AbstractAutoCompList.java 2007-04-30 23:18:38 UTC (rev 527) +++ phenote/trunk/src/java/phenote/gui/field/AbstractAutoCompList.java 2007-04-30 23:45:50 UTC (rev 528) @@ -124,6 +124,7 @@ protected void setSearchParams(SearchParamsI sp) { searchParams = sp; + // this assumes that its set up initially with ALL - presumptious? compListSearcher = new CompListSearcher(getCharField().getOntologyList()); } Modified: phenote/trunk/src/java/phenote/gui/field/CharFieldGui.java =================================================================== --- phenote/trunk/src/java/phenote/gui/field/CharFieldGui.java 2007-04-30 23:18:38 UTC (rev 527) +++ phenote/trunk/src/java/phenote/gui/field/CharFieldGui.java 2007-04-30 23:45:50 UTC (rev 528) @@ -44,14 +44,6 @@ details of the gui - just a field that gives text should there be subclasses for free text, term, & relations? hmmmm */ abstract class CharFieldGui { - //private AutoComboBox comboBox; - //private AbstractAutoCompList comboBox; // ??? - //private RelationCompList relCompList; - //private TermCompList termCompList; - //private CompListSearcher compListSearcher; - //private JTextField textField; - //private FreeTextField freeTextField; - //private boolean isCompList = false; private CharField charField; //private FieldPanel fieldPanel; //private JComboBox ontologyChooserCombo; @@ -75,13 +67,6 @@ t.enableListeners(true); t.allowPostCompButton(true); return t; - //return createCompList(charField,sp); -// if (charField.isRelationship()) { -// return new RelationCompList(searcher,editModel,charField); -// } -// else { -// return new TermCompList(searcher,editModel,charField); -// } } else { FreeTextField f = new FreeTextField(charField); @@ -90,19 +75,7 @@ } } -// private static CharFieldGui createCompList(CharField charField, SearchParamsI sp) { -// // enableListeners - if false then ACB wont directly edit model (post comp) -// //compListSearcher = new CompListSearcher(charField.getOntologyList(),sp); -// //new CompListSearcher(charField.getFirstOntology(),fieldPanel.getSearchParams()); -// if (charField.isRelationshipList()) { -// return new RelationCompList(sp,enableListeners,charField); -// } -// else { -// return new TermCompList(sp,enableListeners); -// } -// } - // private static CharFieldGui createFreeTextField() {} ?? /** createPostCompRelationList - will relation lists ever be in main window and if so will they ever have listeners enabled - maybe, probably not */ @@ -134,36 +107,8 @@ protected CharFieldGui(CharField charField) { init(charField); } -// protected CharFieldGui(CharField charField,String label) { -// init(charField,label); -// } -// protected CharFieldGui(CharField charField,boolean enableListeners) { -// //this.enableListeners = enableListeners; -// enableListeners(enableListeners); -// init(charField); -// } - -// CharFieldGui(CharField charField, FieldPanel tp) {/*Container parent,*/ -// init(charField,tp); -// } - -// /** @param enableListeners - a catchall flag for disabling editing model, listening -// to model edits, & litening to selection - postcompGui handles these and sets -// this false, in main window this is true - rename? more flags? subclass? -// postCompGui mode? -// @param addCompButton if false override configuration and dont show -// post comp button */ -// CharFieldGui(CharField cf,FieldPanel tp,String label,boolean enableListeners, -// boolean addCompButton) { -// this.label = label; -// this.enableListeners = enableListeners; -// this.addCompButton = addCompButton; // post comp button -// init(cf,tp); -// } - - private void init(CharField cf) { //, FieldPanel tp) { charField = cf; //fieldPanel = tp; @@ -560,3 +505,60 @@ return log; } } + + // private static CharFieldGui createFreeTextField() {} ?? + +// private static CharFieldGui createCompList(CharField charField, SearchParamsI sp) { +// // enableListeners - if false then ACB wont directly edit model (post comp) +// //compListSearcher = new CompListSearcher(charField.getOntologyList(),sp); +// //new CompListSearcher(charField.getFirstOntology(),fieldPanel.getSearchParams()); +// if (charField.isRelationshipList()) { +// return new RelationCompList(sp,enableListeners,charField); +// } +// else { +// return new TermCompList(sp,enableListeners); +// } +// } + //return createCompList(charField,sp); +// if (charField.isRelationship()) { +// return new RelationCompList(searcher,editModel,charField); +// } +// else { +// return new TermCompList(searcher,editModel,charField); +// } + //private AutoComboBox comboBox; + //private AbstractAutoCompList comboBox; // ??? + //private RelationCompList relCompList; + //private TermCompList termCompList; + //private CompListSearcher compListSearcher; + //private JTextField textField; + //private FreeTextField freeTextField; + //private boolean isCompList = false; +// protected CharFieldGui(CharField charField,String label) { +// init(charField,label); +// } + +// protected CharFieldGui(CharField charField,boolean enableListeners) { +// //this.enableListeners = enableListeners; +// enableListeners(enableListeners); +// init(charField); +// } + + +// CharFieldGui(CharField charField, FieldPanel tp) {/*Container parent,*/ +// init(charField,tp); +// } + +// /** @param enableListeners - a catchall flag for disabling editing model, listening +// to model edits, & litening to selection - postcompGui handles these and sets +// this false, in main window this is true - rename? more flags? subclass? +// postCompGui mode? +// @param addCompButton if false override configuration and dont show +// post comp button */ +// CharFieldGui(CharField cf,FieldPanel tp,String label,boolean enableListeners, +// boolean addCompButton) { +// this.label = label; +// this.enableListeners = enableListeners; +// this.addCompButton = addCompButton; // post comp button +// init(cf,tp); +// } Modified: phenote/trunk/src/java/phenote/gui/field/FreeTextField.java =================================================================== --- phenote/trunk/src/java/phenote/gui/field/FreeTextField.java 2007-04-30 23:18:38 UTC (rev 527) +++ phenote/trunk/src/java/phenote/gui/field/FreeTextField.java 2007-04-30 23:45:50 UTC (rev 528) @@ -93,8 +93,11 @@ return; } //String v = charField.getCharFieldEnum().getValue(chr).getName(); - if (!chr.hasValue(getCharField())) + //if (!chr.hasValue(getCharField())) return; + if (!chr.hasValue(getCharField())) { + setText(""); // ?? null? return; + } String v = chr.getValue(getCharField()).getName(); setText(v); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ba...@us...> - 2007-07-09 20:18:58
|
Revision: 707 http://svn.sourceforge.net/obo/?rev=707&view=rev Author: balhoff Date: 2007-07-09 13:18:58 -0700 (Mon, 09 Jul 2007) Log Message: ----------- Updated PostComp gui classes to use custom EditManager and SelectionManager, and open dialog in front of appropriate parent - this is now not necessarily the main window. Modified Paths: -------------- phenote/trunk/src/java/phenote/gui/field/CharFieldGui.java phenote/trunk/src/java/phenote/gui/field/PostCompGui.java phenote/trunk/src/java/phenote/gui/field/TermCompList.java Modified: phenote/trunk/src/java/phenote/gui/field/CharFieldGui.java =================================================================== --- phenote/trunk/src/java/phenote/gui/field/CharFieldGui.java 2007-07-06 22:57:44 UTC (rev 706) +++ phenote/trunk/src/java/phenote/gui/field/CharFieldGui.java 2007-07-09 20:18:58 UTC (rev 707) @@ -57,6 +57,7 @@ static Dimension inputSize = new Dimension(390,fieldHeight); // size of user input box private boolean editModel = true; private SelectionManager selectionManager; + private EditManager editManager; /** CharFieldGui for main window not post comp box - factory method */ @@ -133,8 +134,17 @@ } public void setEditManager(EditManager manager) { + this.editManager = manager; manager.addCharChangeListener(new FieldCharChangeListener()); } + + public EditManager getEditManager() { + if (this.editManager == null) { + return EditManager.inst(); + } else { + return this.editManager; + } + } protected void enableEditModel(boolean em) { editModel = em; } protected boolean editModelEnabled() { return editModel; } Modified: phenote/trunk/src/java/phenote/gui/field/PostCompGui.java =================================================================== --- phenote/trunk/src/java/phenote/gui/field/PostCompGui.java 2007-07-06 22:57:44 UTC (rev 706) +++ phenote/trunk/src/java/phenote/gui/field/PostCompGui.java 2007-07-09 20:18:58 UTC (rev 707) @@ -1,43 +1,39 @@ package phenote.gui.field; -import java.util.ArrayList; -import java.util.List; +import java.awt.BorderLayout; import java.awt.Dimension; -import java.awt.BorderLayout; import java.awt.Frame; -import java.awt.GridBagLayout; import java.awt.event.ActionEvent; +import java.util.ArrayList; +import java.util.List; + import javax.swing.AbstractAction; import javax.swing.Box; import javax.swing.BoxLayout; import javax.swing.JButton; import javax.swing.JDialog; +import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.JPanel; import org.apache.log4j.Logger; - import org.geneontology.oboedit.datamodel.OBOClass; import org.geneontology.oboedit.datamodel.OBOProperty; import org.geneontology.oboedit.datamodel.OBORestriction; -import org.geneontology.oboedit.datamodel.impl.OBOClassImpl; -import org.geneontology.oboedit.datamodel.impl.OBOPropertyImpl; -import org.geneontology.oboedit.datamodel.impl.OBORestrictionImpl; -import phenote.datamodel.CharacterI; import phenote.datamodel.CharField; import phenote.datamodel.CharFieldEnum; +import phenote.datamodel.CharacterI; import phenote.datamodel.OboUtil; import phenote.datamodel.Ontology; import phenote.edit.CharChangeEvent; import phenote.edit.CharChangeListener; +import phenote.edit.CompoundTransaction; import phenote.edit.EditManager; -//import phenote.edit.UpdateTransaction; -import phenote.edit.CompoundTransaction; -import phenote.main.Phenote; import phenote.gui.selection.CharSelectionEvent; import phenote.gui.selection.CharSelectionListener; import phenote.gui.selection.SelectionManager; +import phenote.main.Phenote; //import phenote.gui.SearchParams; //import phenote.gui.SearchParamsI; @@ -58,10 +54,16 @@ private List<RelDiffGui> relDiffGuis = new ArrayList<RelDiffGui>(3); //private SearchParamsI searchParams = SearchParams.inst(); private FieldPanel compFieldPanel; - - PostCompGui(CharField charField) { + private EditManager editManager; + private SelectionManager selectionManager; + private Frame owner; + + + PostCompGui(CharField charField, EditManager eManager, SelectionManager selManager, Frame ownerFrame) { this.charField = charField; - //this.searchParams = searchParams; + this.editManager = eManager; + this.selectionManager = selManager; + this.owner = ownerFrame; init(); } @@ -76,8 +78,12 @@ Ontology o = charField.getPostCompRelOntol(); relChar.addOntology(o); relField = CharFieldGui.makeRelationList(relChar);//"Relationship"? + relField.setEditManager(PostCompGui.this.editManager); + relField.setSelectionManager(PostCompGui.this.selectionManager); compFieldPanel.addCharFieldGuiToPanel(relField); diffField = CharFieldGui.makePostCompTermList(charField,"Differentia"); + diffField.setEditManager(PostCompGui.this.editManager); + diffField.setSelectionManager(PostCompGui.this.selectionManager); compFieldPanel.addCharFieldGuiToPanel(diffField); } private void setRelDiffModel(RelDiffModel rd) { @@ -101,13 +107,14 @@ private void init() { // dialog wont be focusable if owner is not showing or something like that - Frame owner = Phenote.getPhenote().getFrame(); - dialog = new JDialog(owner,charField.getName()+" Post Composition"); - compFieldPanel = new FieldPanel(false,false); // (searchParams)? + + dialog = new JDialog(this.owner, charField.getName() + " Post Composition"); + compFieldPanel = new FieldPanel(false,false, null, this.selectionManager, this.editManager); // (searchParams)? //compFieldPanel.setSearchParams(searchParams); // MAIN GENUS TERM genusField = CharFieldGui.makePostCompTermList(charField,"Genus"); + genusField.setSelectionManager(this.selectionManager); compFieldPanel.addCharFieldGuiToPanel(genusField); // REL-DIFFS @@ -131,8 +138,8 @@ dialog.setLocationRelativeTo(owner); dialog.setVisible(true); - EditManager.inst().addCharChangeListener(new CompCharChangeListener()); - SelectionManager.inst().addCharSelectionListener(new CompCharSelectListener()); + this.editManager.addCharChangeListener(new CompCharChangeListener()); + this.selectionManager.addCharSelectionListener(new CompCharSelectListener()); } private void addRelDiffGui() { @@ -189,7 +196,7 @@ private OBOClass getModelTerm() { // there should be convenience method for this // multi select get 1st?? - CharacterI c = SelectionManager.inst().getFirstSelectedCharacter(); + CharacterI c = this.selectionManager.getFirstSelectedCharacter(); //return charField.getCharFieldEnum().getValue(c).getOboClass(); return c.getValue(charField).getOboClass(); } @@ -338,11 +345,11 @@ } private void commitTerm(OBOClass postComp) { - List<CharacterI> chrs = SelectionManager.inst().getSelectedChars(); + List<CharacterI> chrs = this.selectionManager.getSelectedChars(); //CharFieldEnum cfe = charField.getCharFieldEnum(); //CompoundTransaction ct = new CompoundTransaction(chrs,cfe,postComp); CompoundTransaction ct = CompoundTransaction.makeUpdate(chrs,charField,postComp); - EditManager.inst().updateModel(this,ct); + this.editManager.updateModel(this,ct); } private String pcString(String g, String d) { Modified: phenote/trunk/src/java/phenote/gui/field/TermCompList.java =================================================================== --- phenote/trunk/src/java/phenote/gui/field/TermCompList.java 2007-07-06 22:57:44 UTC (rev 706) +++ phenote/trunk/src/java/phenote/gui/field/TermCompList.java 2007-07-09 20:18:58 UTC (rev 707) @@ -1,22 +1,29 @@ package phenote.gui.field; +import java.awt.Frame; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.util.List; + +import javax.swing.JButton; +import javax.swing.JComboBox; +import javax.swing.JList; +import javax.swing.event.ListSelectionEvent; +import javax.swing.event.ListSelectionListener; + import org.apache.log4j.Logger; import org.geneontology.oboedit.datamodel.OBOClass; -import phenote.datamodel.*; + +import phenote.datamodel.CharField; +import phenote.datamodel.CharacterI; +import phenote.datamodel.Ontology; +import phenote.datamodel.OntologyException; +import phenote.datamodel.OntologyManager; import phenote.edit.CompoundTransaction; import phenote.edit.EditManager; -import phenote.gui.SearchParams; -import phenote.gui.selection.SelectionManager; import phenote.gui.selection.UseTermEvent; import phenote.gui.selection.UseTermListener; -import javax.swing.*; -import javax.swing.event.ListSelectionEvent; -import javax.swing.event.ListSelectionListener; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.util.List; - class TermCompList extends AbstractAutoCompList { private OBOClass currentOboClass = null; @@ -324,7 +331,8 @@ */ private class PostCompListener implements ActionListener { public void actionPerformed(ActionEvent e) { - new PostCompGui(getCharField()); + final Frame frame = (Frame)(TermCompList.this.postCompButton.getTopLevelAncestor()); + new PostCompGui(getCharField(), TermCompList.this.getEditManager(), TermCompList.this.getSelectionManager(), frame); } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mg...@us...> - 2007-08-27 18:46:20
|
Revision: 818 http://obo.svn.sourceforge.net/obo/?rev=818&view=rev Author: mgibson Date: 2007-08-27 11:46:22 -0700 (Mon, 27 Aug 2007) Log Message: ----------- finally committing the stuff i wrote on the plane the other day so this is an optimization for term completion if user is just adding another letter - commmon case - phenote will search previous completion list as its just a refinement rather than searching all terms all over again Modified Paths: -------------- phenote/trunk/src/java/phenote/gui/field/AbstractAutoCompList.java phenote/trunk/src/java/phenote/gui/field/CompListSearcher.java Modified: phenote/trunk/src/java/phenote/gui/field/AbstractAutoCompList.java =================================================================== --- phenote/trunk/src/java/phenote/gui/field/AbstractAutoCompList.java 2007-08-27 18:43:06 UTC (rev 817) +++ phenote/trunk/src/java/phenote/gui/field/AbstractAutoCompList.java 2007-08-27 18:46:22 UTC (rev 818) @@ -218,21 +218,33 @@ private void doCompletion(boolean showPopup) { if (!doCompletion) // flag set if text filled in externally (from table sel) return; + // too soon - text field doesnt have text yet.... hmmmm.... String input = getText(); // returns a list of CompletionTerms (checks if relations) // if input is empty will return whole list (if configged) + //log().debug("got new completion request for input "+input+" time "+time()); List<CompletionTerm> l = getSearchItems(input); - changingCompletionList = true; + //log().debug("got search items for input "+input+" milsec: "+time()); + changingCompletionList = true; // could just do comboBoxModel.setList(l); ??? compComboBoxModel = new CompComboBoxModel(l); jComboBox.setModel(compComboBoxModel); changingCompletionList = false; if (showPopup) jComboBox.showPopup();//only show popup on key events actually only do comp w key + //log().debug("put comp list in gui for input "+input+" milsec: "+time()); } + private long time=0; + private long time() { + long newTime = System.currentTimeMillis(); + long newTimeDiff = newTime-time; + time = newTime; + return newTimeDiff; + } + // for subclasses to override - abstract? protected void returnKeyHit() {} Modified: phenote/trunk/src/java/phenote/gui/field/CompListSearcher.java =================================================================== --- phenote/trunk/src/java/phenote/gui/field/CompListSearcher.java 2007-08-27 18:43:06 UTC (rev 817) +++ phenote/trunk/src/java/phenote/gui/field/CompListSearcher.java 2007-08-27 18:46:22 UTC (rev 818) @@ -28,6 +28,8 @@ //private boolean searchAll=false; private List<Ontology> ontologyList = new ArrayList<Ontology>(3); private SearchParamsI searchParams = SearchParams.inst(); // singleton + private String previousInput = ""; + private List<CompletionTerm> previousCompList = new ArrayList<CompletionTerm>(); /** Ontology - the initial ontology to search, setOntology changes this, initially only searches the one ontology (not ALL) - used by servlet which @@ -80,21 +82,33 @@ return searchTerms; // empty } - // gets term set for currently selected ontology(s) - //Set ontologyTermList = getCurrentOntologyTermSet(); - // THIS IS WRONG! or is it? - for (Ontology ontology : ontologyList) { - Collection<OBOClass> ontologyTermList = ontology.getSortedTerms(); // non obsolete - List<CompletionTerm> l = getSearchTermList(input,ontologyTermList); - searchTerms.addAll(l); - - // if obsoletes set then add them in addition to regulars - if (searchParams.searchObsoletes()) { - ontologyTermList = ontology.getSortedObsoleteTerms(); - List obsoletes = getSearchTermList(input,ontologyTermList); - searchTerms.addAll(obsoletes); + // optimization - if user has only typed one more letter (common case) + // use previous search list + if (input.startsWith(previousInput) + && input.length() == previousInput.length() + 1) { + searchTerms = searchPreviousList(input,previousCompList); + } + + else { + // gets term set for currently selected ontology(s) + //Set ontologyTermList = getCurrentOntologyTermSet(); + // THIS IS WRONG! or is it? + for (Ontology ontology : ontologyList) { + Collection<OBOClass> ontologyTermList = ontology.getSortedTerms(); // non obsolete + List<CompletionTerm> l = getSearchTermList(input,ontologyTermList); + searchTerms.addAll(l); + + // if obsoletes set then add them in addition to regulars + if (searchParams.searchObsoletes()) { + ontologyTermList = ontology.getSortedObsoleteTerms(); + List obsoletes = getSearchTermList(input,ontologyTermList); + searchTerms.addAll(obsoletes); + } } } + + previousInput = input; + previousCompList = searchTerms; return searchTerms; } @@ -122,6 +136,18 @@ return searchTermList.getList(); } + private List<CompletionTerm> searchPreviousList(String input, + List<CompletionTerm> prevList) { + // alternatively could just remove terms from prev list??? + SearchTermList newList = new SearchTermList(); + for (CompletionTerm ct : prevList) { + if (ct.matches(input,searchParams)) + newList.addTerm(ct); + } + return newList.getList(); + } + + /** User input is already lower cased, this potentially adds oboClass to * searchTerms if input & compareTerm match. Puts it first if exact. * for term names comp = obo, for syns comp is the syn. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mg...@us...> - 2007-08-28 19:36:48
|
Revision: 836 http://obo.svn.sourceforge.net/obo/?rev=836&view=rev Author: mgibson Date: 2007-08-28 12:36:48 -0700 (Tue, 28 Aug 2007) Log Message: ----------- send min completion chars to post comp as post comp wasnt adhering Modified Paths: -------------- phenote/trunk/src/java/phenote/gui/field/AbstractAutoCompList.java phenote/trunk/src/java/phenote/gui/field/CharFieldGui.java phenote/trunk/src/java/phenote/gui/field/PostCompGui.java phenote/trunk/src/java/phenote/gui/field/TermCompList.java Modified: phenote/trunk/src/java/phenote/gui/field/AbstractAutoCompList.java =================================================================== --- phenote/trunk/src/java/phenote/gui/field/AbstractAutoCompList.java 2007-08-28 19:22:41 UTC (rev 835) +++ phenote/trunk/src/java/phenote/gui/field/AbstractAutoCompList.java 2007-08-28 19:36:48 UTC (rev 836) @@ -64,6 +64,7 @@ } public void setMinCompChars(int minChars) { minCompChars = minChars; } + public int getMinCompChars() { return minCompChars; } protected Component getUserInputGui() { return jComboBox; } Modified: phenote/trunk/src/java/phenote/gui/field/CharFieldGui.java =================================================================== --- phenote/trunk/src/java/phenote/gui/field/CharFieldGui.java 2007-08-28 19:22:41 UTC (rev 835) +++ phenote/trunk/src/java/phenote/gui/field/CharFieldGui.java 2007-08-28 19:36:48 UTC (rev 836) @@ -525,6 +525,7 @@ /** no op - override in term completion gui */ public void setMinCompChars(int minCompChars) {} + public int getMinCompChars() { return 0; } private Logger log; private Logger log() { Modified: phenote/trunk/src/java/phenote/gui/field/PostCompGui.java =================================================================== --- phenote/trunk/src/java/phenote/gui/field/PostCompGui.java 2007-08-28 19:22:41 UTC (rev 835) +++ phenote/trunk/src/java/phenote/gui/field/PostCompGui.java 2007-08-28 19:36:48 UTC (rev 836) @@ -57,54 +57,22 @@ private EditManager editManager; private SelectionManager selectionManager; private Frame owner; + /** # of chars to type to get completion in genus & diff - do we need for relation? */ + private int minCompChars=0; - PostCompGui(CharField charField, EditManager eManager, SelectionManager selManager, Frame ownerFrame) { + PostCompGui(CharField charField, EditManager eManager, SelectionManager selManager, + Frame ownerFrame, int minCompChars) { this.charField = charField; this.editManager = eManager; this.selectionManager = selManager; this.owner = ownerFrame; + this.minCompChars = minCompChars; init(); } - /** RelDiffGui INNER CLASS */ - private class RelDiffGui { - private CharFieldGui relField; - // with embedded/recurse this will be a TermGui... - private CharFieldGui diffField; - private RelDiffGui() { - CharField relChar = new CharField(CharFieldEnum.RELATIONSHIP); - Ontology o = charField.getPostCompRelOntol(); - relChar.addOntology(o); - relField = CharFieldGui.makeRelationList(relChar);//"Relationship"? - relField.setEditManager(PostCompGui.this.editManager); - relField.setSelectionManager(PostCompGui.this.selectionManager); - compFieldPanel.addCharFieldGuiToPanel(relField); - diffField = CharFieldGui.makePostCompTermList(charField,"Differentia"); - diffField.setEditManager(PostCompGui.this.editManager); - diffField.setSelectionManager(PostCompGui.this.selectionManager); - compFieldPanel.addCharFieldGuiToPanel(diffField); - } - private void setRelDiffModel(RelDiffModel rd) { -// try { rd.relField.setRel(getRel(currentTerm)); } catch (Exception e){} - relField.setRel(rd.rel); - diffField.setOboClass(rd.diff); - diffField.setOntologyChooserFromTerm(rd.diff); - } - } // end of RelDiffGui INNER CLASS - - private class RelDiffModel { - private OBOProperty rel; - private OBOClass diff; - private RelDiffModel(OBORestriction link) { - rel = link.getType(); - diff = (OBOClass)link.getParent(); - } - } - - private void init() { // dialog wont be focusable if owner is not showing or something like that @@ -114,6 +82,7 @@ // MAIN GENUS TERM genusField = CharFieldGui.makePostCompTermList(charField,"Genus"); + genusField.setMinCompChars(minCompChars); genusField.setSelectionManager(this.selectionManager); compFieldPanel.addCharFieldGuiToPanel(genusField); @@ -147,6 +116,44 @@ dialog.pack(); } + /** RelDiffGui INNER CLASS */ + private class RelDiffGui { + private CharFieldGui relField; + // with embedded/recurse this will be a TermGui... + private CharFieldGui diffField; + private RelDiffGui() { + CharField relChar = new CharField(CharFieldEnum.RELATIONSHIP); + Ontology o = charField.getPostCompRelOntol(); + relChar.addOntology(o); + relField = CharFieldGui.makeRelationList(relChar);//"Relationship"? + relField.setMinCompChars(minCompChars); + relField.setEditManager(PostCompGui.this.editManager); + relField.setSelectionManager(PostCompGui.this.selectionManager); + compFieldPanel.addCharFieldGuiToPanel(relField); + diffField = CharFieldGui.makePostCompTermList(charField,"Differentia"); + diffField.setEditManager(PostCompGui.this.editManager); + diffField.setSelectionManager(PostCompGui.this.selectionManager); + compFieldPanel.addCharFieldGuiToPanel(diffField); + } + private void setRelDiffModel(RelDiffModel rd) { +// try { rd.relField.setRel(getRel(currentTerm)); } catch (Exception e){} + relField.setRel(rd.rel); + diffField.setOboClass(rd.diff); + diffField.setOntologyChooserFromTerm(rd.diff); + } + } // end of RelDiffGui INNER CLASS + + + private class RelDiffModel { + private OBOProperty rel; + private OBOClass diff; + private RelDiffModel(OBORestriction link) { + rel = link.getType(); + diff = (OBOClass)link.getParent(); + } + } + + private void setGuiFromSelectedModel() { OBOClass currentTerm = getModelTerm(); if (currentTerm == null) return; Modified: phenote/trunk/src/java/phenote/gui/field/TermCompList.java =================================================================== --- phenote/trunk/src/java/phenote/gui/field/TermCompList.java 2007-08-28 19:22:41 UTC (rev 835) +++ phenote/trunk/src/java/phenote/gui/field/TermCompList.java 2007-08-28 19:36:48 UTC (rev 836) @@ -346,7 +346,8 @@ private class PostCompListener implements ActionListener { public void actionPerformed(ActionEvent e) { final Frame frame = (Frame)(TermCompList.this.postCompButton.getTopLevelAncestor()); - new PostCompGui(getCharField(), TermCompList.this.getEditManager(), TermCompList.this.getSelectionManager(), frame); + new PostCompGui(getCharField(), TermCompList.this.getEditManager(), + TermCompList.this.getSelectionManager(),frame,getMinCompChars()); } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mg...@us...> - 2007-08-28 19:57:33
|
Revision: 837 http://obo.svn.sourceforge.net/obo/?rev=837&view=rev Author: mgibson Date: 2007-08-28 12:57:33 -0700 (Tue, 28 Aug 2007) Log Message: ----------- if min comp chars is not 0 then dont preload the completion field this seems sensible and it makes post comp gui come up much faster as that preloading was bogging it down pre loading is really for fields without that many terms should have a config for it - but non zero min-comp-chars serves as such for the moment - and maybe is sufficient though i think eventually if a user does hit down arrow on empty (or less than min) it should do completion - override min Modified Paths: -------------- phenote/trunk/src/java/phenote/gui/field/AbstractAutoCompList.java phenote/trunk/src/java/phenote/gui/field/CharFieldGui.java phenote/trunk/src/java/phenote/gui/field/FieldPanel.java phenote/trunk/src/java/phenote/gui/field/PostCompGui.java phenote/trunk/src/java/phenote/gui/field/TermCompList.java Modified: phenote/trunk/src/java/phenote/gui/field/AbstractAutoCompList.java =================================================================== --- phenote/trunk/src/java/phenote/gui/field/AbstractAutoCompList.java 2007-08-28 19:36:48 UTC (rev 836) +++ phenote/trunk/src/java/phenote/gui/field/AbstractAutoCompList.java 2007-08-28 19:57:33 UTC (rev 837) @@ -48,7 +48,12 @@ private int minCompChars = 0; protected AbstractAutoCompList(CharField cf) { + this(cf,0); // minCompChars = 0 + } + + protected AbstractAutoCompList(CharField cf,int minCompChars) { super(cf); + setMinCompChars(minCompChars); init(); } @@ -60,7 +65,10 @@ jComboBox.addActionListener(new ComboBoxActionListener()); compListSearcher = new CompListSearcher(getCharField().getOntologyList()); // init with all terms if config.showAllOnEmptyInput... - doCompletion(false); // dont show popup - we dont have a gui yet, just populating + if (getMinCompChars() == 0) { + boolean showPopupWithComp = false; // dont show popup - + doCompletion(showPopupWithComp); //we dont have a gui yet, just populating + } } public void setMinCompChars(int minChars) { minCompChars = minChars; } Modified: phenote/trunk/src/java/phenote/gui/field/CharFieldGui.java =================================================================== --- phenote/trunk/src/java/phenote/gui/field/CharFieldGui.java 2007-08-28 19:36:48 UTC (rev 836) +++ phenote/trunk/src/java/phenote/gui/field/CharFieldGui.java 2007-08-28 19:57:33 UTC (rev 837) @@ -63,10 +63,10 @@ /** CharFieldGui for main window not post comp box - factory method */ - static CharFieldGui makeCharFieldGui(CharField charField) { + static CharFieldGui makeCharFieldGui(CharField charField,int minCompChars) { if (charField.isTerm()) { //hasOntologies()) { //return new TermCompList(charField,sp,true); // enable listeners - TermCompList t = new TermCompList(charField); + TermCompList t = new TermCompList(charField,minCompChars); //t.setSearchParams(sp); t.allowPostCompButton(true); return t; @@ -93,11 +93,12 @@ /** make term completion lists for post comp window (genus & diff), they dont listen to selection nor edit model - isolated */ - static CharFieldGui makePostCompTermList(CharField cf,String label) { + static CharFieldGui makePostCompTermList(CharField cf,String label, + int minCompChars) { // false - no listeners(dont edit model), false - dont add comp button // eventually adding comp button come from config for recursive comp //boolean allowPostCompBut = false; - TermCompList t = new TermCompList(cf); + TermCompList t = new TermCompList(cf,minCompChars); //t.setSearchParams(sp); // t.isInSeparateWindow(true) or t.isolate(true)?? t.enableEditModel(false); Modified: phenote/trunk/src/java/phenote/gui/field/FieldPanel.java =================================================================== --- phenote/trunk/src/java/phenote/gui/field/FieldPanel.java 2007-08-28 19:36:48 UTC (rev 836) +++ phenote/trunk/src/java/phenote/gui/field/FieldPanel.java 2007-08-28 19:57:33 UTC (rev 837) @@ -133,11 +133,8 @@ fieldPanel = new JPanel(new GridBagLayout()); jTabbedPane.addTab("Tab "+tab++,fieldPanel); } - CharFieldGui gui = CharFieldGui.makeCharFieldGui(charField); - if (charField.isTerm()) { - int minCompChars = Config.inst().getMinCompChars(fieldNum); - gui.setMinCompChars(minCompChars); - } + int minCompChars = Config.inst().getMinCompChars(fieldNum); + CharFieldGui gui = CharFieldGui.makeCharFieldGui(charField,minCompChars); ++fieldNum; gui.setSelectionManager(this.selectionManager); gui.setEditManager(this.editManager); Modified: phenote/trunk/src/java/phenote/gui/field/PostCompGui.java =================================================================== --- phenote/trunk/src/java/phenote/gui/field/PostCompGui.java 2007-08-28 19:36:48 UTC (rev 836) +++ phenote/trunk/src/java/phenote/gui/field/PostCompGui.java 2007-08-28 19:57:33 UTC (rev 837) @@ -81,8 +81,7 @@ //compFieldPanel.setSearchParams(searchParams); // MAIN GENUS TERM - genusField = CharFieldGui.makePostCompTermList(charField,"Genus"); - genusField.setMinCompChars(minCompChars); + genusField = CharFieldGui.makePostCompTermList(charField,"Genus",minCompChars); genusField.setSelectionManager(this.selectionManager); compFieldPanel.addCharFieldGuiToPanel(genusField); @@ -130,7 +129,7 @@ relField.setEditManager(PostCompGui.this.editManager); relField.setSelectionManager(PostCompGui.this.selectionManager); compFieldPanel.addCharFieldGuiToPanel(relField); - diffField = CharFieldGui.makePostCompTermList(charField,"Differentia"); + diffField = CharFieldGui.makePostCompTermList(charField,"Differentia",minCompChars); diffField.setEditManager(PostCompGui.this.editManager); diffField.setSelectionManager(PostCompGui.this.selectionManager); compFieldPanel.addCharFieldGuiToPanel(diffField); Modified: phenote/trunk/src/java/phenote/gui/field/TermCompList.java =================================================================== --- phenote/trunk/src/java/phenote/gui/field/TermCompList.java 2007-08-28 19:36:48 UTC (rev 836) +++ phenote/trunk/src/java/phenote/gui/field/TermCompList.java 2007-08-28 19:57:33 UTC (rev 837) @@ -34,8 +34,9 @@ private JButton postCompButton; - protected TermCompList(CharField cf) { - super(cf); + protected TermCompList(CharField cf,int minCompChars) { + // AbstractAutoCompList constructor - does pre-populating if minCompChars==0 + super(cf,minCompChars); init(); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mg...@us...> - 2007-08-29 18:42:10
|
Revision: 848 http://obo.svn.sourceforge.net/obo/?rev=848&view=rev Author: mgibson Date: 2007-08-29 11:42:13 -0700 (Wed, 29 Aug 2007) Log Message: ----------- fixed bug with new completion optimization - completion terms were retaining state about previous matching even if it was no longer true - as in no longer starts with thanks nicole for catching this Modified Paths: -------------- phenote/trunk/src/java/phenote/gui/field/CompListSearcher.java phenote/trunk/src/java/phenote/gui/field/CompletionTerm.java Modified: phenote/trunk/src/java/phenote/gui/field/CompListSearcher.java =================================================================== --- phenote/trunk/src/java/phenote/gui/field/CompListSearcher.java 2007-08-29 18:21:26 UTC (rev 847) +++ phenote/trunk/src/java/phenote/gui/field/CompListSearcher.java 2007-08-29 18:42:13 UTC (rev 848) @@ -141,6 +141,7 @@ // alternatively could just remove terms from prev list??? SearchTermList newList = new SearchTermList(); for (CompletionTerm ct : prevList) { + ct.resetMatchState(); // reusing ct has stale match state from previous search if (ct.matches(input,searchParams)) newList.addTerm(ct); } Modified: phenote/trunk/src/java/phenote/gui/field/CompletionTerm.java =================================================================== --- phenote/trunk/src/java/phenote/gui/field/CompletionTerm.java 2007-08-29 18:21:26 UTC (rev 847) +++ phenote/trunk/src/java/phenote/gui/field/CompletionTerm.java 2007-08-29 18:42:13 UTC (rev 848) @@ -37,6 +37,15 @@ boolean isExactMatch() { return exactMatch; } boolean isStartsWithMatch() { return startsWith; } + void resetMatchState() { + termMatch = false; + isSynMatch = false; + definitionMatch = false; + exactMatch = false; + startsWith = false; + contains = false; + } + public String toString() { return getCompListDisplayString(); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mg...@us...> - 2007-09-06 21:41:02
|
Revision: 872 http://obo.svn.sourceforge.net/obo/?rev=872&view=rev Author: mgibson Date: 2007-09-06 14:41:03 -0700 (Thu, 06 Sep 2007) Log Message: ----------- a dangler now shows up in red text in the auto comp text box Modified Paths: -------------- phenote/trunk/src/java/phenote/gui/field/AbstractAutoCompList.java phenote/trunk/src/java/phenote/gui/field/TermCompList.java Modified: phenote/trunk/src/java/phenote/gui/field/AbstractAutoCompList.java =================================================================== --- phenote/trunk/src/java/phenote/gui/field/AbstractAutoCompList.java 2007-09-06 18:42:27 UTC (rev 871) +++ phenote/trunk/src/java/phenote/gui/field/AbstractAutoCompList.java 2007-09-06 21:41:03 UTC (rev 872) @@ -1,5 +1,6 @@ package phenote.gui.field; +import java.awt.Color; import java.awt.Component; import java.awt.Dimension; import java.awt.FontMetrics; @@ -151,6 +152,7 @@ super(); autoTextField = new AutoTextField(); // outer instance var for testing editor = autoTextField; // protected editor var from BCBE + editor.setForeground(java.awt.Color.RED); addDocumentListener(new AutoDocumentListener()); // call returnKeyHit - for nulling out term addReturnKeyListener(autoTextField); @@ -221,9 +223,16 @@ protected void processKeyEvent(KeyEvent e) { super.processKeyEvent(e); } + private void setInputTextColor(Color c) { + setForeground(c); + } } + protected void setInputTextColor(Color c) { + autoTextField.setInputTextColor(c); + } + /** Return the name of the current term or relation - was gonna call this item name but that gets confused with "items" in combo box */ protected abstract String getCurrentTermRelName(); Modified: phenote/trunk/src/java/phenote/gui/field/TermCompList.java =================================================================== --- phenote/trunk/src/java/phenote/gui/field/TermCompList.java 2007-09-06 18:42:27 UTC (rev 871) +++ phenote/trunk/src/java/phenote/gui/field/TermCompList.java 2007-09-06 21:41:03 UTC (rev 872) @@ -1,5 +1,6 @@ package phenote.gui.field; +import java.awt.Color; import java.awt.Frame; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; @@ -13,6 +14,7 @@ import org.apache.log4j.Logger; import org.geneontology.oboedit.datamodel.OBOClass; +import org.geneontology.oboedit.util.TermUtil; import phenote.datamodel.CharField; import phenote.datamodel.CharacterI; @@ -141,6 +143,10 @@ // return; // debug stack trace? // } currentOboClass = term; + if (TermUtil.isDangling(currentOboClass)) + setInputTextColor(Color.RED); + else + setInputTextColor(Color.BLACK); String val = term == null ? "" : term.getName(); setText(val, false); // no completion } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ba...@us...> - 2007-09-28 14:32:50
|
Revision: 942 http://obo.svn.sourceforge.net/obo/?rev=942&view=rev Author: balhoff Date: 2007-09-28 07:32:53 -0700 (Fri, 28 Sep 2007) Log Message: ----------- Removed some debugging statements. Modified Paths: -------------- phenote/trunk/src/java/phenote/gui/field/AbstractAutoCompList.java phenote/trunk/src/java/phenote/gui/field/CharFieldGui.java phenote/trunk/src/java/phenote/gui/field/FreeTextField.java phenote/trunk/src/java/phenote/gui/field/TermCompList.java Modified: phenote/trunk/src/java/phenote/gui/field/AbstractAutoCompList.java =================================================================== --- phenote/trunk/src/java/phenote/gui/field/AbstractAutoCompList.java 2007-09-27 17:41:43 UTC (rev 941) +++ phenote/trunk/src/java/phenote/gui/field/AbstractAutoCompList.java 2007-09-28 14:32:53 UTC (rev 942) @@ -30,7 +30,6 @@ import phenote.datamodel.CharField; import phenote.datamodel.CharFieldValue; -import phenote.datamodel.CharacterI; import phenote.gui.SearchParams; import phenote.gui.SearchParamsI; /** has a jcombobox that does auto completion - i had to do some tricks(hacks) to get it Modified: phenote/trunk/src/java/phenote/gui/field/CharFieldGui.java =================================================================== --- phenote/trunk/src/java/phenote/gui/field/CharFieldGui.java 2007-09-27 17:41:43 UTC (rev 941) +++ phenote/trunk/src/java/phenote/gui/field/CharFieldGui.java 2007-09-28 14:32:53 UTC (rev 942) @@ -183,14 +183,12 @@ protected abstract void setCharFieldValue(CharFieldValue value); protected void focusLost() { - log().debug("Focus lost on " + this.getCharField().getName()); if (this.shouldResetGuiForMultipleValues()) { this.setGuiForMultipleValues(); } } protected void focusGained() { - log().debug("Focus gained on " + this.getCharField().getName()); if (this.isInMultipleValueState()) { this.setGuiForMultipleValues(); this.setHasChangedMultipleValues(false); Modified: phenote/trunk/src/java/phenote/gui/field/FreeTextField.java =================================================================== --- phenote/trunk/src/java/phenote/gui/field/FreeTextField.java 2007-09-27 17:41:43 UTC (rev 941) +++ phenote/trunk/src/java/phenote/gui/field/FreeTextField.java 2007-09-28 14:32:53 UTC (rev 942) @@ -160,7 +160,6 @@ /** update model using currently selected chars */ protected void updateModel() { - log().debug("Update model"); List<CharacterI> chars = getSelectedChars(); updateModel(chars); } Modified: phenote/trunk/src/java/phenote/gui/field/TermCompList.java =================================================================== --- phenote/trunk/src/java/phenote/gui/field/TermCompList.java 2007-09-27 17:41:43 UTC (rev 941) +++ phenote/trunk/src/java/phenote/gui/field/TermCompList.java 2007-09-28 14:32:53 UTC (rev 942) @@ -180,10 +180,6 @@ */ private OBOClass getSelectedOboClass() throws OboException { Object obj = getSelectedObject(); // throws oboex - log().debug("The selected list object is: " + obj + " with class " + obj.getClass()); - if (obj instanceof String) { - log().debug("String"); - } //return oboClassDowncast(obj); // throws oboex CompletionTerm t = completionTermDowncast(obj); return t.getOboClass(); @@ -204,7 +200,6 @@ * edits one or more selected chars */ protected void updateModel() { - log().debug("Update model"); try { this.setCurrentValidItem(); } @@ -248,7 +243,6 @@ // allow user to nullify field protected void setModelToNull() { - log().debug("Nulling model"); setModel(null); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mg...@us...> - 2007-12-07 23:42:28
|
Revision: 1291 http://obo.svn.sourceforge.net/obo/?rev=1291&view=rev Author: mgibson Date: 2007-12-07 15:42:32 -0800 (Fri, 07 Dec 2007) Log Message: ----------- fixed bug where both loss of focus and return key were causing edits through new ability to hit return and have it select the top item in list as users have been asking for - nicole for quite some time so i learned an action listener in jcombo box gets list selections loss of focus and return key - and tab too i think you can tell diff between selection and others with command string but the others are indiscernible and i needed to discern return from loss of focus so i put a key listener in that listens for returns - and commits top list item at that point and action listener only lets through selections but with key listener the selected object at that point in time is actually null where with action listener its the input string odd right? so i just get the text from the text field instead of selected object well i think its release time Modified Paths: -------------- phenote/trunk/src/java/phenote/gui/field/AbstractAutoCompList.java phenote/trunk/src/java/phenote/gui/field/RelationCompList.java phenote/trunk/src/java/phenote/gui/field/TermCompList.java Modified: phenote/trunk/src/java/phenote/gui/field/AbstractAutoCompList.java =================================================================== --- phenote/trunk/src/java/phenote/gui/field/AbstractAutoCompList.java 2007-12-07 23:25:55 UTC (rev 1290) +++ phenote/trunk/src/java/phenote/gui/field/AbstractAutoCompList.java 2007-12-07 23:42:32 UTC (rev 1291) @@ -7,6 +7,7 @@ import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; +import java.awt.event.KeyAdapter; import java.util.List; import javax.accessibility.Accessible; @@ -77,6 +78,8 @@ getJComboBox().addPopupMenuListener(new CompPopupMenuListener()); //if (hasArrowButton()) //getArrowButton().addActionListener(new ArrowButtonActionListener()); + //getJComboBox().addKeyListener(new ReturnKeyListener()); + //autoTextField.getTextField().addKeyListener(new ReturnKeyListener()); } public void setMinCompChars(int minChars) { minCompChars = minChars; } @@ -146,11 +149,16 @@ this returns a String if the user has not selected a term in the list yet the String is the current User input - rename this! peculiar that the method called is getSelectedItem as the String was - never actually selected*/ + never actually selected + so with KeyListener on JTextField when get key selectedObj is a null state + so returns null if so - can get text straight from TextField in this case + if need it + */ protected Object getSelectedObject() throws OboException { if (compComboBoxModel == null) throw new OboException(); // ?? Object obj = compComboBoxModel.getSelectedItem(); - if (obj == null) throw new OboException(); + // with key listener obj hasnt been set to String yet, so return null + //if (obj == null) throw new OboException(); return obj; } @@ -177,6 +185,7 @@ editor.setForeground(java.awt.Color.RED); addDocumentListener(new AutoDocumentListener()); this.correctInputMapForEditorField(autoTextField); + autoTextField.addKeyListener(new ReturnKeyListener()); } // editor is protected JTextField - wacky @@ -431,11 +440,18 @@ /** Listens for actions from combo boxes and edits model/character - * actions come from mouse select/click of term as well as return & tab */ + * actions come from mouse select/click of term in comp list + as well as return & tab + and loss of focus - action command can distinguish between selection + (comboBoxChanged) & the others(comboBoxEdited) + but there is no way to distinguish between loss of focus & hitting return - in + other words action events are rather crude! what we care about are selection + and return - but NOT loss of focus - but cant gleen out focus from return */ private class ComboBoxActionListener implements ActionListener { private ComboBoxActionListener() {} public void actionPerformed(ActionEvent e) { + // comboBoxChanged-> user has selected from list, (cdEdited-> user has edited text box) if (e.getActionCommand().equals("comboBoxChanged")) { AbstractAutoCompList.this.setHasChangedMultipleValues(true); } @@ -447,14 +463,35 @@ } } } + + private class ReturnKeyListener extends KeyAdapter { + public void keyPressed(KeyEvent e) { + if (!keyForTopPick(e)) return; // tab? + log().debug("tab or ret hit"); + boolean useTopHit = true; + updateModel(useTopHit); // use top hit in search list + } + } + private boolean keyForTopPick(KeyEvent e) { + if (e.getKeyCode() == KeyEvent.VK_ENTER) return true; + // todo - tab doesnt go through i think because of focus loss? + return e.getKeyCode() == KeyEvent.VK_TAB; + } + /** The user has selected a real item (from list) record this in the subclass in TermCL set currentSelOboClass, in RelCL set currentSelectedRelation - throws ex if in fact current user input is not a valid item */ - protected abstract void setCurrentValidItem() throws OboException; + throws ex if in fact current user input is not a valid item + dont think this needs to be in super class */ + //protected abstract void setCurrentValidItem() throws OboException; - protected abstract void updateModel(); + /** updateModel only if have selected from list */ + protected void updateModel() { + boolean useTopHit = false; + updateModel(useTopHit); + } + protected abstract void updateModel(boolean useTopHit); private Logger log; private Logger log() { Modified: phenote/trunk/src/java/phenote/gui/field/RelationCompList.java =================================================================== --- phenote/trunk/src/java/phenote/gui/field/RelationCompList.java 2007-12-07 23:25:55 UTC (rev 1290) +++ phenote/trunk/src/java/phenote/gui/field/RelationCompList.java 2007-12-07 23:42:32 UTC (rev 1291) @@ -6,6 +6,8 @@ import phenote.datamodel.CharField; import phenote.datamodel.CharFieldValue; +/** with now common superclass OBOObject this should be merged with TermCompList + I think */ class RelationCompList extends AbstractAutoCompList { @@ -72,7 +74,8 @@ return r.getOboProperty(); } - protected void updateModel() { + protected void updateModel(boolean useTopHit) { + // todo: implement useTopHit for "return" on partial input! list TermComp try { this.setCurrentValidItem(); } catch (OboException e) { Modified: phenote/trunk/src/java/phenote/gui/field/TermCompList.java =================================================================== --- phenote/trunk/src/java/phenote/gui/field/TermCompList.java 2007-12-07 23:25:55 UTC (rev 1290) +++ phenote/trunk/src/java/phenote/gui/field/TermCompList.java 2007-12-07 23:42:32 UTC (rev 1291) @@ -106,11 +106,15 @@ /** * The user has selected a term from the list, validate and set current obo class * if doesnt validate throw ex + called by updateModel to get valid term. + if useTopHit is true then input is partial string and use top hit in + comp list. if false only use selected term - throw oboex otherwise */ - protected void setCurrentValidItem() throws OboException { - setOboClass(getOboClassFromInput()); //this will set text to oboclass + protected void setCurrentValidItem(boolean useTopHit) throws OboException { + OBOClass inputTerm = getOboClassFromInput(useTopHit); // throws OboEx + setOboClass(inputTerm); //this will set text to oboclass // send out selection event that is NOT a mouse over event (for DAG view) - this.getSelectionManager().selectTerm(this, getOboClassFromInput(), false); + this.getSelectionManager().selectTerm(this, inputTerm, false); } protected String getCurrentTermRelName() { @@ -161,10 +165,20 @@ * this doesnt necasarily stay current with user input hmmm.... * throws OboException if dont have valid term */ - private OBOClass getOboClassFromInput() throws OboException { + private OBOClass getOboClassFromInput(boolean useTopHit) throws OboException { + // CompletionTerm if selected, String if typed & return Object obj = getSelectedObject(); // throws oboex + if (obj==null) { + if (!useTopHit) + throw new OboException("selected obj is null"); + // just get text straight from textfield, key listen event came in before + // sel obj got set + else + obj = getText(); + } + //return oboClassDowncast(obj); // throws oboex - CompletionTerm t = getCompTermFromInput(obj); + CompletionTerm t = getCompTermFromInput(obj,useTopHit); return t.getOboClass(); } @@ -174,18 +188,24 @@ be a String of user input NOT CompTerm. but new request is to go with top option at that point. So I think this will then go for top CompTerm in comp list and this method needs to be renamed if so. - I think i didnt realize previous that returns put Strings out from comp */ + I think i didnt realize previous that returns put Strings out from comp + so if useTopHit is false and input is String not compTerm then throw OboEx + if useTopHit is true and input is String grab top compTerm from comp list + for user hitting return on partial string - convenience! + */ //private CompletionTerm completionTermDowncast(Object obj) throws OboException { - private CompletionTerm getCompTermFromInput(Object obj) throws OboException { + private CompletionTerm getCompTermFromInput(Object obj,boolean useTopHit) + throws OboException { if (obj == null) throw new OboException(); // STRING - user hit return if (!(obj instanceof CompletionTerm)) { //log.info("Item in completion list not obo class "+obj.getClass()); - //throw new OboException("Item in completion list not obo class " + obj.getClass()); + if (!useTopHit) + throw new OboException("Item in comp list not obo class "+obj.getClass()); // The entry is a string and its what the user has typed so far, // return 1st item of comp list - should it be exact? syn? only item? if (!(obj instanceof String)) // i dont think this is possible - throw new OboException("Item in completion list not obo class nor string" + throw new OboException("Item in comp list not obo class nor string" + obj.getClass()); String input = (String)obj; // Constraint: need a least 1 letter/char @@ -211,12 +231,20 @@ } /** - * edits one or more selected chars + * edits one or more selected chars if there is valid input, if not sets model to null + if useTopHit is false then only set model if have selected comp term (user selected + from list). if useTopHit is true, then input is user string, (user has hit enter) + and use the top hit in the list that comes from that partial string */ - protected void updateModel() { - try { - this.setCurrentValidItem(); + protected void updateModel(boolean useTopHit) { + + // TRY to get valid input... + try { + // sets obo class from selected comp term OR top term in list (if no comp term + // selected), throws OboException if invalid term (eg no input) + this.setCurrentValidItem(useTopHit); } + // NOT VALID input, set model to null, and return catch (OboException e) { if (!this.editModelEnabled()) { return; @@ -229,6 +257,8 @@ } return; } + + // We have a VALID item - go ahead and commit to datamodel if (this.editModelEnabled()) { try { OBOClass oboClass = getCurrentOboClass(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ba...@us...> - 2007-11-14 19:16:36
|
Revision: 1177 http://obo.svn.sourceforge.net/obo/?rev=1177&view=rev Author: balhoff Date: 2007-11-14 11:16:41 -0800 (Wed, 14 Nov 2007) Log Message: ----------- Enhanced row filter field to allow simple "iTunes" search of all fields. Modified Paths: -------------- phenote/trunk/src/java/phenote/gui/field/CharFieldMatcher.java phenote/trunk/src/java/phenote/gui/field/CharFieldMatcherEditor.java Modified: phenote/trunk/src/java/phenote/gui/field/CharFieldMatcher.java =================================================================== --- phenote/trunk/src/java/phenote/gui/field/CharFieldMatcher.java 2007-11-14 02:02:11 UTC (rev 1176) +++ phenote/trunk/src/java/phenote/gui/field/CharFieldMatcher.java 2007-11-14 19:16:41 UTC (rev 1177) @@ -1,5 +1,8 @@ package phenote.gui.field; +import java.util.Arrays; +import java.util.List; + import org.obo.datamodel.Link; import org.obo.datamodel.LinkedObject; import org.obo.datamodel.OBOClass; @@ -57,10 +60,28 @@ } private boolean matchText(CharacterI character) { - final String value = character.getValueString(this.charField); - return value.toLowerCase().indexOf(this.filter.toLowerCase()) != -1; + final String value; + if (this.charField.equals(CharFieldMatcherEditor.ANY_FIELD)) { + final StringBuffer allFieldValues = new StringBuffer(); + for (CharField field : character.getAllCharFields()) { + allFieldValues.append(character.getValueString(field)); + allFieldValues.append(" "); + } + value = allFieldValues.toString(); + } else { + value = character.getValueString(this.charField); + } + return this.matchFilterList(Arrays.asList(this.filter.split(" ")), value); } + /** + * Match a value by matching every word in the list + */ + private boolean matchFilterList(List<String> filterList, String value) { + final boolean foundElsewhere = filterList.size() > 1 ? this.matchFilterList(filterList.subList(1, filterList.size()), value) : true; + return (value.toLowerCase().indexOf(filterList.get(0).toLowerCase()) != -1) && foundElsewhere; + } + private boolean termIsAncestorOfTerm(LinkedObject ancestor, LinkedObject descendant) { if (ancestor.equals(descendant)) return true; for (Link link : ancestor.getChildren()) { Modified: phenote/trunk/src/java/phenote/gui/field/CharFieldMatcherEditor.java =================================================================== --- phenote/trunk/src/java/phenote/gui/field/CharFieldMatcherEditor.java 2007-11-14 02:02:11 UTC (rev 1176) +++ phenote/trunk/src/java/phenote/gui/field/CharFieldMatcherEditor.java 2007-11-14 19:16:41 UTC (rev 1177) @@ -3,6 +3,7 @@ import java.awt.Component; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Vector; @@ -25,6 +26,7 @@ import org.obo.datamodel.OBOClass; import org.swixml.SwingEngine; +import phenote.config.xml.FieldDocument.Field.Type; import phenote.datamodel.CharField; import phenote.datamodel.CharFieldManager; import phenote.datamodel.CharacterI; @@ -52,6 +54,7 @@ private CharField editedCharField; private Mode filterMode; private String filter; + protected static CharField ANY_FIELD = new CharField("Simple Filter", "", Type.FREE_TEXT); private boolean ignoreActions = false; @@ -61,8 +64,9 @@ public CharFieldMatcherEditor(List<CharField> charFields) { if (charFields.size() < 1) log().error("Filter field initialized with no charfields"); this.loadPanelLayout(); - this.charFields = charFields; - this.editedCharField = this.charFields.get(0); + //this.charFields = charFields; + //this.editedCharField = this.charFields.get(0); + this.editedCharField = CharFieldMatcherEditor.ANY_FIELD; this.filterMode = Mode.INHERIT; this.ontologyInputField = (TermCompList)(CharFieldGui.makePostCompTermList(this.editedCharField, "", 0)); this.ontologyInputField.setSelectionManager(new SelectionManager()); // make sure the TermCompList doesn't update the term info panel @@ -72,15 +76,16 @@ this.textInputField.setToolTipText(this.filterContainer.getToolTipText()); this.textInputField.getDocument().addDocumentListener(new FilterDocumentListener()); this.charFieldPopup.setRenderer(new CharFieldRenderer()); - this.updateGUI(); + this.setCharFields(charFields); } /** * Sets the charfields which the user can choose from for filtering characters. */ public void setCharFields(List<CharField> charFields) { - this.charFields = charFields; - this.setEditedCharField(charFields.get(0)); + this.charFields = new ArrayList<CharField>(charFields); + this.charFields.add(0, CharFieldMatcherEditor.ANY_FIELD); + this.setEditedCharField(this.charFields.get(0)); this.updateGUI(); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mg...@us...> - 2008-03-14 22:30:36
|
Revision: 1635 http://obo.svn.sourceforge.net/obo/?rev=1635&view=rev Author: mgibson Date: 2008-03-14 15:30:39 -0700 (Fri, 14 Mar 2008) Log Message: ----------- made read only field gui subclass free text field should probably just be a parameter Modified Paths: -------------- phenote/trunk/src/java/phenote/gui/field/FreeTextField.java phenote/trunk/src/java/phenote/gui/field/ReadOnlyFieldGui.java Modified: phenote/trunk/src/java/phenote/gui/field/FreeTextField.java =================================================================== --- phenote/trunk/src/java/phenote/gui/field/FreeTextField.java 2008-03-14 22:20:25 UTC (rev 1634) +++ phenote/trunk/src/java/phenote/gui/field/FreeTextField.java 2008-03-14 22:30:39 UTC (rev 1635) @@ -64,7 +64,7 @@ return this.getTextField(); } - private JTextField getTextField() { + protected JTextField getTextField() { if (this.textField == null) { this.textField = new JTextField(); } Modified: phenote/trunk/src/java/phenote/gui/field/ReadOnlyFieldGui.java =================================================================== --- phenote/trunk/src/java/phenote/gui/field/ReadOnlyFieldGui.java 2008-03-14 22:20:25 UTC (rev 1634) +++ phenote/trunk/src/java/phenote/gui/field/ReadOnlyFieldGui.java 2008-03-14 22:30:39 UTC (rev 1635) @@ -17,68 +17,70 @@ this is really read only free text field separate class for read only term/rel field??? hmmmmmm.... +this is backwards - - free text field should probably sublcass read only */ -class ReadOnlyFieldGui extends CharFieldGui { +class ReadOnlyFieldGui extends FreeTextField { // CharFieldGui private JLabel readOnlyLabel = new JLabel(); // uneditable JText? ReadOnlyFieldGui(CharField charfield) { super(charfield); - this.getReadOnlyLabel().setPreferredSize(new Dimension(200,20)); - this.getReadOnlyLabel().setBorder(new javax.swing.border.LineBorder(java.awt.Color.BLACK) ); +// this.getReadOnlyLabel().setPreferredSize(new Dimension(200,20)); +// this.getReadOnlyLabel().setBorder(new javax.swing.border.LineBorder(java.awt.Color.BLACK) ); + getTextField().setEditable(false); } - protected void setValueFromChar(CharacterI chr) { - if (chr == null) { - log().error("ERROR: attempt to set fields from null character"); // ex? - return; - } - if (!chr.hasValue(getCharField())) { - setText(""); // ?? null? - return; - } - String v = chr.getValue(getCharField()).getName(); - setText(v); - } +// protected void setValueFromChar(CharacterI chr) { +// if (chr == null) { +// log().error("ERROR: attempt to set fields from null character"); // ex? +// return; +// } +// if (!chr.hasValue(getCharField())) { +// setText(""); // ?? null? +// return; +// } +// String v = chr.getValue(getCharField()).getName(); +// setText(v); +// } - protected void setCharFieldValue(CharFieldValue value) { - this.setText(value.getName()); - } +// protected void setCharFieldValue(CharFieldValue value) { +// this.setText(value.getName()); +// } - @Override - protected CharFieldValue getCharFieldValue() { - try { - return this.getCharField().makeValue(null, this.getText()); - } catch (CharFieldException e) { - log().error("Couldn't create charfieldvalue", e); - } - return CharFieldValue.emptyValue(null, this.getCharField()); - } +// @Override +// protected CharFieldValue getCharFieldValue() { +// try { +// return this.getCharField().makeValue(null, this.getText()); +// } catch (CharFieldException e) { +// log().error("Couldn't create charfieldvalue", e); +// } +// return CharFieldValue.emptyValue(null, this.getCharField()); +// } protected void updateModel() {} - protected boolean hasFocus() { - return this.readOnlyLabel.hasFocus(); - } +// protected boolean hasFocus() { +// return this.readOnlyLabel.hasFocus(); +// } - protected void setText(String s) { - readOnlyLabel.setText(s); - readOnlyLabel.repaint(); } - protected String getText() { return readOnlyLabel.getText(); } +// protected void setText(String s) { +// readOnlyLabel.setText(s); +// readOnlyLabel.repaint(); } +// protected String getText() { return readOnlyLabel.getText(); } - protected JComponent getUserInputGui() { - return this.getReadOnlyLabel(); - } +// protected JComponent getUserInputGui() { +// return this.getReadOnlyLabel(); +// } - private JLabel getReadOnlyLabel() { - if (this.readOnlyLabel == null) { - this.readOnlyLabel = new JLabel(); - } - return this.readOnlyLabel; - } +// private JLabel getReadOnlyLabel() { +// if (this.readOnlyLabel == null) { +// this.readOnlyLabel = new JLabel(); +// } +// return this.readOnlyLabel; +// } private Logger log; protected Logger log() { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mg...@us...> - 2008-04-17 14:53:10
|
Revision: 1738 http://obo.svn.sourceforge.net/obo/?rev=1738&view=rev Author: mgibson Date: 2008-04-17 07:53:05 -0700 (Thu, 17 Apr 2008) Log Message: ----------- made lists a little bigger as scrollbars take up space tempted to make them even bigger put fields/tab down 10 to make room need tab field grouping configging Modified Paths: -------------- phenote/trunk/src/java/phenote/gui/field/CharFieldGui.java phenote/trunk/src/java/phenote/gui/field/FieldPanel.java Modified: phenote/trunk/src/java/phenote/gui/field/CharFieldGui.java =================================================================== --- phenote/trunk/src/java/phenote/gui/field/CharFieldGui.java 2008-04-16 22:55:42 UTC (rev 1737) +++ phenote/trunk/src/java/phenote/gui/field/CharFieldGui.java 2008-04-17 14:53:05 UTC (rev 1738) @@ -653,7 +653,7 @@ listGui.setModel(getValueListModel()); listGui.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); listScroll = new JScrollPane(listGui); - listScroll.setMinimumSize(new Dimension(130,60)); // w,h + listScroll.setMinimumSize(new Dimension(180,75)); // w,h listScroll.setPreferredSize(new Dimension(230,90)); // 130,60 small? } return listScroll; @@ -731,7 +731,8 @@ if (i<0 || i>getSize()) return; List<CharacterI> sel = getSelectedChars(); if (sel==null || sel.isEmpty()) return; - if (sel.size() > 1) log().error("Cant delete list items in multi select"); + // need to be able to delete from multi select + //if (sel.size() > 1) log().error("Cant delete list items in multi select"); CharFieldValue old = charValueList.get(i); getEditManager().deleteFromValList(this,old); } Modified: phenote/trunk/src/java/phenote/gui/field/FieldPanel.java =================================================================== --- phenote/trunk/src/java/phenote/gui/field/FieldPanel.java 2008-04-16 22:55:42 UTC (rev 1737) +++ phenote/trunk/src/java/phenote/gui/field/FieldPanel.java 2008-04-17 14:53:05 UTC (rev 1738) @@ -51,8 +51,8 @@ private EditManager groupEditMan; private EventSelectionModel<CharacterI> selectionModel; - /** eventually configurable (with default 12) - for now hardwire at 12 */ - private static int fieldsPerTab = 11; + /** eventually configurable (with default 10) - for now hardwire at 10 */ + private static int fieldsPerTab = 10; // public FieldPanel() { // this(true,false); // false - no search panel - in menu now This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mg...@us...> - 2008-04-18 20:26:13
|
Revision: 1751 http://obo.svn.sourceforge.net/obo/?rev=1751&view=rev Author: mgibson Date: 2008-04-18 13:26:19 -0700 (Fri, 18 Apr 2008) Log Message: ----------- term comp list checks for nulls being added to list and ignores and puts up error message as this should never happen Modified Paths: -------------- phenote/trunk/src/java/phenote/gui/field/AbstractAutoCompList.java phenote/trunk/src/java/phenote/gui/field/CharFieldGui.java phenote/trunk/src/java/phenote/gui/field/TermCompList.java Modified: phenote/trunk/src/java/phenote/gui/field/AbstractAutoCompList.java =================================================================== --- phenote/trunk/src/java/phenote/gui/field/AbstractAutoCompList.java 2008-04-18 20:05:52 UTC (rev 1750) +++ phenote/trunk/src/java/phenote/gui/field/AbstractAutoCompList.java 2008-04-18 20:26:19 UTC (rev 1751) @@ -315,6 +315,7 @@ return; // i think if we are setting text externally(from selection) we dont want to set // has changed multiple values do we? else multisel will cause edit in CmBxAcLstnr + // which can cause null values to go into list (which should be caught anyways) this.setHasChangedMultipleValues(true); // too soon - text field doesnt have text yet.... hmmmm.... ?? String input = getText(); Modified: phenote/trunk/src/java/phenote/gui/field/CharFieldGui.java =================================================================== --- phenote/trunk/src/java/phenote/gui/field/CharFieldGui.java 2008-04-18 20:05:52 UTC (rev 1750) +++ phenote/trunk/src/java/phenote/gui/field/CharFieldGui.java 2008-04-18 20:26:19 UTC (rev 1751) @@ -712,7 +712,7 @@ } getValueListModel().setList(intersection); if (!sameLists) - setListMessage("Multi select list differs. Showing overlap "); + setListMessage("Multi select list differs. Showing common terms "); } // SELECT SINGLE else { Modified: phenote/trunk/src/java/phenote/gui/field/TermCompList.java =================================================================== --- phenote/trunk/src/java/phenote/gui/field/TermCompList.java 2008-04-18 20:05:52 UTC (rev 1750) +++ phenote/trunk/src/java/phenote/gui/field/TermCompList.java 2008-04-18 20:26:19 UTC (rev 1751) @@ -295,8 +295,16 @@ } - /** oc may be null - for nullifying model */ + /** oc may be null - for nullifying model, though lists dont accept nulls + as they have explicit delete */ private void setModel(OBOClass oboClass) { + // null for list shouldnt happen, give stack for debug and return + if (getCharField().isList() && oboClass==null) { + log().error("Got null term for list, shouldnt happen. Ignoring. " + +"StackTrace for debug:"); + new Throwable().printStackTrace(); + return; + } if (alreadyInList(oboClass)) return; // if list, cancel if non unique if (this.getCharField() == null) return; // shouldn't happen final List<CharacterI> chars = this.getSelectedChars(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mg...@us...> - 2008-06-11 17:45:06
|
Revision: 1838 http://obo.svn.sourceforge.net/obo/?rev=1838&view=rev Author: mgibson Date: 2008-06-11 10:44:29 -0700 (Wed, 11 Jun 2008) Log Message: ----------- give stack trace on completion exception failure Modified Paths: -------------- phenote/trunk/src/java/phenote/gui/field/CompListSearcher.java phenote/trunk/src/java/phenote/gui/field/CompletionObject.java Modified: phenote/trunk/src/java/phenote/gui/field/CompListSearcher.java =================================================================== --- phenote/trunk/src/java/phenote/gui/field/CompListSearcher.java 2008-06-11 14:27:33 UTC (rev 1837) +++ phenote/trunk/src/java/phenote/gui/field/CompListSearcher.java 2008-06-11 17:44:29 UTC (rev 1838) @@ -125,7 +125,8 @@ getSearchTermList(input,searchListener,this); } // TaskDelegates dont yet deal with runtime exceptions catch (RuntimeException x) { - log().error("got runtime exception in completion "+x); + log().error("got runtime exception in completion "+x+"\nStack trace: "); + x.printStackTrace(); } } // end of execute method Modified: phenote/trunk/src/java/phenote/gui/field/CompletionObject.java =================================================================== --- phenote/trunk/src/java/phenote/gui/field/CompletionObject.java 2008-06-11 14:27:33 UTC (rev 1837) +++ phenote/trunk/src/java/phenote/gui/field/CompletionObject.java 2008-06-11 17:44:29 UTC (rev 1838) @@ -130,7 +130,7 @@ private boolean stringMatches(String input, String item) { // if configged for adding terms on blanks?? - if (isBlank(input)) return true; + if (isBlank(input)) return true; input = input.toLowerCase().trim(); item = item.toLowerCase().trim(); if (input.equals(item)) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |