This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository jtimer. See http://git.chorem.org/jtimer.git commit a81f77c33741a840ba43a9683cc31d3f98ac751c Author: Eric Chatellier <chatellier@codelutin.com> Date: Wed Mar 9 16:30:12 2016 +0100 fixes #1342: Can't delete multi selected tasks --- src/main/java/org/chorem/jtimer/JTimer.java | 112 ++++++++++++++++----- .../org/chorem/jtimer/resources/JTimer.properties | 2 + .../chorem/jtimer/resources/JTimer_fr.properties | 2 + 3 files changed, 91 insertions(+), 25 deletions(-) diff --git a/src/main/java/org/chorem/jtimer/JTimer.java b/src/main/java/org/chorem/jtimer/JTimer.java index 228a8be..26b457e 100644 --- a/src/main/java/org/chorem/jtimer/JTimer.java +++ b/src/main/java/org/chorem/jtimer/JTimer.java @@ -132,14 +132,20 @@ public class JTimer extends SingleFrameApplication implements /** Single non running task selection. */ protected boolean selectedSingleStoppedTask; + + /** Multiples tasks selection (at least 1). */ + protected boolean selectedTasks; + + /** Multiples projects selection (at least 1). */ + protected boolean selectedProjects; - /** Multiples projects selection. */ + /** Multiples projects selection (at least 2). */ protected boolean selectedMultiplesProjects; - /** Multiples tasks selection. */ + /** Multiples tasks selection (at least 2). */ protected boolean selectedMultiplesTasks; - /** Multiples elements selection. */ + /** Multiples elements selection (at least 2). */ protected boolean selectedMultiplesElements; /** @@ -790,27 +796,33 @@ public class JTimer extends SingleFrameApplication implements /** * Delete project. */ - @Action(enabledProperty = "selectedSingleProject") + @Action(enabledProperty = "selectedProjects") public void deleteProject() { - TimerProject project = projectsAndTasksTable.getSelectedProjects().get( - 0); + List<TimerProject> projects = projectsAndTasksTable.getSelectedProjects(); - if (project != null) { - int confirm = JOptionPane.showConfirmDialog(getMainFrame(), - resourceMap.getString("input.deleteProjectMessage", project - .getName()), resourceMap - .getString("input.deleteProjectTitle"), - JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE); + int confirm; + if (projects.size() == 1) { + TimerProject firstOne = projects.get(0); + confirm = JOptionPane.showConfirmDialog(getMainFrame(), + resourceMap.getString("input.deleteProjectMessage", firstOne.getName()), + resourceMap.getString("input.deleteProjectTitle"), + JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE); + } else { + confirm = JOptionPane.showConfirmDialog(getMainFrame(), + resourceMap.getString("input.deleteProjectsMessage", projects.size()), + resourceMap.getString("input.deleteProjectTitle"), + JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE); + } - if (confirm == JOptionPane.YES_OPTION) { // approved + if (confirm == JOptionPane.YES_OPTION) { // approved + for (TimerProject project : projects) { try { core.getData().deleteProject(project); } catch (DataViolationException e) { displayErrorMessage(e.getExceptionKey()); } } - } } @@ -818,19 +830,27 @@ public class JTimer extends SingleFrameApplication implements /** * Delete task. */ - @Action(enabledProperty = "selectedSingleTask") + @Action(enabledProperty = "selectedTasks") public void deleteTask() { - TimerTask task = projectsAndTasksTable.getSelectedTasks().get(0); + List<TimerTask> tasks = projectsAndTasksTable.getSelectedTasks(); - if (task != null) { - int confirm = JOptionPane.showConfirmDialog(getMainFrame(), - resourceMap.getString("input.deleteTaskMessage", task - .getName()), resourceMap - .getString("input.deleteTaskTitle"), - JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE); + int confirm; + if (tasks.size() == 1) { + TimerTask firstOne = tasks.get(0); + confirm = JOptionPane.showConfirmDialog(getMainFrame(), + resourceMap.getString("input.deleteTaskMessage", firstOne.getName()), + resourceMap.getString("input.deleteTaskTitle"), + JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE); + } else { + confirm = JOptionPane.showConfirmDialog(getMainFrame(), + resourceMap.getString("input.deleteTasksMessage", tasks.size()), + resourceMap.getString("input.deleteTaskTitle"), + JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE); + } - if (confirm == JOptionPane.YES_OPTION) { // approved + if (confirm == JOptionPane.YES_OPTION) { // approved + for (TimerTask task : tasks) { try { stopTask(task); core.getData().deleteTask(task); @@ -1260,9 +1280,46 @@ public class JTimer extends SingleFrameApplication implements selectedMultiplesElements); } - /* - * @see javax.swing.event.TreeSelectionListener#valueChanged(javax.swing.event.TreeSelectionEvent) + /** + * Change selected tasks property. + * + * @param selectedTasks selected tasks property + */ + public void setSelectedTasks(boolean selectedTasks) { + boolean oldValue = this.selectedTasks; + this.selectedTasks = selectedTasks; + firePropertyChange("selectedTasks", oldValue, selectedTasks); + } + + /** + * Is selected task property. + * + * @return selected tasks property */ + public boolean isSelectedTasks() { + return selectedTasks; + } + + /** + * Change selected projects property. + * + * @param selectedProjects selected projects property + */ + public void setSelectedProjects(boolean selectedProjects) { + boolean oldValue = this.selectedProjects; + this.selectedProjects = selectedProjects; + firePropertyChange("selectedProjects", oldValue, selectedProjects); + } + + /** + * Is selected task property. + * + * @return selected tasks property + */ + public boolean isSelectedProjects() { + return selectedProjects; + } + @Override public void valueChanged(TreeSelectionEvent e) { // get selected elements @@ -1275,6 +1332,7 @@ public class JTimer extends SingleFrameApplication implements if (tasks.size() == 1 && projects.size() == 0) { TimerTask task = tasks.get(0); setSelectedSingleTask(true); + setSelectedTasks(true); // ask for SAF job manager if task is running RunTaskJob job = getJobForRunningTask(task); @@ -1285,6 +1343,7 @@ public class JTimer extends SingleFrameApplication implements } setSelectedMultiplesTasks(false); setSelectedSingleProject(false); + setSelectedProjects(false); setSelectedMultiplesProjects(false); } else { setSelectedSingleTask(false); @@ -1292,11 +1351,14 @@ public class JTimer extends SingleFrameApplication implements if (tasks.size() > 1) { setSelectedMultiplesTasks(projects.size() == 0); + setSelectedTasks(projects.size() == 0); } else { setSelectedSingleProject(tasks.size() == 0 && projects.size() == 1); setSelectedMultiplesProjects(tasks.size() == 0 && projects.size() > 1); + setSelectedProjects(tasks.size() == 0 + && projects.size() >= 1); } } setSelectedSingleElement(elements.size() == 1); diff --git a/src/main/resources/org/chorem/jtimer/resources/JTimer.properties b/src/main/resources/org/chorem/jtimer/resources/JTimer.properties index 7eaaa13..3da1423 100644 --- a/src/main/resources/org/chorem/jtimer/resources/JTimer.properties +++ b/src/main/resources/org/chorem/jtimer/resources/JTimer.properties @@ -161,10 +161,12 @@ input.editProjectTitle=Edit project input.editProjectMessage=New project name : input.deleteProjectTitle=Confirm input.deleteProjectMessage=Do you want to delete project "%s" ? +input.deleteProjectsMessage=Do you want to delete the %d selected projects ? input.editTaskTitle=Edit task input.editTaskMessage=New task name : input.deleteTaskTitle=Confirm input.deleteTaskMessage=Do you want to delete task "%s" ? +input.deleteTasksMessage=Do you want to delete the %d selected tasks ? input.mergeTaskMessage=Do you want to merge selected %d tasks\ninto "%s" ? input.mergeTaskTitle=Merge input.addAnnotationTitle=Add annotation diff --git a/src/main/resources/org/chorem/jtimer/resources/JTimer_fr.properties b/src/main/resources/org/chorem/jtimer/resources/JTimer_fr.properties index 192ac7a..5d90ca8 100644 --- a/src/main/resources/org/chorem/jtimer/resources/JTimer_fr.properties +++ b/src/main/resources/org/chorem/jtimer/resources/JTimer_fr.properties @@ -126,10 +126,12 @@ input.editProjectTitle=\u00C9dition du projet input.editProjectMessage=Nouveau nom du projet : input.deleteProjectTitle=Confirmation input.deleteProjectMessage=Voulez-vous supprimer le projet "%s" ? +input.deleteProjectsMessage=Voulez-vous supprimer les %d projets s\u00E9lectionn\u00E9s ? input.editTaskTitle=\u00C9dition de la t\u00E2che input.editTaskMessage=Nouveau nom de la t\u00E2che : input.deleteTaskTitle=Confirmation input.deleteTaskMessage=Voulez-vous supprimer la t\u00E2che "%s" ? +input.deleteTasksMessage=Voulez-vous supprimer les %d t\u00E2ches s\u00E9lectionn\u00E9es ? input.mergeTaskMessage=Voulez-vous fusionner les %d t\u00E2ches s\u00E9lectionn\u00E9es\ndans la t\u00E2ches "%s" ? input.mergeTaskTitle=Fusionner input.addAnnotationTitle=Ajouter une annotation -- To stop receiving notification emails like this one, please contact chorem.org SCM administrator <admin+scm@chorem.org>.