Changeset 7782 in josm for trunk


Ignore:
Timestamp:
2014-12-10T21:25:59+01:00 (5 years ago)
Author:
Don-vip
Message:

fix #10826 - Add note sorting options (patch by ToeBee)

Location:
trunk/src/org/openstreetmap/josm
Files:
1 added
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/data/osm/NoteData.java

    r7732 r7782  
    33
    44import java.util.ArrayList;
     5import java.util.Collections;
     6import java.util.Comparator;
    57import java.util.Date;
    68import java.util.List;
     
    2325    private final List<Note> noteList;
    2426    private Note selectedNote = null;
     27    private Comparator<Note> comparator = DEFAULT_COMPARATOR;
     28
     29    /**
     30     * Sorts notes in the following order:
     31     * 1) Open notes
     32     * 2) Closed notes
     33     * 3) New notes
     34     * Within each subgroup it sorts by ID
     35     */
     36    public static final Comparator<Note> DEFAULT_COMPARATOR = new Comparator<Note>() {
     37        @Override
     38        public int compare(Note n1, Note n2) {
     39            if (n1.getId() < 0 && n2.getId() > 0) {
     40                return 1;
     41            }
     42            if (n1.getId() > 0 && n2.getId() < 0) {
     43                return -1;
     44            }
     45            if (n1.getState() == State.closed && n2.getState() == State.open) {
     46                return 1;
     47            }
     48            if (n1.getState() == State.open && n2.getState() == State.closed) {
     49                return -1;
     50            }
     51            return Long.valueOf(Math.abs(n1.getId())).compareTo(Long.valueOf(Math.abs(n2.getId())));
     52        }
     53    };
     54
     55    /** Sorts notes strictly by creation date */
     56    public static final Comparator<Note> DATE_COMPARATOR = new Comparator<Note>() {
     57        @Override
     58        public int compare(Note n1, Note n2) {
     59            return n1.getCreatedAt().compareTo(n2.getCreatedAt());
     60        }
     61    };
     62
     63    /** Sorts notes by user, then creation date */
     64    public static final Comparator<Note> USER_COMPARATOR = new Comparator<Note>() {
     65        @Override
     66        public int compare(Note n1, Note n2) {
     67            String n1User = n1.getFirstComment().getUser().getName();
     68            String n2User = n2.getFirstComment().getUser().getName();
     69            if (n1User.equals(n2User)) {
     70                return n1.getCreatedAt().compareTo(n2.getCreatedAt());
     71            }
     72            return n1.getFirstComment().getUser().getName().compareTo(n2.getFirstComment().getUser().getName());
     73        }
     74    };
     75
     76    /** Sorts notes by the last modified date */
     77    public static final Comparator<Note> LAST_ACTION_COMPARATOR = new Comparator<Note>() {
     78        @Override
     79        public int compare(Note n1, Note n2) {
     80            Date n1Date = n1.getComments().get(n1.getComments().size()-1).getCommentTimestamp();
     81            Date n2Date = n2.getComments().get(n2.getComments().size()-1).getCommentTimestamp();
     82            return n1Date.compareTo(n2Date);
     83        }
     84    };
    2585
    2686    /**
     
    3797    public NoteData(List<Note> notes) {
    3898        noteList = notes;
     99        Collections.sort(notes, comparator);
    39100        for (Note note : notes) {
    40101            if (note.getId() <= newNoteId) {
     
    195256
    196257    private void dataUpdated() {
     258        Collections.sort(noteList, comparator);
    197259        Main.map.noteDialog.setNoteList(noteList);
    198260        Main.map.mapView.repaint();
     
    217279        dataUpdated();
    218280    }
     281
     282    /** @return The current comparator being used to sort the note list */
     283    public Comparator<Note> getCurrentSortMethod() {
     284        return comparator;
     285    }
     286
     287    /** Set the comparator to be used to sort the note list. Several are available
     288     * as public static members of this class.
     289     * @param comparator - The Note comparator to sort by
     290     */
     291    public void setSortMethod(Comparator<Note> comparator) {
     292        this.comparator = comparator;
     293        dataUpdated();
     294    }
    219295}
  • trunk/src/org/openstreetmap/josm/gui/dialogs/NoteDialog.java

    r7720 r7782  
    3636import org.openstreetmap.josm.gui.MapView.LayerChangeListener;
    3737import org.openstreetmap.josm.gui.NoteInputDialog;
     38import org.openstreetmap.josm.gui.NoteSortDialog;
    3839import org.openstreetmap.josm.gui.SideButton;
    3940import org.openstreetmap.josm.gui.layer.Layer;
     
    7576    private final NewAction newAction;
    7677    private final ReopenAction reopenAction;
     78    private final SortAction sortAction;
    7779    private final UploadNotesAction uploadAction;
    7880
     
    9092        newAction = new NewAction();
    9193        reopenAction = new ReopenAction();
     94        sortAction = new SortAction();
    9295        uploadAction = new UploadNotesAction();
    9396        buildDialog();
     
    121124                new SideButton(closeAction, false),
    122125                new SideButton(reopenAction, false),
     126                new SideButton(sortAction, false),
    123127                new SideButton(uploadAction, false)}));
    124128        updateButtonStates();
     
    144148            uploadAction.setEnabled(true);
    145149        }
     150        //enable sort button if any notes are loaded
     151        if (noteData == null || noteData.getNotes().isEmpty()) {
     152            sortAction.setEnabled(false);
     153        } else {
     154            sortAction.setEnabled(true);
     155        }
    146156    }
    147157
     
    161171    @Override
    162172    public void layerAdded(Layer newLayer) {
    163         if (Main.isDebugEnabled()) {
    164             Main.debug("layer added: " + newLayer);
    165         }
    166173        if (newLayer instanceof NoteLayer) {
    167             if (Main.isDebugEnabled()) {
    168                 Main.debug("note layer added");
    169             }
    170174            noteData = ((NoteLayer)newLayer).getNoteData();
    171175            model.setData(noteData.getNotes());
     176            setNoteList(noteData.getNotes());
    172177        }
    173178    }
     
    364369        }
    365370    }
     371
     372    class SortAction extends AbstractAction {
     373
     374        public SortAction() {
     375            putValue(SHORT_DESCRIPTION, tr("Sort notes"));
     376            putValue(NAME, tr("Sort"));
     377            putValue(SMALL_ICON, ImageProvider.get("dialogs", "sort"));
     378        }
     379
     380        @Override
     381        public void actionPerformed(ActionEvent e) {
     382            NoteSortDialog sortDialog = new NoteSortDialog(Main.parent, tr("Sort notes"), tr("Apply"));
     383            sortDialog.showSortDialog(noteData.getCurrentSortMethod());
     384            if (sortDialog.getValue() == 1) {
     385                noteData.setSortMethod(sortDialog.getSelectedComparator());
     386            }
     387        }
     388    }
    366389}
Note: See TracChangeset for help on using the changeset viewer.