Changeset 6064 in josm for trunk/src/org/openstreetmap


Ignore:
Timestamp:
2013-07-12T20:10:07+02:00 (11 years ago)
Author:
akks
Message:

see #8125, #6221 (possibly): improve TAB switching in Relation Editor

Location:
trunk/src/org/openstreetmap/josm/gui
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java

    r6038 r6064  
    189189        tabbedPane.addChangeListener(
    190190                new ChangeListener() {
     191                    @Override
    191192                    public void stateChanged(ChangeEvent e) {
    192193                        JTabbedPane sourceTabbedPane = (JTabbedPane) e.getSource();
     
    214215                }
    215216        );
    216 
     217       
     218        tagEditorPanel.setNextFocusComponent(memberTable);
     219        selectionTable.setFocusable(false);
    217220        memberTableModel.setSelectedMembers(selectedMembers);
    218221        HelpUtil.setHelpContext(getRootPane(),ht("/Dialog/RelationEditor"));
     
    606609                addToWindowMenu();
    607610            }
     611            tagEditorPanel.requestFocusInWindow();
    608612        } else {
    609613            // make sure all registered listeners are unregistered
  • trunk/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTable.java

    r6058 r6064  
    66import java.awt.Container;
    77import java.awt.Dimension;
     8import java.awt.KeyboardFocusManager;
    89import java.awt.event.ActionEvent;
    910import java.awt.event.KeyEvent;
     
    176177                col = 0;
    177178                row++;
     179            } else {
     180                // go to next component, no more rows in this table
     181                KeyboardFocusManager manager = KeyboardFocusManager.getCurrentKeyboardFocusManager();
     182                manager.focusNextComponent();
     183                return;
    178184            }
    179185            changeSelection(row, col, false, false);
  • trunk/src/org/openstreetmap/josm/gui/tagging/TagEditorModel.java

    r5891 r6064  
    113113    }
    114114
     115    @Override
    115116    public int getColumnCount() {
    116117        return 2;
    117118    }
    118119
     120    @Override
    119121    public int getRowCount() {
    120122        return tags.size();
    121123    }
    122124
     125    @Override
    123126    public Object getValueAt(int rowIndex, int columnIndex) {
    124127        if (rowIndex >= getRowCount())
     
    335338     */
    336339    public void ensureOneTag() {
    337         if (tags.size() == 0) {
     340        if (tags.isEmpty()) {
    338341            appendNewTag();
    339342        }
     
    528531                tags,
    529532                new Comparator<TagModel>() {
     533                    @Override
    530534                    public int compare(TagModel self, TagModel other) {
    531535                        return self.getName().compareTo(other.getName());
  • trunk/src/org/openstreetmap/josm/gui/tagging/TagEditorPanel.java

    r5266 r6064  
    33
    44import java.awt.BorderLayout;
     5import java.awt.Component;
    56import java.awt.GridBagConstraints;
    67import java.awt.GridBagLayout;
    78import java.awt.Insets;
     9import java.awt.event.FocusAdapter;
     10import java.awt.event.FocusEvent;
    811import java.util.EnumSet;
    912
     
    5861    }
    5962
     63    public void setNextFocusComponent(Component nextFocusComponent) {
     64        tagTable.setNextFocusComponent(nextFocusComponent);
     65    }
     66   
    6067    /**
    6168     * builds the panel with the button row
     
    116123            });
    117124        }
     125       
     126        addFocusListener(new FocusAdapter() {
     127            @Override public void focusGained(FocusEvent e) {
     128                tagTable.requestFocusInCell(0, 0);
     129            }
     130        });
    118131    }
    119132
  • trunk/src/org/openstreetmap/josm/gui/tagging/TagTable.java

    r6063 r6064  
    4545    /** the table cell editor used by this table */
    4646    private TagCellEditor editor = null;
    47 
     47    private final TagEditorModel model;
     48    private Component nextFocusComponent;
     49       
    4850    /** a list of components to which focus can be transferred without stopping
    4951     * cell editing this table.
     
    9193     */
    9294    class SelectNextColumnCellAction extends AbstractAction  {
     95        @Override
    9396        public void actionPerformed(ActionEvent e) {
    9497            run();
     
    101104                getCellEditor().stopCellEditing();
    102105            }
    103 
     106           
     107            if (row==-1 && col==-1) {
     108                requestFocusInCell(0, 0);
     109                return;
     110            }
     111       
    104112            if (col == 0) {
    105113                col++;
     
    110118                // we are at the end. Append an empty row and move the focus
    111119                // to its second column
    112                 TagEditorModel model = (TagEditorModel)getModel();
    113                 model.appendNewTag();
    114                 col=0;
    115                 row++;
    116             }
    117             changeSelection(row, col, false, false);
     120                String key = ((TagModel)model.getValueAt(row, 0)).getName();
     121                if (!key.trim().isEmpty()) {
     122                    model.appendNewTag();
     123                    col=0;
     124                    row++;
     125                } else {
     126                    clearSelection();
     127                    if (nextFocusComponent!=null)
     128                        nextFocusComponent.requestFocusInWindow();
     129                    return;
     130                }
     131            }
    118132            requestFocusInCell(row,col);
    119133        }
     
    143157                row--;
    144158            }
    145             changeSelection(row, col, false, false);
    146159            requestFocusInCell(row,col);
    147160        }
     
    184197        protected void deleteTagNames() {
    185198            int[] rows = getSelectedRows();
    186             TagEditorModel model = (TagEditorModel)getModel();
    187199            model.deleteTagNames(rows);
    188200        }
     
    193205        protected void deleteTagValues() {
    194206            int[] rows = getSelectedRows();
    195             TagEditorModel model = (TagEditorModel)getModel();
    196207            model.deleteTagValues(rows);
    197208        }
     
    202213        protected void deleteTags() {
    203214            int[] rows = getSelectedRows();
    204             TagEditorModel model = (TagEditorModel)getModel();
    205215            model.deleteTags(rows);
    206216        }
     
    230240            }
    231241
    232             TagEditorModel model = (TagEditorModel)getModel();
    233242            if (model.getRowCount() == 0) {
    234243                model.ensureOneTag();
     
    277286                getCellEditor().stopCellEditing();
    278287            }
    279             ((TagEditorModel)getModel()).appendNewTag();
    280             final int rowIdx = getModel().getRowCount()-1;
    281             requestFocusInCell(rowIdx, 0);
    282         }
    283 
     288            final int rowIdx = model.getRowCount()-1;
     289            String key = ((TagModel)model.getValueAt(rowIdx, 0)).getName();
     290            if (!key.trim().isEmpty()) {
     291                model.appendNewTag();
     292            }
     293            requestFocusInCell(model.getRowCount()-1, 0);
     294        }
     295           
    284296        protected void updateEnabledState() {
    285297            setEnabled(TagTable.this.isEnabled());
     
    356368    public TagTable(TagEditorModel model) {
    357369        super(model, new TagTableColumnModel(model.getColumnSelectionModel()), model.getRowSelectionModel());
     370        this.model = model;
    358371        init();
    359372    }
     
    419432    }
    420433
     434    public void setNextFocusComponent(Component nextFocusComponent) {
     435        this.nextFocusComponent = nextFocusComponent;
     436    }
     437   
    421438    public TagCellEditor getTableCellEditor() {
    422439        return editor;
     
    445462
    446463    public void requestFocusInCell(final int row, final int col) {
     464        changeSelection(row, col, false, false);
    447465        editCellAt(row, col);
    448466        Component c = getEditorComponent();
Note: See TracChangeset for help on using the changeset viewer.