Author: echatellier Date: 2010-04-16 17:46:40 +0200 (Fri, 16 Apr 2010) New Revision: 2729 Log: Add F2 shortcut to edit task. Modified: trunk/src/main/java/org/chorem/jtimer/JTimer.java trunk/src/main/resources/org/chorem/jtimer/resources/JTimer.properties Modified: trunk/src/main/java/org/chorem/jtimer/JTimer.java =================================================================== --- trunk/src/main/java/org/chorem/jtimer/JTimer.java 2010-03-27 20:07:03 UTC (rev 2728) +++ trunk/src/main/java/org/chorem/jtimer/JTimer.java 2010-04-16 15:46:40 UTC (rev 2729) @@ -21,6 +21,7 @@ import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.event.ActionEvent; +import java.awt.event.KeyEvent; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.util.Calendar; @@ -28,6 +29,7 @@ import java.util.List; import java.util.Timer; +import javax.swing.InputMap; import javax.swing.JButton; import javax.swing.JCheckBoxMenuItem; import javax.swing.JComponent; @@ -40,6 +42,7 @@ import javax.swing.JScrollPane; import javax.swing.JSeparator; import javax.swing.JToolBar; +import javax.swing.KeyStroke; import javax.swing.ListSelectionModel; import javax.swing.event.TreeSelectionEvent; import javax.swing.event.TreeSelectionListener; @@ -103,28 +106,28 @@ /** Single project selection property. */ protected boolean selectedSingleProject = false; - + /** Single task selection property. */ protected boolean selectedSingleTask = false; - + /** Single task or project selection. */ protected boolean selectedSingleElement = false; - + /** Single running task selection. */ protected boolean selectedSingleRunningTask = false; - + /** Single non running task selection. */ protected boolean selectedSingleStoppedTask = false; - + /** Multiples projects selection. */ protected boolean selectedMultiplesProjects = false; - + /** Multiples tasks selection. */ protected boolean selectedMultiplesTasks = false; /** Multiples elements selection. */ protected boolean selectedMultiplesElements = false; - + /** * Main. launch UI * @@ -159,8 +162,10 @@ core = new TimerCore(); // handler - ConnectionDataHandler handler = new SwingConnectionInformationHandler(this); - ProjectManagement managementService = JTimerFactory.getProjectManagementService(); + ConnectionDataHandler handler = new SwingConnectionInformationHandler( + this); + ProjectManagement managementService = JTimerFactory + .getProjectManagementService(); if (managementService != null) { managementService.setConnectionDataHandler(handler); } @@ -168,7 +173,7 @@ // Systray mgr systrayManager = new SystrayManager(this); core.getData().addDataEventListener(systrayManager); - + IdleDialog.init(this); } @@ -232,15 +237,24 @@ protected ProjectsAndTasksTable createTreeTable() { projectsAndTasksTable = new ProjectsAndTasksTable(this, core); - + // name used in properties files projectsAndTasksTable.setName("projectslist"); projectsAndTasksTable.addTreeSelectionListener(this); projectsAndTasksTable.addMouseListener(this); - + // since merge option, selection can be multiple - projectsAndTasksTable.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); + projectsAndTasksTable + .setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); + // remove F2 KeyStroke from table + KeyStroke keyToRemove = KeyStroke.getKeyStroke(KeyEvent.VK_F2, 0); + InputMap imap = projectsAndTasksTable.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT); + while (imap != null) { + imap.remove(keyToRemove); + imap = imap.getParent(); + } + return projectsAndTasksTable; } @@ -255,19 +269,18 @@ JToolBar toolBar = new JToolBar(); toolBar.setFloatable(false); for (String actionName : toolbarActionNames) { - + if (actionName.equals("---")) { toolBar.add(new JToolBar.Separator()); - } - else { + } else { JButton button = new JButton(); button.setAction(getAction(actionName)); - + // hide text // button.setVerticalTextPosition(JButton.BOTTOM); // button.setHorizontalTextPosition(JButton.CENTER); button.setHideActionText(true); - + button.setFocusable(false); toolBar.add(button); } @@ -292,14 +305,14 @@ String[] taskMenuActionNames = { "newTask", "editTask", "closeTask", "deleteTask", "---", "startTask", "stopTask", "---", - "addAnnotation", "editAlert", "increment1Task", "increment5Task", - "increment30Task", "decrement1Task", "decrement5Task", - "decrement30Task", "setToZero" , "mergeTasks"}; + "addAnnotation", "editAlert", "increment1Task", + "increment5Task", "increment30Task", "decrement1Task", + "decrement5Task", "decrement30Task", "setToZero", "mergeTasks" }; menuBar.add(createMenu("taskMenu", taskMenuActionNames)); String[] reportMenuActionNames = { "makeReport" }; menuBar.add(createMenu("reportMenu", reportMenuActionNames)); - + String[] optionMenuActionNames = { "isShowClosed" }; menuBar.add(createMenu("optionMenu", optionMenuActionNames)); @@ -429,16 +442,17 @@ protected void displayErrorMessage(String errorMessageKey) { String title = resourceMap.getString("action.invalidActionTitle"); String message = resourceMap.getString(errorMessageKey); - + // check untranslated string if (StringUtils.isEmpty(message)) { - message = resourceMap.getString("action.missingErrorMessage", errorMessageKey); + message = resourceMap.getString("action.missingErrorMessage", + errorMessageKey); } - - JOptionPane.showMessageDialog(getMainFrame(), message, - title, JOptionPane.ERROR_MESSAGE); + + JOptionPane.showMessageDialog(getMainFrame(), message, title, + JOptionPane.ERROR_MESSAGE); } - + /** * New project action. * @@ -464,8 +478,7 @@ try { core.getData().addProject(p); - } - catch (DataViolationException e) { + } catch (DataViolationException e) { displayErrorMessage(e.getExceptionKey()); } } @@ -478,7 +491,8 @@ */ @Action(enabledProperty = "selectedSingleProject") public void editProject() { - TimerProject project = projectsAndTasksTable.getSelectedProjects().get(0); + TimerProject project = projectsAndTasksTable.getSelectedProjects().get( + 0); String newProjectName = (String) JOptionPane.showInputDialog(this .getMainFrame(), resourceMap @@ -493,8 +507,7 @@ try { core.getData().editProject(project, newProjectName); - } - catch (DataViolationException e) { + } catch (DataViolationException e) { displayErrorMessage(e.getExceptionKey()); } } @@ -509,7 +522,8 @@ public void newTask() { // select task to add new task - TimerTask selectedTask = projectsAndTasksTable.getSelectedElements().get(0); + TimerTask selectedTask = projectsAndTasksTable.getSelectedElements() + .get(0); String taskName = JOptionPane.showInputDialog(getMainFrame(), resourceMap.getString("input.newTaskMessage", selectedTask @@ -529,8 +543,7 @@ try { core.getData().addTask(selectedTask, t); - } - catch (DataViolationException e) { + } catch (DataViolationException e) { displayErrorMessage(e.getExceptionKey()); } } @@ -676,7 +689,8 @@ @Action(enabledProperty = "selectedSingleProject") public void deleteProject() { - TimerProject project = projectsAndTasksTable.getSelectedProjects().get(0); + TimerProject project = projectsAndTasksTable.getSelectedProjects().get( + 0); if (project != null) { int confirm = JOptionPane.showConfirmDialog(this.getMainFrame(), @@ -688,8 +702,7 @@ if (confirm == JOptionPane.YES_OPTION) { // approved try { core.getData().deleteProject(project); - } - catch(DataViolationException e) { + } catch (DataViolationException e) { displayErrorMessage(e.getExceptionKey()); } } @@ -716,8 +729,7 @@ if (confirm == JOptionPane.YES_OPTION) { // approved try { core.getData().deleteTask(task); - } - catch(DataViolationException e) { + } catch (DataViolationException e) { displayErrorMessage(e.getExceptionKey()); } } @@ -782,7 +794,7 @@ public void increment1Task() { incrementTaskTime(60); } - + /** * Increment task time. * @@ -791,7 +803,8 @@ * @param increment increment in seconds */ protected void incrementTaskTime(long increment) { - TimerTask selectedTask = projectsAndTasksTable.getSelectedTasks().get(0); + TimerTask selectedTask = projectsAndTasksTable.getSelectedTasks() + .get(0); // check if task is running RunTaskJob job = getJobForRunningTask(selectedTask); @@ -809,13 +822,13 @@ try { // check if + negative increment still positive if (newTodayTime > 0) { - core.getData().changeTaskTime(selectedTask, now, newTodayTime); + core.getData().changeTaskTime(selectedTask, now, + newTodayTime); } else { // force to 0 core.getData().changeTaskTime(selectedTask, now, 0L); } - } - catch(DataViolationException e) { + } catch (DataViolationException e) { displayErrorMessage(e.getExceptionKey()); } } @@ -836,31 +849,32 @@ @Action(enabledProperty = "selectedMultiplesTasks") public void mergeTasks() { List<TimerTask> tasks = projectsAndTasksTable.getSelectedTasks(); - + TimerTask destinationTask = tasks.get(0); List<TimerTask> otherTasks = tasks.subList(1, tasks.size()); int confirm = JOptionPane.showConfirmDialog(this.getMainFrame(), - resourceMap.getString("input.mergeTaskMessage", tasks.size(), destinationTask.getName()), resourceMap + resourceMap.getString("input.mergeTaskMessage", tasks.size(), + destinationTask.getName()), resourceMap .getString("input.mergeTaskTitle"), JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE); if (confirm == JOptionPane.YES_OPTION) { - + try { core.getData().mergeTasks(destinationTask, otherTasks); - } - catch (DataViolationException e) { + } catch (DataViolationException e) { displayErrorMessage(e.getExceptionKey()); } } } - + /** * Add annotation action. */ @Action(enabledProperty = "selectedSingleTask") public void addAnnotation() { // select task to add new annotation - TimerTask selectedTask = projectsAndTasksTable.getSelectedTasks().get(0); + TimerTask selectedTask = projectsAndTasksTable.getSelectedTasks() + .get(0); String annotation = JOptionPane.showInputDialog(getMainFrame(), resourceMap.getString("input.addAnnotationMessage", @@ -873,9 +887,9 @@ annotation = annotation.trim(); try { - core.getData().addAnnotation(selectedTask, new Date(), annotation); - } - catch (DataViolationException e) { + core.getData().addAnnotation(selectedTask, new Date(), + annotation); + } catch (DataViolationException e) { displayErrorMessage(e.getExceptionKey()); } } @@ -887,9 +901,11 @@ @Action(enabledProperty = "selectedSingleTask") public void editAlert() { // select task to edit alert - TimerTask selectedTask = projectsAndTasksTable.getSelectedTasks().get(0); + TimerTask selectedTask = projectsAndTasksTable.getSelectedTasks() + .get(0); - AlertEditor alertEditor = new AlertEditor(this, this.core.getData(), selectedTask); + AlertEditor alertEditor = new AlertEditor(this, this.core.getData(), + selectedTask); show(alertEditor); } @@ -928,7 +944,8 @@ public void setSelectedSingleProject(boolean selectedSingleProject) { boolean oldValue = this.selectedSingleProject; this.selectedSingleProject = selectedSingleProject; - firePropertyChange("selectedSingleProject", oldValue, selectedSingleProject); + firePropertyChange("selectedSingleProject", oldValue, + selectedSingleProject); } /** @@ -968,7 +985,8 @@ public void setSelectedSingleElement(boolean selectedSingleElement) { boolean oldValue = this.selectedSingleElement; this.selectedSingleElement = selectedSingleElement; - firePropertyChange("selectedSingleElement", oldValue, selectedSingleElement); + firePropertyChange("selectedSingleElement", oldValue, + selectedSingleElement); } /** @@ -988,7 +1006,8 @@ public void setSelectedSingleRunningTask(boolean selectedSingleRunningTask) { boolean oldValue = this.selectedSingleRunningTask; this.selectedSingleRunningTask = selectedSingleRunningTask; - firePropertyChange("selectedSingleRunningTask", oldValue, selectedSingleRunningTask); + firePropertyChange("selectedSingleRunningTask", oldValue, + selectedSingleRunningTask); } /** @@ -1008,9 +1027,10 @@ public void setSelectedSingleStoppedTask(boolean selectedSingleStoppedTask) { boolean oldValue = this.selectedSingleStoppedTask; this.selectedSingleStoppedTask = selectedSingleStoppedTask; - firePropertyChange("selectedSingleStoppedTask", oldValue, selectedSingleStoppedTask); + firePropertyChange("selectedSingleStoppedTask", oldValue, + selectedSingleStoppedTask); } - + /** * Is selected multiples projects. * @@ -1028,9 +1048,10 @@ public void setSelectedMultiplesProjects(boolean selectedMultiplesProjects) { boolean oldValue = this.selectedMultiplesProjects; this.selectedMultiplesProjects = selectedMultiplesProjects; - firePropertyChange("selectedMultiplesProjects", oldValue, selectedMultiplesProjects); + firePropertyChange("selectedMultiplesProjects", oldValue, + selectedMultiplesProjects); } - + /** * Is selected multiples tasks. * @@ -1048,9 +1069,10 @@ public void setSelectedMultiplesTasks(boolean selectedMultiplesTasks) { boolean oldValue = this.selectedMultiplesTasks; this.selectedMultiplesTasks = selectedMultiplesTasks; - firePropertyChange("selectedMultiplesTasks", oldValue, selectedMultiplesTasks); + firePropertyChange("selectedMultiplesTasks", oldValue, + selectedMultiplesTasks); } - + /** * Is selected multiples elements. * @@ -1068,7 +1090,8 @@ public void setSelectedMultiplesElements(boolean selectedMultiplesElements) { boolean oldValue = this.selectedMultiplesElements; this.selectedMultiplesElements = selectedMultiplesElements; - firePropertyChange("selectedMultiplesElements", oldValue, selectedMultiplesElements); + firePropertyChange("selectedMultiplesElements", oldValue, + selectedMultiplesElements); } /* @@ -1078,9 +1101,10 @@ public void valueChanged(TreeSelectionEvent e) { // get selected elements List<TimerTask> elements = projectsAndTasksTable.getSelectedElements(); - List<TimerProject> projects = projectsAndTasksTable.getSelectedProjects(); + List<TimerProject> projects = projectsAndTasksTable + .getSelectedProjects(); List<TimerTask> tasks = projectsAndTasksTable.getSelectedTasks(); - + // notify application that tree selection has changed if (tasks.size() == 1 && projects.size() == 0) { TimerTask task = tasks.get(0); @@ -1091,27 +1115,26 @@ if (job == null || job.isStopping()) { setSelectedSingleStoppedTask(true); setSelectedSingleRunningTask(false); - } - else { + } else { setSelectedSingleStoppedTask(false); setSelectedSingleRunningTask(true); } setSelectedMultiplesTasks(false); setSelectedSingleProject(false); setSelectedMultiplesProjects(false); - } - else { + } else { setSelectedSingleTask(false); setSelectedSingleStoppedTask(false); setSelectedSingleRunningTask(false); if (tasks.size() > 1) { setSelectedMultiplesTasks(projects.size() == 0); + } else { + setSelectedSingleProject(tasks.size() == 0 + && projects.size() == 1); + setSelectedMultiplesProjects(tasks.size() == 0 + && projects.size() > 1); } - else { - setSelectedSingleProject(tasks.size() == 0 && projects.size() == 1); - setSelectedMultiplesProjects(tasks.size() == 0 && projects.size() > 1); - } } setSelectedSingleElement(elements.size() == 1); setSelectedMultiplesElements(elements.size() > 1); @@ -1154,7 +1177,7 @@ public void preIdleDetect() { systrayManager.preIdleDetect(); } - + /** * Notified by job on post idle detect. */ @@ -1183,23 +1206,25 @@ if (e.getClickCount() == 2) { if (isSelectedSingleStoppedTask()) { // can only launch non running tasks - org.jdesktop.application.Task<?, ?> appTask = startTask(); + Task<?, ?> appTask = startTask(); + if (appTask != null) { - if (appTask != null) { - // first, on dlb click stop all running tasks stopAllTasks(); this.getContext().getTaskService().execute(appTask); } - } - else { + /* TODO EC-20100416 temp disable, called twice, can display + -1 task running :( + } else if (isSelectedSingleRunningTask()) { + TimerTask task = projectsAndTasksTable.getSelectedTasks().get(0); + stopTask(task); */ + } else { if (log.isDebugEnabled()) { log.debug("Non selected non running task to launch"); } } - } - else { + } else { if (log.isDebugEnabled()) { log.debug("Single clic on tree, do nothing"); } @@ -1211,9 +1236,11 @@ case MouseEvent.BUTTON3: // force task selection on rigth clic - TreePath path = projectsAndTasksTable.getPathForLocation(e.getX(), e.getY()); + TreePath path = projectsAndTasksTable.getPathForLocation(e.getX(), + e.getY()); int selectedRow = projectsAndTasksTable.getRowForPath(path); - projectsAndTasksTable.getSelectionModel().setSelectionInterval(selectedRow, selectedRow); + projectsAndTasksTable.getSelectionModel().setSelectionInterval( + selectedRow, selectedRow); // fix item selection JPopupMenu menu = new JPopupMenu(); @@ -1233,7 +1260,7 @@ "increment5Task", "increment30Task", "decrement1Task", "decrement5Task", "decrement30Task", "setToZero" }; } - + if (isSelectedMultiplesTasks()) { actionNames = new String[] { "mergeTasks" }; } Modified: trunk/src/main/resources/org/chorem/jtimer/resources/JTimer.properties =================================================================== --- trunk/src/main/resources/org/chorem/jtimer/resources/JTimer.properties 2010-03-27 20:07:03 UTC (rev 2728) +++ trunk/src/main/resources/org/chorem/jtimer/resources/JTimer.properties 2010-04-16 15:46:40 UTC (rev 2729) @@ -33,6 +33,7 @@ newTask.Action.shortDescription = Create new task editTask.Action.text = Edit Task +editTask.Action.accelerator = F2 editTask.Action.shortDescription = Edit task closeTask.Action.text = Open/Close Task