Author: echatellier Date: 2012-04-01 18:37:54 +0200 (Sun, 01 Apr 2012) New Revision: 2853 Url: http://chorem.org/repositories/revision/jtimer/2853 Log: closes #495 : Running task animated icon doesn't rotate properly Modified: trunk/src/main/java/org/chorem/jtimer/ui/treetable/ProjectsAndTasksCellRenderer.java trunk/src/main/java/org/chorem/jtimer/ui/treetable/ProjectsAndTasksTable.java Modified: trunk/src/main/java/org/chorem/jtimer/ui/treetable/ProjectsAndTasksCellRenderer.java =================================================================== --- trunk/src/main/java/org/chorem/jtimer/ui/treetable/ProjectsAndTasksCellRenderer.java 2012-03-29 12:04:56 UTC (rev 2852) +++ trunk/src/main/java/org/chorem/jtimer/ui/treetable/ProjectsAndTasksCellRenderer.java 2012-04-01 16:37:54 UTC (rev 2853) @@ -5,7 +5,7 @@ * $Id$ * $HeadURL$ * %% - * Copyright (C) 2007 - 2011 CodeLutin, Chatellier Eric + * Copyright (C) 2007 - 2012 CodeLutin, Chatellier Eric * %% * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as @@ -29,15 +29,17 @@ import java.awt.Component; import java.awt.Font; import java.awt.Image; +import java.awt.Rectangle; import java.awt.image.ImageObserver; import java.net.URL; import java.util.Collection; +import java.util.Collections; import java.util.Date; import java.util.HashSet; import java.util.List; +import java.util.Set; import javax.swing.ImageIcon; -import javax.swing.JLabel; import javax.swing.JTree; import javax.swing.tree.DefaultTreeCellRenderer; @@ -47,6 +49,7 @@ import org.chorem.jtimer.data.TimerCore; import org.chorem.jtimer.entities.TimerProject; import org.chorem.jtimer.entities.TimerTask; +import org.jdesktop.swingx.JXTreeTable; /** * Gere l'affichage des noeuds de l'arbre. @@ -74,12 +77,20 @@ /** Running tasks. */ protected Collection<TimerTask> runningTasks; + /** Tree table reference for image observer. */ + protected JXTreeTable treeTable; + + /** Node image nodeObserver for running task animated icon. */ + protected NodeImageObserver nodeObserver; + /** * Constructor. * + * @param treeTable Tree table reference for image observer * @param core TimerCore */ - public ProjectsAndTasksCellRenderer(TimerCore core) { + public ProjectsAndTasksCellRenderer(JXTreeTable treeTable, TimerCore core) { + this.treeTable = treeTable; // init runningTasks = new HashSet<TimerTask>(); @@ -87,6 +98,8 @@ URL runnigIconUrl = ProjectsAndTasksCellRenderer.class .getResource("/org/chorem/jtimer/resources/running.gif"); runningIcon = new ImageIcon(runnigIconUrl); + nodeObserver = new NodeImageObserver(); + runningIcon.setImageObserver(nodeObserver); // be notified on events core.getData().addDataEventListener(this); @@ -139,11 +152,12 @@ // add icon if task is running if (runningTasks.contains(task)) { setIcon(runningIcon); - runningIcon.setImageObserver(new NodeImageObserver(this)); + nodeObserver.addRow(row); } else { // force no default icon setIcon(null); + nodeObserver.removeRow(row); } // add color if task is closed @@ -165,18 +179,16 @@ */ class NodeImageObserver implements ImageObserver { - /** Label to add image. */ - protected JLabel jl; + protected Set<Integer> rows = Collections.synchronizedSet(new HashSet<Integer>()); - /** - * Constructor. - * - * @param jl label - */ - public NodeImageObserver(JLabel jl) { - this.jl = jl; + public void addRow(Integer row) { + rows.add(row); } + public void removeRow(Integer row) { + rows.remove(row); + } + /* * @see java.awt.image.ImageObserver#imageUpdate(java.awt.Image, int, int, int, int, int) */ @@ -184,7 +196,12 @@ public boolean imageUpdate(Image img, int flags, int x, int y, int w, int h) { if ((flags & (FRAMEBITS | ALLBITS)) != 0) { - jl.repaint(x, y, w, h); + for (Integer row : rows) { + Rectangle rowBounds = treeTable.getCellRect(row, 0, true); + if (rowBounds != null) { + treeTable.repaint(rowBounds); + } + } } return (flags & (ALLBITS | ABORT)) == 0; } Modified: trunk/src/main/java/org/chorem/jtimer/ui/treetable/ProjectsAndTasksTable.java =================================================================== --- trunk/src/main/java/org/chorem/jtimer/ui/treetable/ProjectsAndTasksTable.java 2012-03-29 12:04:56 UTC (rev 2852) +++ trunk/src/main/java/org/chorem/jtimer/ui/treetable/ProjectsAndTasksTable.java 2012-04-01 16:37:54 UTC (rev 2853) @@ -5,7 +5,7 @@ * $Id$ * $HeadURL$ * %% - * Copyright (C) 2007 - 2011 CodeLutin, Chatellier Eric + * Copyright (C) 2007 - 2012 CodeLutin, Chatellier Eric * %% * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as @@ -89,7 +89,7 @@ treeTableModel = new ProjectsAndTasksModel(this, core, columnIdentifiers); // set renderer - treeCellRenderer = new ProjectsAndTasksCellRenderer(core); + treeCellRenderer = new ProjectsAndTasksCellRenderer(this, core); setTreeCellRenderer(treeCellRenderer); setTreeTableModel(treeTableModel);
participants (1)
-
echatellier@users.chorem.org