- arch.xml updated BLD200612051900
authorlebedkov@netbeans.org
Mon, 04 Dec 2006 21:59:57 +0000
changeset 7737a7c9af1f5595
parent 7736 361367ba6c10
child 7738 641dd725a735
- arch.xml updated
- Integrate JCalendar 1.3.2
- Use the content of the current line as summary for tasks created from the editor
- #88730: The task Details text area should word wrap rather than scroll horizontally
- #73549: Support for history for last used folder in export action
- "Add User Task" from the editor should take the content of the line as summary
- Link instead of the button "Tell Me How to Add Task to Source..." in the "New Task" dialog
- JCalendar as a NB library module
- ical4j as NB library module
- Add combobox for the duration properties
- Inform user about detected inactivity
- Changing effort in the properties view does not refresh "remaining effort" there
- Bugfix: Cut/Paste does not seem to work
- #87378: Filter on priority failure
- Export images for export formats
- Bugfix (not in IZ): GoToUserTask is not updated if the associated file is changed
- Only one checkbox "compute automatically" instead of three for effort, progress and spent time
- IAE
- eliminate e.printStackTrace() calls
tasklist.core/manifest.mf
tasklist.editor/nbproject/project.properties
tasklist.editor/src/org/netbeans/modules/tasklist/editor/NewTaskEditorAction.java
tasklist.usertasks/arch.xml
tasklist.usertasks/build.xml
tasklist.usertasks/doc/plans.ics
tasklist.usertasks/doc/processes.ics
tasklist.usertasks/javahelp/org/netbeans/modules/tasklist/usertasks/docs/content/addTask.html
tasklist.usertasks/javahelp/org/netbeans/modules/tasklist/usertasks/docs/content/newTaskDialog.html
tasklist.usertasks/javahelp/org/netbeans/modules/tasklist/usertasks/docs/content/options.html
tasklist.usertasks/javahelp/org/netbeans/modules/tasklist/usertasks/docs/content/translators.html
tasklist.usertasks/manifest.mf
tasklist.usertasks/nbproject/project.properties
tasklist.usertasks/nbproject/project.xml
tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/AutoSaver.java
tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/Bundle.properties
tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/DueTasksNotifier.java
tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/DurationPanel.java
tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/EditTaskPanel.form
tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/EditTaskPanel.java
tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/TaskListDataObject.java
tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/UserTaskNode.java
tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/UserTaskView.java
tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/UserTaskViewRegistry.java
tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/UserTasksTreeTable.java
tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/actions/ClearCompletedAction.java
tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/actions/GoToUserTaskAction.java
tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/actions/MoveLeftAction.java
tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/actions/MoveRightAction.java
tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/actions/NewTaskAction.java
tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/actions/ScheduleAction.java
tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/actions/UTCopyAction.java
tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/actions/ViewTasksAction.java
tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/filter/Bundle.properties
tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/filter/UTPriorityCondition.java
tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/filter/UserTaskFilter.java
tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/filter/UserTaskProperties.java
tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/filter/conditions-1_0.dtd
tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/mf-layer.xml
tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/model/Bundle.properties
tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/model/Dependency.java
tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/model/Duration.java
tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/model/StartedUserTask.java
tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/model/Timeout.java
tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/model/TimeoutProvider.java
tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/model/UserTask.java
tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/model/UserTaskList.java
tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/model/UserTaskObjectList.java
tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/model/package.html
tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/options/Settings.java
tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/renderers/DoneTreeTableCellRenderer.java
tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/transfer/MyTransferHandler.java
tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/translators/HistoryTextExportFormat.java
tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/translators/HtmlExportFormat.java
tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/translators/ICalExportFormat.java
tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/translators/ICalImportFormat.java
tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/translators/SpentTimesUserTaskProcessor.java
tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/translators/TextExportFormat.java
tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/translators/XmlExportFormat.java
tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/translators/usertasks-1_3.dtd
tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/translators/usertasks-simple-html.xsl
tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/util/JLinkButton.java
tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/util/UTUtils.java
tasklist.usertasks/test/unit/src/org/netbeans/modules/tasklist/usertasks/model/DurationTest.java
tasklist.usertasks/test/unit/src/org/netbeans/modules/tasklist/usertasks/model/TaskTest.java
tasklist.usertasks/test/unit/src/org/netbeans/modules/tasklist/usertasks/model/UserTaskListTest.java
     1.1 --- a/tasklist.core/manifest.mf	Mon Dec 04 21:57:00 2006 +0000
     1.2 +++ b/tasklist.core/manifest.mf	Mon Dec 04 21:59:57 2006 +0000
     1.3 @@ -1,6 +1,6 @@
     1.4  Manifest-Version: 1.0
     1.5  OpenIDE-Module: org.netbeans.modules.tasklist.core/2
     1.6 -OpenIDE-Module-Implementation-Version: 19
     1.7 +OpenIDE-Module-Implementation-Version: 20
     1.8  OpenIDE-Module-Localizing-Bundle: org/netbeans/modules/tasklist/core/Bundle.properties
     1.9  OpenIDE-Module-Requires: org.netbeans.api.javahelp.Help
    1.10  OpenIDE-Module-Layer: org/netbeans/modules/tasklist/core/mf-layer.xml
     2.1 --- a/tasklist.editor/nbproject/project.properties	Mon Dec 04 21:57:00 2006 +0000
     2.2 +++ b/tasklist.editor/nbproject/project.properties	Mon Dec 04 21:59:57 2006 +0000
     2.3 @@ -16,6 +16,6 @@
     2.4  # Microsystems, Inc. All Rights Reserved.
     2.5  
     2.6  javac.source=1.5
     2.7 -spec.version.base=1.14.1
     2.8 +spec.version.base=1.14.2
     2.9  is.eager=true
    2.10  nbm.homepage=http://tasklist.netbeans.org/updates/tasklist-editor.html
     3.1 --- a/tasklist.editor/src/org/netbeans/modules/tasklist/editor/NewTaskEditorAction.java	Mon Dec 04 21:57:00 2006 +0000
     3.2 +++ b/tasklist.editor/src/org/netbeans/modules/tasklist/editor/NewTaskEditorAction.java	Mon Dec 04 21:59:57 2006 +0000
     3.3 @@ -60,9 +60,6 @@
     3.4          if (target == null)
     3.5              return;
     3.6  
     3.7 -        // TODO test shows the componnet far from caret
     3.8 -        //EditorView.show(new JLabel("HOHOHOHOH"));
     3.9 -
    3.10          BaseDocument doc = (BaseDocument) target.getDocument();
    3.11          Caret caret = target.getCaret();
    3.12  
    3.13 @@ -82,7 +79,8 @@
    3.14              return;
    3.15          }
    3.16  
    3.17 -        Line lineObj = NbEditorUtilities.getLine((Document) doc, caret.getDot(), false);
    3.18 +        Line lineObj = NbEditorUtilities.getLine(
    3.19 +                (Document) doc, caret.getDot(), false);
    3.20          NewTaskAction.performAction(lineObj);
    3.21      }
    3.22  
     4.1 --- a/tasklist.usertasks/arch.xml	Mon Dec 04 21:57:00 2006 +0000
     4.2 +++ b/tasklist.usertasks/arch.xml	Mon Dec 04 21:59:57 2006 +0000
     4.3 @@ -71,7 +71,8 @@
     4.4   <answer id="arch-quality">
     4.5    <p>
     4.6     There are (although not so many) unit and functional tests that could
     4.7 -   be run automatically.
     4.8 +   be run automatically. Line coverage of unit test is now (Nov. 2006) about
     4.9 +   14%.
    4.10    </p>
    4.11   </answer>
    4.12  
    4.13 @@ -90,9 +91,7 @@
    4.14  -->
    4.15   <answer id="arch-time">
    4.16    <p>
    4.17 -   The module is currently (Jan. 2006) available as beta. If no significant 
    4.18 -   bugs or architecture flaws will be found it will be available in 3 months 
    4.19 -   on the stable AUC.
    4.20 +   The module is currently (Nov. 2006) available from the stable AUC. 
    4.21    </p>
    4.22   </answer>
    4.23  
    4.24 @@ -172,7 +171,8 @@
    4.25   <answer id="compat-i18n">
    4.26    <p>
    4.27     All texts are properly internationalized. The code cannot deal with
    4.28 -   calendars other than gregorian.
    4.29 +   calendars other than gregorian. XSL templates would be really hard to 
    4.30 +   translate.
    4.31    </p>
    4.32   </answer>
    4.33  
    4.34 @@ -221,7 +221,7 @@
    4.35   <answer id="compat-version">
    4.36    <p>
    4.37     The module maintains backward compatibility for serialized
    4.38 -   top components. Usage of org.openide.options.SystemOption for storing 
    4.39 +   top components. Usage of NbPreferences for storing 
    4.40     setting means compatibility with earlier and future versions of the module.
    4.41     Unknown or unsupported components and properties from
    4.42     <api name="RFC-2445" category="standard" type="import" group="dtd"/>
    4.43 @@ -246,7 +246,7 @@
    4.44  -->
    4.45   <answer id="dep-jre">
    4.46    <p>
    4.47 -   1.4
    4.48 +   1.5
    4.49    </p>
    4.50   </answer>
    4.51  
    4.52 @@ -376,24 +376,7 @@
    4.53          </question>
    4.54  -->
    4.55   <answer id="deploy-jar">
    4.56 -  <ul>
    4.57 -   <li>
    4.58 -        <api 
    4.59 -        name="location-of-jcalendar" 
    4.60 -        group="java.io.File" 
    4.61 -        category="private"  
    4.62 -        type="export"
    4.63 -        >modules/ext/jcalendar.jar</api>
    4.64 -   </li>
    4.65 -   <li>
    4.66 -        <api 
    4.67 -        name="location-of-ical4j" 
    4.68 -        group="java.io.File" 
    4.69 -        category="private"  
    4.70 -        type="export"
    4.71 -        >modules/ext/ical4j.jar</api>   
    4.72 -    </li>
    4.73 -  </ul>
    4.74 +     Only module jar file.
    4.75   </answer>
    4.76  
    4.77  
    4.78 @@ -614,11 +597,7 @@
    4.79  -->
    4.80   <answer id="exec-reflection">
    4.81    <p>
    4.82 -    Yes.
    4.83 -    <api type="import" group="java" name="javaHelpIntegrationAPI" 
    4.84 -     category="private" url="http://www.netbeans.org/download/dev/javadoc/org-netbeans-modules-javahelp/overview-summary.html">
    4.85 -     org.netbeans.api.javahelp.Help.showHelp is called through reflection API.
    4.86 -    </api>
    4.87 +    No.
    4.88    </p>
    4.89   </answer>
    4.90  
    4.91 @@ -805,7 +784,7 @@
    4.92  -->
    4.93   <answer id="perf-exit">
    4.94    <p>
    4.95 -   Top component settings and module settings are serialized on exit.
    4.96 +   Top component settings are stored are serialized on exit.
    4.97    </p>
    4.98   </answer>
    4.99  
   4.100 @@ -847,7 +826,7 @@
   4.101  -->
   4.102   <answer id="perf-mem">
   4.103    <p>
   4.104 -   XXX no answer for perf-mem
   4.105 +   TODO no answer for perf-mem
   4.106    </p>
   4.107   </answer>
   4.108  
   4.109 @@ -1112,7 +1091,7 @@
   4.110  -->
   4.111   <answer id="compat-deprecation">
   4.112    <p>
   4.113 -   XXX no answer for compat-deprecation
   4.114 +   n/a
   4.115    </p>
   4.116   </answer>
   4.117  
     5.1 --- a/tasklist.usertasks/build.xml	Mon Dec 04 21:57:00 2006 +0000
     5.2 +++ b/tasklist.usertasks/build.xml	Mon Dec 04 21:59:57 2006 +0000
     5.3 @@ -21,43 +21,6 @@
     5.4  
     5.5      <import file="../../nbbuild/templates/projectized.xml"/>
     5.6  
     5.7 -    <target name="nbm" depends="init,netbeans" description="Build NBM archive.">
     5.8 -        <mkdir dir="build"/>
     5.9 -        <property name="nbm.target.cluster" value=""/> <!-- fallback -->
    5.10 -        <makenbm file="build/${nbm}"
    5.11 -                 productdir="${cluster}"
    5.12 -                 module="${module.jar}"
    5.13 -                 homepage="${nbm.homepage}"
    5.14 -                 distribution="http://${dist.base}/${nbm}"
    5.15 -                 needsrestart="${nbm.needs.restart}"
    5.16 -                 releasedate="${nbm.release.date}"
    5.17 -		 moduleauthor="${nbm.module.author}"
    5.18 -                 global="${nbm.is.global}"
    5.19 -                 targetcluster="${nbm.target.cluster}">
    5.20 -            <license>
    5.21 -                <text>For the User Tasks module itself:</text>
    5.22 -                <file location="${license.file}"/>
    5.23 -                <text>For the bundled JCalendar runtime library:</text>
    5.24 -                <file location="../external/jcalendar-license.txt"/>
    5.25 -                <text>For the bundled iCal4j library:</text>
    5.26 -                <file location="../external/ical4j-license.txt"/>
    5.27 -            </license>
    5.28 -            <signature keystore="${keystore}" storepass="${storepass}" alias="${nbm_alias}"/>
    5.29 -        </makenbm>
    5.30 -    </target>
    5.31 -    
    5.32 -    <target name="netbeans-extra" depends="release"/>
    5.33 -
    5.34 -    <target name="release" depends="init">
    5.35 -        <mkdir dir="${cluster}/modules/ext"/>
    5.36 -        <copy todir="${cluster}/modules/ext">
    5.37 -            <fileset dir="../external/">
    5.38 -                <include name="jcalendar*.jar"/>
    5.39 -                <include name="ical4j*.jar"/>
    5.40 -            </fileset>
    5.41 -        </copy>
    5.42 -    </target>
    5.43 -    
    5.44      <target name="changelog">
    5.45      </target>
    5.46      
    5.47 @@ -79,5 +42,4 @@
    5.48              </fileset>
    5.49          </pmd>
    5.50      </target>
    5.51 -
    5.52  </project>
     6.1 --- a/tasklist.usertasks/doc/plans.ics	Mon Dec 04 21:57:00 2006 +0000
     6.2 +++ b/tasklist.usertasks/doc/plans.ics	Mon Dec 04 21:59:57 2006 +0000
     6.3 @@ -6,14 +6,291 @@
     6.4  CREATED:20060420T174251Z
     6.5  SUMMARY:NetBeans 6.0+ (1.30.?????)
     6.6  PERCENT-COMPLETE:0
     6.7 -X-NETBEANS-EFFORT:6070
     6.8 -X-NETBEANS-SPENT-TIME:0
     6.9 -LAST-MODIFIED:20061104T200426Z
    6.10 +X-NETBEANS-EFFORT:7810
    6.11 +X-NETBEANS-SPENT-TIME:260
    6.12 +LAST-MODIFIED:20061123T205811Z
    6.13  X-NETBEANS-PROGRESS-COMPUTED:yes
    6.14  X-NETBEANS-EFFORT-COMPUTED:yes
    6.15  X-NETBEANS-SPENT-TIME-COMPUTED:yes
    6.16  COMPLETED:20060428T145235Z
    6.17  DTSTAMP:20060420T174251Z
    6.18 +X-NETBEANS-VALUES-COMPUTED:yes
    6.19 +END:VTODO
    6.20 +BEGIN:VTODO
    6.21 +DTSTAMP:20061119T134909Z
    6.22 +UID:nb1163944149140.290@timpc2/127.0.0.1
    6.23 +CREATED:20061119T134909Z
    6.24 +SUMMARY:Rethink "User Tasks" default view notion
    6.25 +PERCENT-COMPLETE:0
    6.26 +X-NETBEANS-EFFORT:60
    6.27 +X-NETBEANS-SPENT-TIME:0
    6.28 +LAST-MODIFIED:20061119T134943Z
    6.29 +RELATED-TO:nb1145554971896.272@timpc/127.0.0.1
    6.30 +END:VTODO
    6.31 +BEGIN:VTODO
    6.32 +DTSTAMP:20061119T125337Z
    6.33 +UID:nb1163940817044.289@timpc2/127.0.0.1
    6.34 +CREATED:20061119T125337Z
    6.35 +SUMMARY:"Split task" action
    6.36 +PERCENT-COMPLETE:0
    6.37 +X-NETBEANS-EFFORT:60
    6.38 +X-NETBEANS-SPENT-TIME:0
    6.39 +LAST-MODIFIED:20061119T125345Z
    6.40 +RELATED-TO:nb1145554971896.272@timpc/127.0.0.1
    6.41 +END:VTODO
    6.42 +BEGIN:VTODO
    6.43 +DTSTAMP:20061118T182129Z
    6.44 +UID:nb1163874089892.285@timpc2/127.0.0.1
    6.45 +CREATED:20061118T182129Z
    6.46 +SUMMARY:Icons
    6.47 +PERCENT-COMPLETE:0
    6.48 +X-NETBEANS-EFFORT:60
    6.49 +X-NETBEANS-SPENT-TIME:0
    6.50 +LAST-MODIFIED:20061118T182138Z
    6.51 +URL:http://www.java-tutor.com/java/additional_java_swing_components.htm
    6.52 +X-NETBEANS-LINE:1
    6.53 +RELATED-TO:nb1145554971896.272@timpc/127.0.0.1
    6.54 +END:VTODO
    6.55 +BEGIN:VTODO
    6.56 +DTSTAMP:20061117T194245Z
    6.57 +UID:nb1163792565710.305@timpc2/127.0.0.1
    6.58 +CREATED:20061117T194245Z
    6.59 +SUMMARY:Split time accounting from user tasks
    6.60 +PERCENT-COMPLETE:0
    6.61 +X-NETBEANS-EFFORT:60
    6.62 +X-NETBEANS-SPENT-TIME:0
    6.63 +LAST-MODIFIED:20061117T194258Z
    6.64 +RELATED-TO:nb1145554971896.272@timpc/127.0.0.1
    6.65 +END:VTODO
    6.66 +BEGIN:VTODO
    6.67 +DTSTAMP:20061117T194157Z
    6.68 +UID:nb1163792517120.303@timpc2/127.0.0.1
    6.69 +CREATED:20061117T194157Z
    6.70 +SUMMARY:Local menu for table headers
    6.71 +PERCENT-COMPLETE:0
    6.72 +X-NETBEANS-EFFORT:60
    6.73 +X-NETBEANS-SPENT-TIME:0
    6.74 +LAST-MODIFIED:20061117T194203Z
    6.75 +RELATED-TO:nb1145554971896.272@timpc/127.0.0.1
    6.76 +END:VTODO
    6.77 +BEGIN:VTODO
    6.78 +DTSTAMP:20061115T200637Z
    6.79 +UID:nb1163621197757.333@timpc2/127.0.0.1
    6.80 +CREATED:20061115T200637Z
    6.81 +SUMMARY:Text antialiasing
    6.82 +PERCENT-COMPLETE:0
    6.83 +X-NETBEANS-EFFORT:60
    6.84 +X-NETBEANS-SPENT-TIME:0
    6.85 +LAST-MODIFIED:20061115T200641Z
    6.86 +RELATED-TO:nb1145554971896.272@timpc/127.0.0.1
    6.87 +END:VTODO
    6.88 +BEGIN:VTODO
    6.89 +DTSTAMP:20061115T115524Z
    6.90 +UID:nb1163591724322.300@timpc2/127.0.0.1
    6.91 +CREATED:20061115T115524Z
    6.92 +SUMMARY:D&D-Improvements
    6.93 +PERCENT-COMPLETE:0
    6.94 +X-NETBEANS-EFFORT:300
    6.95 +X-NETBEANS-SPENT-TIME:33
    6.96 +LAST-MODIFIED:20061118T132725Z
    6.97 +RELATED-TO:nb1145554971896.272@timpc/127.0.0.1
    6.98 +X-NETBEANS-PROGRESS-COMPUTED:yes
    6.99 +X-NETBEANS-EFFORT-COMPUTED:yes
   6.100 +X-NETBEANS-SPENT-TIME-COMPUTED:yes
   6.101 +X-NETBEANS-VALUES-COMPUTED:yes
   6.102 +END:VTODO
   6.103 +BEGIN:VTODO
   6.104 +DTSTAMP:20061113T211939Z
   6.105 +UID:nb1163591735805.302@timpc2/127.0.0.1
   6.106 +CREATED:20061113T211939Z
   6.107 +SUMMARY:Better D&D
   6.108 +PERCENT-COMPLETE:0
   6.109 +X-NETBEANS-EFFORT:60
   6.110 +X-NETBEANS-SPENT-TIME:0
   6.111 +LAST-MODIFIED:20061113T211959Z
   6.112 +URL:http://weblogs.java.net/blog/shan_man/archive/2006/01/first_class_dra
   6.113 + .html
   6.114 +X-NETBEANS-LINE:1
   6.115 +RELATED-TO:nb1163591724322.300@timpc2/127.0.0.1
   6.116 +END:VTODO
   6.117 +BEGIN:VTODO
   6.118 +DTSTAMP:20061113T212415Z
   6.119 +UID:nb1163591739446.304@timpc2/127.0.0.1
   6.120 +CREATED:20061113T212415Z
   6.121 +SUMMARY:Images for D&D
   6.122 +PERCENT-COMPLETE:0
   6.123 +X-NETBEANS-EFFORT:60
   6.124 +X-NETBEANS-SPENT-TIME:0
   6.125 +LAST-MODIFIED:20061113T212427Z
   6.126 +URL:http://www.javaworld.com/javaworld/javatips/jw-javatip114.html
   6.127 +X-NETBEANS-LINE:1
   6.128 +RELATED-TO:nb1163591724322.300@timpc2/127.0.0.1
   6.129 +END:VTODO
   6.130 +BEGIN:VTODO
   6.131 +DTSTAMP:20061113T211500Z
   6.132 +UID:nb1163591745022.308@timpc2/127.0.0.1
   6.133 +CREATED:20061113T211500Z
   6.134 +SUMMARY:Quicker scrolling while D&D
   6.135 +PERCENT-COMPLETE:0
   6.136 +X-NETBEANS-PROGRESS-COMPUTED:yes
   6.137 +X-NETBEANS-EFFORT:120
   6.138 +X-NETBEANS-EFFORT-COMPUTED:yes
   6.139 +X-NETBEANS-SPENT-TIME:33
   6.140 +X-NETBEANS-SPENT-TIME-COMPUTED:yes
   6.141 +LAST-MODIFIED:20061118T132725Z
   6.142 +URL:http://www.javalobby.org/java/forums/t53436.html
   6.143 +X-NETBEANS-LINE:1
   6.144 +RELATED-TO:nb1163591724322.300@timpc2/127.0.0.1
   6.145 +X-NETBEANS-VALUES-COMPUTED:yes
   6.146 +END:VTODO
   6.147 +BEGIN:VTODO
   6.148 +DTSTAMP:20061113T215654Z
   6.149 +UID:nb1163591745022.309@timpc2/127.0.0.1
   6.150 +CREATED:20061113T215654Z
   6.151 +SUMMARY:Workaround
   6.152 +PERCENT-COMPLETE:0
   6.153 +X-NETBEANS-EFFORT:60
   6.154 +X-NETBEANS-SPENT-TIME:33
   6.155 +LAST-MODIFIED:20061113T220051Z
   6.156 +RELATED-TO:nb1163591745022.308@timpc2/127.0.0.1
   6.157 +END:VTODO
   6.158 +BEGIN:VTODO
   6.159 +DTSTAMP:20061113T213454Z
   6.160 +UID:nb1163591745022.310@timpc2/127.0.0.1
   6.161 +CREATED:20061113T213454Z
   6.162 +SUMMARY:JDK Bug #6464450 (Linux only)
   6.163 +PERCENT-COMPLETE:0
   6.164 +X-NETBEANS-EFFORT:60
   6.165 +X-NETBEANS-SPENT-TIME:0
   6.166 +LAST-MODIFIED:20061113T213521Z
   6.167 +URL:http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6464450
   6.168 +X-NETBEANS-LINE:1
   6.169 +RELATED-TO:nb1163591745022.308@timpc2/127.0.0.1
   6.170 +END:VTODO
   6.171 +BEGIN:VTODO
   6.172 +DTSTAMP:20061109T183857Z
   6.173 +UID:nb1163591754558.312@timpc2/127.0.0.1
   6.174 +CREATED:20061109T183857Z
   6.175 +SUMMARY:Drop tasks between two other tasks
   6.176 +PERCENT-COMPLETE:0
   6.177 +X-NETBEANS-EFFORT:60
   6.178 +X-NETBEANS-SPENT-TIME:0
   6.179 +LAST-MODIFIED:20061118T181428Z
   6.180 +RELATED-TO:nb1163591724322.300@timpc2/127.0.0.1
   6.181 +URL:http://www.antonioshome.net/attic/treewrapper/
   6.182 +X-NETBEANS-LINE:1
   6.183 +END:VTODO
   6.184 +BEGIN:VTODO
   6.185 +DTSTAMP:20061115T103849Z
   6.186 +UID:nb1163587129879.297@timpc2/127.0.0.1
   6.187 +CREATED:20061115T103849Z
   6.188 +SUMMARY:Bugfix: Translators do not honor settings for working hours
   6.189 +PERCENT-COMPLETE:0
   6.190 +X-NETBEANS-EFFORT:60
   6.191 +X-NETBEANS-SPENT-TIME:7
   6.192 +LAST-MODIFIED:20061115T121304Z
   6.193 +RELATED-TO:nb1145554971896.272@timpc/127.0.0.1
   6.194 +END:VTODO
   6.195 +BEGIN:VTODO
   6.196 +DTSTAMP:20061115T103601Z
   6.197 +UID:nb1163586961722.296@timpc2/127.0.0.1
   6.198 +CREATED:20061115T103601Z
   6.199 +SUMMARY:Simplify filters persistence
   6.200 +PERCENT-COMPLETE:0
   6.201 +X-NETBEANS-EFFORT:60
   6.202 +X-NETBEANS-SPENT-TIME:0
   6.203 +LAST-MODIFIED:20061115T103611Z
   6.204 +RELATED-TO:nb1145554971896.272@timpc/127.0.0.1
   6.205 +END:VTODO
   6.206 +BEGIN:VTODO
   6.207 +DTSTAMP:20061114T205131Z
   6.208 +UID:nb1163537491604.289@timpc2/127.0.0.1
   6.209 +CREATED:20061114T205131Z
   6.210 +SUMMARY:Compare to similar software
   6.211 +PERCENT-COMPLETE:0
   6.212 +X-NETBEANS-EFFORT:240
   6.213 +X-NETBEANS-SPENT-TIME:0
   6.214 +LAST-MODIFIED:20061123T205811Z
   6.215 +RELATED-TO:nb1145554971896.272@timpc/127.0.0.1
   6.216 +X-NETBEANS-PROGRESS-COMPUTED:yes
   6.217 +X-NETBEANS-EFFORT-COMPUTED:yes
   6.218 +X-NETBEANS-SPENT-TIME-COMPUTED:yes
   6.219 +X-NETBEANS-VALUES-COMPUTED:yes
   6.220 +COMPLETED:20061118T140407Z
   6.221 +END:VTODO
   6.222 +BEGIN:VTODO
   6.223 +DTSTAMP:20061123T205805Z
   6.224 +UID:nb1164315485915.295@timpc2/127.0.0.1
   6.225 +CREATED:20061123T205805Z
   6.226 +SUMMARY:Visual Studio 2005
   6.227 +PERCENT-COMPLETE:0
   6.228 +X-NETBEANS-EFFORT:60
   6.229 +X-NETBEANS-SPENT-TIME:0
   6.230 +LAST-MODIFIED:20061123T205810Z
   6.231 +RELATED-TO:nb1163537491604.289@timpc2/127.0.0.1
   6.232 +END:VTODO
   6.233 +BEGIN:VTODO
   6.234 +DTSTAMP:20061119T193055Z
   6.235 +UID:nb1163964655303.291@timpc2/127.0.0.1
   6.236 +CREATED:20061119T193055Z
   6.237 +SUMMARY:KArm
   6.238 +PERCENT-COMPLETE:0
   6.239 +X-NETBEANS-EFFORT:60
   6.240 +X-NETBEANS-SPENT-TIME:0
   6.241 +LAST-MODIFIED:20061119T193103Z
   6.242 +URL:http://pim.kde.org/components/karm.php
   6.243 +X-NETBEANS-LINE:422
   6.244 +RELATED-TO:nb1163537491604.289@timpc2/127.0.0.1
   6.245 +END:VTODO
   6.246 +BEGIN:VTODO
   6.247 +DTSTAMP:20061114T205142Z
   6.248 +UID:nb1163537502539.290@timpc2/127.0.0.1
   6.249 +CREATED:20061114T205142Z
   6.250 +SUMMARY:XPlanner
   6.251 +PERCENT-COMPLETE:0
   6.252 +X-NETBEANS-EFFORT:0
   6.253 +X-NETBEANS-SPENT-TIME:0
   6.254 +LAST-MODIFIED:20061114T205626Z
   6.255 +RELATED-TO:nb1163537491604.289@timpc2/127.0.0.1
   6.256 +URL:http://www.xplanner.org/
   6.257 +X-NETBEANS-LINE:1
   6.258 +END:VTODO
   6.259 +BEGIN:VTODO
   6.260 +DTSTAMP:20061114T205559Z
   6.261 +UID:nb1163537759617.292@timpc2/127.0.0.1
   6.262 +CREATED:20061114T205559Z
   6.263 +SUMMARY:Eclipse mylar
   6.264 +PERCENT-COMPLETE:0
   6.265 +X-NETBEANS-EFFORT:60
   6.266 +X-NETBEANS-SPENT-TIME:0
   6.267 +LAST-MODIFIED:20061114T205605Z
   6.268 +RELATED-TO:nb1163537491604.289@timpc2/127.0.0.1
   6.269 +END:VTODO
   6.270 +BEGIN:VTODO
   6.271 +DTSTAMP:20061114T205927Z
   6.272 +UID:nb1163537967374.295@timpc2/127.0.0.1
   6.273 +CREATED:20061114T205927Z
   6.274 +SUMMARY:VIP task manager
   6.275 +PERCENT-COMPLETE:0
   6.276 +X-NETBEANS-EFFORT:60
   6.277 +X-NETBEANS-SPENT-TIME:0
   6.278 +LAST-MODIFIED:20061114T205937Z
   6.279 +URL:http://www.taskmanagementsoft.com/
   6.280 +X-NETBEANS-LINE:1
   6.281 +RELATED-TO:nb1163537491604.289@timpc2/127.0.0.1
   6.282 +END:VTODO
   6.283 +BEGIN:VTODO
   6.284 +DTSTAMP:20061113T121038Z
   6.285 +UID:nb1163419838844.280@timpc2/127.0.0.1
   6.286 +CREATED:20061113T121038Z
   6.287 +SUMMARY:Table examples
   6.288 +PERCENT-COMPLETE:0
   6.289 +X-NETBEANS-EFFORT:60
   6.290 +X-NETBEANS-SPENT-TIME:0
   6.291 +LAST-MODIFIED:20061113T121047Z
   6.292 +URL:http://www.java2s.com/Code/Java/Swing-Components/TreeTable.htm
   6.293 +X-NETBEANS-LINE:1
   6.294 +RELATED-TO:nb1145554971896.272@timpc/127.0.0.1
   6.295  END:VTODO
   6.296  BEGIN:VTODO
   6.297  DTSTAMP:20061104T200412Z
   6.298 @@ -207,12 +484,14 @@
   6.299  PERCENT-COMPLETE:0
   6.300  X-NETBEANS-EFFORT:10
   6.301  X-NETBEANS-SPENT-TIME:0
   6.302 -LAST-MODIFIED:20061022T124837Z
   6.303 +LAST-MODIFIED:20061117T195011Z
   6.304  RELATED-TO:nb1145554971896.272@timpc/127.0.0.1
   6.305  DTSTAMP:20061007T104558Z
   6.306  X-NETBEANS-PROGRESS-COMPUTED:yes
   6.307  X-NETBEANS-EFFORT-COMPUTED:yes
   6.308  X-NETBEANS-SPENT-TIME-COMPUTED:yes
   6.309 +X-NETBEANS-VALUES-COMPUTED:yes
   6.310 +COMPLETED:20061118T140407Z
   6.311  END:VTODO
   6.312  BEGIN:VTODO
   6.313  DTSTAMP:20061022T124738Z
   6.314 @@ -260,147 +539,128 @@
   6.315  RELATED-TO:nb1145554971896.272@timpc/127.0.0.1
   6.316  END:VTODO
   6.317  BEGIN:VTODO
   6.318 +DTSTAMP:20061022T124404Z
   6.319 +UID:nb1163518579283.288@timpc2/127.0.0.1
   6.320 +CREATED:20061022T124404Z
   6.321 +SUMMARY:Icon for "task in progress"/different icons for different task ty
   6.322 + pes
   6.323 +PERCENT-COMPLETE:0
   6.324 +X-NETBEANS-EFFORT:120
   6.325 +X-NETBEANS-SPENT-TIME:0
   6.326 +LAST-MODIFIED:20061114T153632Z
   6.327 +RELATED-TO:nb1145554971896.272@timpc/127.0.0.1
   6.328 +END:VTODO
   6.329 +BEGIN:VTODO
   6.330 +DTSTAMP:20061114T205322Z
   6.331 +UID:nb1163537774273.294@timpc2/127.0.0.1
   6.332 +CREATED:20061114T205322Z
   6.333 +SUMMARY:Reports
   6.334 +PERCENT-COMPLETE:0
   6.335 +X-NETBEANS-EFFORT:60
   6.336 +X-NETBEANS-SPENT-TIME:0
   6.337 +LAST-MODIFIED:20061114T205328Z
   6.338 +URL:http://www.xplanner.org/images/screenshots/statistics.jpg
   6.339 +X-NETBEANS-LINE:236
   6.340 +RELATED-TO:nb1145554971896.272@timpc/127.0.0.1
   6.341 +END:VTODO
   6.342 +BEGIN:VTODO
   6.343 +DTSTAMP:20060121T141928Z
   6.344 +UID:nb1163792734867.307@timpc2/127.0.0.1
   6.345 +CREATED:20060121T141928Z
   6.346 +SUMMARY:(not User Tasks) #65594: Allow batch export of tasklists
   6.347 +PERCENT-COMPLETE:0
   6.348 +X-NETBEANS-EFFORT:480
   6.349 +X-NETBEANS-SPENT-TIME:220
   6.350 +LAST-MODIFIED:20060704T221124Z
   6.351 +URL:http://tasklist.netbeans.org/issues/show_bug.cgi?id=65594
   6.352 +X-NETBEANS-LINE:1
   6.353 +RELATED-TO:nb1145554971896.272@timpc/127.0.0.1
   6.354 +END:VTODO
   6.355 +BEGIN:VTODO
   6.356  UID:nb1137857799682.30@timpc/127.0.0.1
   6.357  CREATED:20060121T153639Z
   6.358  SUMMARY:NetBeans 6.0/promo-H (1.29.?????)
   6.359 -PERCENT-COMPLETE:88
   6.360 -X-NETBEANS-EFFORT:11690
   6.361 -X-NETBEANS-SPENT-TIME:7429
   6.362 -LAST-MODIFIED:20061106T173549Z
   6.363 +PERCENT-COMPLETE:85
   6.364 +X-NETBEANS-EFFORT:14350
   6.365 +X-NETBEANS-SPENT-TIME:9348
   6.366 +LAST-MODIFIED:20061202T230123Z
   6.367  X-NETBEANS-PROGRESS-COMPUTED:yes
   6.368  X-NETBEANS-EFFORT-COMPUTED:yes
   6.369  X-NETBEANS-SPENT-TIME-COMPUTED:yes
   6.370  X-NETBEANS-DUETIME:1159480800000
   6.371  X-NETBEANS-DUE-SIGNALED:yes
   6.372  DTSTAMP:20060121T153639Z
   6.373 +COMPLETED:20061118T130219Z
   6.374 +X-NETBEANS-VALUES-COMPUTED:yes
   6.375  END:VTODO
   6.376  BEGIN:VTODO
   6.377 -DTSTAMP:20061102T192610Z
   6.378 -UID:nb1162495570981.265@timpc2/127.0.0.1
   6.379 -CREATED:20061102T192610Z
   6.380 -SUMMARY:"Add User Task" from the editor should take the content of the li
   6.381 - ne as summary
   6.382 -PERCENT-COMPLETE:0
   6.383 -X-NETBEANS-EFFORT:30
   6.384 -X-NETBEANS-SPENT-TIME:0
   6.385 -LAST-MODIFIED:20061102T192648Z
   6.386 -RELATED-TO:nb1137857799682.30@timpc/127.0.0.1
   6.387 -END:VTODO
   6.388 -BEGIN:VTODO
   6.389 -DTSTAMP:20061030T213201Z
   6.390 -UID:nb1162243921345.263@timpc2/127.0.0.1
   6.391 -CREATED:20061030T213201Z
   6.392 -SUMMARY:Bugfix: Cut/Paste does not seem to work
   6.393 +DTSTAMP:20061116T214527Z
   6.394 +UID:nb1163713527665.351@timpc2/127.0.0.1
   6.395 +CREATED:20061116T214527Z
   6.396 +SUMMARY:developer role for libs
   6.397  PERCENT-COMPLETE:0
   6.398  X-NETBEANS-EFFORT:60
   6.399  X-NETBEANS-SPENT-TIME:0
   6.400 -LAST-MODIFIED:20061101T212121Z
   6.401 -RELATED-TO:nb1137857799682.30@timpc/127.0.0.1
   6.402 -END:VTODO
   6.403 -BEGIN:VTODO
   6.404 -DTSTAMP:20061022T124404Z
   6.405 -UID:nb1161521044788.254@timpc2/127.0.0.1
   6.406 -CREATED:20061022T124404Z
   6.407 -SUMMARY:Icon for "task in progress"
   6.408 -PERCENT-COMPLETE:0
   6.409 -X-NETBEANS-EFFORT:120
   6.410 -X-NETBEANS-SPENT-TIME:0
   6.411 -LAST-MODIFIED:20061022T124554Z
   6.412 -RELATED-TO:nb1137857799682.30@timpc/127.0.0.1
   6.413 -END:VTODO
   6.414 -BEGIN:VTODO
   6.415 -DTSTAMP:20061022T111754Z
   6.416 -UID:nb1161515874341.248@timpc2/127.0.0.1
   6.417 -CREATED:20061022T111754Z
   6.418 -SUMMARY:#87378: Filter on priority failure
   6.419 -PERCENT-COMPLETE:0
   6.420 -X-NETBEANS-EFFORT:60
   6.421 -X-NETBEANS-SPENT-TIME:0
   6.422 -LAST-MODIFIED:20061022T111826Z
   6.423 -URL:http://tasklist.netbeans.org/issues/show_bug.cgi?id=87378
   6.424 +LAST-MODIFIED:20061123T183845Z
   6.425 +URL:http://libs.netbeans.org/issues/show_bug.cgi?id=89513
   6.426  X-NETBEANS-LINE:1
   6.427  RELATED-TO:nb1137857799682.30@timpc/127.0.0.1
   6.428  END:VTODO
   6.429  BEGIN:VTODO
   6.430 -DTSTAMP:20061022T110102Z
   6.431 -UID:nb1161514862636.247@timpc2/127.0.0.1
   6.432 -CREATED:20061022T110102Z
   6.433 -SUMMARY:Changing effort in the properties view does not refresh "remainin
   6.434 - g effort" there
   6.435 -PERCENT-COMPLETE:0
   6.436 -X-NETBEANS-EFFORT:15
   6.437 -X-NETBEANS-SPENT-TIME:0
   6.438 -LAST-MODIFIED:20061022T110151Z
   6.439 -RELATED-TO:nb1137857799682.30@timpc/127.0.0.1
   6.440 -END:VTODO
   6.441 -BEGIN:VTODO
   6.442 -DTSTAMP:20061016T170914Z
   6.443 -UID:nb1161018554488.240@timpc2/127.0.0.1
   6.444 -CREATED:20061016T170914Z
   6.445 -SUMMARY:Export images for export formats
   6.446 -PERCENT-COMPLETE:0
   6.447 -X-NETBEANS-EFFORT:60
   6.448 -X-NETBEANS-SPENT-TIME:0
   6.449 -LAST-MODIFIED:20061022T124606Z
   6.450 -RELATED-TO:nb1137857799682.30@timpc/127.0.0.1
   6.451 -END:VTODO
   6.452 -BEGIN:VTODO
   6.453 -DTSTAMP:20061009T211556Z
   6.454 -UID:nb1160428556403.227@timpc2/127.0.0.1
   6.455 -CREATED:20061009T211556Z
   6.456 -SUMMARY:Add combobox for the duration properties
   6.457 -PERCENT-COMPLETE:0
   6.458 -X-NETBEANS-EFFORT:60
   6.459 -X-NETBEANS-SPENT-TIME:0
   6.460 -LAST-MODIFIED:20061009T211608Z
   6.461 -RELATED-TO:nb1137857799682.30@timpc/127.0.0.1
   6.462 -END:VTODO
   6.463 -BEGIN:VTODO
   6.464 -UID:nb1150658712767.237@timpc/127.0.0.1
   6.465 -CREATED:20060618T192512Z
   6.466 -SUMMARY:ical4j as NB library module
   6.467 -PERCENT-COMPLETE:0
   6.468 -X-NETBEANS-EFFORT:60
   6.469 -X-NETBEANS-SPENT-TIME:0
   6.470 -LAST-MODIFIED:20060704T221124Z
   6.471 -RELATED-TO:nb1137857799682.30@timpc/127.0.0.1
   6.472 -DTSTAMP:20060618T192512Z
   6.473 -END:VTODO
   6.474 -BEGIN:VTODO
   6.475 -UID:nb1150658648754.236@timpc/127.0.0.1
   6.476 -CREATED:20060618T192408Z
   6.477 -SUMMARY:JCalendar as a NB library module
   6.478 -PERCENT-COMPLETE:0
   6.479 -X-NETBEANS-EFFORT:60
   6.480 -X-NETBEANS-SPENT-TIME:22
   6.481 -LAST-MODIFIED:20061007T102548Z
   6.482 -RELATED-TO:nb1137857799682.30@timpc/127.0.0.1
   6.483 -DTSTAMP:20060618T192408Z
   6.484 -END:VTODO
   6.485 -BEGIN:VTODO
   6.486  UID:nb1145736734171.295@timpc/127.0.0.1
   6.487  CREATED:20060422T201214Z
   6.488  SUMMARY:Since last commit
   6.489 -PERCENT-COMPLETE:89
   6.490 -X-NETBEANS-EFFORT:1265
   6.491 -X-NETBEANS-SPENT-TIME:559
   6.492 -LAST-MODIFIED:20061106T173549Z
   6.493 +PERCENT-COMPLETE:60
   6.494 +X-NETBEANS-EFFORT:3485
   6.495 +X-NETBEANS-SPENT-TIME:2045
   6.496 +LAST-MODIFIED:20061202T230123Z
   6.497  RELATED-TO:nb1137857799682.30@timpc/127.0.0.1
   6.498  X-NETBEANS-PROGRESS-COMPUTED:yes
   6.499  X-NETBEANS-EFFORT-COMPUTED:yes
   6.500  X-NETBEANS-SPENT-TIME-COMPUTED:yes
   6.501  COMPLETED:20060423T093054Z
   6.502  DTSTAMP:20060422T201214Z
   6.503 +X-NETBEANS-VALUES-COMPUTED:yes
   6.504 +END:VTODO
   6.505 +BEGIN:VTODO
   6.506 +DTSTAMP:20061118T140615Z
   6.507 +UID:nb1163858775555.227@timpc2/127.0.0.1
   6.508 +CREATED:20061118T140615Z
   6.509 +SUMMARY:Option to disable automatic saving
   6.510 +PERCENT-COMPLETE:50
   6.511 +X-NETBEANS-EFFORT:2400
   6.512 +X-NETBEANS-SPENT-TIME:1376
   6.513 +LAST-MODIFIED:20061202T230149Z
   6.514 +RELATED-TO:nb1145736734171.295@timpc/127.0.0.1
   6.515 +X-NETBEANS-WORK-PERIOD;X-NETBEANS-START=20061118T150626Z:148
   6.516 +X-NETBEANS-WORK-PERIOD;X-NETBEANS-START=20061119T110413Z:35
   6.517 +X-NETBEANS-WORK-PERIOD;X-NETBEANS-START=20061119T114014Z:8
   6.518 +X-NETBEANS-WORK-PERIOD;X-NETBEANS-START=20061119T114939Z:1
   6.519 +X-NETBEANS-WORK-PERIOD;X-NETBEANS-START=20061119T115207Z:11
   6.520 +X-NETBEANS-WORK-PERIOD;X-NETBEANS-START=20061119T120505Z:13
   6.521 +X-NETBEANS-WORK-PERIOD;X-NETBEANS-START=20061119T121943Z:94
   6.522 +X-NETBEANS-WORK-PERIOD;X-NETBEANS-START=20061119T135848Z:465
   6.523 +X-NETBEANS-WORK-PERIOD;X-NETBEANS-START=20061121T221556Z:65
   6.524 +X-NETBEANS-WORK-PERIOD;X-NETBEANS-START=20061122T231643Z:70
   6.525 +X-NETBEANS-WORK-PERIOD;X-NETBEANS-START=20061123T185913Z:7
   6.526 +X-NETBEANS-WORK-PERIOD;X-NETBEANS-START=20061123T200359Z:186
   6.527 +X-NETBEANS-WORK-PERIOD;X-NETBEANS-START=20061124T225355Z:18
   6.528 +X-NETBEANS-WORK-PERIOD;X-NETBEANS-START=20061126T225637Z:58
   6.529 +X-NETBEANS-WORK-PERIOD;X-NETBEANS-START=20061127T185504Z:7
   6.530 +X-NETBEANS-WORK-PERIOD;X-NETBEANS-START=20061202T132733Z:32
   6.531 +X-NETBEANS-WORK-PERIOD;X-NETBEANS-START=20061202T151109Z:70
   6.532 +X-NETBEANS-WORK-PERIOD;X-NETBEANS-START=20061202T223314Z:88
   6.533  END:VTODO
   6.534  BEGIN:VTODO
   6.535  DTSTAMP:20061030T213236Z
   6.536  UID:nb1162416885611.274@timpc2/127.0.0.1
   6.537  CREATED:20061030T213236Z
   6.538 -SUMMARY:Bugfix: schedule-unstable.ics cannot be open
   6.539 +SUMMARY:Bugfix: schedule-unstable.ics cannot be open (ical4j 0.9.21 will 
   6.540 + solve this)
   6.541  PERCENT-COMPLETE:0
   6.542  X-NETBEANS-EFFORT:60
   6.543 -X-NETBEANS-SPENT-TIME:21
   6.544 -LAST-MODIFIED:20061101T215620Z
   6.545 +X-NETBEANS-SPENT-TIME:96
   6.546 +LAST-MODIFIED:20061117T192752Z
   6.547  RELATED-TO:nb1145736734171.295@timpc/127.0.0.1
   6.548  URL:http://sourceforge.net/tracker/index.php?func=detail&aid=1588914&grou
   6.549   p_id=107024&atid=646395
   6.550 @@ -420,223 +680,305 @@
   6.551  RELATED-TO:nb1145736734171.295@timpc/127.0.0.1
   6.552  END:VTODO
   6.553  BEGIN:VTODO
   6.554 -DTSTAMP:20061016T190333Z
   6.555 -UID:nb1161025413928.242@timpc2/127.0.0.1
   6.556 -CREATED:20061016T190333Z
   6.557 -SUMMARY:Better time editor
   6.558 +DTSTAMP:20061115T121312Z
   6.559 +UID:nb1163592792465.313@timpc2/127.0.0.1
   6.560 +CREATED:20061115T121312Z
   6.561 +SUMMARY:arch.xml updated
   6.562  PERCENT-COMPLETE:100
   6.563 -X-NETBEANS-EFFORT:60
   6.564 -X-NETBEANS-SPENT-TIME:40
   6.565 -LAST-MODIFIED:20061101T211717Z
   6.566 +X-NETBEANS-EFFORT:15
   6.567 +X-NETBEANS-SPENT-TIME:0
   6.568 +LAST-MODIFIED:20061115T121328Z
   6.569  RELATED-TO:nb1145736734171.295@timpc/127.0.0.1
   6.570 -COMPLETED:20061101T211717Z
   6.571 +COMPLETED:20061115T121328Z
   6.572  END:VTODO
   6.573  BEGIN:VTODO
   6.574 -DTSTAMP:20061012T200545Z
   6.575 -UID:nb1160683545205.255@timpc2/127.0.0.1
   6.576 -CREATED:20061012T200545Z
   6.577 -SUMMARY:Missing "New Subtask" action over the task list node
   6.578 +DTSTAMP:20061114T162243Z
   6.579 +UID:nb1163521363185.292@timpc2/127.0.0.1
   6.580 +CREATED:20061114T162243Z
   6.581 +SUMMARY:Integrate JCalendar 1.3.2
   6.582  PERCENT-COMPLETE:100
   6.583 -X-NETBEANS-EFFORT:5
   6.584 +X-NETBEANS-EFFORT:10
   6.585  X-NETBEANS-SPENT-TIME:0
   6.586 -LAST-MODIFIED:20061012T200655Z
   6.587 +LAST-MODIFIED:20061114T162255Z
   6.588  RELATED-TO:nb1145736734171.295@timpc/127.0.0.1
   6.589 -COMPLETED:20061012T200655Z
   6.590 +COMPLETED:20061114T162255Z
   6.591  END:VTODO
   6.592  BEGIN:VTODO
   6.593 -DTSTAMP:20061009T211243Z
   6.594 -UID:nb1160428363507.225@timpc2/127.0.0.1
   6.595 -CREATED:20061009T211243Z
   6.596 -SUMMARY:Remove "backup" option
   6.597 +DTSTAMP:20061109T184022Z
   6.598 +UID:nb1163097622331.284@timpc2/127.0.0.1
   6.599 +CREATED:20061109T184022Z
   6.600 +SUMMARY:Use the content of the current line as summary for tasks created 
   6.601 + from the editor
   6.602 +PERCENT-COMPLETE:100
   6.603 +X-NETBEANS-EFFORT:30
   6.604 +X-NETBEANS-SPENT-TIME:0
   6.605 +LAST-MODIFIED:20061113T122337Z
   6.606 +RELATED-TO:nb1145736734171.295@timpc/127.0.0.1
   6.607 +COMPLETED:20061113T122334Z
   6.608 +END:VTODO
   6.609 +BEGIN:VTODO
   6.610 +DTSTAMP:20061108T212952Z
   6.611 +UID:nb1163021392930.276@timpc2/127.0.0.1
   6.612 +CREATED:20061108T212952Z
   6.613 +SUMMARY:#88730: The task Details text area should word wrap rather than s
   6.614 + croll horizontally
   6.615  PERCENT-COMPLETE:100
   6.616  X-NETBEANS-EFFORT:5
   6.617  X-NETBEANS-SPENT-TIME:2
   6.618 -LAST-MODIFIED:20061009T211512Z
   6.619  RELATED-TO:nb1145736734171.295@timpc/127.0.0.1
   6.620 -COMPLETED:20061009T211512Z
   6.621 +LAST-MODIFIED:20061108T213251Z
   6.622 +URL:http://www.netbeans.org/issues/show_bug.cgi?id=88730
   6.623 +X-NETBEANS-LINE:1
   6.624 +COMPLETED:20061108T213251Z
   6.625  END:VTODO
   6.626  BEGIN:VTODO
   6.627 -DTSTAMP:20061008T204641Z
   6.628 -UID:nb1160340401950.224@timpc2/127.0.0.1
   6.629 -CREATED:20061008T204641Z
   6.630 -SUMMARY:"Schedule" action
   6.631 +DTSTAMP:20060315T173204Z
   6.632 +UID:nb1163096666226.279@timpc2/127.0.0.1
   6.633 +CREATED:20060315T173204Z
   6.634 +SUMMARY:#73549: Support for history for last used folder in export action
   6.635 + 
   6.636  PERCENT-COMPLETE:100
   6.637 -X-NETBEANS-EFFORT:480
   6.638 -X-NETBEANS-SPENT-TIME:61
   6.639 -LAST-MODIFIED:20061012T200542Z
   6.640 +X-NETBEANS-EFFORT:120
   6.641 +X-NETBEANS-SPENT-TIME:87
   6.642 +LAST-MODIFIED:20061109T183500Z
   6.643 +URL:http://tasklist.netbeans.org/issues/show_bug.cgi?id=73549
   6.644 +X-NETBEANS-LINE:1
   6.645 +X-NETBEANS-OWNER:tim
   6.646  RELATED-TO:nb1145736734171.295@timpc/127.0.0.1
   6.647 -COMPLETED:20061012T200542Z
   6.648 +COMPLETED:20061109T183500Z
   6.649  END:VTODO
   6.650  BEGIN:VTODO
   6.651 -UID:nb1160232278680.253@timpc2/127.0.0.1
   6.652 -CREATED:20061007T144438Z
   6.653 -SUMMARY:New simple export format
   6.654 +DTSTAMP:20061102T192610Z
   6.655 +UID:nb1163420459793.283@timpc2/127.0.0.1
   6.656 +CREATED:20061102T192610Z
   6.657 +SUMMARY:"Add User Task" from the editor should take the content of the li
   6.658 + ne as summary
   6.659 +PERCENT-COMPLETE:100
   6.660 +X-NETBEANS-EFFORT:30
   6.661 +X-NETBEANS-SPENT-TIME:0
   6.662 +LAST-MODIFIED:20061113T122102Z
   6.663 +RELATED-TO:nb1145736734171.295@timpc/127.0.0.1
   6.664 +COMPLETED:20061113T122102Z
   6.665 +END:VTODO
   6.666 +BEGIN:VTODO
   6.667 +DTSTAMP:20061111T115558Z
   6.668 +UID:nb1163420600553.441@timpc2/127.0.0.1
   6.669 +CREATED:20061111T115558Z
   6.670 +SUMMARY:Link instead of the button "Tell Me How to Add Task to Source..."
   6.671 +  in the "New Task" dialog
   6.672 +PERCENT-COMPLETE:100
   6.673 +X-NETBEANS-EFFORT:30
   6.674 +X-NETBEANS-SPENT-TIME:58
   6.675 +LAST-MODIFIED:20061113T132212Z
   6.676 +RELATED-TO:nb1145736734171.295@timpc/127.0.0.1
   6.677 +COMPLETED:20061113T132212Z
   6.678 +END:VTODO
   6.679 +BEGIN:VTODO
   6.680 +DTSTAMP:20060618T192408Z
   6.681 +UID:nb1163452278908.283@timpc2/127.0.0.1
   6.682 +CREATED:20060618T192408Z
   6.683 +SUMMARY:JCalendar as a NB library module
   6.684  PERCENT-COMPLETE:100
   6.685  X-NETBEANS-EFFORT:60
   6.686 -X-NETBEANS-SPENT-TIME:63
   6.687 -LAST-MODIFIED:20061007T161802Z
   6.688 +X-NETBEANS-SPENT-TIME:69
   6.689 +LAST-MODIFIED:20061114T153151Z
   6.690  RELATED-TO:nb1145736734171.295@timpc/127.0.0.1
   6.691 -DESCRIPTION:Exports tasks as <ul>/<li> combination
   6.692 -COMPLETED:20061007T161802Z
   6.693 -DTSTAMP:20061007T144438Z
   6.694 +COMPLETED:20061114T153151Z
   6.695  END:VTODO
   6.696  BEGIN:VTODO
   6.697 -DTSTAMP:20061015T122131Z
   6.698 -UID:nb1160942674876.239@timpc2/127.0.0.1
   6.699 -CREATED:20061015T122131Z
   6.700 -SUMMARY:Prefs for working hours (start/end pause/working day)
   6.701 +DTSTAMP:20060618T192512Z
   6.702 +UID:nb1163452369430.285@timpc2/127.0.0.1
   6.703 +CREATED:20060618T192512Z
   6.704 +SUMMARY:ical4j as NB library module
   6.705  PERCENT-COMPLETE:100
   6.706 -X-NETBEANS-EFFORT:240
   6.707 -X-NETBEANS-SPENT-TIME:240
   6.708 -LAST-MODIFIED:20061106T173549Z
   6.709 +X-NETBEANS-EFFORT:60
   6.710 +X-NETBEANS-SPENT-TIME:8
   6.711 +LAST-MODIFIED:20061114T153150Z
   6.712  RELATED-TO:nb1145736734171.295@timpc/127.0.0.1
   6.713 -COMPLETED:20061106T173549Z
   6.714 +COMPLETED:20061114T153150Z
   6.715  END:VTODO
   6.716  BEGIN:VTODO
   6.717 -DTSTAMP:20061009T211526Z
   6.718 -UID:nb1161513430852.246@timpc2/127.0.0.1
   6.719 -CREATED:20061009T211526Z
   6.720 -SUMMARY:Remove extended property editor for durations
   6.721 +DTSTAMP:20061009T211556Z
   6.722 +UID:nb1163519007919.290@timpc2/127.0.0.1
   6.723 +CREATED:20061009T211556Z
   6.724 +SUMMARY:Add combobox for the duration properties
   6.725  PERCENT-COMPLETE:100
   6.726 -X-NETBEANS-EFFORT:30
   6.727 -X-NETBEANS-SPENT-TIME:28
   6.728 -LAST-MODIFIED:20061022T110645Z
   6.729 +X-NETBEANS-EFFORT:60
   6.730 +X-NETBEANS-SPENT-TIME:13
   6.731 +LAST-MODIFIED:20061114T165917Z
   6.732  RELATED-TO:nb1145736734171.295@timpc/127.0.0.1
   6.733 -COMPLETED:20061022T110645Z
   6.734 +COMPLETED:20061114T165917Z
   6.735  END:VTODO
   6.736  BEGIN:VTODO
   6.737 -DTSTAMP:20061012T175532Z
   6.738 -UID:nb1161516391585.251@timpc2/127.0.0.1
   6.739 -CREATED:20061012T175532Z
   6.740 -SUMMARY:Fix wrong sorting order
   6.741 +DTSTAMP:20061114T162501Z
   6.742 +UID:nb1163523569489.295@timpc2/127.0.0.1
   6.743 +CREATED:20061114T162501Z
   6.744 +SUMMARY:Inform user about detected inactivity
   6.745  PERCENT-COMPLETE:100
   6.746 -X-NETBEANS-EFFORT:60
   6.747 -X-NETBEANS-SPENT-TIME:42
   6.748 -LAST-MODIFIED:20061022T120849Z
   6.749 +X-NETBEANS-EFFORT:20
   6.750 +X-NETBEANS-SPENT-TIME:1
   6.751 +LAST-MODIFIED:20061114T174442Z
   6.752  RELATED-TO:nb1145736734171.295@timpc/127.0.0.1
   6.753 -COMPLETED:20061022T120849Z
   6.754 +COMPLETED:20061114T174442Z
   6.755  END:VTODO
   6.756  BEGIN:VTODO
   6.757 -DTSTAMP:20061015T104147Z
   6.758 -UID:nb1161520810353.253@timpc2/127.0.0.1
   6.759 -CREATED:20061015T104147Z
   6.760 -SUMMARY:"Move up" does not scroll to the new task location
   6.761 -PERCENT-COMPLETE:100
   6.762 -X-NETBEANS-EFFORT:20
   6.763 -X-NETBEANS-SPENT-TIME:3
   6.764 -LAST-MODIFIED:20061022T124357Z
   6.765 -RELATED-TO:nb1145736734171.295@timpc/127.0.0.1
   6.766 -COMPLETED:20061022T124357Z
   6.767 -END:VTODO
   6.768 -BEGIN:VTODO
   6.769 -DTSTAMP:20061015T121802Z
   6.770 -UID:nb1162049918742.266@timpc2/127.0.0.1
   6.771 -CREATED:20061015T121802Z
   6.772 -SUMMARY:Use NB pref API
   6.773 -PERCENT-COMPLETE:100
   6.774 -X-NETBEANS-PROGRESS-COMPUTED:yes
   6.775 -X-NETBEANS-EFFORT:50
   6.776 -X-NETBEANS-EFFORT-COMPUTED:yes
   6.777 -X-NETBEANS-SPENT-TIME:52
   6.778 -X-NETBEANS-SPENT-TIME-COMPUTED:yes
   6.779 -LAST-MODIFIED:20061028T164116Z
   6.780 -URL:http://www.netbeans.org/project/www/download/dev/javadoc/org-openide-
   6.781 - util/org/openide/util/doc-files/preferences.html
   6.782 -X-NETBEANS-LINE:1
   6.783 -RELATED-TO:nb1145736734171.295@timpc/127.0.0.1
   6.784 -COMPLETED:20061030T213144Z
   6.785 -END:VTODO
   6.786 -BEGIN:VTODO
   6.787 -DTSTAMP:20061028T153202Z
   6.788 -UID:nb1162049918743.267@timpc2/127.0.0.1
   6.789 -CREATED:20061028T153202Z
   6.790 -SUMMARY:Remove dep on org.openide.options
   6.791 -PERCENT-COMPLETE:100
   6.792 -X-NETBEANS-EFFORT:5
   6.793 -X-NETBEANS-SPENT-TIME:3
   6.794 -LAST-MODIFIED:20061028T154811Z
   6.795 -RELATED-TO:nb1162049918742.266@timpc2/127.0.0.1
   6.796 -COMPLETED:20061028T154811Z
   6.797 -END:VTODO
   6.798 -BEGIN:VTODO
   6.799 -DTSTAMP:20061028T153226Z
   6.800 -UID:nb1162049918743.268@timpc2/127.0.0.1
   6.801 -CREATED:20061028T153226Z
   6.802 -SUMMARY:Remove .settings file
   6.803 -PERCENT-COMPLETE:100
   6.804 -X-NETBEANS-EFFORT:5
   6.805 -X-NETBEANS-SPENT-TIME:0
   6.806 -LAST-MODIFIED:20061028T161557Z
   6.807 -RELATED-TO:nb1162049918742.266@timpc2/127.0.0.1
   6.808 -COMPLETED:20061028T161557Z
   6.809 -END:VTODO
   6.810 -BEGIN:VTODO
   6.811 -DTSTAMP:20061028T153251Z
   6.812 -UID:nb1162049918743.269@timpc2/127.0.0.1
   6.813 -CREATED:20061028T153251Z
   6.814 -SUMMARY:Update mf-layer.xml
   6.815 -PERCENT-COMPLETE:100
   6.816 -X-NETBEANS-EFFORT:5
   6.817 -X-NETBEANS-SPENT-TIME:1
   6.818 -LAST-MODIFIED:20061028T154500Z
   6.819 -RELATED-TO:nb1162049918742.266@timpc2/127.0.0.1
   6.820 -COMPLETED:20061028T154500Z
   6.821 -END:VTODO
   6.822 -BEGIN:VTODO
   6.823 -DTSTAMP:20061028T153333Z
   6.824 -UID:nb1162049918743.270@timpc2/127.0.0.1
   6.825 -CREATED:20061028T153333Z
   6.826 -SUMMARY:Settings INSTANCE. Does not extend SystemOption
   6.827 -DESCRIPTION:private  static Preferences getPreferences() {\n        retur
   6.828 - n NbPreferences.forModule(Settings.class)\;\n    }\npublic final class S
   6.829 - ettings  {\n    private static final Settings INSTANCE = new Settings()\
   6.830 - ;\n   public boolean getSkipComments() {\n        // XXX I did a spectac
   6.831 - ularly poor job naming this method.\n        return getPreferences().get
   6.832 - Boolean(PROP_SCAN_SKIP\, false)\;\n    }
   6.833 -PERCENT-COMPLETE:100
   6.834 -X-NETBEANS-EFFORT:20
   6.835 -X-NETBEANS-SPENT-TIME:28
   6.836 -LAST-MODIFIED:20061028T164116Z
   6.837 -RELATED-TO:nb1162049918742.266@timpc2/127.0.0.1
   6.838 -COMPLETED:20061028T164116Z
   6.839 -END:VTODO
   6.840 -BEGIN:VTODO
   6.841 -DTSTAMP:20061028T160637Z
   6.842 -UID:nb1162051597513.271@timpc2/127.0.0.1
   6.843 -CREATED:20061028T160637Z
   6.844 -SUMMARY:Document usage of options
   6.845 -PERCENT-COMPLETE:100
   6.846 -X-NETBEANS-EFFORT:15
   6.847 -X-NETBEANS-SPENT-TIME:20
   6.848 -LAST-MODIFIED:20061028T163631Z
   6.849 -RELATED-TO:nb1162049918742.266@timpc2/127.0.0.1
   6.850 -COMPLETED:20061028T163631Z
   6.851 -END:VTODO
   6.852 -BEGIN:VTODO
   6.853 -DTSTAMP:20061028T161521Z
   6.854 -UID:nb1162416036982.267@timpc2/127.0.0.1
   6.855 -CREATED:20061028T161521Z
   6.856 -SUMMARY:Bugfix: deleting a task does not stop it
   6.857 +DTSTAMP:20061022T110102Z
   6.858 +UID:nb1163526445340.297@timpc2/127.0.0.1
   6.859 +CREATED:20061022T110102Z
   6.860 +SUMMARY:Changing effort in the properties view does not refresh "remainin
   6.861 + g effort" there
   6.862  PERCENT-COMPLETE:100
   6.863  X-NETBEANS-EFFORT:15
   6.864  X-NETBEANS-SPENT-TIME:1
   6.865 -LAST-MODIFIED:20061101T212109Z
   6.866 +LAST-MODIFIED:20061114T174836Z
   6.867  RELATED-TO:nb1145736734171.295@timpc/127.0.0.1
   6.868 -COMPLETED:20061101T212040Z
   6.869 +COMPLETED:20061114T174836Z
   6.870  END:VTODO
   6.871  BEGIN:VTODO
   6.872 -DTSTAMP:20061028T143830Z
   6.873 -UID:nb1162416859468.272@timpc2/127.0.0.1
   6.874 -CREATED:20061028T143830Z
   6.875 -SUMMARY:#87939: Importing class hangs editor
   6.876 +DTSTAMP:20061030T213201Z
   6.877 +UID:nb1163526908687.299@timpc2/127.0.0.1
   6.878 +CREATED:20061030T213201Z
   6.879 +SUMMARY:Bugfix: Cut/Paste does not seem to work
   6.880  PERCENT-COMPLETE:100
   6.881  X-NETBEANS-EFFORT:60
   6.882 -X-NETBEANS-SPENT-TIME:0
   6.883 -LAST-MODIFIED:20061101T213421Z
   6.884 -URL:http://www.netbeans.org/issues/show_bug.cgi?id=87939
   6.885 +X-NETBEANS-SPENT-TIME:17
   6.886 +LAST-MODIFIED:20061114T210502Z
   6.887 +RELATED-TO:nb1145736734171.295@timpc/127.0.0.1
   6.888 +COMPLETED:20061114T210502Z
   6.889 +END:VTODO
   6.890 +BEGIN:VTODO
   6.891 +DTSTAMP:20061022T111754Z
   6.892 +UID:nb1163538557249.297@timpc2/127.0.0.1
   6.893 +CREATED:20061022T111754Z
   6.894 +SUMMARY:#87378: Filter on priority failure
   6.895 +PERCENT-COMPLETE:100
   6.896 +X-NETBEANS-EFFORT:60
   6.897 +X-NETBEANS-SPENT-TIME:88
   6.898 +LAST-MODIFIED:20061115T100243Z
   6.899 +URL:http://tasklist.netbeans.org/issues/show_bug.cgi?id=87378
   6.900  X-NETBEANS-LINE:1
   6.901  RELATED-TO:nb1145736734171.295@timpc/127.0.0.1
   6.902 -COMPLETED:20061101T213421Z
   6.903 +COMPLETED:20061115T100243Z
   6.904 +END:VTODO
   6.905 +BEGIN:VTODO
   6.906 +DTSTAMP:20061016T170914Z
   6.907 +UID:nb1163584971396.295@timpc2/127.0.0.1
   6.908 +CREATED:20061016T170914Z
   6.909 +SUMMARY:Export images for export formats
   6.910 +PERCENT-COMPLETE:100
   6.911 +X-NETBEANS-EFFORT:60
   6.912 +X-NETBEANS-SPENT-TIME:49
   6.913 +LAST-MODIFIED:20061115T112052Z
   6.914 +RELATED-TO:nb1145736734171.295@timpc/127.0.0.1
   6.915 +COMPLETED:20061115T112052Z
   6.916 +END:VTODO
   6.917 +BEGIN:VTODO
   6.918 +DTSTAMP:20061016T172526Z
   6.919 +UID:nb1163590266721.299@timpc2/127.0.0.1
   6.920 +CREATED:20061016T172526Z
   6.921 +SUMMARY:Bugfix (not in IZ): GoToUserTask is not updated if the associated
   6.922 +  file is changed
   6.923 +PERCENT-COMPLETE:100
   6.924 +X-NETBEANS-EFFORT:60
   6.925 +X-NETBEANS-SPENT-TIME:1
   6.926 +LAST-MODIFIED:20061115T113049Z
   6.927 +COMPLETED:20061115T113049Z
   6.928 +RELATED-TO:nb1145736734171.295@timpc/127.0.0.1
   6.929 +END:VTODO
   6.930 +BEGIN:VTODO
   6.931 +DTSTAMP:20061114T161752Z
   6.932 +UID:nb1163592866124.315@timpc2/127.0.0.1
   6.933 +CREATED:20061114T161752Z
   6.934 +SUMMARY:Only one checkbox "compute automatically" instead of three for ef
   6.935 + fort\, progress and spent time
   6.936 +PERCENT-COMPLETE:100
   6.937 +X-NETBEANS-EFFORT:60
   6.938 +X-NETBEANS-SPENT-TIME:145
   6.939 +LAST-MODIFIED:20061115T200249Z
   6.940 +RELATED-TO:nb1145736734171.295@timpc/127.0.0.1
   6.941 +COMPLETED:20061115T200249Z
   6.942 +END:VTODO
   6.943 +BEGIN:VTODO
   6.944 +DTSTAMP:20061116T205337Z
   6.945 +UID:nb1163792505402.302@timpc2/127.0.0.1
   6.946 +CREATED:20061116T205337Z
   6.947 +SUMMARY:IAE
   6.948 +DESCRIPTION:java.lang.IllegalStateException: This must happen in the even
   6.949 + t thread!\n        at org.openide.awt.Actions$Bridge.propertyChange(Acti
   6.950 + ons.java:509)\n        at java.beans.PropertyChangeSupport.firePropertyC
   6.951 + hange(PropertyChangeSupport.java:333)\n        at java.beans.PropertyCha
   6.952 + ngeSupport.firePropertyChange(PropertyChangeSupport.java:270)\n        a
   6.953 + t org.openide.util.SharedClassObject.firePropertyChange(SharedClassObjec
   6.954 + t.java:432)\n        at org.openide.util.SharedClassObject.putProperty(S
   6.955 + haredClassObject.java:307)\n        at org.openide.util.actions.SystemAc
   6.956 + tion.setEnabled(SystemAction.java:125)\n        at org.openide.util.acti
   6.957 + ons.CallbackSystemAction.updateEnabled(CallbackSystemAction.java:133)\n 
   6.958 +        at org.openide.util.actions.CallbackSystemAction.access$300(Callb
   6.959 + ackSystemAction.java:52)\n        at org.openide.util.actions.CallbackSy
   6.960 + stemAction$ActionDelegateListener.propertyChange(CallbackSystemAction.ja
   6.961 + va:492)\n        at java.beans.PropertyChangeSupport.firePropertyChange(
   6.962 + PropertyChangeSupport.java:333)\n        at java.beans.PropertyChangeSup
   6.963 + port.firePropertyChange(PropertyChangeSupport.java:270)\n        at java
   6.964 + x.swing.AbstractAction.firePropertyChange(AbstractAction.java:178)\n    
   6.965 +     at javax.swing.AbstractAction.setEnabled(AbstractAction.java:138)\n 
   6.966 +        at org.netbeans.modules.tasklist.usertasks.actions.UTPasteAction.
   6.967 + valueChanged(UTPasteAction.java:51)\n        at javax.swing.DefaultListS
   6.968 + electionModel.fireValueChanged(DefaultListSelectionModel.java:187)\n    
   6.969 +     at javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultLis
   6.970 + tSelectionModel.java:167)\n        at javax.swing.DefaultListSelectionMo
   6.971 + del.fireValueChanged(DefaultListSelectionModel.java:214)\n        at jav
   6.972 + ax.swing.DefaultListSelectionModel.changeSelection(DefaultListSelectionM
   6.973 + odel.java:408)\n        at javax.swing.DefaultListSelectionModel.changeS
   6.974 + election(DefaultListSelectionModel.java:417)\n        at javax.swing.Def
   6.975 + aultListSelectionModel.setSelectionInterval(DefaultListSelectionModel.ja
   6.976 + va:441)\n        at org.netbeans.modules.tasklist.usertasks.treetable.Tr
   6.977 + eeTable.select(TreeTable.java:313)\n        at org.netbeans.modules.task
   6.978 + list.usertasks.actions.UTDeleteAction.actionPerformed(UTDeleteAction.jav
   6.979 + a:138)\n        at org.openide.util.actions.CallbackSystemAction$Delegat
   6.980 + eAction$1.run(CallbackSystemAction.java:545)\n        at org.netbeans.mo
   6.981 + dules.openide.util.ActionsBridge$ActionRunnable.actionPerformed(ActionsB
   6.982 + ridge.java:89)\n        at org.netbeans.core.ModuleActions.invokeAction(
   6.983 + ModuleActions.java:82)\n        at org.netbeans.modules.openide.actions.
   6.984 + ActionsBridgeImpl.invokeAction(ActionsBridgeImpl.java:30)\n        at or
   6.985 + g.netbeans.modules.openide.util.ActionsBridge$ActionRunnable.doRun(Actio
   6.986 + nsBridge.java:80)\n        at org.netbeans.modules.openide.util.ActionsB
   6.987 + ridge$1.run(ActionsBridge.java:49)\n        at org.openide.util.RequestP
   6.988 + rocessor$Task.run(RequestProcessor.java:541)\n        at org.openide.uti
   6.989 + l.RequestProcessor$Processor.run(RequestProcessor.java:963)\n16.11.2006 
   6.990 + 21:53:00 org.netbeans.modules.tasklist.usertasks.model.UserTaskList read
   6.991 + Document
   6.992 +PERCENT-COMPLETE:100
   6.993 +X-NETBEANS-EFFORT:60
   6.994 +X-NETBEANS-SPENT-TIME:5
   6.995 +LAST-MODIFIED:20061117T194145Z
   6.996 +COMPLETED:20061117T194142Z
   6.997 +RELATED-TO:nb1145736734171.295@timpc/127.0.0.1
   6.998 +X-NETBEANS-WORK-PERIOD;X-NETBEANS-START=20061117T203551Z:5
   6.999 +END:VTODO
  6.1000 +BEGIN:VTODO
  6.1001 +DTSTAMP:20061119T120309Z
  6.1002 +UID:nb1163940859983.291@timpc2/127.0.0.1
  6.1003 +CREATED:20061119T120309Z
  6.1004 +SUMMARY:eliminate e.printStackTrace() calls
  6.1005 +PERCENT-COMPLETE:100
  6.1006 +X-NETBEANS-EFFORT:30
  6.1007 +X-NETBEANS-SPENT-TIME:3
  6.1008 +LAST-MODIFIED:20061119T125800Z
  6.1009 +RELATED-TO:nb1145736734171.295@timpc/127.0.0.1
  6.1010 +COMPLETED:20061119T125755Z
  6.1011 +X-NETBEANS-WORK-PERIOD;X-NETBEANS-START=20061119T135421Z:3
  6.1012 +END:VTODO
  6.1013 +BEGIN:VTODO
  6.1014 +DTSTAMP:20061119T112928Z
  6.1015 +UID:nb1164307380980.294@timpc2/127.0.0.1
  6.1016 +CREATED:20061119T112928Z
  6.1017 +SUMMARY:"Clear URL" button for the "New Task" dialog
  6.1018 +PERCENT-COMPLETE:0
  6.1019 +X-NETBEANS-EFFORT:60
  6.1020 +X-NETBEANS-SPENT-TIME:20
  6.1021 +LAST-MODIFIED:20061123T190359Z
  6.1022 +RELATED-TO:nb1145736734171.295@timpc/127.0.0.1
  6.1023 +X-NETBEANS-WORK-PERIOD;X-NETBEANS-START=20061123T194302Z:20
  6.1024  END:VTODO
  6.1025  BEGIN:VTODO
  6.1026  UID:nb1145292710486.268@timpc/127.0.0.1
  6.1027 @@ -780,21 +1122,6 @@
  6.1028  DTSTAMP:20060319T193903Z
  6.1029  END:VTODO
  6.1030  BEGIN:VTODO
  6.1031 -UID:nb1142443924884.72@timpc/127.0.0.1
  6.1032 -CREATED:20060315T173204Z
  6.1033 -SUMMARY:Enhancement #73549: Support for history for last used folder in e
  6.1034 - xport action
  6.1035 -PERCENT-COMPLETE:65
  6.1036 -X-NETBEANS-EFFORT:120
  6.1037 -X-NETBEANS-SPENT-TIME:77
  6.1038 -LAST-MODIFIED:20060704T221124Z
  6.1039 -URL:http://tasklist.netbeans.org/issues/show_bug.cgi?id=73549
  6.1040 -X-NETBEANS-LINE:1
  6.1041 -RELATED-TO:nb1137857799682.30@timpc/127.0.0.1
  6.1042 -X-NETBEANS-OWNER:tim
  6.1043 -DTSTAMP:20060315T173204Z
  6.1044 -END:VTODO
  6.1045 -BEGIN:VTODO
  6.1046  UID:nb1140955666906.71@timpc/127.0.0.1
  6.1047  CREATED:20060226T120746Z
  6.1048  SUMMARY:Views will not be repainted after changing the number of working 
  6.1049 @@ -856,6 +1183,8 @@
  6.1050  X-NETBEANS-EFFORT-COMPUTED:yes
  6.1051  X-NETBEANS-SPENT-TIME-COMPUTED:yes
  6.1052  DTSTAMP:20060121T142106Z
  6.1053 +COMPLETED:20061118T130219Z
  6.1054 +X-NETBEANS-VALUES-COMPUTED:yes
  6.1055  PRIORITY:2
  6.1056  END:VTODO
  6.1057  BEGIN:VTODO
  6.1058 @@ -910,6 +1239,7 @@
  6.1059  URL:http://openide.netbeans.org/tutorial/reviews/opinions_71871.html
  6.1060  X-NETBEANS-LINE:1
  6.1061  DTSTAMP:20060130T201406Z
  6.1062 +X-NETBEANS-VALUES-COMPUTED:yes
  6.1063  END:VTODO
  6.1064  BEGIN:VTODO
  6.1065  UID:nb1138652062224.39@timpc/127.0.0.1
  6.1066 @@ -1196,15 +1526,223 @@
  6.1067  DTSTAMP:20061003T102757Z
  6.1068  END:VTODO
  6.1069  BEGIN:VTODO
  6.1070 -DTSTAMP:20061016T172526Z
  6.1071 -UID:nb1161548374689.254@timpc2/127.0.0.1
  6.1072 -CREATED:20061016T172526Z
  6.1073 -SUMMARY:Bug: GoToUserTask is not updated if the associated file is change
  6.1074 - d
  6.1075 -PERCENT-COMPLETE:0
  6.1076 +DTSTAMP:20061016T190333Z
  6.1077 +UID:nb1162835088965.310@timpc2/127.0.0.1
  6.1078 +CREATED:20061016T190333Z
  6.1079 +SUMMARY:Better time editor
  6.1080 +PERCENT-COMPLETE:100
  6.1081 +X-NETBEANS-EFFORT:60
  6.1082 +X-NETBEANS-SPENT-TIME:40
  6.1083 +LAST-MODIFIED:20061101T211717Z
  6.1084 +COMPLETED:20061101T211717Z
  6.1085 +RELATED-TO:nb1137857799682.30@timpc/127.0.0.1
  6.1086 +END:VTODO
  6.1087 +BEGIN:VTODO
  6.1088 +DTSTAMP:20061012T200545Z
  6.1089 +UID:nb1162835088966.311@timpc2/127.0.0.1
  6.1090 +CREATED:20061012T200545Z
  6.1091 +SUMMARY:Missing "New Subtask" action over the task list node
  6.1092 +PERCENT-COMPLETE:100
  6.1093 +X-NETBEANS-EFFORT:5
  6.1094 +X-NETBEANS-SPENT-TIME:0
  6.1095 +LAST-MODIFIED:20061012T200655Z
  6.1096 +COMPLETED:20061012T200655Z
  6.1097 +RELATED-TO:nb1137857799682.30@timpc/127.0.0.1
  6.1098 +END:VTODO
  6.1099 +BEGIN:VTODO
  6.1100 +DTSTAMP:20061009T211243Z
  6.1101 +UID:nb1162835088966.312@timpc2/127.0.0.1
  6.1102 +CREATED:20061009T211243Z
  6.1103 +SUMMARY:Remove "backup" option
  6.1104 +PERCENT-COMPLETE:100
  6.1105 +X-NETBEANS-EFFORT:5
  6.1106 +X-NETBEANS-SPENT-TIME:2
  6.1107 +LAST-MODIFIED:20061009T211512Z
  6.1108 +COMPLETED:20061009T211512Z
  6.1109 +RELATED-TO:nb1137857799682.30@timpc/127.0.0.1
  6.1110 +END:VTODO
  6.1111 +BEGIN:VTODO
  6.1112 +DTSTAMP:20061008T204641Z
  6.1113 +UID:nb1162835088966.313@timpc2/127.0.0.1
  6.1114 +CREATED:20061008T204641Z
  6.1115 +SUMMARY:"Schedule" action
  6.1116 +PERCENT-COMPLETE:100
  6.1117 +X-NETBEANS-EFFORT:480
  6.1118 +X-NETBEANS-SPENT-TIME:61
  6.1119 +LAST-MODIFIED:20061012T200542Z
  6.1120 +COMPLETED:20061012T200542Z
  6.1121 +RELATED-TO:nb1137857799682.30@timpc/127.0.0.1
  6.1122 +END:VTODO
  6.1123 +BEGIN:VTODO
  6.1124 +DTSTAMP:20061007T144438Z
  6.1125 +UID:nb1162835088966.314@timpc2/127.0.0.1
  6.1126 +CREATED:20061007T144438Z
  6.1127 +SUMMARY:New simple export format
  6.1128 +DESCRIPTION:Exports tasks as <ul>/<li> combination
  6.1129 +PERCENT-COMPLETE:100
  6.1130 +X-NETBEANS-EFFORT:60
  6.1131 +X-NETBEANS-SPENT-TIME:63
  6.1132 +LAST-MODIFIED:20061007T161802Z
  6.1133 +COMPLETED:20061007T161802Z
  6.1134 +RELATED-TO:nb1137857799682.30@timpc/127.0.0.1
  6.1135 +END:VTODO
  6.1136 +BEGIN:VTODO
  6.1137 +DTSTAMP:20061015T122131Z
  6.1138 +UID:nb1162835088967.315@timpc2/127.0.0.1
  6.1139 +CREATED:20061015T122131Z
  6.1140 +SUMMARY:Prefs for working hours (start/end pause/working day)
  6.1141 +PERCENT-COMPLETE:100
  6.1142 +X-NETBEANS-EFFORT:240
  6.1143 +X-NETBEANS-SPENT-TIME:240
  6.1144 +LAST-MODIFIED:20061106T173549Z
  6.1145 +COMPLETED:20061106T173549Z
  6.1146 +RELATED-TO:nb1137857799682.30@timpc/127.0.0.1
  6.1147 +END:VTODO
  6.1148 +BEGIN:VTODO
  6.1149 +DTSTAMP:20061009T211526Z
  6.1150 +UID:nb1162835088967.316@timpc2/127.0.0.1
  6.1151 +CREATED:20061009T211526Z
  6.1152 +SUMMARY:Remove extended property editor for durations
  6.1153 +PERCENT-COMPLETE:100
  6.1154 +X-NETBEANS-EFFORT:30
  6.1155 +X-NETBEANS-SPENT-TIME:28
  6.1156 +LAST-MODIFIED:20061022T110645Z
  6.1157 +COMPLETED:20061022T110645Z
  6.1158 +RELATED-TO:nb1137857799682.30@timpc/127.0.0.1
  6.1159 +END:VTODO
  6.1160 +BEGIN:VTODO
  6.1161 +DTSTAMP:20061012T175532Z
  6.1162 +UID:nb1162835088967.317@timpc2/127.0.0.1
  6.1163 +CREATED:20061012T175532Z
  6.1164 +SUMMARY:Fix wrong sorting order
  6.1165 +PERCENT-COMPLETE:100
  6.1166 +X-NETBEANS-EFFORT:60
  6.1167 +X-NETBEANS-SPENT-TIME:42
  6.1168 +LAST-MODIFIED:20061022T120849Z
  6.1169 +COMPLETED:20061022T120849Z
  6.1170 +RELATED-TO:nb1137857799682.30@timpc/127.0.0.1
  6.1171 +END:VTODO
  6.1172 +BEGIN:VTODO
  6.1173 +DTSTAMP:20061015T104147Z
  6.1174 +UID:nb1162835088968.318@timpc2/127.0.0.1
  6.1175 +CREATED:20061015T104147Z
  6.1176 +SUMMARY:"Move up" does not scroll to the new task location
  6.1177 +PERCENT-COMPLETE:100
  6.1178 +X-NETBEANS-EFFORT:20
  6.1179 +X-NETBEANS-SPENT-TIME:3
  6.1180 +LAST-MODIFIED:20061022T124357Z
  6.1181 +COMPLETED:20061022T124357Z
  6.1182 +RELATED-TO:nb1137857799682.30@timpc/127.0.0.1
  6.1183 +END:VTODO
  6.1184 +BEGIN:VTODO
  6.1185 +DTSTAMP:20061015T121802Z
  6.1186 +UID:nb1162835088968.319@timpc2/127.0.0.1
  6.1187 +CREATED:20061015T121802Z
  6.1188 +SUMMARY:Use NB pref API
  6.1189 +PERCENT-COMPLETE:100
  6.1190 +X-NETBEANS-PROGRESS-COMPUTED:yes
  6.1191 +X-NETBEANS-EFFORT:50
  6.1192 +X-NETBEANS-EFFORT-COMPUTED:yes
  6.1193 +X-NETBEANS-SPENT-TIME:52
  6.1194 +X-NETBEANS-SPENT-TIME-COMPUTED:yes
  6.1195 +LAST-MODIFIED:20061028T164116Z
  6.1196 +COMPLETED:20061030T213144Z
  6.1197 +URL:http://www.netbeans.org/project/www/download/dev/javadoc/org-openide-
  6.1198 + util/org/openide/util/doc-files/preferences.html
  6.1199 +X-NETBEANS-LINE:1
  6.1200 +RELATED-TO:nb1137857799682.30@timpc/127.0.0.1
  6.1201 +X-NETBEANS-VALUES-COMPUTED:yes
  6.1202 +END:VTODO
  6.1203 +BEGIN:VTODO
  6.1204 +DTSTAMP:20061028T153202Z
  6.1205 +UID:nb1162835088968.320@timpc2/127.0.0.1
  6.1206 +CREATED:20061028T153202Z
  6.1207 +SUMMARY:Remove dep on org.openide.options
  6.1208 +PERCENT-COMPLETE:100
  6.1209 +X-NETBEANS-EFFORT:5
  6.1210 +X-NETBEANS-SPENT-TIME:3
  6.1211 +LAST-MODIFIED:20061028T154811Z
  6.1212 +COMPLETED:20061028T154811Z
  6.1213 +RELATED-TO:nb1162835088968.319@timpc2/127.0.0.1
  6.1214 +END:VTODO
  6.1215 +BEGIN:VTODO
  6.1216 +DTSTAMP:20061028T153226Z
  6.1217 +UID:nb1162835088968.321@timpc2/127.0.0.1
  6.1218 +CREATED:20061028T153226Z
  6.1219 +SUMMARY:Remove .settings file
  6.1220 +PERCENT-COMPLETE:100
  6.1221 +X-NETBEANS-EFFORT:5
  6.1222 +X-NETBEANS-SPENT-TIME:0
  6.1223 +LAST-MODIFIED:20061028T161557Z
  6.1224 +COMPLETED:20061028T161557Z
  6.1225 +RELATED-TO:nb1162835088968.319@timpc2/127.0.0.1
  6.1226 +END:VTODO
  6.1227 +BEGIN:VTODO
  6.1228 +DTSTAMP:20061028T153251Z
  6.1229 +UID:nb1162835088969.322@timpc2/127.0.0.1
  6.1230 +CREATED:20061028T153251Z
  6.1231 +SUMMARY:Update mf-layer.xml
  6.1232 +PERCENT-COMPLETE:100
  6.1233 +X-NETBEANS-EFFORT:5
  6.1234 +X-NETBEANS-SPENT-TIME:1
  6.1235 +LAST-MODIFIED:20061028T154500Z
  6.1236 +COMPLETED:20061028T154500Z
  6.1237 +RELATED-TO:nb1162835088968.319@timpc2/127.0.0.1
  6.1238 +END:VTODO
  6.1239 +BEGIN:VTODO
  6.1240 +DTSTAMP:20061028T153333Z
  6.1241 +UID:nb1162835088969.323@timpc2/127.0.0.1
  6.1242 +CREATED:20061028T153333Z
  6.1243 +SUMMARY:Settings INSTANCE. Does not extend SystemOption
  6.1244 +DESCRIPTION:private  static Preferences getPreferences() {\n        retur
  6.1245 + n NbPreferences.forModule(Settings.class)\;\n    }\npublic final class S
  6.1246 + ettings  {\n    private static final Settings INSTANCE = new Settings()\
  6.1247 + ;\n   public boolean getSkipComments() {\n        // XXX I did a spectac
  6.1248 + ularly poor job naming this method.\n        return getPreferences().get
  6.1249 + Boolean(PROP_SCAN_SKIP\, false)\;\n    }
  6.1250 +PERCENT-COMPLETE:100
  6.1251 +X-NETBEANS-EFFORT:20
  6.1252 +X-NETBEANS-SPENT-TIME:28
  6.1253 +LAST-MODIFIED:20061028T164116Z
  6.1254 +COMPLETED:20061028T164116Z
  6.1255 +RELATED-TO:nb1162835088968.319@timpc2/127.0.0.1
  6.1256 +END:VTODO
  6.1257 +BEGIN:VTODO
  6.1258 +DTSTAMP:20061028T160637Z
  6.1259 +UID:nb1162835088969.324@timpc2/127.0.0.1
  6.1260 +CREATED:20061028T160637Z
  6.1261 +SUMMARY:Document usage of options
  6.1262 +PERCENT-COMPLETE:100
  6.1263 +X-NETBEANS-EFFORT:15
  6.1264 +X-NETBEANS-SPENT-TIME:20
  6.1265 +LAST-MODIFIED:20061028T163631Z
  6.1266 +COMPLETED:20061028T163631Z
  6.1267 +RELATED-TO:nb1162835088968.319@timpc2/127.0.0.1
  6.1268 +END:VTODO
  6.1269 +BEGIN:VTODO
  6.1270 +DTSTAMP:20061028T161521Z
  6.1271 +UID:nb1162835088969.325@timpc2/127.0.0.1
  6.1272 +CREATED:20061028T161521Z
  6.1273 +SUMMARY:Bugfix: deleting a task does not stop it
  6.1274 +PERCENT-COMPLETE:100
  6.1275 +X-NETBEANS-EFFORT:15
  6.1276 +X-NETBEANS-SPENT-TIME:1
  6.1277 +LAST-MODIFIED:20061101T212109Z
  6.1278 +COMPLETED:20061101T212040Z
  6.1279 +RELATED-TO:nb1137857799682.30@timpc/127.0.0.1
  6.1280 +END:VTODO
  6.1281 +BEGIN:VTODO
  6.1282 +DTSTAMP:20061028T143830Z
  6.1283 +UID:nb1162835088970.326@timpc2/127.0.0.1
  6.1284 +CREATED:20061028T143830Z
  6.1285 +SUMMARY:#87939: Importing class hangs editor
  6.1286 +PERCENT-COMPLETE:100
  6.1287  X-NETBEANS-EFFORT:60
  6.1288  X-NETBEANS-SPENT-TIME:0
  6.1289 -LAST-MODIFIED:20061028T161548Z
  6.1290 +LAST-MODIFIED:20061101T213421Z
  6.1291 +COMPLETED:20061101T213421Z
  6.1292 +URL:http://www.netbeans.org/issues/show_bug.cgi?id=87939
  6.1293 +X-NETBEANS-LINE:1
  6.1294  RELATED-TO:nb1137857799682.30@timpc/127.0.0.1
  6.1295  END:VTODO
  6.1296  BEGIN:VTODO
  6.1297 @@ -1220,6 +1758,7 @@
  6.1298  LAST-MODIFIED:20060704T221124Z
  6.1299  COMPLETED:20060411T212344Z
  6.1300  DTSTAMP:20060410T195328Z
  6.1301 +X-NETBEANS-VALUES-COMPUTED:yes
  6.1302  END:VTODO
  6.1303  BEGIN:VTODO
  6.1304  UID:nb1144698808218.600@timpc/127.0.0.1
  6.1305 @@ -1632,6 +2171,7 @@
  6.1306  LAST-MODIFIED:20060704T221124Z
  6.1307  COMPLETED:20060411T212344Z
  6.1308  DTSTAMP:20060410T195139Z
  6.1309 +X-NETBEANS-VALUES-COMPUTED:yes
  6.1310  END:VTODO
  6.1311  BEGIN:VTODO
  6.1312  UID:nb1144698699210.499@timpc/127.0.0.1
  6.1313 @@ -2077,6 +2617,7 @@
  6.1314  LAST-MODIFIED:20060704T221124Z
  6.1315  COMPLETED:20060411T212344Z
  6.1316  DTSTAMP:20060410T194825Z
  6.1317 +X-NETBEANS-VALUES-COMPUTED:yes
  6.1318  END:VTODO
  6.1319  BEGIN:VTODO
  6.1320  UID:nb1144698505726.399@timpc/127.0.0.1
  6.1321 @@ -2459,6 +3000,7 @@
  6.1322  X-NETBEANS-SPENT-TIME-COMPUTED:yes
  6.1323  COMPLETED:20060411T212344Z
  6.1324  DTSTAMP:20060410T183427Z
  6.1325 +X-NETBEANS-VALUES-COMPUTED:yes
  6.1326  END:VTODO
  6.1327  BEGIN:VTODO
  6.1328  UID:nb1144694096767.176@timpc/127.0.0.1
  6.1329 @@ -2508,16 +3050,4 @@
  6.1330  COMPLETED:20060410T195524Z
  6.1331  DTSTAMP:20060410T183451Z
  6.1332  END:VTODO
  6.1333 -BEGIN:VTODO
  6.1334 -UID:nb1139007604353.62@timpc/127.0.0.1
  6.1335 -CREATED:20060121T141928Z
  6.1336 -SUMMARY:(not User Tasks) #65594: Allow batch export of tasklists
  6.1337 -PERCENT-COMPLETE:0
  6.1338 -X-NETBEANS-EFFORT:480
  6.1339 -X-NETBEANS-SPENT-TIME:220
  6.1340 -LAST-MODIFIED:20060704T221124Z
  6.1341 -URL:http://tasklist.netbeans.org/issues/show_bug.cgi?id=65594
  6.1342 -X-NETBEANS-LINE:1
  6.1343 -DTSTAMP:20060121T141928Z
  6.1344 -END:VTODO
  6.1345  END:VCALENDAR
     7.1 --- a/tasklist.usertasks/doc/processes.ics	Mon Dec 04 21:57:00 2006 +0000
     7.2 +++ b/tasklist.usertasks/doc/processes.ics	Mon Dec 04 21:59:57 2006 +0000
     7.3 @@ -7,84 +7,86 @@
     7.4  SUMMARY:Adding a field to UserTask
     7.5  DESCRIPTION:Steps that should be accomplished to add a new field to the U
     7.6   serTask class that is visible to the user
     7.7 -PERCENT-COMPLETE:13
     7.8 +PERCENT-COMPLETE:0
     7.9  X-NETBEANS-PROGRESS-COMPUTED:yes
    7.10  X-NETBEANS-EFFORT:150
    7.11  X-NETBEANS-EFFORT-COMPUTED:yes
    7.12  X-NETBEANS-SPENT-TIME:5
    7.13  X-NETBEANS-SPENT-TIME-COMPUTED:yes
    7.14 -LAST-MODIFIED:20060427T183028Z
    7.15 +LAST-MODIFIED:20061115T194841Z
    7.16 +DTSTAMP:20040909T181638Z
    7.17  END:VTODO
    7.18  BEGIN:VTODO
    7.19  UID:nb1099827812695.413@timpc/145.254.144.151
    7.20  CREATED:20041107T114332Z
    7.21  SUMMARY:UserTask
    7.22 -PERCENT-COMPLETE:100
    7.23 +PERCENT-COMPLETE:0
    7.24  X-NETBEANS-PROGRESS-COMPUTED:yes
    7.25  X-NETBEANS-EFFORT:20
    7.26  X-NETBEANS-EFFORT-COMPUTED:yes
    7.27  X-NETBEANS-SPENT-TIME:3
    7.28  X-NETBEANS-SPENT-TIME-COMPUTED:yes
    7.29 -LAST-MODIFIED:20060427T183028Z
    7.30 +LAST-MODIFIED:20061115T194841Z
    7.31  RELATED-TO:nb1094753798137.164@timpc/145.254.152.118
    7.32  COMPLETED:20051104T183420Z
    7.33 +DTSTAMP:20041107T114332Z
    7.34  END:VTODO
    7.35  BEGIN:VTODO
    7.36  UID:nb1116157827968.450@timpc/169.254.180.13
    7.37  CREATED:20050515T115027Z
    7.38  SUMMARY:create PROP_... field
    7.39 -PERCENT-COMPLETE:100
    7.40 +PERCENT-COMPLETE:0
    7.41  X-NETBEANS-EFFORT:5
    7.42  X-NETBEANS-SPENT-TIME:0
    7.43 -LAST-MODIFIED:20060427T183028Z
    7.44 -URL:file:/home/tim/netbeans/trunk/tasklist/usertasks/src/org/netbeans/mod
    7.45 - ules/tasklist/usertasks/model/UserTask.java
    7.46 +LAST-MODIFIED:20061115T194841Z
    7.47 +URL:file:/home/tim/projects/netbeans/trunk/tasklist/usertasks/src/org/net
    7.48 + beans/modules/tasklist/usertasks/model/UserTask.java
    7.49  X-NETBEANS-LINE:237
    7.50  RELATED-TO:nb1099827812695.413@timpc/145.254.144.151
    7.51 -COMPLETED:20060423T112759Z
    7.52 +DTSTAMP:20050515T115027Z
    7.53  END:VTODO
    7.54  BEGIN:VTODO
    7.55  UID:nb1099827822640.415@timpc/145.254.144.151
    7.56  CREATED:20040909T181651Z
    7.57  SUMMARY:create the field. Don't forget initial values
    7.58 -PERCENT-COMPLETE:100
    7.59 +PERCENT-COMPLETE:0
    7.60  X-NETBEANS-EFFORT:5
    7.61  X-NETBEANS-SPENT-TIME:3
    7.62 -LAST-MODIFIED:20060427T183028Z
    7.63 -URL:file:/C:/tasklist/trunk/tasklist/usertasks/src/org/netbeans/modules/t
    7.64 - asklist/usertasks/model/UserTask.java
    7.65 +LAST-MODIFIED:20061115T194955Z
    7.66 +URL:file:/home/tim/projects/netbeans/trunk/tasklist/usertasks/src/org/net
    7.67 + beans/modules/tasklist/usertasks/model/UserTask.java
    7.68  X-NETBEANS-LINE:300
    7.69  X-NETBEANS-OWNER:tim
    7.70  RELATED-TO:nb1099827812695.413@timpc/145.254.144.151
    7.71 -COMPLETED:20060423T112800Z
    7.72 +DTSTAMP:20040909T181651Z
    7.73  END:VTODO
    7.74  BEGIN:VTODO
    7.75  UID:nb1099827827116.417@timpc/145.254.144.151
    7.76  CREATED:20040909T182007Z
    7.77  SUMMARY:create UserTask.get.. and set. firePropertyChange() in set...
    7.78 -PERCENT-COMPLETE:100
    7.79 +PERCENT-COMPLETE:0
    7.80  X-NETBEANS-EFFORT:5
    7.81  X-NETBEANS-SPENT-TIME:0
    7.82 -LAST-MODIFIED:20060427T183028Z
    7.83 -URL:file:/C:/tasklist/trunk/tasklist/usertasks/src/org/netbeans/modules/t
    7.84 - asklist/usertasks/model/UserTask.java
    7.85 +LAST-MODIFIED:20061115T195035Z
    7.86 +URL:file:/home/tim/projects/netbeans/trunk/tasklist/usertasks/src/org/net
    7.87 + beans/modules/tasklist/usertasks/model/UserTask.java
    7.88  X-NETBEANS-LINE:300
    7.89  RELATED-TO:nb1099827812695.413@timpc/145.254.144.151
    7.90 -COMPLETED:20060423T112928Z
    7.91 +DTSTAMP:20040909T182007Z
    7.92  END:VTODO
    7.93  BEGIN:VTODO
    7.94  UID:nb1099827831092.419@timpc/145.254.144.151
    7.95  CREATED:20040909T181702Z
    7.96  SUMMARY:update UserTask.copyFrom()
    7.97 -PERCENT-COMPLETE:100
    7.98 +PERCENT-COMPLETE:0
    7.99  X-NETBEANS-EFFORT:5
   7.100  X-NETBEANS-SPENT-TIME:0
   7.101 -LAST-MODIFIED:20060427T183028Z
   7.102 -URL:file:/home/tim/netbeans/trunk/tasklist/usertasks/src/org/netbeans/mod
   7.103 - ules/tasklist/usertasks/model/UserTask.java
   7.104 +LAST-MODIFIED:20061115T195101Z
   7.105 +URL:file:/home/tim/projects/netbeans/trunk/tasklist/usertasks/src/org/net
   7.106 + beans/modules/tasklist/usertasks/model/UserTask.java
   7.107  RELATED-TO:nb1099827812695.413@timpc/145.254.144.151
   7.108  X-NETBEANS-LINE:1349
   7.109 -COMPLETED:20060423T113048Z
   7.110 +DTSTAMP:20040909T181702Z
   7.111  END:VTODO
   7.112  BEGIN:VTODO
   7.113  UID:nb1105268256075.77@timpc/127.0.0.1
   7.114 @@ -103,6 +105,7 @@
   7.115  X-NETBEANS-OWNER:tim
   7.116  RELATED-TO:nb1094753798137.164@timpc/145.254.152.118
   7.117  COMPLETED:20051104T183420Z
   7.118 +DTSTAMP:20050109T105736Z
   7.119  END:VTODO
   7.120  BEGIN:VTODO
   7.121  UID:nb1116157696319.447@timpc/169.254.180.13
   7.122 @@ -111,11 +114,12 @@
   7.123  PERCENT-COMPLETE:0
   7.124  X-NETBEANS-EFFORT:5
   7.125  X-NETBEANS-SPENT-TIME:0
   7.126 -LAST-MODIFIED:20060427T184135Z
   7.127 -URL:file:/home/tim/netbeans/trunk/tasklist/usertasks/src/org/netbeans/mod
   7.128 - ules/tasklist/usertasks/UserTaskTreeTableNode.java
   7.129 +LAST-MODIFIED:20061115T195122Z
   7.130 +URL:file:/home/tim/projects/netbeans/trunk/tasklist/usertasks/src/org/net
   7.131 + beans/modules/tasklist/usertasks/UserTaskTreeTableNode.java
   7.132  RELATED-TO:nb1105268256075.77@timpc/127.0.0.1
   7.133  X-NETBEANS-LINE:175
   7.134 +DTSTAMP:20050109T120945Z
   7.135  END:VTODO
   7.136  BEGIN:VTODO
   7.137  UID:nb1116157713233.449@timpc/169.254.180.13
   7.138 @@ -129,6 +133,7 @@
   7.139   asklist/usertasks/UserTaskTreeTableNode.java
   7.140  X-NETBEANS-LINE:203
   7.141  RELATED-TO:nb1105268256075.77@timpc/127.0.0.1
   7.142 +DTSTAMP:20050109T120945Z
   7.143  END:VTODO
   7.144  BEGIN:VTODO
   7.145  UID:nb1094753880034.181@timpc/145.254.152.118
   7.146 @@ -143,6 +148,7 @@
   7.147  LAST-MODIFIED:20060427T183028Z
   7.148  RELATED-TO:nb1094753798137.164@timpc/145.254.152.118
   7.149  COMPLETED:20051104T183420Z
   7.150 +DTSTAMP:20040909T181800Z
   7.151  END:VTODO
   7.152  BEGIN:VTODO
   7.153  UID:nb1094753930397.182@timpc/145.254.152.118
   7.154 @@ -151,11 +157,12 @@
   7.155  PERCENT-COMPLETE:0
   7.156  X-NETBEANS-EFFORT:5
   7.157  X-NETBEANS-SPENT-TIME:0
   7.158 -LAST-MODIFIED:20060427T183028Z
   7.159 -URL:file:/C:/tasklist/trunk/tasklist/usertasks/src/org/netbeans/modules/t
   7.160 - asklist/usertasks/EditTaskPanel.java
   7.161 +LAST-MODIFIED:20061115T195208Z
   7.162 +URL:file:/home/tim/projects/netbeans/trunk/tasklist/usertasks/src/org/net
   7.163 + beans/modules/tasklist/usertasks/EditTaskPanel.java
   7.164  X-NETBEANS-LINE:237
   7.165  RELATED-TO:nb1094753880034.181@timpc/145.254.152.118
   7.166 +DTSTAMP:20040909T181850Z
   7.167  END:VTODO
   7.168  BEGIN:VTODO
   7.169  UID:nb1094753953831.183@timpc/145.254.152.118
   7.170 @@ -164,11 +171,12 @@
   7.171  PERCENT-COMPLETE:0
   7.172  X-NETBEANS-EFFORT:5
   7.173  X-NETBEANS-SPENT-TIME:0
   7.174 -LAST-MODIFIED:20060427T183028Z
   7.175 -URL:file:/C:/tasklist/trunk/tasklist/usertasks/src/org/netbeans/modules/t
   7.176 - asklist/usertasks/EditTaskPanel.java
   7.177 -X-NETBEANS-LINE:342
   7.178 +LAST-MODIFIED:20061115T195325Z
   7.179 +URL:file:/home/tim/projects/netbeans/trunk/tasklist/usertasks/src/org/net
   7.180 + beans/modules/tasklist/usertasks/EditTaskPanel.java
   7.181 +X-NETBEANS-LINE:341
   7.182  RELATED-TO:nb1094753880034.181@timpc/145.254.152.118
   7.183 +DTSTAMP:20040909T181913Z
   7.184  END:VTODO
   7.185  BEGIN:VTODO
   7.186  UID:nb1094755062895.197@timpc/145.254.152.118
   7.187 @@ -183,6 +191,7 @@
   7.188  X-NETBEANS-LINE:407
   7.189  X-NETBEANS-OWNER:tim
   7.190  RELATED-TO:nb1094753798137.164@timpc/145.254.152.118
   7.191 +DTSTAMP:20040909T183742Z
   7.192  X-NETBEANS-WORK-PERIOD;X-NETBEANS-START=20050405T020000Z:1
   7.193  END:VTODO
   7.194  BEGIN:VTODO
   7.195 @@ -198,6 +207,7 @@
   7.196  LAST-MODIFIED:20060427T183028Z
   7.197  RELATED-TO:nb1094753798137.164@timpc/145.254.152.118
   7.198  COMPLETED:20051104T183420Z
   7.199 +DTSTAMP:20041107T114253Z
   7.200  PRIORITY:1
   7.201  END:VTODO
   7.202  BEGIN:VTODO
   7.203 @@ -212,6 +222,7 @@
   7.204   asklist/usertasks/filter/UserTaskProperties.java
   7.205  X-NETBEANS-LINE:35
   7.206  RELATED-TO:nb1099827773790.406@timpc/145.254.144.151
   7.207 +DTSTAMP:20040909T184007Z
   7.208  END:VTODO
   7.209  BEGIN:VTODO
   7.210  UID:nb1099827797393.410@timpc/145.254.144.151
   7.211 @@ -225,6 +236,7 @@
   7.212   asklist/usertasks/filter/UserTaskProperties.java
   7.213  X-NETBEANS-LINE:143
   7.214  RELATED-TO:nb1099827773790.406@timpc/145.254.144.151
   7.215 +DTSTAMP:20041107T114120Z
   7.216  END:VTODO
   7.217  BEGIN:VTODO
   7.218  UID:nb1099827803452.412@timpc/145.254.144.151
   7.219 @@ -238,6 +250,7 @@
   7.220   asklist/usertasks/filter/UserTaskProperties.java
   7.221  X-NETBEANS-LINE:194
   7.222  RELATED-TO:nb1099827773790.406@timpc/145.254.144.151
   7.223 +DTSTAMP:20041107T114154Z
   7.224  END:VTODO
   7.225  BEGIN:VTODO
   7.226  UID:nb1099828582442.437@timpc/145.254.144.151
   7.227 @@ -251,6 +264,7 @@
   7.228   asklist/usertasks/filter/UserTaskFilter.java
   7.229  X-NETBEANS-LINE:48
   7.230  RELATED-TO:nb1099827773790.406@timpc/145.254.144.151
   7.231 +DTSTAMP:20041107T115515Z
   7.232  END:VTODO
   7.233  BEGIN:VTODO
   7.234  UID:nb1099828639584.438@timpc/145.254.144.151
   7.235 @@ -264,6 +278,7 @@
   7.236   asklist/usertasks/filter/UserTaskFilter.java
   7.237  X-NETBEANS-LINE:107
   7.238  RELATED-TO:nb1099827773790.406@timpc/145.254.144.151
   7.239 +DTSTAMP:20041107T115719Z
   7.240  END:VTODO
   7.241  BEGIN:VTODO
   7.242  UID:nb1099828927859.439@timpc/145.254.144.151
   7.243 @@ -277,6 +292,7 @@
   7.244   asklist/usertasks/filter/Bundle.properties
   7.245  X-NETBEANS-LINE:63
   7.246  RELATED-TO:nb1099827773790.406@timpc/145.254.144.151
   7.247 +DTSTAMP:20041107T120207Z
   7.248  END:VTODO
   7.249  BEGIN:VTODO
   7.250  UID:nb1099827852262.422@timpc/145.254.144.151
   7.251 @@ -291,6 +307,7 @@
   7.252  LAST-MODIFIED:20060427T183028Z
   7.253  RELATED-TO:nb1094753798137.164@timpc/145.254.152.118
   7.254  COMPLETED:20051104T183420Z
   7.255 +DTSTAMP:20041107T114412Z
   7.256  END:VTODO
   7.257  BEGIN:VTODO
   7.258  UID:nb1116157325396.447@timpc/169.254.180.13
   7.259 @@ -304,6 +321,7 @@
   7.260   asklist/usertasks/UserTasksTreeTableModel.java
   7.261  X-NETBEANS-LINE:57
   7.262  RELATED-TO:nb1099827852262.422@timpc/145.254.144.151
   7.263 +DTSTAMP:20040909T183923Z
   7.264  END:VTODO
   7.265  BEGIN:VTODO
   7.266  UID:nb1099827887363.424@timpc/145.254.144.151
   7.267 @@ -318,6 +336,7 @@
   7.268  X-NETBEANS-LINE:163
   7.269  X-NETBEANS-OWNER:tim
   7.270  RELATED-TO:nb1099827852262.422@timpc/145.254.144.151
   7.271 +DTSTAMP:20041107T114447Z
   7.272  END:VTODO
   7.273  BEGIN:VTODO
   7.274  UID:nb1099827869227.423@timpc/145.254.144.151
   7.275 @@ -331,6 +350,7 @@
   7.276   asklist/usertasks/UserTasksTreeTableModel.java
   7.277  X-NETBEANS-LINE:139
   7.278  RELATED-TO:nb1099827852262.422@timpc/145.254.144.151
   7.279 +DTSTAMP:20041107T114429Z
   7.280  END:VTODO
   7.281  BEGIN:VTODO
   7.282  UID:nb1099827901693.425@timpc/145.254.144.151
   7.283 @@ -344,6 +364,7 @@
   7.284   asklist/usertasks/UserTasksTreeTableModel.java
   7.285  X-NETBEANS-LINE:188
   7.286  RELATED-TO:nb1099827852262.422@timpc/145.254.144.151
   7.287 +DTSTAMP:20041107T114501Z
   7.288  END:VTODO
   7.289  BEGIN:VTODO
   7.290  UID:nb1099827914342.426@timpc/145.254.144.151
   7.291 @@ -357,6 +378,7 @@
   7.292   asklist/usertasks/UserTasksTreeTableModel.java
   7.293  X-NETBEANS-LINE:210
   7.294  RELATED-TO:nb1099827852262.422@timpc/145.254.144.151
   7.295 +DTSTAMP:20041107T114514Z
   7.296  END:VTODO
   7.297  BEGIN:VTODO
   7.298  UID:nb1099827975650.427@timpc/145.254.144.151
   7.299 @@ -371,6 +393,7 @@
   7.300  X-NETBEANS-LINE:234
   7.301  X-NETBEANS-OWNER:tim
   7.302  RELATED-TO:nb1094753798137.164@timpc/145.254.152.118
   7.303 +DTSTAMP:20041107T114615Z
   7.304  END:VTODO
   7.305  BEGIN:VTODO
   7.306  UID:nb1099828031770.428@timpc/145.254.144.151
   7.307 @@ -381,6 +404,7 @@
   7.308  X-NETBEANS-SPENT-TIME:0
   7.309  LAST-MODIFIED:20060427T183028Z
   7.310  RELATED-TO:nb1094753798137.164@timpc/145.254.152.118
   7.311 +DTSTAMP:20041107T114711Z
   7.312  END:VTODO
   7.313  BEGIN:VTODO
   7.314  UID:nb1099828053311.429@timpc/145.254.144.151
   7.315 @@ -395,6 +419,7 @@
   7.316  LAST-MODIFIED:20060427T183028Z
   7.317  RELATED-TO:nb1094753798137.164@timpc/145.254.152.118
   7.318  COMPLETED:20051104T183420Z
   7.319 +DTSTAMP:20041107T114733Z
   7.320  END:VTODO
   7.321  BEGIN:VTODO
   7.322  UID:nb1099828065699.430@timpc/145.254.144.151
   7.323 @@ -408,6 +433,7 @@
   7.324   asklist/usertasks/translators/ICalExportFormat.java
   7.325  X-NETBEANS-LINE:336
   7.326  RELATED-TO:nb1099828053311.429@timpc/145.254.144.151
   7.327 +DTSTAMP:20041107T114745Z
   7.328  END:VTODO
   7.329  BEGIN:VTODO
   7.330  UID:nb1099828085728.431@timpc/145.254.144.151
   7.331 @@ -421,6 +447,7 @@
   7.332   asklist/usertasks/translators/ICalImportFormat.java
   7.333  X-NETBEANS-LINE:513
   7.334  RELATED-TO:nb1099828053311.429@timpc/145.254.144.151
   7.335 +DTSTAMP:20041107T114805Z
   7.336  END:VTODO
   7.337  BEGIN:VTODO
   7.338  UID:nb1099828115992.432@timpc/145.254.144.151
   7.339 @@ -434,6 +461,7 @@
   7.340   asklist/usertasks/translators/XmlExportFormat.java
   7.341  X-NETBEANS-LINE:233
   7.342  RELATED-TO:nb1099828053311.429@timpc/145.254.144.151
   7.343 +DTSTAMP:20041107T114835Z
   7.344  END:VTODO
   7.345  BEGIN:VTODO
   7.346  UID:nb1099828158613.434@timpc/145.254.144.151
   7.347 @@ -447,6 +475,7 @@
   7.348   asklist/usertasks/translators/usertasks-1_2.dtd
   7.349  X-NETBEANS-LINE:1
   7.350  RELATED-TO:nb1099828053311.429@timpc/145.254.144.151
   7.351 +DTSTAMP:20041107T114918Z
   7.352  END:VTODO
   7.353  BEGIN:VTODO
   7.354  UID:nb1125424947017.57@timpc/169.254.249.33
   7.355 @@ -460,5 +489,6 @@
   7.356   asklist/usertasks/Bundle.properties
   7.357  X-NETBEANS-LINE:214
   7.358  RELATED-TO:nb1094753798137.164@timpc/145.254.152.118
   7.359 +DTSTAMP:20050830T180227Z
   7.360  END:VTODO
   7.361  END:VCALENDAR
     8.1 --- a/tasklist.usertasks/javahelp/org/netbeans/modules/tasklist/usertasks/docs/content/addTask.html	Mon Dec 04 21:57:00 2006 +0000
     8.2 +++ b/tasklist.usertasks/javahelp/org/netbeans/modules/tasklist/usertasks/docs/content/addTask.html	Mon Dec 04 21:59:57 2006 +0000
     8.3 @@ -2,17 +2,21 @@
     8.4  <html>
     8.5  <head>
     8.6  
     8.7 +
     8.8 +  
     8.9    <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
    8.10 +
    8.11 +  
    8.12    <title>How to add a task to the source</title>
    8.13 -
    8.14 -
    8.15  </head>
    8.16  
    8.17  
    8.18  <body>
    8.19  
    8.20 +
    8.21  <h2>How to Add a Task to the Source</h2>
    8.22  
    8.23 +
    8.24  You can associate
    8.25  a line in a file with a
    8.26  task. The task selected in the table will also be highlighted in the
    8.27 @@ -20,16 +24,22 @@
    8.28  yellow
    8.29  background:<br>
    8.30  
    8.31 +
    8.32  <br>
    8.33  
    8.34 +
    8.35  <img src="images/editor.gif" alt="Selected task in the editor" style="width: 686px; height: 92px;"><br>
    8.36  
    8.37 +
    8.38  <br>
    8.39  
    8.40 +
    8.41  There are 2 possibilities to add a task to the source:<br>
    8.42  
    8.43 +
    8.44  <ol>
    8.45  
    8.46 +
    8.47    <li>Just place the cursor at the desired position in the
    8.48  editor, open
    8.49  a task list and press the "New Task..." button from the local toolbar.
    8.50 @@ -37,34 +47,47 @@
    8.51  source file.&nbsp; You can also enter multiple tasks at once. Just
    8.52  press "Add Another" button instead of "OK".<br>
    8.53  
    8.54 -    <br>
    8.55 -
    8.56 -    <img src="images/newTaskDialog.jpg" title="" alt="New task dialog" style="width: 608px; height: 585px;"><br>
    8.57  
    8.58      <br>
    8.59  
    8.60 +
    8.61 +    <img src="images/newTaskDialog.jpg" alt="New task dialog" style="width: 606px; height: 577px;"><br>
    8.62 +
    8.63 +
    8.64 +    <br>
    8.65 +
    8.66 +
    8.67    </li>
    8.68  
    8.69 +
    8.70    <li>There is a special bridge module between the User Tasks
    8.71  module
    8.72  and the editor: Task List Editor Support. Install it and open the local
    8.73  menu over the left editor margin:<br>
    8.74  
    8.75 +
    8.76      <br>
    8.77  
    8.78 +
    8.79      <img src="images/editorSupport.gif" title="" alt="Adding a task from the editor" style="height: 206px; width: 363px;"><br>
    8.80  
    8.81 +
    8.82      <br>
    8.83  
    8.84 +
    8.85    </li>
    8.86  
    8.87 +
    8.88  </ol>
    8.89  
    8.90 +
    8.91  <hr>Comments &amp; requests to <a href="mailto:dev@tasklist.netbeans.org"><code>dev@tasklist.netbeans.org</code></a>.
    8.92  Further information at <a href="http://tasklist.netbeans.org/"><code>http://tasklist.netbeans.org</code></a>.
    8.93  <ol>
    8.94  
    8.95 +
    8.96  </ol>
    8.97  
    8.98 +
    8.99  </body>
   8.100  </html>
     9.1 --- a/tasklist.usertasks/javahelp/org/netbeans/modules/tasklist/usertasks/docs/content/newTaskDialog.html	Mon Dec 04 21:57:00 2006 +0000
     9.2 +++ b/tasklist.usertasks/javahelp/org/netbeans/modules/tasklist/usertasks/docs/content/newTaskDialog.html	Mon Dec 04 21:59:57 2006 +0000
     9.3 @@ -3,9 +3,13 @@
     9.4  <head>
     9.5  
     9.6  
     9.7 +
     9.8 +  
     9.9    
    9.10    <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
    9.11  
    9.12 +
    9.13 +  
    9.14    
    9.15    <title>How to add a task to the source</title>
    9.16  </head>
    9.17 @@ -14,12 +18,15 @@
    9.18  <body>
    9.19  
    9.20  
    9.21 +
    9.22  <h2>"New Task" Dialog</h2>
    9.23  
    9.24  
    9.25 +
    9.26  <br>
    9.27  
    9.28  
    9.29 +
    9.30  The "General" tab contains some common properties of a task like
    9.31  summary, details, priority, category and owner. A file can be <a href="addTask.html">associated</a> with a task. The
    9.32  category and owner
    9.33 @@ -27,58 +34,63 @@
    9.34  same task list.<br>
    9.35  
    9.36  
    9.37 -<br>
    9.38 -
    9.39 -
    9.40 -<img src="images/newTaskDialog.jpg" title="" alt="General Tab" style="width: 608px; height: 585px;"> <br>
    9.41 -
    9.42  
    9.43  <br>
    9.44  
    9.45  
    9.46 -The second tab contains some time related properties. Due field
    9.47 -contains a date when the task should be completed.
    9.48 -Effort, progress and spent time could be computed automatically. <br>
    9.49 +
    9.50 +<img src="images/newTaskDialog.jpg" alt="General Tab" style="width: 606px; height: 577px;"> <br>
    9.51 +
    9.52  
    9.53  
    9.54  <br>
    9.55  
    9.56  
    9.57 -<img src="images/timeRelated.jpeg" alt="Time Related Tab" style="width: 608px; height: 576px;"><br>
    9.58 +
    9.59 +The second tab contains some time related properties. Due field
    9.60 +contains a date when the task should be completed.
    9.61 +Effort, progress and spent time could be computed automatically. 
    9.62 +
    9.63 +
    9.64 +This&nbsp;tab also lists time periods spent working on the task. "<a href="options.html">Collect Work Periods</a>" option
    9.65 +should be
    9.66 +activated to use this.<br>
    9.67 +
    9.68  
    9.69  
    9.70  <br>
    9.71  
    9.72  
    9.73 -On the third tab you can define dependencies for the task.<br>
    9.74 +
    9.75 +<img src="images/timeRelated.jpeg" alt="Time Related Tab" style="width: 610px; height: 580px;"><br>
    9.76 +
    9.77  
    9.78  
    9.79  <br>
    9.80  
    9.81  
    9.82 -<img src="images/dependencies.jpeg" title="" alt="Dependencies Tab" style="width: 608px; height: 576px;"><br>
    9.83 +
    9.84 +On the third tab you can define dependencies for the task.<br>
    9.85 +
    9.86  
    9.87  
    9.88  <br>
    9.89  
    9.90  
    9.91 -The fourth tab lists time periods spent working on the task. "<a href="options.html">Collect Work Periods</a>" option
    9.92 -should be
    9.93 -activated to use this.<br>
    9.94 +
    9.95 +<img src="images/dependencies.jpeg" alt="Dependencies Tab" style="width: 610px; height: 580px;"><br>
    9.96 +
    9.97  
    9.98  
    9.99  <br>
   9.100 +<br>
   9.101  
   9.102  
   9.103 -<img src="images/workPeriods.jpeg" title="" alt="Work Periods Tab" style="width: 608px; height: 576px;"><br>
   9.104 -
   9.105 -
   9.106 -<br>
   9.107 -
   9.108  
   9.109  <hr>Comments &amp; requests to <a href="mailto:dev@tasklist.netbeans.org"><code>dev@tasklist.netbeans.org</code></a>.
   9.110  Further information at <a href="http://tasklist.netbeans.org/"><code>http://tasklist.netbeans.org</code></a>.<br>
   9.111  
   9.112  
   9.113 +
   9.114  </body>
   9.115  </html>
    10.1 --- a/tasklist.usertasks/javahelp/org/netbeans/modules/tasklist/usertasks/docs/content/options.html	Mon Dec 04 21:57:00 2006 +0000
    10.2 +++ b/tasklist.usertasks/javahelp/org/netbeans/modules/tasklist/usertasks/docs/content/options.html	Mon Dec 04 21:59:57 2006 +0000
    10.3 @@ -20,12 +20,15 @@
    10.4  
    10.5  
    10.6  
    10.7 +
    10.8    
    10.9  
   10.10  
   10.11    
   10.12    
   10.13    
   10.14 +  
   10.15 +  
   10.16    <title>Task List Options</title>
   10.17    <link rel="StyleSheet" href="ide.css" type="text/css">
   10.18  </head>
   10.19 @@ -35,10 +38,12 @@
   10.20  
   10.21  
   10.22  
   10.23 +
   10.24  <h2>User Task List Options </h2>
   10.25  
   10.26  
   10.27  
   10.28 +
   10.29  <p>
   10.30  To customize options related to the User Tasks view,
   10.31  open the Options dialog (Tools &gt; Options),
   10.32 @@ -46,7 +51,9 @@
   10.33  
   10.34  
   10.35  
   10.36 -<p><img style="width: 827px; height: 662px;" alt="User Tasks Options" src="images/options.jpg"><br>
   10.37 +
   10.38 +<p><img style="width: 846px; height: 635px;" alt="User Tasks Options" src="images/options.jpg"><br>
   10.39 +
   10.40  
   10.41  
   10.42  
   10.43 @@ -54,15 +61,18 @@
   10.44  
   10.45  
   10.46  
   10.47 +
   10.48  <p>The following settings are available:
   10.49  </p>
   10.50  
   10.51  
   10.52  
   10.53 +
   10.54  <ul>
   10.55  
   10.56  
   10.57  
   10.58 +
   10.59    <li> <b>Append instead of Prepend</b>: Instead of
   10.60  prepending tasks
   10.61  to the list, append them to the end. Default: False. This is handy if
   10.62 @@ -72,6 +82,7 @@
   10.63  
   10.64  
   10.65  
   10.66 +
   10.67    
   10.68  
   10.69  
   10.70 @@ -81,6 +92,7 @@
   10.71  
   10.72  
   10.73  
   10.74 +
   10.75    <li><span style="font-weight: bold;">Detect
   10.76  Inactivity:</span> if
   10.77  this option is on, a running task will be suspended after 10 minutes
   10.78 @@ -89,7 +101,9 @@
   10.79  
   10.80  
   10.81  
   10.82 +
   10.83    </li>
   10.84 +
   10.85    <li><b>Automatically Switch "Spent Time", "Effort" and
   10.86  "Percent
   10.87  Complete" to "Computed" if a subtask is added:</b> if you create
   10.88 @@ -99,22 +113,27 @@
   10.89  
   10.90  
   10.91  
   10.92 +
   10.93    </li>
   10.94  
   10.95  
   10.96  
   10.97 +
   10.98    <li><b>Default User Tasks File</b>: Name of file
   10.99  where the tasks are
  10.100  stored.
  10.101  Default: {userdir}/tasklist.ics.</li>
  10.102 +
  10.103    <li><span style="font-weight: bold;">Start Working Day/Start Pause/End Pause/End Working Day/Working Days:</span> these settings define periods of work.</li>
  10.104  
  10.105  
  10.106  
  10.107 +
  10.108  </ul>
  10.109  
  10.110  
  10.111  
  10.112 +
  10.113  <hr>Comments &amp; requests to <a href="mailto:dev@tasklist.netbeans.org"><code>dev@tasklist.netbeans.org</code></a>.
  10.114  Further information at <a href="http://tasklist.netbeans.org/"><code>http://tasklist.netbeans.org</code></a>.
  10.115  </body>
    11.1 --- a/tasklist.usertasks/javahelp/org/netbeans/modules/tasklist/usertasks/docs/content/translators.html	Mon Dec 04 21:57:00 2006 +0000
    11.2 +++ b/tasklist.usertasks/javahelp/org/netbeans/modules/tasklist/usertasks/docs/content/translators.html	Mon Dec 04 21:59:57 2006 +0000
    11.3 @@ -3,9 +3,13 @@
    11.4  <head>
    11.5  
    11.6  
    11.7 +
    11.8 +  
    11.9    
   11.10    <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
   11.11  
   11.12 +
   11.13 +  
   11.14    
   11.15    <title>Export and Import Wizards</title>
   11.16  </head>
   11.17 @@ -14,107 +18,142 @@
   11.18  <body>
   11.19  
   11.20  
   11.21 +
   11.22  <h2>Export and Import Wizards</h2>
   11.23  
   11.24  
   11.25 +
   11.26  <br>
   11.27  
   11.28  
   11.29 +
   11.30  <ul>
   11.31  
   11.32  
   11.33 +
   11.34    <li>Import of an iCalendar file. Just choose the source file
   11.35  and
   11.36  press "Finish". All the tasks in the current task list will be replaced
   11.37  by imported ones.<br>
   11.38  
   11.39  
   11.40 +
   11.41      <br>
   11.42  
   11.43  
   11.44 +
   11.45      <img src="images/importICal.gif" title="" alt="Import iCalendar" style="width: 826px; height: 548px;"><br>
   11.46  
   11.47  
   11.48 +
   11.49      <br>
   11.50  
   11.51  
   11.52 +
   11.53    </li>
   11.54  
   11.55  
   11.56 +
   11.57    <li>Export in HTML. Choose the destination file. Press "Next".<br>
   11.58  
   11.59  
   11.60 +
   11.61      <br>
   11.62  
   11.63  
   11.64 +
   11.65      <img src="images/exportHtml.gif" title="" alt="Export HTML" style="width: 710px; height: 450px;"><br>
   11.66  
   11.67  
   11.68 +
   11.69      <br>
   11.70  
   11.71  
   11.72 +
   11.73  Choose the layout of the HTML file from the combobox and press
   11.74  "Finish". You can also preview the exported file by selecting the
   11.75  checkbox "Open the resulting HTML file in browser".<br>
   11.76  
   11.77  
   11.78 +
   11.79      <br>
   11.80  
   11.81  
   11.82 +
   11.83      <img src="images/exportHtmlLayout.gif" title="" alt="Export HTML-Choose Layout" style="width: 710px; height: 450px;"><br>
   11.84  
   11.85  
   11.86 +
   11.87      <br>
   11.88  
   11.89  
   11.90 +
   11.91    </li>
   11.92  
   11.93  
   11.94 +
   11.95    <li>Export to XML or iCalendar. Just choose the destination
   11.96  file and
   11.97  press
   11.98  "Finish".<br>
   11.99  
  11.100  
  11.101 +
  11.102      <br>
  11.103  
  11.104  
  11.105 +
  11.106      <img src="images/exportXml.gif" title="" alt="Export XML" style="width: 706px; height: 450px;"><br>
  11.107  
  11.108  
  11.109 +
  11.110      <br>
  11.111  
  11.112  
  11.113 +
  11.114    </li>
  11.115  
  11.116  
  11.117 +
  11.118    <li>Export as plain text. You can preview the exported file by
  11.119  selecting the
  11.120  checkbox "Open Exported File".<br>
  11.121  
  11.122  
  11.123 +
  11.124      <br>
  11.125  
  11.126  
  11.127 +
  11.128      <img alt="Export as Plain Text" src="images/exportText.gif" style="width: 610px; height: 445px;"><br>
  11.129 +    <br>
  11.130 +
  11.131    </li>
  11.132 +
  11.133    <li>Export Spent Times. On the first page you can specify a time
  11.134  period, grouping options and minumum duration for exported tasks. You
  11.135  can preview the exported file by
  11.136  selecting the
  11.137  checkbox "Open Exported File" on the second page.<br>
  11.138 +
  11.139      <br>
  11.140 +
  11.141      <img style="width: 834px; height: 472px;" alt="Export Options" src="images/exportSpentTimes.gif"><br>
  11.142 +
  11.143      <br>
  11.144 +
  11.145      <img style="width: 834px; height: 472px;" alt="Choose Destination" src="images/exportSpentTimes2.gif"></li>
  11.146  
  11.147  
  11.148 +
  11.149  </ul>
  11.150  
  11.151  
  11.152 +
  11.153  <hr>Comments &amp; requests to <a href="mailto:dev@tasklist.netbeans.org"><code>dev@tasklist.netbeans.org</code></a>.
  11.154  Further information at <a href="http://tasklist.netbeans.org/"><code>http://tasklist.netbeans.org</code></a>.<br>
  11.155  
  11.156  
  11.157 +
  11.158  </body>
  11.159  </html>
    12.1 --- a/tasklist.usertasks/manifest.mf	Mon Dec 04 21:57:00 2006 +0000
    12.2 +++ b/tasklist.usertasks/manifest.mf	Mon Dec 04 21:59:57 2006 +0000
    12.3 @@ -1,6 +1,6 @@
    12.4  Manifest-Version: 1.0
    12.5  OpenIDE-Module: org.netbeans.modules.tasklist.usertasks/2
    12.6 -OpenIDE-Module-Implementation-Version: 64
    12.7 +OpenIDE-Module-Implementation-Version: 65
    12.8  OpenIDE-Module-Localizing-Bundle: org/netbeans/modules/tasklist/usertasks/Bundle.properties
    12.9  OpenIDE-Module-Layer: org/netbeans/modules/tasklist/usertasks/mf-layer.xml
   12.10  
    13.1 --- a/tasklist.usertasks/nbproject/project.properties	Mon Dec 04 21:57:00 2006 +0000
    13.2 +++ b/tasklist.usertasks/nbproject/project.properties	Mon Dec 04 21:59:57 2006 +0000
    13.3 @@ -19,4 +19,3 @@
    13.4  javadoc.arch=${basedir}/arch.xml
    13.5  spec.version.base=1.29.0
    13.6  nbm.homepage=http://tasklist.netbeans.org/updates/tasklist-usertasks.html
    13.7 -extra.module.files=modules/ext/jcalendar-1.3.0.jar,modules/ext/ical4j-0.9.20.jar
    14.1 --- a/tasklist.usertasks/nbproject/project.xml	Mon Dec 04 21:57:00 2006 +0000
    14.2 +++ b/tasklist.usertasks/nbproject/project.xml	Mon Dec 04 21:59:57 2006 +0000
    14.3 @@ -33,12 +33,21 @@
    14.4                      </run-dependency>
    14.5                  </dependency>
    14.6                  <dependency>
    14.7 -                    <code-name-base>org.netbeans.libs.commons_logging</code-name-base>
    14.8 +                    <code-name-base>org.netbeans.libs.ical4j</code-name-base>
    14.9                      <build-prerequisite/>
   14.10                      <compile-dependency/>
   14.11                      <run-dependency>
   14.12                          <release-version>1</release-version>
   14.13 -                        <specification-version>1.2</specification-version>
   14.14 +                        <implementation-version/>
   14.15 +                    </run-dependency>
   14.16 +                </dependency>
   14.17 +                <dependency>
   14.18 +                    <code-name-base>org.netbeans.libs.jcalendar</code-name-base>
   14.19 +                    <build-prerequisite/>
   14.20 +                    <compile-dependency/>
   14.21 +                    <run-dependency>
   14.22 +                        <release-version>1</release-version>
   14.23 +                        <implementation-version/>
   14.24                      </run-dependency>
   14.25                  </dependency>
   14.26                  <dependency>
   14.27 @@ -157,14 +166,6 @@
   14.28                  </dependency>
   14.29              </module-dependencies>
   14.30              <public-packages/>
   14.31 -            <class-path-extension>
   14.32 -                <runtime-relative-path>ext/jcalendar-1.3.0.jar</runtime-relative-path>
   14.33 -                <binary-origin>../external/jcalendar-1.3.0.jar</binary-origin>
   14.34 -            </class-path-extension>
   14.35 -            <class-path-extension>
   14.36 -                <runtime-relative-path>ext/ical4j-0.9.20.jar</runtime-relative-path>
   14.37 -                <binary-origin>../external/ical4j-0.9.20.jar</binary-origin>
   14.38 -            </class-path-extension>
   14.39          </data>
   14.40      </configuration>
   14.41  </project>
    15.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    15.2 +++ b/tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/AutoSaver.java	Mon Dec 04 21:59:57 2006 +0000
    15.3 @@ -0,0 +1,266 @@
    15.4 +/*
    15.5 + * The contents of this file are subject to the terms of the Common Development
    15.6 + * and Distribution License (the License). You may not use this file except in
    15.7 + * compliance with the License.
    15.8 + *
    15.9 + * You can obtain a copy of the License at http://www.netbeans.org/cddl.html
   15.10 + * or http://www.netbeans.org/cddl.txt.
   15.11 + *
   15.12 + * When distributing Covered Code, include this CDDL Header Notice in each file
   15.13 + * and include the License file at http://www.netbeans.org/cddl.txt.
   15.14 + * If applicable, add the following below the CDDL Header, with the fields
   15.15 + * enclosed by brackets [] replaced by your own identifying information:
   15.16 + * "Portions Copyrighted [year] [name of copyright owner]"
   15.17 + *
   15.18 + * The Original Software is NetBeans. The Initial Developer of the Original
   15.19 + * Software is Sun Microsystems, Inc. Portions Copyright 1997-2006 Sun
   15.20 + * Microsystems, Inc. All Rights Reserved.
   15.21 + */
   15.22 +
   15.23 +package org.netbeans.modules.tasklist.usertasks;
   15.24 +
   15.25 +import java.awt.event.ActionListener;
   15.26 +import java.awt.event.ActionEvent;
   15.27 +import java.io.BufferedOutputStream;
   15.28 +import java.io.File;
   15.29 +import java.io.IOException;
   15.30 +import java.io.OutputStreamWriter;
   15.31 +import java.io.Writer;
   15.32 +import java.net.URISyntaxException;
   15.33 +import java.text.ParseException;
   15.34 +import java.util.logging.Level;
   15.35 +import javax.swing.Timer;
   15.36 +import javax.swing.event.ChangeEvent;
   15.37 +import javax.swing.event.ChangeListener;
   15.38 +import javax.swing.event.EventListenerList;
   15.39 +import net.fortuna.ical4j.model.ValidationException;
   15.40 +import org.netbeans.modules.tasklist.usertasks.model.UserTaskList;
   15.41 +import org.netbeans.modules.tasklist.usertasks.translators.ICalExportFormat;
   15.42 +import org.netbeans.modules.tasklist.usertasks.util.UTUtils;
   15.43 +import org.openide.DialogDisplayer;
   15.44 +import org.openide.NotifyDescriptor;
   15.45 +import org.openide.NotifyDescriptor.Message;
   15.46 +import org.openide.filesystems.FileLock;
   15.47 +import org.openide.filesystems.FileObject;
   15.48 +import org.openide.filesystems.FileUtil;
   15.49 +import org.openide.loaders.DataObject;
   15.50 +import org.openide.loaders.DataObjectNotFoundException;
   15.51 +
   15.52 +/**
   15.53 + * Automatic saving for .ics files.
   15.54 + *
   15.55 + * @author Tor Norbye
   15.56 + * @author tl
   15.57 + */
   15.58 +public class AutoSaver {
   15.59 +    private UserTaskList utl;
   15.60 +    private EventListenerList listeners = new EventListenerList();
   15.61 +
   15.62 +    /** 
   15.63 +     * Has the options set changed such that we need to save 
   15.64 +     */
   15.65 +    private boolean modified = false;
   15.66 +        
   15.67 +    /** File being shown in this tasklist */
   15.68 +    private FileObject file = null;
   15.69 +    
   15.70 +    /** 
   15.71 +     * Timer which keeps track of outstanding save requests - that way
   15.72 +     * deleting multiple items for example will not cause multiple saves. 
   15.73 +     */
   15.74 +    private Timer runTimer = null;
   15.75 +    
   15.76 +    private boolean enabled = false;
   15.77 +    private DataObject do_;
   15.78 +
   15.79 +    /** 
   15.80 +     * Creates a new instance of AutoSaver.
   15.81 +     *
   15.82 +     * @param utl a task list
   15.83 +     * @param file target file
   15.84 +     */
   15.85 +    public AutoSaver(UserTaskList utl, FileObject file) {
   15.86 +        try {
   15.87 +            this.do_ = DataObject.find(file);
   15.88 +        } catch (DataObjectNotFoundException e) {
   15.89 +            UTUtils.LOGGER.log(Level.SEVERE, e.getMessage(), e);
   15.90 +        }
   15.91 +        this.utl = utl;
   15.92 +        this.file = file;
   15.93 +        this.utl.addChangeListener(new ChangeListener() {
   15.94 +            public void stateChanged(ChangeEvent ev) {
   15.95 +                if (modified != true) {
   15.96 +                    UTUtils.LOGGER.fine("modified = true"); // NOI18N
   15.97 +                    modified = true;
   15.98 +                    do_.setModified(true);
   15.99 +                    fireChange();
  15.100 +                }
  15.101 +                if (enabled)
  15.102 +                    scheduleWrite();
  15.103 +            }
  15.104 +        });
  15.105 +    }
  15.106 +    
  15.107 +    /**
  15.108 +     * Is automatic saving enabled?
  15.109 +     *
  15.110 +     * @return true = yes
  15.111 +     */
  15.112 +    public boolean isEnabled() {
  15.113 +        return enabled;
  15.114 +    }
  15.115 +    
  15.116 +    /**
  15.117 +     * Enable/disable automatic saving.
  15.118 +     *
  15.119 +     * @param enabled true = save automatically
  15.120 +     */
  15.121 +    public void setEnabled(boolean enabled) {
  15.122 +        this.enabled = enabled;
  15.123 +    }
  15.124 +    
  15.125 +    /** 
  15.126 +     * Location of the tasklist 
  15.127 +     */
  15.128 +    public FileObject getFile() {
  15.129 +        return file;
  15.130 +    }
  15.131 +    
  15.132 +    /** 
  15.133 +     * Schedule a document save 
  15.134 +     */
  15.135 +    private void scheduleWrite() {
  15.136 +        // Stop our current timer; the previous node has not
  15.137 +        // yet been scanned; too brief an interval
  15.138 +	if (runTimer != null) {
  15.139 +	    runTimer.stop();
  15.140 +	    runTimer = null;
  15.141 +	}
  15.142 +        ActionListener al = new ActionListener() {
  15.143 +            public void actionPerformed(ActionEvent evt) {
  15.144 +                runTimer = null;
  15.145 +                try {
  15.146 +                    save();
  15.147 +                } catch (IOException ioe) {
  15.148 +                    DialogDisplayer.getDefault().notify(new Message(ioe,
  15.149 +                                                                    NotifyDescriptor.ERROR_MESSAGE));
  15.150 +                }
  15.151 +            }
  15.152 +        };
  15.153 +        // 0.3 second delay
  15.154 +	runTimer = new Timer(300, al);
  15.155 +	runTimer.setRepeats(false);
  15.156 +	runTimer.setCoalesce(true);
  15.157 +	runTimer.start();
  15.158 +    }
  15.159 +
  15.160 +    /**
  15.161 +     * Was the task list modified since last saving?
  15.162 +     *
  15.163 +     * @return true = modified
  15.164 +     */
  15.165 +    public boolean isModified() {
  15.166 +        return modified;
  15.167 +    }
  15.168 +    
  15.169 +    /** 
  15.170 +     * Write the list to iCal.
  15.171 +     */
  15.172 +    public void save() throws IOException {
  15.173 +        ICalExportFormat io = new ICalExportFormat();
  15.174 +        
  15.175 +        FileLock lock = this.file.lock();
  15.176 +        try {
  15.177 +            Writer w = new OutputStreamWriter(new BufferedOutputStream(
  15.178 +                    file.getOutputStream(lock)), "UTF-8");;
  15.179 +            try {
  15.180 +                io.writeList(utl, w, false);
  15.181 +            } catch (ParseException e) {
  15.182 +                throw new IOException(e.getMessage());
  15.183 +            } catch (URISyntaxException e) {
  15.184 +                throw new IOException(e.getMessage());
  15.185 +            } catch (ValidationException e) {
  15.186 +                throw new IOException(e.getMessage());
  15.187 +            } finally {
  15.188 +                try {
  15.189 +                    w.close();
  15.190 +                } catch (IOException e) {
  15.191 +                    UTUtils.LOGGER.log(Level.WARNING, 
  15.192 +                            "failed closing file", e);
  15.193 +                }
  15.194 +            }
  15.195 +        } finally {
  15.196 +            lock.releaseLock();
  15.197 +        }
  15.198 +
  15.199 +        // Remove permissions for others on the file when on Unix
  15.200 +        // varieties
  15.201 +        if (new File("/bin/chmod").exists()) { // NOI18N
  15.202 +            try {
  15.203 +                Runtime.getRuntime().exec(
  15.204 +                     new String[] {"/bin/chmod", "go-rwx",  // NOI18N
  15.205 +                         FileUtil.toFile(this.file).getAbsolutePath()});
  15.206 +            } catch (Exception e) {
  15.207 +                // Silently accept
  15.208 +                UTUtils.LOGGER.log(Level.INFO, 
  15.209 +                        "chmod call failed", e); // NOI18N
  15.210 +            }
  15.211 +        }
  15.212 +
  15.213 +        if (modified != false) {
  15.214 +            modified = false;
  15.215 +            do_.setModified(false);
  15.216 +            UTUtils.LOGGER.fine("modified = true"); // NOI18N
  15.217 +            fireChange();
  15.218 +        }
  15.219 +    }
  15.220 +    
  15.221 +    /**
  15.222 +     * Returns the task list associated with this AutoSaver.
  15.223 +     *
  15.224 +     * @return task list
  15.225 +     */
  15.226 +    public UserTaskList getUserTaskList() {
  15.227 +        return utl;
  15.228 +    }
  15.229 +    
  15.230 +    
  15.231 +    /**
  15.232 +     * Adds a change listener. The listener will be notified whenever the
  15.233 +     * modified flag changes.
  15.234 +     *
  15.235 +     * @param l a listener
  15.236 +     */
  15.237 +    public void addChangeListener(ChangeListener l) {
  15.238 +        listeners.add(ChangeListener.class, l);
  15.239 +    }
  15.240 +    
  15.241 +    /**
  15.242 +     * Removes a change listener.
  15.243 +     *
  15.244 +     * @param l a listener.
  15.245 +     */
  15.246 +    public void removeChangeListener(ChangeListener l) {
  15.247 +        listeners.remove(ChangeListener.class, l);
  15.248 +    }
  15.249 +    
  15.250 +    /**
  15.251 +     * Fires a ChangeEvent
  15.252 +     */
  15.253 +    void fireChange() {
  15.254 +        // Guaranteed to return a non-null array
  15.255 +        Object[] list = listeners.getListenerList();
  15.256 +
  15.257 +        // Process the listeners last to first, notifying
  15.258 +        // those that are interested in this event
  15.259 +        ChangeEvent changeEvent = null;
  15.260 +        for (int i = list.length - 2; i >= 0; i -= 2) {
  15.261 +            if (list[i] == ChangeListener.class) {
  15.262 +                // Lazily create the event:
  15.263 +                if (changeEvent == null)
  15.264 +                    changeEvent = new ChangeEvent(this);
  15.265 +                ((ChangeListener) list[i+1]).stateChanged(changeEvent);
  15.266 +            }
  15.267 +        }
  15.268 +    }
  15.269 +}
    16.1 --- a/tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/Bundle.properties	Mon Dec 04 21:57:00 2006 +0000
    16.2 +++ b/tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/Bundle.properties	Mon Dec 04 21:59:57 2006 +0000
    16.3 @@ -66,20 +66,19 @@
    16.4  Effort=Effort
    16.5  General=General
    16.6  TimeRelated=Time Related
    16.7 -UseThisValue=Use This Value:
    16.8 -Progress=Progress
    16.9 -ComputeEffortAutomatically=Compute automatically as a sum of the subtask values
   16.10 -ComputeProgressAutomatically=Compute automatically as a weighted sum of the subtask values
   16.11  DueDateCb=D&ue:
   16.12  Brief_Description=&Summary:
   16.13  AssociatedFile=Associated &File:
   16.14 -ComputeSpentTkme=Compute automatically as a sum of the subtask values
   16.15  LBL_DependenciesTab=Dependencies
   16.16  OwnerLabel=&Owner\:
   16.17  Completed=Completed\:
   16.18 -WordPeriods=Work Periods
   16.19  SpentTimeToday=Spent time today\:
   16.20  LBL_Start=&Start\:
   16.21 +ComputeAll=Compute Effort, Spent Time and Progress &Automatically
   16.22 +Effort_=&Effort\:
   16.23 +Progress_=&Progress\:
   16.24 +SpentTime_=Spent &Time\:
   16.25 +HistoryOfSpentTimes=H&istory of Spent Times\:
   16.26  
   16.27  ## UserTaskNode
   16.28  LBL_detailsProperty=Description
   16.29 @@ -112,12 +111,8 @@
   16.30  HNT_spentTimeTodayProperty=Time spent for this task today
   16.31  LBL_effortProperty=Effort
   16.32  HNT_effortProperty=Effort
   16.33 -LBL_computeProgress=Compute Progress
   16.34 -HNT_progressComputed=Should the progress be computed automatically
   16.35 -LBL_computeEffort=Compute Effort
   16.36 -HNT_effortComputed=Should the effort be computed automatically
   16.37 -LBL_spentTimeComputed=Compute Spent Time
   16.38 -HNT_spentTimeComputed=Should the spent time be computed automatically
   16.39 +LBL_valuesComputed=Compute Values
   16.40 +HNT_valuesComputed=Should the progress, spent time and effort be computed automatically
   16.41  LBL_ownerProperty=Owner
   16.42  HNT_ownerProperty=A person that owns this task
   16.43  LBL_completedDateProperty=Completed
   16.44 @@ -155,3 +150,4 @@
   16.45  ## TaskListDataObject
   16.46  ErrorReadingFile=Error reading file: {0}
   16.47  
   16.48 +
    17.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    17.2 +++ b/tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/DueTasksNotifier.java	Mon Dec 04 21:59:57 2006 +0000
    17.3 @@ -0,0 +1,152 @@
    17.4 +/*
    17.5 + * The contents of this file are subject to the terms of the Common Development
    17.6 + * and Distribution License (the License). You may not use this file except in
    17.7 + * compliance with the License.
    17.8 + *
    17.9 + * You can obtain a copy of the License at http://www.netbeans.org/cddl.html
   17.10 + * or http://www.netbeans.org/cddl.txt.
   17.11 + *
   17.12 + * When distributing Covered Code, include this CDDL Header Notice in each file
   17.13 + * and include the License file at http://www.netbeans.org/cddl.txt.
   17.14 + * If applicable, add the following below the CDDL Header, with the fields
   17.15 + * enclosed by brackets [] replaced by your own identifying information:
   17.16 + * "Portions Copyrighted [year] [name of copyright owner]"
   17.17 + *
   17.18 + * The Original Software is NetBeans. The Initial Developer of the Original
   17.19 + * Software is Sun Microsystems, Inc. Portions Copyright 1997-2006 Sun
   17.20 + * Microsystems, Inc. All Rights Reserved.
   17.21 + */
   17.22 +
   17.23 +package org.netbeans.modules.tasklist.usertasks;
   17.24 +
   17.25 +import javax.swing.SwingUtilities;
   17.26 +import javax.swing.event.ChangeEvent;
   17.27 +import javax.swing.event.ChangeListener;
   17.28 +import org.netbeans.modules.tasklist.usertasks.model.*;
   17.29 +import org.netbeans.modules.tasklist.usertasks.model.UserTaskList.UserTaskProcessor;
   17.30 +import org.openide.DialogDisplayer;
   17.31 +import org.openide.DialogDescriptor;
   17.32 +import org.openide.NotifyDescriptor;
   17.33 +import org.openide.util.NbBundle;
   17.34 +
   17.35 +/**
   17.36 + * Notifies the user about due tasks.
   17.37 + *
   17.38 + * @author tl
   17.39 + */
   17.40 +public class DueTasksNotifier implements Timeout {
   17.41 +    /**
   17.42 +     * Callback for finding the next timeout
   17.43 +     */
   17.44 +    private static class FindNextTimeoutUserTaskProcessor implements
   17.45 +    UserTaskProcessor {
   17.46 +        private long nextTimeout = Long.MAX_VALUE;
   17.47 +        
   17.48 +        /** Task for the next timeout */
   17.49 +        public UserTask ref = null;
   17.50 +        
   17.51 +        public void process(UserTask t) {
   17.52 +            long n = t.getDueTime();
   17.53 +            if (n != Long.MAX_VALUE && !t.isDueAlarmSent() && !t.isDone() &&
   17.54 +                n > System.currentTimeMillis() && n < nextTimeout) {
   17.55 +                nextTimeout = n;
   17.56 +                ref = t;
   17.57 +            }
   17.58 +        }
   17.59 +    }
   17.60 +    
   17.61 +    private static class ShowExpiredUserTaskProcessor implements
   17.62 +        UserTaskProcessor {
   17.63 +        public void process(UserTask t) {
   17.64 +            long n = t.getDueTime();
   17.65 +            if (n != Long.MAX_VALUE && !t.isDueAlarmSent() &&
   17.66 +                !t.isDone() && 
   17.67 +                n <= System.currentTimeMillis()) {
   17.68 +                showExpiredTask(t);
   17.69 +            }
   17.70 +        }
   17.71 +
   17.72 +        /**
   17.73 +         * Present the user with a dialog that shows information of the task that
   17.74 +         * expired... 
   17.75 +         *
   17.76 +         * @param task the task to show
   17.77 +         */
   17.78 +        private void showExpiredTask(UserTask task) {
   17.79 +            task.setDueAlarmSent(true);
   17.80 +
   17.81 +            final UserTask t = task;
   17.82 +            SwingUtilities.invokeLater(new Runnable() {
   17.83 +                public void run() {
   17.84 +                    UserTaskDuePanel panel = new UserTaskDuePanel(t);
   17.85 +
   17.86 +                    String title = NbBundle.getMessage(UserTaskList.class, "TaskDueLabel"); // NOI18N
   17.87 +                    DialogDescriptor d = new DialogDescriptor(panel, title);                
   17.88 +                    d.setModal(true);
   17.89 +                    d.setMessageType(NotifyDescriptor.PLAIN_MESSAGE);
   17.90 +                    d.setOptions(new Object[] {DialogDescriptor.OK_OPTION});
   17.91 +                    java.awt.Dialog dlg = DialogDisplayer.getDefault().createDialog(d);
   17.92 +                    dlg.pack();
   17.93 +                    dlg.setVisible(true);
   17.94 +                }
   17.95 +            });
   17.96 +        }
   17.97 +    }
   17.98 +    
   17.99 +    /** The current timeout */
  17.100 +    private long currentTimeout;    
  17.101 +    
  17.102 +    private UserTaskList utl;
  17.103 +    
  17.104 +    /**
  17.105 +     * Creates a new instance of DueTasksNotifier
  17.106 +     *
  17.107 +     * @param utl a task list
  17.108 +     */
  17.109 +    public DueTasksNotifier(UserTaskList utl) {
  17.110 +        this.utl = utl;
  17.111 +        currentTimeout = Long.MAX_VALUE;
  17.112 +        utl.addChangeListener(new ChangeListener() {
  17.113 +            public void stateChanged(ChangeEvent e) {
  17.114 +                orderNextTimeout();
  17.115 +            }
  17.116 +        });
  17.117 +    }
  17.118 +
  17.119 +    /**
  17.120 +     * Order a timeout for the next due date
  17.121 +     */
  17.122 +    public void orderNextTimeout() {
  17.123 +        ShowExpiredUserTaskProcessor se =
  17.124 +            new ShowExpiredUserTaskProcessor();
  17.125 +        utl.processDepthFirst(se, utl.getSubtasks());
  17.126 +        
  17.127 +        FindNextTimeoutUserTaskProcessor p = 
  17.128 +            new FindNextTimeoutUserTaskProcessor();
  17.129 +        utl.processDepthFirst(p, utl.getSubtasks());
  17.130 +        
  17.131 +        if (p.ref != null && p.ref.getDueTime() != Long.MAX_VALUE && 
  17.132 +            !p.ref.isDueAlarmSent() && !p.ref.isDone() &&
  17.133 +            p.ref.getDueTime() != currentTimeout) {
  17.134 +            // cancel the previous ordered timeout, and add the new one
  17.135 +            if (currentTimeout != Long.MAX_VALUE) {
  17.136 +                TimeoutProvider.getInstance().cancel(this, null);
  17.137 +            }
  17.138 +            TimeoutProvider.getInstance().add(this, p.ref, p.ref.getDueTime());
  17.139 +            currentTimeout = p.ref.getDueTime();
  17.140 +        }
  17.141 +    }
  17.142 +    
  17.143 +    /**
  17.144 +     * Callback function for the TimeoutProvider to call when the timeout
  17.145 +     * expired. This function will block the TimeoutProviders thread, so
  17.146 +     * it should be used for a timeconsuming task (one should probably
  17.147 +     * reschedule oneself with the SwingUtilities.invokeLater() ???)
  17.148 +     * @param o the object provided as a user reference
  17.149 +     */
  17.150 +    public void timeoutExpired(Object o) {
  17.151 +        // order the next timeout for this list
  17.152 +        orderNextTimeout();
  17.153 +    }
  17.154 +
  17.155 +}
    18.1 --- a/tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/DurationPanel.java	Mon Dec 04 21:57:00 2006 +0000
    18.2 +++ b/tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/DurationPanel.java	Mon Dec 04 21:59:57 2006 +0000
    18.3 @@ -19,14 +19,15 @@
    18.4  
    18.5  package org.netbeans.modules.tasklist.usertasks;
    18.6  
    18.7 -import java.beans.PropertyEditor;
    18.8 -import java.text.MessageFormat;
    18.9 +import java.awt.Component;
   18.10 +import java.awt.event.ActionListener;
   18.11  import java.text.ParseException;
   18.12 -import javax.swing.JSpinner;
   18.13 -import javax.swing.SpinnerNumberModel;
   18.14 -import javax.swing.event.ChangeListener;
   18.15 -import javax.swing.event.DocumentEvent;
   18.16 -import javax.swing.event.DocumentListener;
   18.17 +import javax.swing.ComboBoxEditor;
   18.18 +import javax.swing.DefaultComboBoxModel;
   18.19 +import javax.swing.DefaultListCellRenderer;
   18.20 +import javax.swing.JComboBox;
   18.21 +import javax.swing.JList;
   18.22 +import javax.swing.text.JTextComponent;
   18.23  
   18.24  import org.netbeans.modules.tasklist.usertasks.model.Duration;
   18.25  import org.netbeans.modules.tasklist.usertasks.options.Settings;
   18.26 @@ -37,11 +38,34 @@
   18.27   *
   18.28   * @author tl
   18.29   */
   18.30 -public class DurationPanel extends javax.swing.JPanel implements
   18.31 -        ChangeListener {
   18.32 +public class DurationPanel extends JComboBox {
   18.33      private static final long serialVersionUID = 1;
   18.34      
   18.35 -    private PropertyEditor pe;
   18.36 +    /**
   18.37 +     * This array must be sorted.
   18.38 +     */
   18.39 +    private static final int[] DURATIONS = new int[] {
   18.40 +        0,
   18.41 +        5,
   18.42 +        10,
   18.43 +        15,
   18.44 +        20,
   18.45 +        30,
   18.46 +        45,
   18.47 +        60,
   18.48 +        90,
   18.49 +        120,
   18.50 +        150,
   18.51 +        180,
   18.52 +        240,
   18.53 +        300,
   18.54 +        360,
   18.55 +        420,
   18.56 +        480,
   18.57 +        12 * 60,
   18.58 +        8 * 60 * 2
   18.59 +    };
   18.60 +    
   18.61      private DurationFormat short_ = new DurationFormat(
   18.62              DurationFormat.Type.SHORT);
   18.63      private DurationFormat long_ = new DurationFormat(DurationFormat.Type.LONG);
   18.64 @@ -51,37 +75,76 @@
   18.65       * Creates new form DurationPanel
   18.66       */
   18.67      public DurationPanel() {
   18.68 -        initComponents();
   18.69 -        setOpaque(false);
   18.70 -        jTextField.getDocument().addDocumentListener(new DocumentListener() {
   18.71 -            public void changedUpdate(DocumentEvent e) {
   18.72 -                stateChanged(null);
   18.73 +        final ComboBoxEditor def = getEditor();
   18.74 +        setEditor(new ComboBoxEditor() {
   18.75 +            public void addActionListener(ActionListener l) {
   18.76 +                def.addActionListener(l);
   18.77              }
   18.78 -            public void insertUpdate(DocumentEvent e) {
   18.79 -                stateChanged(null);
   18.80 +            public Component getEditorComponent() {
   18.81 +                return def.getEditorComponent();
   18.82              }
   18.83 -            public void removeUpdate(DocumentEvent e) {
   18.84 -                stateChanged(null);
   18.85 +            public Object getItem() {
   18.86 +                String text = ((JTextComponent) getEditorComponent()).getText();
   18.87 +                Duration d = null;
   18.88 +                try {
   18.89 +                    d = short_.parse(text);
   18.90 +                } catch (ParseException ex) {
   18.91 +                    // ignore
   18.92 +                }
   18.93 +                if (d == null) {
   18.94 +                    try {
   18.95 +                        d = long_.parse(text);
   18.96 +                    } catch (ParseException ex) {
   18.97 +                        // ignore
   18.98 +                    }
   18.99 +                }
  18.100 +                if (d == null)
  18.101 +                    d = dur;
  18.102 +                if (d == null)
  18.103 +                    return 0;
  18.104 +
  18.105 +                return d.toMinutes(Settings.getDefault().getMinutesPerDay(),
  18.106 +                        Settings.getDefault().getDaysPerWeek(), true);
  18.107 +            }
  18.108 +            public void removeActionListener(ActionListener l) {
  18.109 +                def.removeActionListener(l);
  18.110 +            }
  18.111 +            public void selectAll() {
  18.112 +                def.selectAll();
  18.113 +            }
  18.114 +            public void setItem(Object anObject) {
  18.115 +                String text = "";
  18.116 +                if (anObject != null) {
  18.117 +                    int m = ((Integer) anObject).intValue();
  18.118 +                    int mpd = Settings.getDefault().getMinutesPerDay();
  18.119 +                    int dpw = Settings.getDefault().getDaysPerWeek();
  18.120 +                    Duration d = new Duration(m, mpd, dpw, true);
  18.121 +                    text = long_.format(d);
  18.122 +                }
  18.123 +                ((JTextComponent) getEditorComponent()).setText(text);
  18.124              }
  18.125          });
  18.126 -    }
  18.127 -    
  18.128 -    public void setEnabled(boolean b) {
  18.129 -        super.setEnabled(b);
  18.130 -        jTextField.setEnabled(b);
  18.131 -    }
  18.132 -    
  18.133 -    /**
  18.134 -     * Sets new property editor.
  18.135 -     *
  18.136 -     * @param pe a property editor or null
  18.137 -     */
  18.138 -    public void setPropertyEditor(PropertyEditor pe) {
  18.139 -        this.pe = pe;
  18.140 -        if (pe != null) {
  18.141 -            Integer v = (Integer) pe.getValue();
  18.142 -            setDuration(v == null ? 0 : v.intValue());
  18.143 +        setEditable(true);
  18.144 +        DefaultComboBoxModel m = new DefaultComboBoxModel();
  18.145 +        for (int d: DURATIONS) {
  18.146 +            m.addElement(d);
  18.147          }
  18.148 +        setModel(m);
  18.149 +        setRenderer(new DefaultListCellRenderer() {
  18.150 +            public Component getListCellRendererComponent(
  18.151 +                   JList list, Object value, int index, boolean isSelected,
  18.152 +                   boolean cellHasFocus) {
  18.153 +                super.getListCellRendererComponent(list, value, index, 
  18.154 +                        isSelected, cellHasFocus);
  18.155 +                int m = ((Integer) value).intValue();
  18.156 +                int mpd = Settings.getDefault().getMinutesPerDay();
  18.157 +                int dpw = Settings.getDefault().getDaysPerWeek();
  18.158 +                // UTUtils.LOGGER.fine("mpd=" + mpd + ", dpw=" + dpw);
  18.159 +                Duration d = new Duration(m, mpd, dpw, true);
  18.160 +                setText(long_.format(d));
  18.161 +                return this;
  18.162 +            }
  18.163 +        });
  18.164      }
  18.165      
  18.166      /**
  18.167 @@ -90,11 +153,22 @@
  18.168       * @param minutes new duration in minutes
  18.169       */
  18.170      public void setDuration(int minutes) {
  18.171 -        dur = new Duration(minutes,
  18.172 -                Settings.getDefault().getMinutesPerDay(),
  18.173 -                Settings.getDefault().getDaysPerWeek(), true);
  18.174 -        
  18.175 -        jTextField.setText(short_.format(dur));
  18.176 +        int index = getModel().getSize();
  18.177 +        for (int i = getModel().getSize() - 1; i >= 0; i--) {
  18.178 +            int dur = ((Integer) getModel().getElementAt(i)).intValue();
  18.179 +            if (minutes > dur) {
  18.180 +                index = i + 1;
  18.181 +                break;
  18.182 +            }
  18.183 +        }
  18.184 +        int dur = ((Integer) getModel().getElementAt(index - 1)).intValue();
  18.185 +        if (dur == minutes) {
  18.186 +            setSelectedIndex(index - 1);
  18.187 +        } else {
  18.188 +            ((DefaultComboBoxModel) getModel()).insertElementAt(minutes,
  18.189 +                    index);
  18.190 +            setSelectedIndex(index);
  18.191 +        }
  18.192      }
  18.193      
  18.194      /**
  18.195 @@ -103,54 +177,6 @@
  18.196       * @return duration in minutes
  18.197       */
  18.198      public int getDuration() {
  18.199 -        Duration d = null;
  18.200 -        try {
  18.201 -            d = short_.parse(jTextField.getText());
  18.202 -        } catch (ParseException ex) {
  18.203 -            // ignore
  18.204 -        }
  18.205 -        if (d == null) {
  18.206 -            try {
  18.207 -                d = long_.parse(jTextField.getText());
  18.208 -            } catch (ParseException ex) {
  18.209 -                // ignore
  18.210 -            }
  18.211 -        }
  18.212 -        if (d == null)
  18.213 -            d = dur;
  18.214 -        if (d == null)
  18.215 -            return 0;
  18.216 -        
  18.217 -        return d.toMinutes(Settings.getDefault().getMinutesPerDay(),
  18.218 -                Settings.getDefault().getDaysPerWeek(), true);
  18.219 +        return ((Integer) getSelectedItem()).intValue();
  18.220      }
  18.221 -    
  18.222 -    public void stateChanged(javax.swing.event.ChangeEvent e) {
  18.223 -        if (pe != null) {
  18.224 -            pe.setValue(new Integer(getDuration()));
  18.225 -        }
  18.226 -    }
  18.227 -    
  18.228 -    /** This method is called from within the constructor to
  18.229 -     * initialize the form.
  18.230 -     * WARNING: Do NOT modify this code. The content of this method is
  18.231 -     * always regenerated by the Form Editor.
  18.232 -     */
  18.233 -    // <editor-fold defaultstate="collapsed" desc=" Generated Code ">//GEN-BEGIN:initComponents
  18.234 -    private void initComponents() {
  18.235 -        java.awt.GridBagConstraints gridBagConstraints;
  18.236 -
  18.237 -        jTextField = new javax.swing.JTextField();
  18.238 -
  18.239 -        setLayout(new java.awt.BorderLayout());
  18.240 -
  18.241 -        jTextField.setColumns(10);
  18.242 -        add(jTextField, java.awt.BorderLayout.CENTER);
  18.243 -    }// </editor-fold>//GEN-END:initComponents
  18.244 -    
  18.245 -    
  18.246 -    // Variables declaration - do not modify//GEN-BEGIN:variables
  18.247 -    private javax.swing.JTextField jTextField;
  18.248 -    // End of variables declaration//GEN-END:variables
  18.249 -    
  18.250  }
    19.1 --- a/tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/EditTaskPanel.form	Mon Dec 04 21:57:00 2006 +0000
    19.2 +++ b/tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/EditTaskPanel.form	Mon Dec 04 21:59:57 2006 +0000
    19.3 @@ -1,6 +1,6 @@
    19.4  <?xml version="1.0" encoding="UTF-8" ?>
    19.5  
    19.6 -<Form version="1.0" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
    19.7 +<Form version="1.3" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
    19.8    <NonVisualComponents>
    19.9      <Component class="javax.swing.ButtonGroup" name="addButtonGroup">
   19.10      </Component>
   19.11 @@ -19,10 +19,11 @@
   19.12    <AuxValues>
   19.13      <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="true"/>
   19.14      <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="false"/>
   19.15 +    <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="2"/>
   19.16      <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
   19.17      <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
   19.18      <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/>
   19.19 -    <AuxValue name="designerSize" type="java.awt.Dimension" value="-84,-19,0,5,115,114,0,18,106,97,118,97,46,97,119,116,46,68,105,109,101,110,115,105,111,110,65,-114,-39,-41,-84,95,68,20,2,0,2,73,0,6,104,101,105,103,104,116,73,0,5,119,105,100,116,104,120,112,0,0,2,7,0,0,2,-109"/>
   19.20 +    <AuxValue name="designerSize" type="java.awt.Dimension" value="-84,-19,0,5,115,114,0,18,106,97,118,97,46,97,119,116,46,68,105,109,101,110,115,105,111,110,65,-114,-39,-41,-84,95,68,20,2,0,2,73,0,6,104,101,105,103,104,116,73,0,5,119,105,100,116,104,120,112,0,0,2,-57,0,0,2,115"/>
   19.21    </AuxValues>
   19.22  
   19.23    <Layout class="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout"/>
   19.24 @@ -95,7 +96,9 @@
   19.25                <SubComponents>
   19.26                  <Component class="javax.swing.JTextArea" name="detailsTextArea">
   19.27                    <Properties>
   19.28 +                    <Property name="lineWrap" type="boolean" value="true"/>
   19.29                      <Property name="rows" type="int" value="5"/>
   19.30 +                    <Property name="wrapStyleWord" type="boolean" value="true"/>
   19.31                    </Properties>
   19.32                  </Component>
   19.33                </SubComponents>
   19.34 @@ -108,7 +111,7 @@
   19.35                </Properties>
   19.36                <Constraints>
   19.37                  <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
   19.38 -                  <GridBagConstraints gridX="0" gridY="6" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="11" insetsLeft="0" insetsBottom="0" insetsRight="12" anchor="17" weightX="0.0" weightY="0.0"/>
   19.39 +                  <GridBagConstraints gridX="0" gridY="7" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="11" insetsLeft="0" insetsBottom="0" insetsRight="12" anchor="17" weightX="0.0" weightY="0.0"/>
   19.40                  </Constraint>
   19.41                </Constraints>
   19.42              </Component>
   19.43 @@ -126,7 +129,7 @@
   19.44                </AuxValues>
   19.45                <Constraints>
   19.46                  <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
   19.47 -                  <GridBagConstraints gridX="1" gridY="6" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="11" insetsLeft="0" insetsBottom="0" insetsRight="12" anchor="17" weightX="0.0" weightY="0.0"/>
   19.48 +                  <GridBagConstraints gridX="1" gridY="7" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="11" insetsLeft="0" insetsBottom="0" insetsRight="12" anchor="17" weightX="0.0" weightY="0.0"/>
   19.49                  </Constraint>
   19.50                </Constraints>
   19.51              </Component>
   19.52 @@ -159,7 +162,7 @@
   19.53                </AuxValues>
   19.54                <Constraints>
   19.55                  <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
   19.56 -                  <GridBagConstraints gridX="1" gridY="7" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="12" anchor="17" weightX="0.0" weightY="0.0"/>
   19.57 +                  <GridBagConstraints gridX="1" gridY="8" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="12" anchor="17" weightX="0.0" weightY="0.0"/>
   19.58                  </Constraint>
   19.59                </Constraints>
   19.60              </Component>
   19.61 @@ -271,18 +274,6 @@
   19.62                  </Component>
   19.63                </SubComponents>
   19.64              </Container>
   19.65 -            <Component class="javax.swing.JButton" name="addSourceButton">
   19.66 -              <Properties>
   19.67 -                <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor" preCode="/*" postCode="*/">
   19.68 -                  <ResourceString bundle="org/netbeans/modules/tasklist/usertasks/Bundle.properties" key="AddToSource" replaceFormat="NbBundle.getMessage(EditTaskPanel.class, &quot;{key}&quot;)); // NOI18N("/>
   19.69 -                </Property>
   19.70 -              </Properties>
   19.71 -              <Constraints>
   19.72 -                <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
   19.73 -                  <GridBagConstraints gridX="1" gridY="8" gridWidth="2" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="12" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="17" weightX="1.0" weightY="0.0"/>
   19.74 -                </Constraint>
   19.75 -              </Constraints>
   19.76 -            </Component>
   19.77              <Component class="javax.swing.JLabel" name="prioLabel">
   19.78                <Properties>
   19.79                  <Property name="labelFor" type="java.awt.Component" editor="org.netbeans.modules.form.ComponentChooserEditor">
   19.80 @@ -323,6 +314,22 @@
   19.81                  </Constraint>
   19.82                </Constraints>
   19.83              </Component>
   19.84 +            <Component class="org.netbeans.modules.tasklist.usertasks.util.JLinkButton" name="jLinkButtonAddToSource">
   19.85 +              <Properties>
   19.86 +                <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
   19.87 +                  <ResourceString bundle="org/netbeans/modules/tasklist/usertasks/Bundle.properties" key="AddToSource" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
   19.88 +                </Property>
   19.89 +                <Property name="horizontalAlignment" type="int" value="2"/>
   19.90 +              </Properties>
   19.91 +              <Events>
   19.92 +                <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="jLinkButtonAddToSourceActionPerformed"/>
   19.93 +              </Events>
   19.94 +              <Constraints>
   19.95 +                <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
   19.96 +                  <GridBagConstraints gridX="1" gridY="6" gridWidth="3" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="11" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="17" weightX="0.0" weightY="0.0"/>
   19.97 +                </Constraint>
   19.98 +              </Constraints>
   19.99 +            </Component>
  19.100            </SubComponents>
  19.101          </Container>
  19.102          <Container class="javax.swing.JPanel" name="jPanel3">
  19.103 @@ -343,364 +350,295 @@
  19.104              </Constraint>
  19.105            </Constraints>
  19.106  
  19.107 -          <Layout class="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout"/>
  19.108 +          <Layout>
  19.109 +            <DimensionLayout dim="0">
  19.110 +              <Group type="103" groupAlignment="0" attributes="0">
  19.111 +                  <Group type="102" attributes="0">
  19.112 +                      <Group type="103" groupAlignment="0" attributes="0">
  19.113 +                          <Component id="jLabel6" min="-2" max="-2" attributes="0"/>
  19.114 +                          <Component id="jLabel5" min="-2" max="-2" attributes="0"/>
  19.115 +                          <Component id="jLabel2" alignment="0" min="-2" max="-2" attributes="0"/>
  19.116 +                      </Group>
  19.117 +                      <EmptySpace max="-2" attributes="0"/>
  19.118 +                      <Group type="103" groupAlignment="0" attributes="0">
  19.119 +                          <Component id="jLabelLastEdited" alignment="0" min="-2" max="-2" attributes="0"/>
  19.120 +                          <Component id="jLabelCompleted" alignment="0" min="-2" max="-2" attributes="0"/>
  19.121 +                          <Component id="jLabelCreated" alignment="0" min="-2" max="-2" attributes="0"/>
  19.122 +                      </Group>
  19.123 +                      <EmptySpace pref="521" max="32767" attributes="0"/>
  19.124 +                  </Group>
  19.125 +                  <Component id="jLabel8" alignment="0" pref="599" max="32767" attributes="1"/>
  19.126 +                  <Group type="102" alignment="0" attributes="0">
  19.127 +                      <Component id="jLabel12" min="-2" max="-2" attributes="0"/>
  19.128 +                      <EmptySpace pref="453" max="32767" attributes="0"/>
  19.129 +                  </Group>
  19.130 +                  <Group type="102" alignment="0" attributes="0">
  19.131 +                      <Component id="jLabel3" min="-2" max="-2" attributes="0"/>
  19.132 +                      <EmptySpace max="-2" attributes="0"/>
  19.133 +                      <Component id="jLabelSpentTimeToday" min="-2" max="-2" attributes="0"/>
  19.134 +                      <EmptySpace pref="484" max="32767" attributes="0"/>
  19.135 +                  </Group>
  19.136 +                  <Group type="102" alignment="0" attributes="0">
  19.137 +                      <Component id="jCheckBoxCompute" min="-2" max="-2" attributes="1"/>
  19.138 +                      <EmptySpace pref="234" max="32767" attributes="0"/>
  19.139 +                  </Group>
  19.140 +                  <Group type="102" attributes="0">
  19.141 +                      <EmptySpace max="-2" attributes="0"/>
  19.142 +                      <Group type="103" groupAlignment="0" attributes="0">
  19.143 +                          <Component id="jLabel10" alignment="0" min="-2" max="-2" attributes="0"/>
  19.144 +                          <Component id="jLabel11" alignment="0" min="-2" max="-2" attributes="0"/>
  19.145 +                          <Component id="jLabel9" alignment="0" min="-2" max="-2" attributes="0"/>
  19.146 +                      </Group>
  19.147 +                      <EmptySpace max="-2" attributes="0"/>
  19.148 +                      <Group type="103" groupAlignment="0" attributes="0">
  19.149 +                          <Component id="durationPanelEffort" alignment="0" min="-2" max="-2" attributes="0"/>
  19.150 +                          <Component id="jComboBoxProgress" alignment="0" min="-2" max="-2" attributes="0"/>
  19.151 +                          <Component id="durationPanelSpent" alignment="0" min="-2" max="-2" attributes="0"/>
  19.152 +                      </Group>
  19.153 +                      <EmptySpace min="350" pref="350" max="350" attributes="0"/>
  19.154 +                  </Group>
  19.155 +                  <Group type="102" alignment="0" attributes="0">
  19.156 +                      <Group type="103" groupAlignment="0" attributes="0">
  19.157 +                          <Component id="jLabel7" alignment="0" min="-2" max="-2" attributes="0"/>
  19.158 +                          <Component id="jLabel4" alignment="0" min="-2" max="-2" attributes="0"/>
  19.159 +                      </Group>
  19.160 +                      <EmptySpace max="-2" attributes="0"/>
  19.161 +                      <Group type="103" groupAlignment="0" max="-2" attributes="0">
  19.162 +                          <Component id="jDateChooserDue" max="32767" attributes="1"/>
  19.163 +                          <Component id="jDateChooserStart" alignment="0" pref="148" max="32767" attributes="1"/>
  19.164 +                      </Group>
  19.165 +                      <EmptySpace pref="407" max="32767" attributes="0"/>
  19.166 +                  </Group>
  19.167 +                  <Component id="jScrollPane1" alignment="0" pref="599" max="32767" attributes="2"/>
  19.168 +              </Group>
  19.169 +            </DimensionLayout>
  19.170 +            <DimensionLayout dim="1">
  19.171 +              <Group type="103" groupAlignment="0" attributes="0">
  19.172 +                  <Group type="102" alignment="0" attributes="0">
  19.173 +                      <EmptySpace min="-2" max="-2" attributes="0"/>
  19.174 +                      <Group type="103" groupAlignment="1" attributes="0">
  19.175 +                          <Component id="jLabel7" min="-2" max="-2" attributes="0"/>
  19.176 +                          <Component id="jDateChooserStart" min="-2" max="-2" attributes="0"/>
  19.177 +                      </Group>
  19.178 +                      <EmptySpace min="-2" max="-2" attributes="0"/>
  19.179 +                      <Group type="103" groupAlignment="1" attributes="0">
  19.180 +                          <Component id="jLabel4" min="-2" max="-2" attributes="0"/>
  19.181 +                          <Component id="jDateChooserDue" min="-2" max="-2" attributes="0"/>
  19.182 +                      </Group>
  19.183 +                      <EmptySpace min="-2" pref="12" max="-2" attributes="0"/>
  19.184 +                      <Component id="jCheckBoxCompute" min="-2" max="-2" attributes="0"/>
  19.185 +                      <EmptySpace min="-2" max="-2" attributes="0"/>
  19.186 +                      <Component id="jLabel8" pref="30" max="32767" attributes="0"/>
  19.187 +                      <EmptySpace min="-2" max="-2" attributes="0"/>
  19.188 +                      <Group type="103" groupAlignment="3" attributes="0">
  19.189 +                          <Component id="jLabel9" alignment="3" min="-2" max="-2" attributes="0"/>
  19.190 +                          <Component id="durationPanelEffort" alignment="3" min="-2" max="-2" attributes="0"/>
  19.191 +                      </Group>
  19.192 +                      <EmptySpace min="-2" max="-2" attributes="0"/>
  19.193 +                      <Group type="103" groupAlignment="3" attributes="0">
  19.194 +                          <Component id="jLabel11" alignment="3" min="-2" max="-2" attributes="0"/>
  19.195 +                          <Component id="jComboBoxProgress" alignment="3" min="-2" max="-2" attributes="0"/>
  19.196 +                      </Group>
  19.197 +                      <EmptySpace min="-2" max="-2" attributes="0"/>
  19.198 +                      <Group type="103" groupAlignment="3" attributes="0">
  19.199 +                          <Component id="jLabel10" alignment="3" min="-2" max="-2" attributes="0"/>
  19.200 +                          <Component id="durationPanelSpent" alignment="3" min="-2" max="-2" attributes="0"/>
  19.201 +                      </Group>
  19.202 +                      <EmptySpace min="-2" max="-2" attributes="0"/>
  19.203 +                      <Group type="103" groupAlignment="3" attributes="0">
  19.204 +                          <Component id="jLabel6" alignment="3" min="-2" max="-2" attributes="0"/>
  19.205 +                          <Component id="jLabelLastEdited" alignment="3" pref="15" max="32767" attributes="0"/>
  19.206 +                      </Group>
  19.207 +                      <EmptySpace min="-2" max="-2" attributes="0"/>
  19.208 +                      <Group type="103" groupAlignment="3" attributes="0">
  19.209 +                          <Component id="jLabel5" alignment="3" min="-2" max="-2" attributes="0"/>
  19.210 +                          <Component id="jLabelCreated" alignment="3" pref="15" max="32767" attributes="0"/>
  19.211 +                      </Group>
  19.212 +                      <EmptySpace min="-2" max="-2" attributes="0"/>
  19.213 +                      <Group type="103" groupAlignment="3" attributes="0">
  19.214 +                          <Component id="jLabel2" alignment="3" min="-2" max="-2" attributes="0"/>
  19.215 +                          <Component id="jLabelCompleted" alignment="3" pref="15" max="32767" attributes="0"/>
  19.216 +                      </Group>
  19.217 +                      <EmptySpace min="-2" max="-2" attributes="0"/>
  19.218 +                      <Group type="103" groupAlignment="3" attributes="0">
  19.219 +                          <Component id="jLabel3" alignment="3" min="-2" max="-2" attributes="0"/>
  19.220 +                          <Component id="jLabelSpentTimeToday" alignment="3" min="-2" max="-2" attributes="0"/>
  19.221 +                      </Group>
  19.222 +                      <EmptySpace min="-2" max="-2" attributes="0"/>
  19.223 +                      <Component id="jLabel12" min="-2" max="-2" attributes="0"/>
  19.224 +                      <EmptySpace min="-2" max="-2" attributes="0"/>
  19.225 +                      <Component id="jScrollPane1" pref="341" max="32767" attributes="0"/>
  19.226 +                  </Group>
  19.227 +              </Group>
  19.228 +            </DimensionLayout>
  19.229 +          </Layout>
  19.230            <SubComponents>
  19.231 -            <Container class="javax.swing.JPanel" name="jPanel1">
  19.232 -              <Constraints>
  19.233 -                <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
  19.234 -                  <GridBagConstraints gridX="3" gridY="6" gridWidth="0" gridHeight="1" fill="1" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="17" weightX="1.0" weightY="1.0"/>
  19.235 -                </Constraint>
  19.236 -              </Constraints>
  19.237 +            <Component class="javax.swing.JLabel" name="jLabelLastEdited">
  19.238 +            </Component>
  19.239 +            <Container class="javax.swing.JScrollPane" name="jScrollPane1">
  19.240  
  19.241 -              <Layout class="org.netbeans.modules.form.compat2.layouts.DesignFlowLayout"/>
  19.242 -            </Container>
  19.243 -            <Container class="javax.swing.JPanel" name="jPanel4">
  19.244 -              <Properties>
  19.245 -                <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
  19.246 -                  <Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo">
  19.247 -                    <TitledBorder title="Effort">
  19.248 -                      <ResourceString PropertyName="titleX" bundle="org/netbeans/modules/tasklist/usertasks/Bundle.properties" key="Effort" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
  19.249 -                    </TitledBorder>
  19.250 -                  </Border>
  19.251 -                </Property>
  19.252 -              </Properties>
  19.253 -              <Constraints>
  19.254 -                <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
  19.255 -                  <GridBagConstraints gridX="0" gridY="2" gridWidth="3" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="11" insetsLeft="0" insetsBottom="0" insetsRight="12" anchor="17" weightX="0.0" weightY="0.0"/>
  19.256 -                </Constraint>
  19.257 -              </Constraints>
  19.258 -
  19.259 -              <Layout class="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout"/>
  19.260 +              <Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
  19.261                <SubComponents>
  19.262 -                <Component class="javax.swing.JRadioButton" name="jRadioButtonComputeEffort">
  19.263 -                  <Properties>
  19.264 -                    <Property name="buttonGroup" type="javax.swing.ButtonGroup" editor="org.netbeans.modules.form.RADComponent$ButtonGroupPropertyEditor">
  19.265 -                      <ComponentRef name="effortButtonGroup"/>
  19.266 -                    </Property>
  19.267 -                    <Property name="selected" type="boolean" value="true"/>
  19.268 -                    <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
  19.269 -                      <ResourceString bundle="org/netbeans/modules/tasklist/usertasks/Bundle.properties" key="ComputeEffortAutomatically" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
  19.270 -                    </Property>
  19.271 -                  </Properties>
  19.272 -                  <AuxValues>
  19.273 -                    <AuxValue name="generateMnemonicsCode" type="java.lang.Boolean" value="true"/>
  19.274 -                  </AuxValues>
  19.275 -                  <Constraints>
  19.276 -                    <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
  19.277 -                      <GridBagConstraints gridX="-1" gridY="-1" gridWidth="2" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="17" weightX="0.0" weightY="0.0"/>
  19.278 -                    </Constraint>
  19.279 -                  </Constraints>
  19.280 -                </Component>
  19.281 -                <Component class="javax.swing.JRadioButton" name="jRadioButtonEffort">
  19.282 -                  <Properties>
  19.283 -                    <Property name="buttonGroup" type="javax.swing.ButtonGroup" editor="org.netbeans.modules.form.RADComponent$ButtonGroupPropertyEditor">
  19.284 -                      <ComponentRef name="effortButtonGroup"/>
  19.285 -                    </Property>
  19.286 -                    <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
  19.287 -                      <ResourceString bundle="org/netbeans/modules/tasklist/usertasks/Bundle.properties" key="UseThisValue" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
  19.288 -                    </Property>
  19.289 -                  </Properties>
  19.290 -                  <Events>
  19.291 -                    <EventHandler event="itemStateChanged" listener="java.awt.event.ItemListener" parameters="java.awt.event.ItemEvent" handler="jRadioButtonEffortItemStateChanged"/>
  19.292 -                  </Events>
  19.293 -                  <AuxValues>
  19.294 -                    <AuxValue name="generateMnemonicsCode" type="java.lang.Boolean" value="true"/>
  19.295 -                  </AuxValues>
  19.296 -                  <Constraints>
  19.297 -                    <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
  19.298 -                      <GridBagConstraints gridX="0" gridY="1" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="12" anchor="18" weightX="0.0" weightY="0.0"/>
  19.299 -                    </Constraint>
  19.300 -                  </Constraints>
  19.301 -                </Component>
  19.302 -                <Container class="javax.swing.JPanel" name="jPanelEffort">
  19.303 -                  <Constraints>
  19.304 -                    <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
  19.305 -                      <GridBagConstraints gridX="1" gridY="1" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="17" weightX="1.0" weightY="0.0"/>
  19.306 -                    </Constraint>
  19.307 -                  </Constraints>
  19.308 -
  19.309 -                  <Layout class="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout"/>
  19.310 -                </Container>
  19.311 -              </SubComponents>
  19.312 -            </Container>
  19.313 -            <Container class="javax.swing.JPanel" name="jPanel5">
  19.314 -              <Properties>
  19.315 -                <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
  19.316 -                  <Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo">
  19.317 -                    <TitledBorder title="Progress">
  19.318 -                      <ResourceString PropertyName="titleX" bundle="org/netbeans/modules/tasklist/usertasks/Bundle.properties" key="Progress" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
  19.319 -                    </TitledBorder>
  19.320 -                  </Border>
  19.321 -                </Property>
  19.322 -              </Properties>
  19.323 -              <Constraints>
  19.324 -                <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
  19.325 -                  <GridBagConstraints gridX="0" gridY="3" gridWidth="3" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="11" insetsLeft="0" insetsBottom="0" insetsRight="12" anchor="17" weightX="0.0" weightY="0.0"/>
  19.326 -                </Constraint>
  19.327 -              </Constraints>
  19.328 -
  19.329 -              <Layout class="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout"/>
  19.330 -              <SubComponents>
  19.331 -                <Component class="javax.swing.JComboBox" name="jComboBoxProgress">
  19.332 -                  <Properties>
  19.333 -                    <Property name="editable" type="boolean" value="true"/>
  19.334 -                    <Property name="inputVerifier" type="javax.swing.InputVerifier" editor="org.netbeans.modules.form.RADConnectionPropertyEditor">
  19.335 -                      <Connection code="new PercentsInputVerifier()" type="code"/>
  19.336 -                    </Property>
  19.337 -                  </Properties>
  19.338 -                  <Constraints>
  19.339 -                    <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
  19.340 -                      <GridBagConstraints gridX="1" gridY="1" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="17" weightX="0.0" weightY="0.0"/>
  19.341 -                    </Constraint>
  19.342 -                  </Constraints>
  19.343 -                </Component>
  19.344 -                <Component class="javax.swing.JRadioButton" name="jRadioButtonComputeProgress">
  19.345 -                  <Properties>
  19.346 -                    <Property name="buttonGroup" type="javax.swing.ButtonGroup" editor="org.netbeans.modules.form.RADComponent$ButtonGroupPropertyEditor">
  19.347 -                      <ComponentRef name="buttonGroupProgress"/>
  19.348 -                    </Property>
  19.349 -                    <Property name="selected" type="boolean" value="true"/>
  19.350 -                    <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
  19.351 -                      <ResourceString bundle="org/netbeans/modules/tasklist/usertasks/Bundle.properties" key="ComputeProgressAutomatically" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
  19.352 -                    </Property>
  19.353 -                  </Properties>
  19.354 -                  <AuxValues>
  19.355 -                    <AuxValue name="generateMnemonicsCode" type="java.lang.Boolean" value="true"/>
  19.356 -                  </AuxValues>
  19.357 -                  <Constraints>
  19.358 -                    <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
  19.359 -                      <GridBagConstraints gridX="-1" gridY="-1" gridWidth="2" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="17" weightX="0.0" weightY="0.0"/>
  19.360 -                    </Constraint>
  19.361 -                  </Constraints>
  19.362 -                </Component>
  19.363 -                <Component class="javax.swing.JRadioButton" name="jRadioButtonProgress">
  19.364 -                  <Properties>
  19.365 -                    <Property name="buttonGroup" type="javax.swing.ButtonGroup" editor="org.netbeans.modules.form.RADComponent$ButtonGroupPropertyEditor">
  19.366 -                      <ComponentRef name="buttonGroupProgress"/>
  19.367 -                    </Property>
  19.368 -                    <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
  19.369 -                      <ResourceString bundle="org/netbeans/modules/tasklist/usertasks/Bundle.properties" key="UseThisValue" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
  19.370 -                    </Property>
  19.371 -                  </Properties>
  19.372 -                  <Events>
  19.373 -                    <EventHandler event="itemStateChanged" listener="java.awt.event.ItemListener" parameters="java.awt.event.ItemEvent" handler="jRadioButtonProgressItemStateChanged"/>
  19.374 -                  </Events>
  19.375 -                  <AuxValues>
  19.376 -                    <AuxValue name="generateMnemonicsCode" type="java.lang.Boolean" value="true"/>
  19.377 -                  </AuxValues>
  19.378 -                  <Constraints>
  19.379 -                    <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
  19.380 -                      <GridBagConstraints gridX="0" gridY="1" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="12" anchor="17" weightX="0.0" weightY="0.0"/>
  19.381 -                    </Constraint>
  19.382 -                  </Constraints>
  19.383 -                </Component>
  19.384 -                <Container class="javax.swing.JPanel" name="jPanel6">
  19.385 -                  <Properties>
  19.386 -                    <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
  19.387 -                      <Dimension value="[0, 0]"/>
  19.388 -                    </Property>
  19.389 -                  </Properties>
  19.390 -                  <Constraints>
  19.391 -                    <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
  19.392 -                      <GridBagConstraints gridX="2" gridY="2" gridWidth="1" gridHeight="1" fill="1" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="1.0" weightY="1.0"/>
  19.393 -                    </Constraint>
  19.394 -                  </Constraints>
  19.395 -
  19.396 -                  <Layout class="org.netbeans.modules.form.compat2.layouts.DesignFlowLayout"/>
  19.397 -                </Container>
  19.398 -              </SubComponents>
  19.399 -            </Container>
  19.400 -            <Container class="javax.swing.JPanel" name="jPanel7">
  19.401 -              <Properties>
  19.402 -                <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
  19.403 -                  <Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo">
  19.404 -                    <TitledBorder title="Spent time"/>
  19.405 -                  </Border>
  19.406 -                </Property>
  19.407 -              </Properties>
  19.408 -              <Constraints>
  19.409 -                <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
  19.410 -                  <GridBagConstraints gridX="0" gridY="4" gridWidth="3" gridHeight="1" fill="1" ipadX="0" ipadY="0" insetsTop="11" insetsLeft="0" insetsBottom="0" insetsRight="12" anchor="10" weightX="0.0" weightY="0.0"/>
  19.411 -                </Constraint>
  19.412 -              </Constraints>
  19.413 -
  19.414 -              <Layout class="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout"/>
  19.415 -              <SubComponents>
  19.416 -                <Component class="javax.swing.JRadioButton" name="jRadioButtonComputeSpent">
  19.417 -                  <Properties>
  19.418 -                    <Property name="buttonGroup" type="javax.swing.ButtonGroup" editor="org.netbeans.modules.form.RADComponent$ButtonGroupPropertyEditor">
  19.419 -                      <ComponentRef name="buttonGroupSpent"/>
  19.420 -                    </Property>
  19.421 -                    <Property name="selected" type="boolean" value="true"/>
  19.422 -                    <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
  19.423 -                      <ResourceString bundle="org/netbeans/modules/tasklist/usertasks/Bundle.properties" key="ComputeSpentTkme" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
  19.424 -                    </Property>
  19.425 -                  </Properties>
  19.426 -                  <AuxValues>
  19.427 -                    <AuxValue name="generateMnemonicsCode" type="java.lang.Boolean" value="true"/>
  19.428 -                  </AuxValues>
  19.429 -                  <Constraints>
  19.430 -                    <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
  19.431 -                      <GridBagConstraints gridX="-1" gridY="-1" gridWidth="2" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="17" weightX="0.0" weightY="0.0"/>
  19.432 -                    </Constraint>
  19.433 -                  </Constraints>
  19.434 -                </Component>
  19.435 -                <Component class="javax.swing.JRadioButton" name="jRadioButtonSpent">
  19.436 -                  <Properties>
  19.437 -                    <Property name="buttonGroup" type="javax.swing.ButtonGroup" editor="org.netbeans.modules.form.RADComponent$ButtonGroupPropertyEditor">
  19.438 -                      <ComponentRef name="buttonGroupSpent"/>
  19.439 -                    </Property>
  19.440 -                    <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
  19.441 -                      <ResourceString bundle="org/netbeans/modules/tasklist/usertasks/Bundle.properties" key="UseThisValue" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
  19.442 -                    </Property>
  19.443 -                  </Properties>
  19.444 -                  <Events>
  19.445 -                    <EventHandler event="itemStateChanged" listener="java.awt.event.ItemListener" parameters="java.awt.event.ItemEvent" handler="jRadioButtonSpentItemStateChanged"/>
  19.446 -                  </Events>
  19.447 -                  <AuxValues>
  19.448 -                    <AuxValue name="generateMnemonicsCode" type="java.lang.Boolean" value="true"/>
  19.449 -                  </AuxValues>
  19.450 -                  <Constraints>
  19.451 -                    <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
  19.452 -                      <GridBagConstraints gridX="0" gridY="1" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="12" anchor="18" weightX="0.0" weightY="0.0"/>
  19.453 -                    </Constraint>
  19.454 -                  </Constraints>
  19.455 -                </Component>
  19.456 -                <Component class="org.netbeans.modules.tasklist.usertasks.DurationPanel" name="durationPanelSpent">
  19.457 -                  <Properties>
  19.458 -                    <Property name="enabled" type="boolean" value="false"/>
  19.459 -                  </Properties>
  19.460 -                  <Constraints>
  19.461 -                    <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
  19.462 -                      <GridBagConstraints gridX="1" gridY="1" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="17" weightX="1.0" weightY="0.0"/>
  19.463 -                    </Constraint>
  19.464 -                  </Constraints>
  19.465 +                <Component class="javax.swing.JList" name="jListWorkPeriods">
  19.466                  </Component>
  19.467                </SubComponents>
  19.468              </Container>
  19.469 -            <Container class="javax.swing.JPanel" name="jPanel9">
  19.470 -              <Constraints>
  19.471 -                <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
  19.472 -                  <GridBagConstraints gridX="0" gridY="0" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="18" weightX="0.0" weightY="0.0"/>
  19.473 -                </Constraint>
  19.474 -              </Constraints>
  19.475 -
  19.476 -              <Layout class="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout"/>
  19.477 -              <SubComponents>
  19.478 -                <Component class="com.toedter.calendar.JDateChooser" name="jDateChooserDue">
  19.479 -                  <Constraints>
  19.480 -                    <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
  19.481 -                      <GridBagConstraints gridX="1" gridY="1" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="11" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="17" weightX="0.0" weightY="0.0"/>
  19.482 -                    </Constraint>
  19.483 -                  </Constraints>
  19.484 -                </Component>
  19.485 -                <Component class="com.toedter.calendar.JDateChooser" name="jDateChooserStart">
  19.486 -                  <Constraints>
  19.487 -                    <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
  19.488 -                      <GridBagConstraints gridX="1" gridY="0" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="17" weightX="0.0" weightY="0.0"/>
  19.489 -                    </Constraint>
  19.490 -                  </Constraints>
  19.491 -                </Component>
  19.492 -                <Component class="javax.swing.JLabel" name="jLabel4">
  19.493 -                  <Properties>
  19.494 -                    <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
  19.495 -                      <ResourceString bundle="org/netbeans/modules/tasklist/usertasks/Bundle.properties" key="DueDateCb" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
  19.496 -                    </Property>
  19.497 -                  </Properties>
  19.498 -                  <Constraints>
  19.499 -                    <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
  19.500 -                      <GridBagConstraints gridX="0" gridY="1" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="11" insetsLeft="0" insetsBottom="0" insetsRight="12" anchor="17" weightX="0.0" weightY="0.0"/>
  19.501 -                    </Constraint>
  19.502 -                  </Constraints>
  19.503 -                </Component>
  19.504 -                <Component class="javax.swing.JLabel" name="jLabel7">
  19.505 -                  <Properties>
  19.506 -                    <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
  19.507 -                      <ResourceString bundle="org/netbeans/modules/tasklist/usertasks/Bundle.properties" key="LBL_Start" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
  19.508 -                    </Property>
  19.509 -                  </Properties>
  19.510 -                  <Constraints>
  19.511 -                    <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
  19.512 -                      <GridBagConstraints gridX="0" gridY="0" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="12" anchor="17" weightX="0.0" weightY="0.0"/>
  19.513 -                    </Constraint>
  19.514 -                  </Constraints>
  19.515 -                </Component>
  19.516 -              </SubComponents>
  19.517 -            </Container>
  19.518 -            <Container class="javax.swing.JPanel" name="jPanel10">
  19.519 -              <Constraints>
  19.520 -                <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
  19.521 -                  <GridBagConstraints gridX="0" gridY="5" gridWidth="3" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="18" weightX="0.0" weightY="0.0"/>
  19.522 -                </Constraint>
  19.523 -              </Constraints>
  19.524 -
  19.525 -              <Layout class="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout"/>
  19.526 -              <SubComponents>
  19.527 -                <Component class="javax.swing.JLabel" name="jLabelCreated">
  19.528 -                  <Constraints>
  19.529 -                    <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
  19.530 -                      <GridBagConstraints gridX="1" gridY="6" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="11" insetsLeft="0" insetsBottom="0" insetsRight="12" anchor="17" weightX="0.0" weightY="0.0"/>
  19.531 -                    </Constraint>
  19.532 -                  </Constraints>
  19.533 -                </Component>
  19.534 -                <Component class="javax.swing.JLabel" name="jLabel5">
  19.535 -                  <Properties>
  19.536 -                    <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
  19.537 -                      <ResourceString bundle="org/netbeans/modules/tasklist/usertasks/Bundle.properties" key="CreatedLabel" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)); // NOI18N"/>
  19.538 -                    </Property>
  19.539 -                  </Properties>
  19.540 -                  <Constraints>
  19.541 -                    <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
  19.542 -                      <GridBagConstraints gridX="0" gridY="6" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="11" insetsLeft="0" insetsBottom="0" insetsRight="12" anchor="17" weightX="0.0" weightY="0.0"/>
  19.543 -                    </Constraint>
  19.544 -                  </Constraints>
  19.545 -                </Component>
  19.546 -                <Component class="javax.swing.JLabel" name="jLabelCompleted">
  19.547 -                  <AuxValues>
  19.548 -                    <AuxValue name="generateMnemonicsCode" type="java.lang.Boolean" value="true"/>
  19.549 -                  </AuxValues>
  19.550 -                  <Constraints>
  19.551 -                    <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
  19.552 -                      <GridBagConstraints gridX="1" gridY="7" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="11" insetsLeft="0" insetsBottom="0" insetsRight="12" anchor="17" weightX="0.0" weightY="0.0"/>
  19.553 -                    </Constraint>
  19.554 -                  </Constraints>
  19.555 -                </Component>
  19.556 -                <Component class="javax.swing.JLabel" name="jLabelLastEdited">
  19.557 -                  <Constraints>
  19.558 -                    <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
  19.559 -                      <GridBagConstraints gridX="1" gridY="5" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="11" insetsLeft="0" insetsBottom="0" insetsRight="12" anchor="17" weightX="0.0" weightY="0.0"/>
  19.560 -                    </Constraint>
  19.561 -                  </Constraints>
  19.562 -                </Component>
  19.563 -                <Component class="javax.swing.JLabel" name="jLabel2">
  19.564 -                  <Properties>
  19.565 -                    <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
  19.566 -                      <ResourceString bundle="org/netbeans/modules/tasklist/usertasks/Bundle.properties" key="Completed" replaceFormat="org.openide.util.NbBundle.getBundle({sourceFileName}.class).getString(&quot;{key}&quot;)"/>
  19.567 -                    </Property>
  19.568 -                  </Properties>
  19.569 -                  <AuxValues>
  19.570 -                    <AuxValue name="generateMnemonicsCode" type="java.lang.Boolean" value="true"/>
  19.571 -                  </AuxValues>
  19.572 -                  <Constraints>
  19.573 -                    <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
  19.574 -                      <GridBagConstraints gridX="0" gridY="7" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="11" insetsLeft="0" insetsBottom="0" insetsRight="12" anchor="17" weightX="0.0" weightY="0.0"/>
  19.575 -                    </Constraint>
  19.576 -                  </Constraints>
  19.577 -                </Component>
  19.578 -                <Component class="javax.swing.JLabel" name="jLabel6">
  19.579 -                  <Properties>
  19.580 -                    <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
  19.581 -                      <ResourceString bundle="org/netbeans/modules/tasklist/usertasks/Bundle.properties" key="LastEditedLabel" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)); // NOI18N"/>
  19.582 -                    </Property>
  19.583 -                  </Properties>
  19.584 -                  <Constraints>
  19.585 -                    <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
  19.586 -                      <GridBagConstraints gridX="0" gridY="5" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="11" insetsLeft="0" insetsBottom="0" insetsRight="12" anchor="17" weightX="0.0" weightY="0.0"/>
  19.587 -                    </Constraint>
  19.588 -                  </Constraints>
  19.589 -                </Component>
  19.590 -              </SubComponents>
  19.591 -            </Container>
  19.592 +            <Component class="javax.swing.JLabel" name="jLabelCompleted">
  19.593 +              <AuxValues>
  19.594 +                <AuxValue name="generateMnemonicsCode" type="java.lang.Boolean" value="true"/>
  19.595 +              </AuxValues>
  19.596 +            </Component>
  19.597 +            <Component class="javax.swing.JLabel" name="jLabelCreated">
  19.598 +            </Component>
  19.599 +            <Component class="javax.swing.JCheckBox" name="jCheckBoxCompute">
  19.600 +              <Properties>
  19.601 +                <Property name="selected" type="boolean" value="true"/>
  19.602 +                <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
  19.603 +                  <ResourceString bundle="org/netbeans/modules/tasklist/usertasks/Bundle.properties" key="ComputeAll" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
  19.604 +                </Property>
  19.605 +                <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
  19.606 +                  <Border info="org.netbeans.modules.form.compat2.border.EmptyBorderInfo">
  19.607 +                    <EmptyBorder bottom="0" left="0" right="0" top="0"/>
  19.608 +                  </Border>
  19.609 +                </Property>
  19.610 +                <Property name="margin" type="java.awt.Insets" editor="org.netbeans.beaninfo.editors.InsetsEditor">
  19.611 +                  <Insets value="[0, 0, 0, 0]"/>
  19.612 +                </Property>
  19.613 +              </Properties>
  19.614 +              <Events>
  19.615 +                <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="jCheckBoxComputeActionPerformed"/>
  19.616 +              </Events>
  19.617 +            </Component>
  19.618 +            <Component class="javax.swing.JLabel" name="jLabel8">
  19.619 +              <Properties>
  19.620 +                <Property name="labelFor" type="java.awt.Component" editor="org.netbeans.modules.form.ComponentChooserEditor">
  19.621 +                  <ComponentRef name="jCheckBoxCompute"/>
  19.622 +                </Property>
  19.623 +                <Property name="text" type="java.lang.String" value="&lt;html&gt;Effort and spent time will be computed as a sum of the subtask values. Progress will be computed as a weighted sum of the subtask values.&lt;/html&gt;"/>
  19.624 +              </Properties>
  19.625 +            </Component>
  19.626 +            <Component class="javax.swing.JLabel" name="jLabel9">
  19.627 +              <Properties>
  19.628 +                <Property name="labelFor" type="java.awt.Component" editor="org.netbeans.modules.form.ComponentChooserEditor">
  19.629 +                  <ComponentRef name="durationPanelEffort"/>
  19.630 +                </Property>
  19.631 +                <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
  19.632 +                  <ResourceString bundle="org/netbeans/modules/tasklist/usertasks/Bundle.properties" key="Effort_" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
  19.633 +                </Property>
  19.634 +              </Properties>
  19.635 +            </Component>
  19.636 +            <Component class="org.netbeans.modules.tasklist.usertasks.DurationPanel" name="durationPanelSpent">
  19.637 +              <Properties>
  19.638 +                <Property name="enabled" type="boolean" value="false"/>
  19.639 +              </Properties>
  19.640 +            </Component>
  19.641 +            <Component class="javax.swing.JLabel" name="jLabel10">
  19.642 +              <Properties>
  19.643 +                <Property name="labelFor" type="java.awt.Component" editor="org.netbeans.modules.form.ComponentChooserEditor">
  19.644 +                  <ComponentRef name="durationPanelSpent"/>
  19.645 +                </Property>
  19.646 +                <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
  19.647 +                  <ResourceString bundle="org/netbeans/modules/tasklist/usertasks/Bundle.properties" key="SpentTime_" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
  19.648 +                </Property>
  19.649 +              </Properties>
  19.650 +            </Component>
  19.651 +            <Component class="javax.swing.JComboBox" name="jComboBoxProgress">
  19.652 +              <Properties>
  19.653 +                <Property name="editable" type="boolean" value="true"/>
  19.654 +                <Property name="enabled" type="boolean" value="false"/>
  19.655 +                <Property name="inputVerifier" type="javax.swing.InputVerifier" editor="org.netbeans.modules.form.RADConnectionPropertyEditor">
  19.656 +                  <Connection code="new PercentsInputVerifier()" type="code"/>
  19.657 +                </Property>
  19.658 +              </Properties>
  19.659 +            </Component>
  19.660 +            <Component class="javax.swing.JLabel" name="jLabel11">
  19.661 +              <Properties>
  19.662 +                <Property name="labelFor" type="java.awt.Component" editor="org.netbeans.modules.form.ComponentChooserEditor">
  19.663 +                  <ComponentRef name="jComboBoxProgress"/>
  19.664 +                </Property>
  19.665 +                <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
  19.666 +                  <ResourceString bundle="org/netbeans/modules/tasklist/usertasks/Bundle.properties" key="Progress_" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
  19.667 +                </Property>
  19.668 +              </Properties>
  19.669 +            </Component>
  19.670 +            <Component class="javax.swing.JLabel" name="jLabel6">
  19.671 +              <Properties>
  19.672 +                <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
  19.673 +                  <ResourceString bundle="org/netbeans/modules/tasklist/usertasks/Bundle.properties" key="LastEditedLabel" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)); // NOI18N"/>
  19.674 +                </Property>
  19.675 +              </Properties>
  19.676 +            </Component>
  19.677 +            <Component class="javax.swing.JLabel" name="jLabel5">
  19.678 +              <Properties>
  19.679 +                <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
  19.680 +                  <ResourceString bundle="org/netbeans/modules/tasklist/usertasks/Bundle.properties" key="CreatedLabel" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)); // NOI18N"/>
  19.681 +                </Property>
  19.682 +              </Properties>
  19.683 +            </Component>
  19.684 +            <Component class="javax.swing.JLabel" name="jLabel2">
  19.685 +              <Properties>
  19.686 +                <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
  19.687 +                  <ResourceString bundle="org/netbeans/modules/tasklist/usertasks/Bundle.properties" key="Completed" replaceFormat="org.openide.util.NbBundle.getBundle({sourceFileName}.class).getString(&quot;{key}&quot;)"/>
  19.688 +                </Property>
  19.689 +              </Properties>
  19.690 +              <AuxValues>
  19.691 +                <AuxValue name="generateMnemonicsCode" type="java.lang.Boolean" value="true"/>
  19.692 +              </AuxValues>
  19.693 +            </Component>
  19.694 +            <Component class="org.netbeans.modules.tasklist.usertasks.DurationPanel" name="durationPanelEffort">
  19.695 +              <Properties>
  19.696 +                <Property name="enabled" type="boolean" value="false"/>
  19.697 +              </Properties>
  19.698 +            </Component>
  19.699 +            <Component class="com.toedter.calendar.JDateChooser" name="jDateChooserDue">
  19.700 +            </Component>
  19.701 +            <Component class="com.toedter.calendar.JDateChooser" name="jDateChooserStart">
  19.702 +            </Component>
  19.703 +            <Component class="javax.swing.JLabel" name="jLabel7">
  19.704 +              <Properties>
  19.705 +                <Property name="labelFor" type="java.awt.Component" editor="org.netbeans.modules.form.ComponentChooserEditor">
  19.706 +                  <ComponentRef name="jDateChooserStart"/>
  19.707 +                </Property>
  19.708 +                <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
  19.709 +                  <ResourceString bundle="org/netbeans/modules/tasklist/usertasks/Bundle.properties" key="LBL_Start" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
  19.710 +                </Property>
  19.711 +              </Properties>
  19.712 +            </Component>
  19.713 +            <Component class="javax.swing.JLabel" name="jLabel4">
  19.714 +              <Properties>
  19.715 +                <Property name="labelFor" type="java.awt.Component" editor="org.netbeans.modules.form.ComponentChooserEditor">
  19.716 +                  <ComponentRef name="jDateChooserDue"/>
  19.717 +                </Property>
  19.718 +                <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
  19.719 +                  <ResourceString bundle="org/netbeans/modules/tasklist/usertasks/Bundle.properties" key="DueDateCb" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
  19.720 +                </Property>
  19.721 +              </Properties>
  19.722 +            </Component>
  19.723 +            <Component class="javax.swing.JLabel" name="jLabel3">
  19.724 +              <Properties>
  19.725 +                <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
  19.726 +                  <ResourceString bundle="org/netbeans/modules/tasklist/usertasks/Bundle.properties" key="SpentTimeToday" replaceFormat="org.openide.util.NbBundle.getBundle({sourceFileName}.class).getString(&quot;{key}&quot;)"/>
  19.727 +                </Property>
  19.728 +              </Properties>
  19.729 +              <AuxValues>
  19.730 +                <AuxValue name="generateMnemonicsCode" type="java.lang.Boolean" value="false"/>
  19.731 +              </AuxValues>
  19.732 +            </Component>
  19.733 +            <Component class="javax.swing.JLabel" name="jLabelSpentTimeToday">
  19.734 +              <AuxValues>
  19.735 +                <AuxValue name="generateMnemonicsCode" type="java.lang.Boolean" value="true"/>
  19.736 +              </AuxValues>
  19.737 +            </Component>
  19.738 +            <Component class="javax.swing.JLabel" name="jLabel12">
  19.739 +              <Properties>
  19.740 +                <Property name="labelFor" type="java.awt.Component" editor="org.netbeans.modules.form.ComponentChooserEditor">
  19.741 +                  <ComponentRef name="jListWorkPeriods"/>
  19.742 +                </Property>
  19.743 +                <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
  19.744 +                  <ResourceString bundle="org/netbeans/modules/tasklist/usertasks/Bundle.properties" key="HistoryOfSpentTimes" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
  19.745 +                </Property>
  19.746 +              </Properties>
  19.747 +            </Component>
  19.748            </SubComponents>
  19.749          </Container>
  19.750          <Container class="javax.swing.JPanel" name="jPanelDependencies">
  19.751 @@ -716,62 +654,6 @@
  19.752  
  19.753            <Layout class="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout"/>
  19.754          </Container>
  19.755 -        <Container class="javax.swing.JPanel" name="jPanel8">
  19.756 -          <Constraints>
  19.757 -            <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.support.JTabbedPaneSupportLayout" value="org.netbeans.modules.form.compat2.layouts.support.JTabbedPaneSupportLayout$JTabbedPaneConstraintsDescription">
  19.758 -              <JTabbedPaneConstraints tabName="Work Periods">
  19.759 -                <Property name="tabTitle" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
  19.760 -                  <ResourceString bundle="org/netbeans/modules/tasklist/usertasks/Bundle.properties" key="WordPeriods" replaceFormat="org.openide.util.NbBundle.getBundle({sourceFileName}.class).getString(&quot;{key}&quot;)"/>
  19.761 -                </Property>
  19.762 -              </JTabbedPaneConstraints>
  19.763 -            </Constraint>
  19.764 -          </Constraints>
  19.765 -
  19.766 -          <Layout class="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout"/>
  19.767 -          <SubComponents>
  19.768 -            <Container class="javax.swing.JScrollPane" name="jScrollPane1">
  19.769 -              <Constraints>
  19.770 -                <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
  19.771 -                  <GridBagConstraints gridX="-1" gridY="-1" gridWidth="2" gridHeight="1" fill="1" ipadX="0" ipadY="0" insetsTop="11" insetsLeft="11" insetsBottom="0" insetsRight="12" anchor="10" weightX="1.0" weightY="1.0"/>
  19.772 -                </Constraint>
  19.773 -              </Constraints>
  19.774 -
  19.775 -              <Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
  19.776 -              <SubComponents>
  19.777 -                <Component class="javax.swing.JList" name="jListWorkPeriods">
  19.778 -                </Component>
  19.779 -              </SubComponents>
  19.780 -            </Container>
  19.781 -            <Component class="javax.swing.JLabel" name="jLabel3">
  19.782 -              <Properties>
  19.783 -                <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
  19.784 -                  <ResourceString bundle="org/netbeans/modules/tasklist/usertasks/Bundle.properties" key="SpentTimeToday" replaceFormat="org.openide.util.NbBundle.getBundle({sourceFileName}.class).getString(&quot;{key}&quot;)"/>
  19.785 -                </Property>
  19.786 -              </Properties>
  19.787 -              <AuxValues>
  19.788 -                <AuxValue name="generateMnemonicsCode" type="java.lang.Boolean" value="false"/>
  19.789 -              </AuxValues>
  19.790 -              <Constraints>
  19.791 -                <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
  19.792 -                  <GridBagConstraints gridX="0" gridY="1" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="11" insetsLeft="11" insetsBottom="12" insetsRight="11" anchor="18" weightX="0.0" weightY="0.0"/>
  19.793 -                </Constraint>
  19.794 -              </Constraints>
  19.795 -            </Component>
  19.796 -            <Component class="javax.swing.JLabel" name="jLabelSpentTimeToday">
  19.797 -              <Properties>
  19.798 -                <Property name="text" type="java.lang.String" value="&quot;&quot;"/>
  19.799 -              </Properties>
  19.800 -              <AuxValues>
  19.801 -                <AuxValue name="generateMnemonicsCode" type="java.lang.Boolean" value="true"/>
  19.802 -              </AuxValues>
  19.803 -              <Constraints>
  19.804 -                <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
  19.805 -                  <GridBagConstraints gridX="1" gridY="1" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="11" insetsLeft="0" insetsBottom="12" insetsRight="12" anchor="17" weightX="0.0" weightY="0.0"/>
  19.806 -                </Constraint>
  19.807 -              </Constraints>
  19.808 -            </Component>
  19.809 -          </SubComponents>
  19.810 -        </Container>
  19.811        </SubComponents>
  19.812      </Container>
  19.813    </SubComponents>
    20.1 --- a/tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/EditTaskPanel.java	Mon Dec 04 21:57:00 2006 +0000
    20.2 +++ b/tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/EditTaskPanel.java	Mon Dec 04 21:59:57 2006 +0000
    20.3 @@ -22,15 +22,13 @@
    20.4  import java.awt.BorderLayout;
    20.5  import java.awt.Dimension;
    20.6  import java.awt.Toolkit;
    20.7 -import java.awt.event.ActionEvent;
    20.8 -import java.awt.event.ActionListener;
    20.9 -import java.awt.event.ItemEvent;
   20.10  import java.net.MalformedURLException;
   20.11  import java.net.URL;
   20.12  import java.text.DateFormat;
   20.13  import java.text.SimpleDateFormat;
   20.14  import java.util.Calendar;
   20.15  import java.util.Date;
   20.16 +import java.util.logging.Level;
   20.17  
   20.18  import javax.swing.ComboBoxModel;
   20.19  import javax.swing.DefaultComboBoxModel;
   20.20 @@ -63,7 +61,7 @@
   20.21   * @author Tor Norbye
   20.22   * @author tl
   20.23   */
   20.24 -public class EditTaskPanel extends JPanel implements ActionListener {
   20.25 +public class EditTaskPanel extends JPanel {
   20.26  
   20.27      private static final long serialVersionUID = 1;
   20.28  
   20.29 @@ -130,29 +128,25 @@
   20.30              new Integer(UserTask.LOW),
   20.31          });
   20.32      private ListCellRenderer priorityRenderer = new PriorityListCellRenderer();
   20.33 -    private DurationPanel durationPanel = new DurationPanel();
   20.34      private DependenciesPanel dp;
   20.35      
   20.36      /** 
   20.37 -     * Creates new form NewTodoItemPanel.
   20.38 +     * Creates new form.
   20.39       *
   20.40       * @param editing true = no append/prepend options
   20.41       */
   20.42      public EditTaskPanel(boolean editing) {
   20.43          initComponents();
   20.44          initA11y();
   20.45 -        
   20.46          priorityComboBox.setSelectedIndex(2);
   20.47          
   20.48          format = new SimpleDateFormat();
   20.49          
   20.50 -        addSourceButton.addActionListener(this);
   20.51 -        
   20.52          if (editing) {
   20.53              jPanelGeneral.remove(addLabel);
   20.54              jPanelGeneral.remove(beginningToggle);
   20.55              jPanelGeneral.remove(endToggle);
   20.56 -            jPanelGeneral.remove(addSourceButton);
   20.57 +            jPanelGeneral.remove(jLinkButtonAddToSource);
   20.58          } else {
   20.59              boolean append = appendDefault;
   20.60              if (append) {
   20.61 @@ -166,8 +160,6 @@
   20.62          ((JComponent) jComboBoxProgress.getEditor().getEditorComponent()).
   20.63              setInputVerifier(new EditTaskPanel.PercentsInputVerifier());
   20.64          
   20.65 -        jPanelEffort.add(durationPanel, BorderLayout.CENTER);
   20.66 -        
   20.67          dp = new DependenciesPanel();
   20.68          dp.setBorder(new EmptyBorder(11, 11, 12, 12));
   20.69          jPanelDependencies.add(dp, BorderLayout.CENTER);
   20.70 @@ -229,18 +221,10 @@
   20.71          categoryCombo.setSelectedItem(item.getCategory());
   20.72          
   20.73          jComboBoxProgress.setSelectedItem(item.getPercentComplete() + "%"); // NOI18N
   20.74 -        if (item.isProgressComputed())
   20.75 -            jRadioButtonComputeProgress.setSelected(true);
   20.76 -        else
   20.77 -            jRadioButtonProgress.setSelected(true);
   20.78 -        jRadioButtonProgressItemStateChanged(null);
   20.79 +        jCheckBoxCompute.setSelected(item.isValuesComputed());
   20.80 +        jCheckBoxComputeActionPerformed(null);
   20.81          
   20.82 -        durationPanel.setDuration(item.getEffort());
   20.83 -        if (item.isEffortComputed())
   20.84 -            jRadioButtonComputeEffort.setSelected(true);
   20.85 -        else
   20.86 -            jRadioButtonEffort.setSelected(true);
   20.87 -        jRadioButtonEffortItemStateChanged(null);
   20.88 +        durationPanelEffort.setDuration(item.getEffort());
   20.89          
   20.90          DateFormat df = DateFormat.getDateTimeInstance(
   20.91              DateFormat.LONG, DateFormat.LONG);
   20.92 @@ -248,11 +232,7 @@
   20.93          jLabelLastEdited.setText(df.format(new Date(item.getLastEditedDate())));
   20.94          
   20.95          durationPanelSpent.setDuration(item.getSpentTime());
   20.96 -        if (item.isSpentTimeComputed())
   20.97 -            jRadioButtonComputeSpent.setSelected(true);
   20.98 -        else
   20.99 -            jRadioButtonSpent.setSelected(true);
  20.100 -        
  20.101 +
  20.102          dp.fillPanel(item);
  20.103          
  20.104          String[] owners = item.getList().getOwners();
  20.105 @@ -261,7 +241,7 @@
  20.106              jComboBoxOwner.setModel(model);
  20.107          }
  20.108          jComboBoxOwner.setSelectedItem(item.getOwner());
  20.109 -        
  20.110 +
  20.111          if (item.getCompletedDate() != 0)
  20.112              jLabelCompleted.setText(df.format(new Date(item.getCompletedDate())));
  20.113          else
  20.114 @@ -315,11 +295,11 @@
  20.115                          ; // TODO: validation
  20.116                  } catch (NumberFormatException e) {
  20.117                      // TODO validation
  20.118 -                    e.printStackTrace();
  20.119 +                    UTUtils.LOGGER.log(Level.INFO, "", e);
  20.120                  }
  20.121              } catch (MalformedURLException e) {
  20.122                  // TODO: validation
  20.123 -                e.printStackTrace();
  20.124 +                UTUtils.LOGGER.log(Level.INFO, "", e);
  20.125              }
  20.126          } else {
  20.127              task.setLine(null);
  20.128 @@ -327,32 +307,29 @@
  20.129          
  20.130          task.setDueDate(getDueDate());
  20.131          task.setStart(getStart());
  20.132 -        task.setProgressComputed(jRadioButtonComputeProgress.isSelected());
  20.133 -        if (!task.isProgressComputed()) {
  20.134 +
  20.135 +        task.setValuesComputed(jCheckBoxCompute.isSelected());
  20.136 +        if (!task.isValuesComputed()) {
  20.137              task.setPercentComplete(
  20.138                  parsePercents((String) jComboBoxProgress.getSelectedItem()));
  20.139 -        }
  20.140 -        
  20.141 -        task.setEffortComputed(jRadioButtonComputeEffort.isSelected());
  20.142 -        if (!task.isEffortComputed()) {
  20.143 -            task.setEffort(durationPanel.getDuration());
  20.144 +            task.setEffort(durationPanelEffort.getDuration());
  20.145          }
  20.146  
  20.147 -        boolean spentTimeComputed = jRadioButtonComputeSpent.isSelected();
  20.148 +        boolean valuesComputed = jCheckBoxCompute.isSelected();
  20.149          int spentTime = durationPanelSpent.getDuration();
  20.150          if (spentTime != task.getSpentTime() || 
  20.151 -            spentTimeComputed != task.isSpentTimeComputed()) {
  20.152 +            valuesComputed != task.isValuesComputed()) {
  20.153              boolean started = task.isStarted();
  20.154              if (started)
  20.155                  task.stop();
  20.156 -            task.setSpentTimeComputed(spentTimeComputed);
  20.157 -            if (!task.isSpentTimeComputed()) {
  20.158 +            task.setValuesComputed(valuesComputed);
  20.159 +            if (!task.isValuesComputed()) {
  20.160                  task.setSpentTime(spentTime);
  20.161              }
  20.162 -            if (started && !spentTimeComputed)
  20.163 +            if (started && !valuesComputed)
  20.164                  task.start();
  20.165          }
  20.166 -        
  20.167 +
  20.168          dp.fillObject();
  20.169          
  20.170          if (jComboBoxOwner.getSelectedItem() == null)
  20.171 @@ -459,24 +436,6 @@
  20.172          fileCheckBox.setSelected(set);
  20.173      }
  20.174      
  20.175 -    public void actionPerformed(ActionEvent actionEvent) {
  20.176 -        Object source = actionEvent.getSource();
  20.177 -        if (source == addSourceButton) {
  20.178 -            HelpCtx help = new HelpCtx(
  20.179 -                    "org.netbeans.modules.tasklist.usertasks.AddTask"); // NOI18N
  20.180 -            
  20.181 -            Help h = (Help) Lookup.getDefault().lookup(Help.class);
  20.182 -            
  20.183 -            if (h != null) {
  20.184 -                h.showHelp(help);
  20.185 -                return;
  20.186 -            } else {
  20.187 -                // Did not work.
  20.188 -                Toolkit.getDefaultToolkit().beep();
  20.189 -            }
  20.190 -        }
  20.191 -    }
  20.192 -    
  20.193      /** This method is called from within the constructor to
  20.194       * initialize the form.
  20.195       * WARNING: Do NOT modify this code. The content of this method is
  20.196 @@ -508,43 +467,35 @@
  20.197          fileTextField = new javax.swing.JTextField();
  20.198          lineTextField = new javax.swing.JTextField();
  20.199          lineLabel = new javax.swing.JLabel();
  20.200 -        addSourceButton = new javax.swing.JButton();
  20.201          prioLabel = new javax.swing.JLabel();
  20.202          jLabel1 = new javax.swing.JLabel();
  20.203          jComboBoxOwner = new javax.swing.JComboBox();
  20.204 +        jLinkButtonAddToSource = new org.netbeans.modules.tasklist.usertasks.util.JLinkButton();
  20.205          jPanel3 = new javax.swing.JPanel();
  20.206 -        jPanel1 = new javax.swing.JPanel();
  20.207 -        jPanel4 = new javax.swing.JPanel();
  20.208 -        jRadioButtonComputeEffort = new javax.swing.JRadioButton();
  20.209 -        jRadioButtonEffort = new javax.swing.JRadioButton();
  20.210 -        jPanelEffort = new javax.swing.JPanel();
  20.211 -        jPanel5 = new javax.swing.JPanel();
  20.212 +        jLabelLastEdited = new javax.swing.JLabel();
  20.213 +        jScrollPane1 = new javax.swing.JScrollPane();
  20.214 +        jListWorkPeriods = new javax.swing.JList();
  20.215 +        jLabelCompleted = new javax.swing.JLabel();
  20.216 +        jLabelCreated = new javax.swing.JLabel();
  20.217 +        jCheckBoxCompute = new javax.swing.JCheckBox();
  20.218 +        jLabel8 = new javax.swing.JLabel();
  20.219 +        jLabel9 = new javax.swing.JLabel();
  20.220 +        durationPanelSpent = new org.netbeans.modules.tasklist.usertasks.DurationPanel();
  20.221 +        jLabel10 = new javax.swing.JLabel();
  20.222          jComboBoxProgress = new javax.swing.JComboBox();
  20.223 -        jRadioButtonComputeProgress = new javax.swing.JRadioButton();
  20.224 -        jRadioButtonProgress = new javax.swing.JRadioButton();
  20.225 -        jPanel6 = new javax.swing.JPanel();
  20.226 -        jPanel7 = new javax.swing.JPanel();
  20.227 -        jRadioButtonComputeSpent = new javax.swing.JRadioButton();
  20.228 -        jRadioButtonSpent = new javax.swing.JRadioButton();
  20.229 -        durationPanelSpent = new org.netbeans.modules.tasklist.usertasks.DurationPanel();
  20.230 -        jPanel9 = new javax.swing.JPanel();
  20.231 +        jLabel11 = new javax.swing.JLabel();
  20.232 +        jLabel6 = new javax.swing.JLabel();
  20.233 +        jLabel5 = new javax.swing.JLabel();
  20.234 +        jLabel2 = new javax.swing.JLabel();
  20.235 +        durationPanelEffort = new org.netbeans.modules.tasklist.usertasks.DurationPanel();
  20.236          jDateChooserDue = new com.toedter.calendar.JDateChooser();
  20.237          jDateChooserStart = new com.toedter.calendar.JDateChooser();
  20.238 +        jLabel7 = new javax.swing.JLabel();
  20.239          jLabel4 = new javax.swing.JLabel();
  20.240 -        jLabel7 = new javax.swing.JLabel();
  20.241 -        jPanel10 = new javax.swing.JPanel();
  20.242 -        jLabelCreated = new javax.swing.JLabel();
  20.243 -        jLabel5 = new javax.swing.JLabel();
  20.244 -        jLabelCompleted = new javax.swing.JLabel();
  20.245 -        jLabelLastEdited = new javax.swing.JLabel();
  20.246 -        jLabel2 = new javax.swing.JLabel();
  20.247 -        jLabel6 = new javax.swing.JLabel();
  20.248 -        jPanelDependencies = new javax.swing.JPanel();
  20.249 -        jPanel8 = new javax.swing.JPanel();
  20.250 -        jScrollPane1 = new javax.swing.JScrollPane();
  20.251 -        jListWorkPeriods = new javax.swing.JList();
  20.252          jLabel3 = new javax.swing.JLabel();
  20.253          jLabelSpentTimeToday = new javax.swing.JLabel();
  20.254 +        jLabel12 = new javax.swing.JLabel();
  20.255 +        jPanelDependencies = new javax.swing.JPanel();
  20.256  
  20.257          setPreferredSize(new java.awt.Dimension(400, 300));
  20.258          setLayout(new java.awt.BorderLayout());
  20.259 @@ -571,7 +522,9 @@
  20.260      gridBagConstraints.insets = new java.awt.Insets(11, 0, 0, 0);
  20.261      jPanelGeneral.add(categoryCombo, gridBagConstraints);
  20.262  
  20.263 +    detailsTextArea.setLineWrap(true);
  20.264      detailsTextArea.setRows(5);
  20.265 +    detailsTextArea.setWrapStyleWord(true);
  20.266      detailsScrollPane.setViewportView(detailsTextArea);
  20.267  
  20.268      gridBagConstraints = new java.awt.GridBagConstraints();
  20.269 @@ -586,7 +539,7 @@
  20.270      org.openide.awt.Mnemonics.setLocalizedText(addLabel, NbBundle.getMessage(EditTaskPanel.class, "AddTo")); // NOI18N(); // NOI18N
  20.271      gridBagConstraints = new java.awt.GridBagConstraints();
  20.272      gridBagConstraints.gridx = 0;
  20.273 -    gridBagConstraints.gridy = 6;
  20.274 +    gridBagConstraints.gridy = 7;
  20.275      gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
  20.276      gridBagConstraints.insets = new java.awt.Insets(11, 0, 0, 12);
  20.277      jPanelGeneral.add(addLabel, gridBagConstraints);
  20.278 @@ -597,7 +550,7 @@
  20.279      */
  20.280      gridBagConstraints = new java.awt.GridBagConstraints();
  20.281      gridBagConstraints.gridx = 1;
  20.282 -    gridBagConstraints.gridy = 6;
  20.283 +    gridBagConstraints.gridy = 7;
  20.284      gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
  20.285      gridBagConstraints.insets = new java.awt.Insets(11, 0, 0, 12);
  20.286      jPanelGeneral.add(beginningToggle, gridBagConstraints);
  20.287 @@ -619,7 +572,7 @@
  20.288      */
  20.289      gridBagConstraints = new java.awt.GridBagConstraints();
  20.290      gridBagConstraints.gridx = 1;
  20.291 -    gridBagConstraints.gridy = 7;
  20.292 +    gridBagConstraints.gridy = 8;
  20.293      gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
  20.294      gridBagConstraints.insets = new java.awt.Insets(0, 0, 0, 12);
  20.295      jPanelGeneral.add(endToggle, gridBagConstraints);
  20.296 @@ -716,19 +669,6 @@
  20.297      gridBagConstraints.insets = new java.awt.Insets(11, 0, 0, 12);
  20.298      jPanelGeneral.add(jPanel2, gridBagConstraints);
  20.299  
  20.300 -    /*
  20.301 -    org.openide.awt.Mnemonics.setLocalizedText(addSourceButton, NbBundle.getMessage(EditTaskPanel.class, "AddToSource")); // NOI18N(); // NOI18N
  20.302 -    */
  20.303 -    gridBagConstraints = new java.awt.GridBagConstraints();
  20.304 -    gridBagConstraints.gridx = 1;
  20.305 -    gridBagConstraints.gridy = 8;
  20.306 -    gridBagConstraints.gridwidth = 2;
  20.307 -    gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
  20.308 -    gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
  20.309 -    gridBagConstraints.weightx = 1.0;
  20.310 -    gridBagConstraints.insets = new java.awt.Insets(12, 0, 0, 0);
  20.311 -    jPanelGeneral.add(addSourceButton, gridBagConstraints);
  20.312 -
  20.313      prioLabel.setLabelFor(priorityComboBox);
  20.314      /*
  20.315      org.openide.awt.Mnemonics.setLocalizedText(prioLabel, NbBundle.getMessage(EditTaskPanel.class, "PriorityLabel")); // NOI18N); // NOI18N
  20.316 @@ -756,289 +696,202 @@
  20.317      gridBagConstraints.insets = new java.awt.Insets(11, 0, 0, 0);
  20.318      jPanelGeneral.add(jComboBoxOwner, gridBagConstraints);
  20.319  
  20.320 +    org.openide.awt.Mnemonics.setLocalizedText(jLinkButtonAddToSource, org.openide.util.NbBundle.getMessage(EditTaskPanel.class, "AddToSource")); // NOI18N
  20.321 +    jLinkButtonAddToSource.setHorizontalAlignment(javax.swing.SwingConstants.LEFT);
  20.322 +    jLinkButtonAddToSource.addActionListener(new java.awt.event.ActionListener() {
  20.323 +        public void actionPerformed(java.awt.event.ActionEvent evt) {
  20.324 +            jLinkButtonAddToSourceActionPerformed(evt);
  20.325 +        }
  20.326 +    });
  20.327 +    gridBagConstraints = new java.awt.GridBagConstraints();
  20.328 +    gridBagConstraints.gridx = 1;
  20.329 +    gridBagConstraints.gridy = 6;
  20.330 +    gridBagConstraints.gridwidth = 3;
  20.331 +    gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
  20.332 +    gridBagConstraints.insets = new java.awt.Insets(11, 0, 0, 0);
  20.333 +    jPanelGeneral.add(jLinkButtonAddToSource, gridBagConstraints);
  20.334 +
  20.335      jTabbedPane.addTab(org.openide.util.NbBundle.getMessage(EditTaskPanel.class, "General"), jPanelGeneral); // NOI18N
  20.336  
  20.337      jPanel3.setBorder(javax.swing.BorderFactory.createEmptyBorder(11, 11, 12, 12));
  20.338 -    jPanel3.setLayout(new java.awt.GridBagLayout());
  20.339 -    gridBagConstraints = new java.awt.GridBagConstraints();
  20.340 -    gridBagConstraints.gridx = 3;
  20.341 -    gridBagConstraints.gridy = 6;
  20.342 -    gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER;
  20.343 -    gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
  20.344 -    gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
  20.345 -    gridBagConstraints.weightx = 1.0;
  20.346 -    gridBagConstraints.weighty = 1.0;
  20.347 -    jPanel3.add(jPanel1, gridBagConstraints);
  20.348  
  20.349 -    jPanel4.setBorder(javax.swing.BorderFactory.createTitledBorder(org.openide.util.NbBundle.getMessage(EditTaskPanel.class, "Effort"))); // NOI18N
  20.350 -    jPanel4.setLayout(new java.awt.GridBagLayout());
  20.351 +    jScrollPane1.setViewportView(jListWorkPeriods);
  20.352  
  20.353 -    effortButtonGroup.add(jRadioButtonComputeEffort);
  20.354 -    jRadioButtonComputeEffort.setSelected(true);
  20.355 -    org.openide.awt.Mnemonics.setLocalizedText(jRadioButtonComputeEffort, org.openide.util.NbBundle.getMessage(EditTaskPanel.class, "ComputeEffortAutomatically")); // NOI18N
  20.356 -    gridBagConstraints = new java.awt.GridBagConstraints();
  20.357 -    gridBagConstraints.gridwidth = 2;
  20.358 -    gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
  20.359 -    jPanel4.add(jRadioButtonComputeEffort, gridBagConstraints);
  20.360 -
  20.361 -    effortButtonGroup.add(jRadioButtonEffort);
  20.362 -    org.openide.awt.Mnemonics.setLocalizedText(jRadioButtonEffort, org.openide.util.NbBundle.getMessage(EditTaskPanel.class, "UseThisValue")); // NOI18N
  20.363 -    jRadioButtonEffort.addItemListener(new java.awt.event.ItemListener() {
  20.364 -        public void itemStateChanged(java.awt.event.ItemEvent evt) {
  20.365 -            jRadioButtonEffortItemStateChanged(evt);
  20.366 +    jCheckBoxCompute.setSelected(true);
  20.367 +    org.openide.awt.Mnemonics.setLocalizedText(jCheckBoxCompute, org.openide.util.NbBundle.getMessage(EditTaskPanel.class, "ComputeAll")); // NOI18N
  20.368 +    jCheckBoxCompute.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 0, 0));
  20.369 +    jCheckBoxCompute.setMargin(new java.awt.Insets(0, 0, 0, 0));
  20.370 +    jCheckBoxCompute.addActionListener(new java.awt.event.ActionListener() {
  20.371 +        public void actionPerformed(java.awt.event.ActionEvent evt) {
  20.372 +            jCheckBoxComputeActionPerformed(evt);
  20.373          }
  20.374      });
  20.375 -    gridBagConstraints = new java.awt.GridBagConstraints();
  20.376 -    gridBagConstraints.gridx = 0;
  20.377 -    gridBagConstraints.gridy = 1;
  20.378 -    gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
  20.379 -    gridBagConstraints.insets = new java.awt.Insets(0, 0, 0, 12);
  20.380 -    jPanel4.add(jRadioButtonEffort, gridBagConstraints);
  20.381  
  20.382 -    jPanelEffort.setLayout(new java.awt.BorderLayout());
  20.383 -    gridBagConstraints = new java.awt.GridBagConstraints();
  20.384 -    gridBagConstraints.gridx = 1;
  20.385 -    gridBagConstraints.gridy = 1;
  20.386 -    gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
  20.387 -    gridBagConstraints.weightx = 1.0;
  20.388 -    jPanel4.add(jPanelEffort, gridBagConstraints);
  20.389 +    jLabel8.setLabelFor(jCheckBoxCompute);
  20.390 +    org.openide.awt.Mnemonics.setLocalizedText(jLabel8, "<html>Effort and spent time will be computed as a sum of the subtask values. Progress will be computed as a weighted sum of the subtask values.</html>");
  20.391  
  20.392 -    gridBagConstraints = new java.awt.GridBagConstraints();
  20.393 -    gridBagConstraints.gridx = 0;
  20.394 -    gridBagConstraints.gridy = 2;
  20.395 -    gridBagConstraints.gridwidth = 3;
  20.396 -    gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
  20.397 -    gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
  20.398 -    gridBagConstraints.insets = new java.awt.Insets(11, 0, 0, 12);
  20.399 -    jPanel3.add(jPanel4, gridBagConstraints);
  20.400 +    jLabel9.setLabelFor(durationPanelEffort);
  20.401 +    org.openide.awt.Mnemonics.setLocalizedText(jLabel9, org.openide.util.NbBundle.getMessage(EditTaskPanel.class, "Effort_")); // NOI18N
  20.402  
  20.403 -    jPanel5.setBorder(javax.swing.BorderFactory.createTitledBorder(org.openide.util.NbBundle.getMessage(EditTaskPanel.class, "Progress"))); // NOI18N
  20.404 -    jPanel5.setLayout(new java.awt.GridBagLayout());
  20.405 +    durationPanelSpent.setEnabled(false);
  20.406 +
  20.407 +    jLabel10.setLabelFor(durationPanelSpent);
  20.408 +    org.openide.awt.Mnemonics.setLocalizedText(jLabel10, org.openide.util.NbBundle.getMessage(EditTaskPanel.class, "SpentTime_")); // NOI18N
  20.409  
  20.410      jComboBoxProgress.setEditable(true);
  20.411 +    jComboBoxProgress.setEnabled(false);
  20.412      jComboBoxProgress.setInputVerifier(new PercentsInputVerifier());
  20.413 -    gridBagConstraints = new java.awt.GridBagConstraints();
  20.414 -    gridBagConstraints.gridx = 1;
  20.415 -    gridBagConstraints.gridy = 1;
  20.416 -    gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
  20.417 -    jPanel5.add(jComboBoxProgress, gridBagConstraints);
  20.418  
  20.419 -    buttonGroupProgress.add(jRadioButtonComputeProgress);
  20.420 -    jRadioButtonComputeProgress.setSelected(true);
  20.421 -    org.openide.awt.Mnemonics.setLocalizedText(jRadioButtonComputeProgress, org.openide.util.NbBundle.getMessage(EditTaskPanel.class, "ComputeProgressAutomatically")); // NOI18N
  20.422 -    gridBagConstraints = new java.awt.GridBagConstraints();
  20.423 -    gridBagConstraints.gridwidth = 2;
  20.424 -    gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
  20.425 -    jPanel5.add(jRadioButtonComputeProgress, gridBagConstraints);
  20.426 +    jLabel11.setLabelFor(jComboBoxProgress);
  20.427 +    org.openide.awt.Mnemonics.setLocalizedText(jLabel11, org.openide.util.NbBundle.getMessage(EditTaskPanel.class, "Progress_")); // NOI18N
  20.428  
  20.429 -    buttonGroupProgress.add(jRadioButtonProgress);
  20.430 -    org.openide.awt.Mnemonics.setLocalizedText(jRadioButtonProgress, org.openide.util.NbBundle.getMessage(EditTaskPanel.class, "UseThisValue")); // NOI18N
  20.431 -    jRadioButtonProgress.addItemListener(new java.awt.event.ItemListener() {
  20.432 -        public void itemStateChanged(java.awt.event.ItemEvent evt) {
  20.433 -            jRadioButtonProgressItemStateChanged(evt);
  20.434 -        }
  20.435 -    });
  20.436 -    gridBagConstraints = new java.awt.GridBagConstraints();
  20.437 -    gridBagConstraints.gridx = 0;
  20.438 -    gridBagConstraints.gridy = 1;
  20.439 -    gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
  20.440 -    gridBagConstraints.insets = new java.awt.Insets(0, 0, 0, 12);
  20.441 -    jPanel5.add(jRadioButtonProgress, gridBagConstraints);
  20.442 -
  20.443 -    jPanel6.setPreferredSize(new java.awt.Dimension(0, 0));
  20.444 -    gridBagConstraints = new java.awt.GridBagConstraints();
  20.445 -    gridBagConstraints.gridx = 2;
  20.446 -    gridBagConstraints.gridy = 2;
  20.447 -    gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
  20.448 -    gridBagConstraints.weightx = 1.0;
  20.449 -    gridBagConstraints.weighty = 1.0;
  20.450 -    jPanel5.add(jPanel6, gridBagConstraints);
  20.451 -
  20.452 -    gridBagConstraints = new java.awt.GridBagConstraints();
  20.453 -    gridBagConstraints.gridx = 0;
  20.454 -    gridBagConstraints.gridy = 3;
  20.455 -    gridBagConstraints.gridwidth = 3;
  20.456 -    gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
  20.457 -    gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
  20.458 -    gridBagConstraints.insets = new java.awt.Insets(11, 0, 0, 12);
  20.459 -    jPanel3.add(jPanel5, gridBagConstraints);
  20.460 -
  20.461 -    jPanel7.setBorder(javax.swing.BorderFactory.createTitledBorder("Spent time"));
  20.462 -    jPanel7.setLayout(new java.awt.GridBagLayout());
  20.463 -
  20.464 -    buttonGroupSpent.add(jRadioButtonComputeSpent);
  20.465 -    jRadioButtonComputeSpent.setSelected(true);
  20.466 -    org.openide.awt.Mnemonics.setLocalizedText(jRadioButtonComputeSpent, org.openide.util.NbBundle.getMessage(EditTaskPanel.class, "ComputeSpentTkme")); // NOI18N
  20.467 -    gridBagConstraints = new java.awt.GridBagConstraints();
  20.468 -    gridBagConstraints.gridwidth = 2;
  20.469 -    gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
  20.470 -    jPanel7.add(jRadioButtonComputeSpent, gridBagConstraints);
  20.471 -
  20.472 -    buttonGroupSpent.add(jRadioButtonSpent);
  20.473 -    org.openide.awt.Mnemonics.setLocalizedText(jRadioButtonSpent, org.openide.util.NbBundle.getMessage(EditTaskPanel.class, "UseThisValue")); // NOI18N
  20.474 -    jRadioButtonSpent.addItemListener(new java.awt.event.ItemListener() {
  20.475 -        public void itemStateChanged(java.awt.event.ItemEvent evt) {
  20.476 -            jRadioButtonSpentItemStateChanged(evt);
  20.477 -        }
  20.478 -    });
  20.479 -    gridBagConstraints = new java.awt.GridBagConstraints();
  20.480 -    gridBagConstraints.gridx = 0;
  20.481 -    gridBagConstraints.gridy = 1;
  20.482 -    gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
  20.483 -    gridBagConstraints.insets = new java.awt.Insets(0, 0, 0, 12);
  20.484 -    jPanel7.add(jRadioButtonSpent, gridBagConstraints);
  20.485 -
  20.486 -    durationPanelSpent.setEnabled(false);
  20.487 -    gridBagConstraints = new java.awt.GridBagConstraints();
  20.488 -    gridBagConstraints.gridx = 1;
  20.489 -    gridBagConstraints.gridy = 1;
  20.490 -    gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
  20.491 -    gridBagConstraints.weightx = 1.0;
  20.492 -    jPanel7.add(durationPanelSpent, gridBagConstraints);
  20.493 -
  20.494 -    gridBagConstraints = new java.awt.GridBagConstraints();
  20.495 -    gridBagConstraints.gridx = 0;
  20.496 -    gridBagConstraints.gridy = 4;
  20.497 -    gridBagConstraints.gridwidth = 3;
  20.498 -    gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
  20.499 -    gridBagConstraints.insets = new java.awt.Insets(11, 0, 0, 12);
  20.500 -    jPanel3.add(jPanel7, gridBagConstraints);
  20.501 -
  20.502 -    jPanel9.setLayout(new java.awt.GridBagLayout());
  20.503 -    gridBagConstraints = new java.awt.GridBagConstraints();
  20.504 -    gridBagConstraints.gridx = 1;
  20.505 -    gridBagConstraints.gridy = 1;
  20.506 -    gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
  20.507 -    gridBagConstraints.insets = new java.awt.Insets(11, 0, 0, 0);
  20.508 -    jPanel9.add(jDateChooserDue, gridBagConstraints);
  20.509 -    gridBagConstraints = new java.awt.GridBagConstraints();
  20.510 -    gridBagConstraints.gridx = 1;
  20.511 -    gridBagConstraints.gridy = 0;
  20.512 -    gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
  20.513 -    jPanel9.add(jDateChooserStart, gridBagConstraints);
  20.514 -
  20.515 -    org.openide.awt.Mnemonics.setLocalizedText(jLabel4, org.openide.util.NbBundle.getMessage(EditTaskPanel.class, "DueDateCb")); // NOI18N
  20.516 -    gridBagConstraints = new java.awt.GridBagConstraints();
  20.517 -    gridBagConstraints.gridx = 0;
  20.518 -    gridBagConstraints.gridy = 1;
  20.519 -    gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
  20.520 -    gridBagConstraints.insets = new java.awt.Insets(11, 0, 0, 12);
  20.521 -    jPanel9.add(jLabel4, gridBagConstraints);
  20.522 -
  20.523 -    org.openide.awt.Mnemonics.setLocalizedText(jLabel7, org.openide.util.NbBundle.getMessage(EditTaskPanel.class, "LBL_Start")); // NOI18N
  20.524 -    gridBagConstraints = new java.awt.GridBagConstraints();
  20.525 -    gridBagConstraints.gridx = 0;
  20.526 -    gridBagConstraints.gridy = 0;
  20.527 -    gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
  20.528 -    gridBagConstraints.insets = new java.awt.Insets(0, 0, 0, 12);
  20.529 -    jPanel9.add(jLabel7, gridBagConstraints);
  20.530 -
  20.531 -    gridBagConstraints = new java.awt.GridBagConstraints();
  20.532 -    gridBagConstraints.gridx = 0;
  20.533 -    gridBagConstraints.gridy = 0;
  20.534 -    gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
  20.535 -    jPanel3.add(jPanel9, gridBagConstraints);
  20.536 -
  20.537 -    jPanel10.setLayout(new java.awt.GridBagLayout());
  20.538 -    gridBagConstraints = new java.awt.GridBagConstraints();
  20.539 -    gridBagConstraints.gridx = 1;
  20.540 -    gridBagConstraints.gridy = 6;
  20.541 -    gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
  20.542 -    gridBagConstraints.insets = new java.awt.Insets(11, 0, 0, 12);
  20.543 -    jPanel10.add(jLabelCreated, gridBagConstraints);
  20.544 +    org.openide.awt.Mnemonics.setLocalizedText(jLabel6, org.openide.util.NbBundle.getMessage(EditTaskPanel.class, "LastEditedLabel")); // NOI18N); // NOI18N
  20.545  
  20.546      org.openide.awt.Mnemonics.setLocalizedText(jLabel5, org.openide.util.NbBundle.getMessage(EditTaskPanel.class, "CreatedLabel")); // NOI18N); // NOI18N
  20.547 -    gridBagConstraints = new java.awt.GridBagConstraints();
  20.548 -    gridBagConstraints.gridx = 0;
  20.549 -    gridBagConstraints.gridy = 6;
  20.550 -    gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
  20.551 -    gridBagConstraints.insets = new java.awt.Insets(11, 0, 0, 12);
  20.552 -    jPanel10.add(jLabel5, gridBagConstraints);
  20.553 -    gridBagConstraints = new java.awt.GridBagConstraints();
  20.554 -    gridBagConstraints.gridx = 1;
  20.555 -    gridBagConstraints.gridy = 7;
  20.556 -    gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
  20.557 -    gridBagConstraints.insets = new java.awt.Insets(11, 0, 0, 12);
  20.558 -    jPanel10.add(jLabelCompleted, gridBagConstraints);
  20.559 -    gridBagConstraints = new java.awt.GridBagConstraints();
  20.560 -    gridBagConstraints.gridx = 1;
  20.561 -    gridBagConstraints.gridy = 5;
  20.562 -    gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
  20.563 -    gridBagConstraints.insets = new java.awt.Insets(11, 0, 0, 12);
  20.564 -    jPanel10.add(jLabelLastEdited, gridBagConstraints);
  20.565  
  20.566      org.openide.awt.Mnemonics.setLocalizedText(jLabel2, org.openide.util.NbBundle.getBundle(EditTaskPanel.class).getString("Completed")); // NOI18N
  20.567 -    gridBagConstraints = new java.awt.GridBagConstraints();
  20.568 -    gridBagConstraints.gridx = 0;
  20.569 -    gridBagConstraints.gridy = 7;
  20.570 -    gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
  20.571 -    gridBagConstraints.insets = new java.awt.Insets(11, 0, 0, 12);
  20.572 -    jPanel10.add(jLabel2, gridBagConstraints);
  20.573  
  20.574 -    org.openide.awt.Mnemonics.setLocalizedText(jLabel6, org.openide.util.NbBundle.getMessage(EditTaskPanel.class, "LastEditedLabel")); // NOI18N); // NOI18N
  20.575 -    gridBagConstraints = new java.awt.GridBagConstraints();
  20.576 -    gridBagConstraints.gridx = 0;
  20.577 -    gridBagConstraints.gridy = 5;
  20.578 -    gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
  20.579 -    gridBagConstraints.insets = new java.awt.Insets(11, 0, 0, 12);
  20.580 -    jPanel10.add(jLabel6, gridBagConstraints);
  20.581 +    durationPanelEffort.setEnabled(false);
  20.582  
  20.583 -    gridBagConstraints = new java.awt.GridBagConstraints();
  20.584 -    gridBagConstraints.gridx = 0;
  20.585 -    gridBagConstraints.gridy = 5;
  20.586 -    gridBagConstraints.gridwidth = 3;
  20.587 -    gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
  20.588 -    jPanel3.add(jPanel10, gridBagConstraints);
  20.589 +    jLabel7.setLabelFor(jDateChooserStart);
  20.590 +    org.openide.awt.Mnemonics.setLocalizedText(jLabel7, org.openide.util.NbBundle.getMessage(EditTaskPanel.class, "LBL_Start")); // NOI18N
  20.591 +
  20.592 +    jLabel4.setLabelFor(jDateChooserDue);
  20.593 +    org.openide.awt.Mnemonics.setLocalizedText(jLabel4, org.openide.util.NbBundle.getMessage(EditTaskPanel.class, "DueDateCb")); // NOI18N
  20.594 +
  20.595 +    jLabel3.setText(org.openide.util.NbBundle.getBundle(EditTaskPanel.class).getString("SpentTimeToday")); // NOI18N
  20.596 +
  20.597 +    jLabel12.setLabelFor(jListWorkPeriods);
  20.598 +    org.openide.awt.Mnemonics.setLocalizedText(jLabel12, org.openide.util.NbBundle.getMessage(EditTaskPanel.class, "HistoryOfSpentTimes")); // NOI18N
  20.599 +
  20.600 +    org.jdesktop.layout.GroupLayout jPanel3Layout = new org.jdesktop.layout.GroupLayout(jPanel3);
  20.601 +    jPanel3.setLayout(jPanel3Layout);
  20.602 +    jPanel3Layout.setHorizontalGroup(
  20.603 +        jPanel3Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
  20.604 +        .add(jPanel3Layout.createSequentialGroup()
  20.605 +            .add(jPanel3Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
  20.606 +                .add(jLabel6)
  20.607 +                .add(jLabel5)
  20.608 +                .add(jLabel2))
  20.609 +            .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
  20.610 +            .add(jPanel3Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
  20.611 +                .add(jLabelLastEdited)
  20.612 +                .add(jLabelCompleted)
  20.613 +                .add(jLabelCreated))
  20.614 +            .addContainerGap(521, Short.MAX_VALUE))
  20.615 +        .add(jLabel8, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 599, Short.MAX_VALUE)
  20.616 +        .add(jPanel3Layout.createSequentialGroup()
  20.617 +            .add(jLabel12)
  20.618 +            .addContainerGap(453, Short.MAX_VALUE))
  20.619 +        .add(jPanel3Layout.createSequentialGroup()
  20.620 +            .add(jLabel3)
  20.621 +            .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
  20.622 +            .add(jLabelSpentTimeToday)
  20.623 +            .addContainerGap(484, Short.MAX_VALUE))
  20.624 +        .add(jPanel3Layout.createSequentialGroup()
  20.625 +            .add(jCheckBoxCompute)
  20.626 +            .addContainerGap(234, Short.MAX_VALUE))
  20.627 +        .add(jPanel3Layout.createSequentialGroup()
  20.628 +            .addContainerGap()
  20.629 +            .add(jPanel3Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
  20.630 +                .add(jLabel10)
  20.631 +                .add(jLabel11)
  20.632 +                .add(jLabel9))
  20.633 +            .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
  20.634 +            .add(jPanel3Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
  20.635 +                .add(durationPanelEffort, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
  20.636 +                .add(jComboBoxProgress, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
  20.637 +                .add(durationPanelSpent, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
  20.638 +            .add(350, 350, 350))
  20.639 +        .add(jPanel3Layout.createSequentialGroup()
  20.640 +            .add(jPanel3Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
  20.641 +                .add(jLabel7)
  20.642 +                .add(jLabel4))
  20.643 +            .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
  20.644 +            .add(jPanel3Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING, false)
  20.645 +                .add(jDateChooserDue, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
  20.646 +                .add(jDateChooserStart, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 148, Short.MAX_VALUE))
  20.647 +            .addContainerGap(407, Short.MAX_VALUE))
  20.648 +        .add(jScrollPane1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 599, Short.MAX_VALUE)
  20.649 +    );
  20.650 +    jPanel3Layout.setVerticalGroup(
  20.651 +        jPanel3Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
  20.652 +        .add(jPanel3Layout.createSequentialGroup()
  20.653 +            .addContainerGap()
  20.654 +            .add(jPanel3Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING)
  20.655 +                .add(jLabel7)
  20.656 +                .add(jDateChooserStart, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
  20.657 +            .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
  20.658 +            .add(jPanel3Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING)
  20.659 +                .add(jLabel4)
  20.660 +                .add(jDateChooserDue, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
  20.661 +            .add(12, 12, 12)
  20.662 +            .add(jCheckBoxCompute)
  20.663 +            .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
  20.664 +            .add(jLabel8, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 30, Short.MAX_VALUE)
  20.665 +            .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
  20.666 +            .add(jPanel3Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
  20.667 +                .add(jLabel9)
  20.668 +                .add(durationPanelEffort, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
  20.669 +            .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
  20.670 +            .add(jPanel3Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
  20.671 +                .add(jLabel11)
  20.672 +                .add(jComboBoxProgress, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
  20.673 +            .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
  20.674 +            .add(jPanel3Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
  20.675 +                .add(jLabel10)
  20.676 +                .add(durationPanelSpent, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
  20.677 +            .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
  20.678 +            .add(jPanel3Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
  20.679 +                .add(jLabel6)
  20.680 +                .add(jLabelLastEdited, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 15, Short.MAX_VALUE))
  20.681 +            .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
  20.682 +            .add(jPanel3Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
  20.683 +                .add(jLabel5)
  20.684 +                .add(jLabelCreated, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 15, Short.MAX_VALUE))
  20.685 +            .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
  20.686 +            .add(jPanel3Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
  20.687 +                .add(jLabel2)
  20.688 +                .add(jLabelCompleted, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 15, Short.MAX_VALUE))
  20.689 +            .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
  20.690 +            .add(jPanel3Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
  20.691 +                .add(jLabel3)
  20.692 +                .add(jLabelSpentTimeToday))
  20.693 +            .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
  20.694 +            .add(jLabel12)
  20.695 +            .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
  20.696 +            .add(jScrollPane1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 341, Short.MAX_VALUE))
  20.697 +    );
  20.698  
  20.699      jTabbedPane.addTab(org.openide.util.NbBundle.getMessage(EditTaskPanel.class, "TimeRelated"), jPanel3); // NOI18N
  20.700  
  20.701      jPanelDependencies.setLayout(new java.awt.BorderLayout());
  20.702      jTabbedPane.addTab(org.openide.util.NbBundle.getBundle(EditTaskPanel.class).getString("LBL_DependenciesTab"), jPanelDependencies); // NOI18N
  20.703  
  20.704 -    jPanel8.setLayout(new java.awt.GridBagLayout());
  20.705 -
  20.706 -    jScrollPane1.setViewportView(jListWorkPeriods);
  20.707 -
  20.708 -    gridBagConstraints = new java.awt.GridBagConstraints();
  20.709 -    gridBagConstraints.gridwidth = 2;
  20.710 -    gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
  20.711 -    gridBagConstraints.weightx = 1.0;
  20.712 -    gridBagConstraints.weighty = 1.0;
  20.713 -    gridBagConstraints.insets = new java.awt.Insets(11, 11, 0, 12);
  20.714 -    jPanel8.add(jScrollPane1, gridBagConstraints);
  20.715 -
  20.716 -    jLabel3.setText(org.openide.util.NbBundle.getBundle(EditTaskPanel.class).getString("SpentTimeToday")); // NOI18N
  20.717 -    gridBagConstraints = new java.awt.GridBagConstraints();
  20.718 -    gridBagConstraints.gridx = 0;
  20.719 -    gridBagConstraints.gridy = 1;
  20.720 -    gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
  20.721 -    gridBagConstraints.insets = new java.awt.Insets(11, 11, 12, 11);
  20.722 -    jPanel8.add(jLabel3, gridBagConstraints);
  20.723 -
  20.724 -    org.openide.awt.Mnemonics.setLocalizedText(jLabelSpentTimeToday, "\"\"");
  20.725 -    gridBagConstraints = new java.awt.GridBagConstraints();
  20.726 -    gridBagConstraints.gridx = 1;
  20.727 -    gridBagConstraints.gridy = 1;
  20.728 -    gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
  20.729 -    gridBagConstraints.insets = new java.awt.Insets(11, 0, 12, 12);
  20.730 -    jPanel8.add(jLabelSpentTimeToday, gridBagConstraints);
  20.731 -
  20.732 -    jTabbedPane.addTab(org.openide.util.NbBundle.getBundle(EditTaskPanel.class).getString("WordPeriods"), jPanel8); // NOI18N
  20.733 -
  20.734      add(jTabbedPane, java.awt.BorderLayout.CENTER);
  20.735      }// </editor-fold>//GEN-END:initComponents
  20.736  
  20.737 -    private void jRadioButtonSpentItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_jRadioButtonSpentItemStateChanged
  20.738 -        durationPanelSpent.setEnabled(jRadioButtonSpent.isSelected());
  20.739 -    }//GEN-LAST:event_jRadioButtonSpentItemStateChanged
  20.740 +    private void jCheckBoxComputeActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jCheckBoxComputeActionPerformed
  20.741 +        boolean b = jCheckBoxCompute.isSelected();
  20.742 +        durationPanelEffort.setEnabled(!b);
  20.743 +        jComboBoxProgress.setEnabled(!b);
  20.744 +        durationPanelSpent.setEnabled(!b);
  20.745 +    }//GEN-LAST:event_jCheckBoxComputeActionPerformed
  20.746  
  20.747 -    private void jRadioButtonProgressItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_jRadioButtonProgressItemStateChanged
  20.748 -        jComboBoxProgress.setEnabled(jRadioButtonProgress.isSelected());
  20.749 -    }//GEN-LAST:event_jRadioButtonProgressItemStateChanged
  20.750 +    private void jLinkButtonAddToSourceActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jLinkButtonAddToSourceActionPerformed
  20.751 +        HelpCtx help = new HelpCtx(
  20.752 +                "org.netbeans.modules.tasklist.usertasks.AddTask"); // NOI18N
  20.753  
  20.754 -    private void jRadioButtonEffortItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_jRadioButtonEffortItemStateChanged
  20.755 -        durationPanel.setEnabled(jRadioButtonEffort.isSelected());
  20.756 -    }//GEN-LAST:event_jRadioButtonEffortItemStateChanged
  20.757 +        Help h = (Help) Lookup.getDefault().lookup(Help.class);
  20.758 +
  20.759 +        if (h != null) {
  20.760 +            h.showHelp(help);
  20.761 +            return;
  20.762 +        } else {
  20.763 +            // Did not work.
  20.764 +            Toolkit.getDefaultToolkit().beep();
  20.765 +        }
  20.766 +    }//GEN-LAST:event_jLinkButtonAddToSourceActionPerformed
  20.767  
  20.768      private void priorityComboBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_priorityComboBoxActionPerformed
  20.769          // I don't know why JComboBox does not use my renderer to draw 
  20.770 @@ -1077,7 +930,7 @@
  20.771                         EditTaskPanel.class, "BeginningList")); // NOI18N
  20.772          Mnemonics.setLocalizedText(endToggle, NbBundle.getMessage(
  20.773                   EditTaskPanel.class, "EndList")); // NOI18N
  20.774 -        Mnemonics.setLocalizedText(addSourceButton, NbBundle.getMessage(
  20.775 +        Mnemonics.setLocalizedText(jLinkButtonAddToSource, NbBundle.getMessage(
  20.776                         EditTaskPanel.class, "AddToSource")); // NOI18N
  20.777  
  20.778          this.getAccessibleContext().setAccessibleDescription(
  20.779 @@ -1110,7 +963,7 @@
  20.780                  NbBundle.getMessage(EditTaskPanel.class, "ACSD_Beginning")); // NOI18N
  20.781          endToggle.getAccessibleContext().setAccessibleDescription(
  20.782                  NbBundle.getMessage(EditTaskPanel.class, "ACSD_End")); // NOI18N
  20.783 -        addSourceButton.getAccessibleContext().setAccessibleDescription(
  20.784 +        jLinkButtonAddToSource.getAccessibleContext().setAccessibleDescription(
  20.785                  NbBundle.getMessage(EditTaskPanel.class, "ACSD_AddSource")); // NOI18N
  20.786  
  20.787          // Gotta set accessible name - no more that I've set label for?
  20.788 @@ -1127,7 +980,6 @@
  20.789      // Variables declaration - do not modify//GEN-BEGIN:variables
  20.790      private javax.swing.ButtonGroup addButtonGroup;
  20.791      private javax.swing.JLabel addLabel;
  20.792 -    private javax.swing.JButton addSourceButton;
  20.793      private javax.swing.JRadioButton beginningToggle;
  20.794      private javax.swing.ButtonGroup buttonGroupProgress;
  20.795      private javax.swing.ButtonGroup buttonGroupSpent;
  20.796 @@ -1138,46 +990,39 @@
  20.797      private javax.swing.JLabel detailsLabel;
  20.798      private javax.swing.JScrollPane detailsScrollPane;
  20.799      private javax.swing.JTextArea detailsTextArea;
  20.800 +    private org.netbeans.modules.tasklist.usertasks.DurationPanel durationPanelEffort;
  20.801      private org.netbeans.modules.tasklist.usertasks.DurationPanel durationPanelSpent;
  20.802      private javax.swing.ButtonGroup effortButtonGroup;
  20.803      private javax.swing.JRadioButton endToggle;
  20.804      private javax.swing.JCheckBox fileCheckBox;
  20.805      private javax.swing.JTextField fileTextField;
  20.806 +    private javax.swing.JCheckBox jCheckBoxCompute;
  20.807      private javax.swing.JComboBox jComboBoxOwner;
  20.808      private javax.swing.JComboBox jComboBoxProgress;
  20.809      private com.toedter.calendar.JDateChooser jDateChooserDue;
  20.810      private com.toedter.calendar.JDateChooser jDateChooserStart;
  20.811      private javax.swing.JLabel jLabel1;
  20.812 +    private javax.swing.JLabel jLabel10;
  20.813 +    private javax.swing.JLabel jLabel11;
  20.814 +    private javax.swing.JLabel jLabel12;
  20.815      private javax.swing.JLabel jLabel2;
  20.816      private javax.swing.JLabel jLabel3;
  20.817      private javax.swing.JLabel jLabel4;
  20.818      private javax.swing.JLabel jLabel5;
  20.819      private javax.swing.JLabel jLabel6;
  20.820      private javax.swing.JLabel jLabel7;
  20.821 +    private javax.swing.JLabel jLabel8;
  20.822 +    private javax.swing.JLabel jLabel9;
  20.823      private javax.swing.JLabel jLabelCompleted;
  20.824      private javax.swing.JLabel jLabelCreated;
  20.825      private javax.swing.JLabel jLabelLastEdited;
  20.826      private javax.swing.JLabel jLabelSpentTimeToday;
  20.827 +    private org.netbeans.modules.tasklist.usertasks.util.JLinkButton jLinkButtonAddToSource;
  20.828      private javax.swing.JList jListWorkPeriods;
  20.829 -    private javax.swing.JPanel jPanel1;
  20.830 -    private javax.swing.JPanel jPanel10;
  20.831      private javax.swing.JPanel jPanel2;
  20.832      private javax.swing.JPanel jPanel3;
  20.833 -    private javax.swing.JPanel jPanel4;
  20.834 -    private javax.swing.JPanel jPanel5;
  20.835 -    private javax.swing.JPanel jPanel6;
  20.836 -    private javax.swing.JPanel jPanel7;
  20.837 -    private javax.swing.JPanel jPanel8;
  20.838 -    private javax.swing.JPanel jPanel9;
  20.839      private javax.swing.JPanel jPanelDependencies;
  20.840 -    private javax.swing.JPanel jPanelEffort;
  20.841      private javax.swing.JPanel jPanelGeneral;
  20.842 -    private javax.swing.JRadioButton jRadioButtonComputeEffort;
  20.843 -    private javax.swing.JRadioButton jRadioButtonComputeProgress;
  20.844 -    private javax.swing.JRadioButton jRadioButtonComputeSpent;
  20.845 -    private javax.swing.JRadioButton jRadioButtonEffort;
  20.846 -    private javax.swing.JRadioButton jRadioButtonProgress;
  20.847 -    private javax.swing.JRadioButton jRadioButtonSpent;
  20.848      private javax.swing.JScrollPane jScrollPane1;
  20.849      private javax.swing.JTabbedPane jTabbedPane;
  20.850      private javax.swing.JLabel lineLabel;
    21.1 --- a/tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/TaskListDataObject.java	Mon Dec 04 21:57:00 2006 +0000
    21.2 +++ b/tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/TaskListDataObject.java	Mon Dec 04 21:59:57 2006 +0000
    21.3 @@ -38,6 +38,7 @@
    21.4   *
    21.5   * @author Tor Norbye
    21.6   * @author Trond Norbye
    21.7 + * @author tl
    21.8   */
    21.9  public class TaskListDataObject extends MultiDataObject implements OpenCookie {
   21.10  
   21.11 @@ -78,16 +79,8 @@
   21.12                  findView(getPrimaryEntry().getFile());
   21.13          if (view == null) {
   21.14              FileObject fo = getPrimaryEntry().getFile();
   21.15 -            try {
   21.16 -                UserTaskList tl = UserTaskList.readDocument(fo);
   21.17 -                view = new UserTaskView(tl, false);
   21.18 -                view.showInMode();
   21.19 -            } catch (IOException e) {
   21.20 -                NotifyDescriptor nd = new NotifyDescriptor.Message(
   21.21 -                        NbBundle.getMessage(TaskListDataObject.class, 
   21.22 -                        "ErrorReadingFile", e.getMessage())); // NOI18N
   21.23 -                DialogDisplayer.getDefault().notify(nd);
   21.24 -            }
   21.25 +            view = new UserTaskView(fo, false);
   21.26 +            view.showInMode();
   21.27          } else {
   21.28              // This view already exists, show it...
   21.29              view.showInMode();
    22.1 --- a/tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/UserTaskNode.java	Mon Dec 04 21:57:00 2006 +0000
    22.2 +++ b/tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/UserTaskNode.java	Mon Dec 04 21:59:57 2006 +0000
    22.3 @@ -113,18 +113,23 @@
    22.4          item.addPropertyChangeListener(new PropertyChangeListener() {
    22.5              public void propertyChange(PropertyChangeEvent e) {
    22.6                  String n = e.getPropertyName();
    22.7 -                if (n == "progress") { // NOI18N
    22.8 +                if (n == UserTask.PROP_PROGRESS) { // NOI18N
    22.9                      int old = Math.round(((Float) e.getOldValue()).floatValue());
   22.10                      int new_ = Math.round(((Float) e.getNewValue()).floatValue());
   22.11                      UserTaskNode.this.firePropertyChange(
   22.12 -                        "percentComplete", new Integer(old), new Integer(new_)); // NOI18N
   22.13 -                } else if (n == "line" || n == "started") { // NOI18N
   22.14 +                        "percentComplete", // NOI18N
   22.15 +                        new Integer(old), new Integer(new_));
   22.16 +                } else if (n == UserTask.PROP_LINE || 
   22.17 +                        n == "started") { // NOI18N 
   22.18                      // nothing
   22.19 +                    // TODO: strange property "started"??
   22.20                  } else {
   22.21                      UserTaskNode.this.firePropertyChange(e.getPropertyName(),
   22.22                          e.getOldValue(), e.getNewValue());
   22.23                  }
   22.24 -                if (n == "started" || n == "spentTimeComputed" || n == "line") { // NOI18N
   22.25 +                if (n == "started" || // NOI18N
   22.26 +                        n == UserTask.PROP_VALUES_COMPUTED || 
   22.27 +                        n == UserTask.PROP_LINE) { // NOI18N
   22.28                      fireCookieChange();
   22.29                  }
   22.30              }
   22.31 @@ -144,7 +149,7 @@
   22.32                  SwingUtilities.getAncestorOfClass(UserTaskView.class, tt);
   22.33          if (empty) {
   22.34              return new Action[] {
   22.35 -                SystemAction.get(NewTaskAction.class),
   22.36 +                // TODO: SystemAction.get(NewTaskAction.class),
   22.37                  null,
   22.38                  PauseAction.getInstance(),
   22.39                  null,
   22.40 @@ -162,7 +167,7 @@
   22.41              };
   22.42          } else {
   22.43              return new Action[] {
   22.44 -                SystemAction.get(NewTaskAction.class),
   22.45 +                // TODO: SystemAction.get(NewTaskAction.class),
   22.46                  //SystemAction.get(ShowScheduleViewAction.class),
   22.47                  null,
   22.48                  new StartTaskAction(utv),
   22.49 @@ -237,10 +242,10 @@
   22.50              ss.put(p);
   22.51              
   22.52              p = new PropertySupport.Reflection(item, Boolean.TYPE, 
   22.53 -                "isProgressComputed", "setProgressComputed"); // NOI18N
   22.54 -            p.setName("progressComputed"); // NOI18N
   22.55 -            p.setDisplayName(org.openide.util.NbBundle.getMessage(UserTaskNode.class, "LBL_computeProgress")); // NOI18N
   22.56 -            p.setShortDescription(org.openide.util.NbBundle.getMessage(UserTaskNode.class, "HNT_progressComputed")); // NOI18N
   22.57 +                "isValuesComputed", "setValuesComputed"); // NOI18N
   22.58 +            p.setName("valuesComputed"); // NOI18N
   22.59 +            p.setDisplayName(org.openide.util.NbBundle.getMessage(UserTaskNode.class, "LBL_valuesComputed")); // NOI18N
   22.60 +            p.setShortDescription(org.openide.util.NbBundle.getMessage(UserTaskNode.class, "HNT_valuesComputed")); // NOI18N
   22.61              ss.put(p);
   22.62              
   22.63              p = new PropertySupport.Reflection(item, Integer.TYPE, "getEffort", "setEffort"); // NOI18N
   22.64 @@ -250,13 +255,6 @@
   22.65              p.setPropertyEditorClass(DurationPropertyEditor.class);
   22.66              ss.put(p);
   22.67  
   22.68 -            p = new PropertySupport.Reflection(item, Boolean.TYPE, 
   22.69 -                "isEffortComputed", "setEffortComputed"); // NOI18N
   22.70 -            p.setName("effortComputed"); // NOI18N
   22.71 -            p.setDisplayName(org.openide.util.NbBundle.getMessage(UserTaskNode.class, "LBL_computeEffort")); // NOI18N
   22.72 -            p.setShortDescription(org.openide.util.NbBundle.getMessage(UserTaskNode.class, "HNT_effortComputed")); // NOI18N
   22.73 -            ss.put(p);
   22.74 -            
   22.75              p = new PropertySupport.Reflection(item, Integer.TYPE, "getRemainingEffort", null); // NOI18N
   22.76              p.setName("remainingEffort"); // NOI18N
   22.77              p.setValue("canEditAsText", Boolean.FALSE); // NOI18N
   22.78 @@ -273,13 +271,6 @@
   22.79              p.setPropertyEditorClass(DurationPropertyEditor.class);
   22.80              ss.put(p);
   22.81  
   22.82 -            p = new PropertySupport.Reflection(item, Boolean.TYPE, 
   22.83 -                "isSpentTimeComputed", "setSpentTimeComputed"); // NOI18N
   22.84 -            p.setName("spentTimeComputed"); // NOI18N
   22.85 -            p.setDisplayName(org.openide.util.NbBundle.getMessage(UserTaskNode.class, "LBL_spentTimeComputed")); // NOI18N
   22.86 -            p.setShortDescription(org.openide.util.NbBundle.getMessage(UserTaskNode.class, "HNT_spentTimeComputed")); // NOI18N
   22.87 -            ss.put(p);
   22.88 -            
   22.89              p = new PropertySupport.Reflection(item, Integer.TYPE, "getSpentTimeToday", null); // NOI18N
   22.90              p.setName("spentTimeToday"); // NOI18N
   22.91              p.setDisplayName(NbBundle.getMessage(UserTaskNode.class, "LBL_spentTimeTodayProperty")); // NOI18N
    23.1 --- a/tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/UserTaskView.java	Mon Dec 04 21:57:00 2006 +0000
    23.2 +++ b/tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/UserTaskView.java	Mon Dec 04 21:59:57 2006 +0000
    23.3 @@ -27,9 +27,13 @@
    23.4  import java.awt.event.MouseEvent;
    23.5  import java.beans.PropertyChangeEvent;
    23.6  import java.beans.PropertyChangeListener;
    23.7 +import java.io.File;
    23.8 +import java.io.FileOutputStream;
    23.9  import java.io.IOException;
   23.10 +import java.io.InputStream;
   23.11  import java.io.ObjectInput;
   23.12  import java.io.ObjectOutput;
   23.13 +import java.io.OutputStream;
   23.14  import java.io.Serializable;
   23.15  import java.net.URL;
   23.16  import java.util.HashMap;
   23.17 @@ -40,13 +44,13 @@
   23.18  import javax.swing.ActionMap;
   23.19  import javax.swing.JComponent;
   23.20  import javax.swing.JPanel;
   23.21 -import javax.swing.JPopupMenu;
   23.22  import javax.swing.JScrollPane;
   23.23  import javax.swing.JToolBar;
   23.24  import javax.swing.KeyStroke;
   23.25  import javax.swing.SwingUtilities;
   23.26  import javax.swing.border.EmptyBorder;
   23.27  import javax.swing.tree.TreePath;
   23.28 +import net.fortuna.ical4j.data.ParserException;
   23.29  import org.netbeans.modules.tasklist.core.export.ExportImportFormat;
   23.30  import org.netbeans.modules.tasklist.core.export.ExportImportProvider;
   23.31  import org.netbeans.modules.tasklist.core.filter.Filter;
   23.32 @@ -78,12 +82,12 @@
   23.33  import org.netbeans.modules.tasklist.usertasks.translators.XmlExportFormat;
   23.34  import org.netbeans.modules.tasklist.core.table.ChooseColumnsPanel;
   23.35  import org.netbeans.modules.tasklist.usertasks.treetable.TreeTableModel;
   23.36 +import org.netbeans.modules.tasklist.usertasks.util.AWTThreadAnnotation;
   23.37  import org.netbeans.modules.tasklist.usertasks.util.UTUtils;
   23.38  import org.openide.actions.FindAction;
   23.39 +import org.openide.actions.SaveAction;
   23.40  import org.openide.awt.MouseUtils;
   23.41  import org.openide.cookies.InstanceCookie;
   23.42 -import org.openide.explorer.ExplorerManager;
   23.43 -import org.openide.explorer.ExplorerUtils;
   23.44  import org.openide.filesystems.FileChangeListener;
   23.45  import org.openide.filesystems.FileEvent;
   23.46  import org.openide.filesystems.FileObject;
   23.47 @@ -97,14 +101,16 @@
   23.48  import org.openide.util.NbBundle;
   23.49  import org.openide.util.Utilities;
   23.50  import org.openide.util.actions.SystemAction;
   23.51 +import org.openide.util.lookup.Lookups;
   23.52  import org.openide.windows.Mode;
   23.53  import org.openide.windows.TopComponent;
   23.54  import org.openide.windows.WindowManager;
   23.55  import org.netbeans.modules.tasklist.usertasks.model.UserTask;
   23.56  import org.netbeans.modules.tasklist.usertasks.model.UserTaskList;
   23.57  import org.netbeans.modules.tasklist.usertasks.treetable.TreeTable;
   23.58 -import org.openide.nodes.Node;
   23.59 -import org.openide.util.Lookup;
   23.60 +import org.openide.DialogDisplayer;
   23.61 +import org.openide.NotifyDescriptor;
   23.62 +import org.openide.NotifyDescriptor.Message;
   23.63  
   23.64  /** 
   23.65   * View showing the user tasks.
   23.66 @@ -112,24 +118,24 @@
   23.67   * @author Tor Norbye
   23.68   * @author tl
   23.69   */
   23.70 -public class UserTaskView extends TopComponent implements
   23.71 -ExplorerManager.Provider, ExportImportProvider, FileChangeListener,
   23.72 -FilteredTopComponent {    
   23.73 +public class UserTaskView extends TopComponent implements ExportImportProvider, 
   23.74 +        FileChangeListener, FilteredTopComponent {    
   23.75      // List category
   23.76      private final static String USER_CATEGORY = "usertasks"; // NOI18N    
   23.77      
   23.78      private static final String DEFAULT_FILTER_NAME = 
   23.79 -        NbBundle.getMessage(UserTaskView.class, 
   23.80 -        "default-filter-name"); // NOI18N
   23.81 +            NbBundle.getMessage(UserTaskView.class, 
   23.82 +            "default-filter-name"); // NOI18N
   23.83  
   23.84      private static final long serialVersionUID = 1;
   23.85  
   23.86      private static final Image ICON = Utilities.loadImage(
   23.87          "org/netbeans/modules/tasklist/usertasks/actions/taskView.gif"); // NOI18N
   23.88      
   23.89 -    private static int nextViewId = 0;
   23.90 -    
   23.91      static {
   23.92 +        UTUtils.dumpClassLoaders(UserTaskView.class.getClassLoader());
   23.93 +        UTUtils.dumpClassLoaders(Thread.currentThread().getContextClassLoader());
   23.94 +        
   23.95          // repaint the view if the number of working hours per day has
   23.96          // changed (spent time, rem. effort and effort columns should be
   23.97          // repainted)
   23.98 @@ -156,13 +162,92 @@
   23.99          );
  23.100      }
  23.101      
  23.102 +    /**
  23.103 +     * Reads an ics file. Shows error messages if it cannot be read.
  23.104 +     *
  23.105 +     * @param fo an .ics file
  23.106 +     */
  23.107 +    @AWTThreadAnnotation
  23.108 +    private static UserTaskList readDocument(FileObject fo) throws IOException {
  23.109 +        if (!fo.isValid()) 
  23.110 +            throw new IOException(
  23.111 +                NbBundle.getMessage(UserTaskList.class,
  23.112 +                    "FileNotValid", FileUtil.getFileDisplayName(fo))); // NOI18N
  23.113 +        InputStream is = fo.getInputStream();
  23.114 +        UserTaskList ret = null;
  23.115 +        try {
  23.116 +            long m = System.currentTimeMillis();
  23.117 +            ICalImportFormat io = new ICalImportFormat();
  23.118 +
  23.119 +            ret = new UserTaskList();
  23.120 +            try {
  23.121 +                io.read(ret, is);
  23.122 +            } catch (ParserException e) {
  23.123 +                // NOTE the exception text should be localized!
  23.124 +                DialogDisplayer.getDefault().notify(new Message(e.getMessage(),
  23.125 +                   NotifyDescriptor.ERROR_MESSAGE));
  23.126 +                UTUtils.LOGGER.log(Level.SEVERE, "", e); // NOI18N
  23.127 +            } catch (IOException e) {
  23.128 +                // NOTE the exception text should be localized!
  23.129 +                DialogDisplayer.getDefault().notify(new Message(e.getMessage(),
  23.130 +                   NotifyDescriptor.ERROR_MESSAGE));
  23.131 +                UTUtils.LOGGER.log(Level.SEVERE, "", e); // NOI18N
  23.132 +            }
  23.133 +
  23.134 +            UTUtils.LOGGER.fine("File " + fo + " read in " + // NOI18N
  23.135 +                (System.currentTimeMillis() - m) + "ms"); // NOI18N
  23.136 +        } finally {
  23.137 +            try {
  23.138 +                is.close();
  23.139 +            } catch (IOException e) {
  23.140 +                UTUtils.LOGGER.log(Level.WARNING, 
  23.141 +                        "closing file failed", e); // NOI18N
  23.142 +            }
  23.143 +        }
  23.144 +        return ret;
  23.145 +    }
  23.146 +    
  23.147 +    /**
  23.148 +     * Returns the default task list file. Copies template file to the
  23.149 +     * default location if the file does not exist.
  23.150 +     *
  23.151 +     * @return default task list file
  23.152 +     */
  23.153 +    public static FileObject getDefaultFile() throws IOException {
  23.154 +        String name = Settings.getDefault().getExpandedFilename();
  23.155 +        File f = FileUtil.normalizeFile(new File(name));
  23.156 +       
  23.157 +        FileObject fo = FileUtil.toFileObject(f);
  23.158 +        if (fo == null) {
  23.159 +            File dir = f.getParentFile();
  23.160 +            if (!dir.exists() && !dir.mkdirs()) {
  23.161 +                throw new IOException(
  23.162 +                    NbBundle.getMessage(UserTaskList.class,
  23.163 +                        "CannotCreateDir", dir.getAbsolutePath())); // NOI18N
  23.164 +            }
  23.165 +            OutputStream os = new FileOutputStream(f);
  23.166 +            try {
  23.167 +                InputStream is = UserTaskList.class.getResourceAsStream(
  23.168 +                        "/org/netbeans/modules/tasklist/usertasks/tasklist.ics"); // NOI18N
  23.169 +                try {
  23.170 +                    UTUtils.copyStream(is, os);
  23.171 +                } finally {
  23.172 +                    is.close();
  23.173 +                }
  23.174 +            } finally {
  23.175 +                os.close();
  23.176 +            }
  23.177 +            fo = FileUtil.toFileObject(f);
  23.178 +        }
  23.179 +        return fo;
  23.180 +    }
  23.181 +    
  23.182      private UserTasksTreeTable tt;
  23.183      private JScrollPane scrollPane;
  23.184      private boolean initialized = false;
  23.185      private UserTaskList tasklist = null;
  23.186      private FilterRepository filters = null;
  23.187      private Filter activeFilter = null;
  23.188 -    private ExplorerManager manager;
  23.189      private boolean default_;
  23.190      
  23.191      /** View specific action for moving the selected task up. */
  23.192 @@ -177,6 +262,9 @@
  23.193      /** View specific action for moving the selected task left. */
  23.194      public MoveRightAction moveRightAction;
  23.195      
  23.196 +    private AutoSaver autoSaver;
  23.197 +    private FileObject file;
  23.198 +    
  23.199      /** 
  23.200       * Construct a new UserTaskView.  
  23.201       * NOTE: this is used by the window
  23.202 @@ -188,18 +276,24 @@
  23.203      /**
  23.204       * Constructor.
  23.205       *
  23.206 -     * @param title view title
  23.207 -     * @param category view's category. This value will be used as the name
  23.208 -     * for a subdirectory of "SystemFileSystem/TaskList/" for columns settings
  23.209 +     * @param fo .ics file
  23.210 +     * @param default_ true for the global "User Tasks" view
  23.211       */
  23.212 -    public UserTaskView(UserTaskList tasklist, boolean default_) {
  23.213 -        this.default_ = default_;
  23.214 -        setList(tasklist);
  23.215 -        
  23.216 -        init();
  23.217 +    @AWTThreadAnnotation
  23.218 +    public UserTaskView(FileObject fo, boolean default_) {
  23.219 +        init(fo, default_);
  23.220      }
  23.221  
  23.222      /**
  23.223 +     * Returns the AutoSaver object associated with this view.
  23.224 +     *
  23.225 +     * @return AutoSaver
  23.226 +     */
  23.227 +    public AutoSaver getAutoSaver() {
  23.228 +        return autoSaver;
  23.229 +    }
  23.230 +    
  23.231 +    /**
  23.232       * Returns the component representing the tasks.
  23.233       *
  23.234       * @return TreeTable
  23.235 @@ -215,7 +309,8 @@
  23.236       */
  23.237      public Action[] getToolBarActions() {
  23.238          return new Action[] {
  23.239 -            SystemAction.get(NewTaskAction.class),
  23.240 +            SystemAction.get(SaveAction.class),
  23.241 +            new NewTaskAction(this),
  23.242              new GoToUserTaskAction(this),
  23.243              null,
  23.244              SystemAction.get(FilterAction.class),
  23.245 @@ -296,7 +391,8 @@
  23.246       * @throws IOException
  23.247       * @throws ClassNotFoundException  
  23.248       */    
  23.249 -    public void readExternal(ObjectInput objectInput) throws IOException, java.lang.ClassNotFoundException {
  23.250 +    public void readExternal(ObjectInput objectInput) throws IOException, 
  23.251 +            java.lang.ClassNotFoundException {
  23.252          readExternalCore(objectInput);
  23.253          int ver = objectInput.read();
  23.254  
  23.255 @@ -306,11 +402,9 @@
  23.256  
  23.257              if (urlString != null) {
  23.258                  URL url = new URL(urlString);
  23.259 -                FileObject fo = URLMapper.findFileObject(url);
  23.260 -                if (fo != null) {
  23.261 -                    UserTaskList utl = UserTaskList.readDocument(fo);
  23.262 -                    setList(utl);
  23.263 -                    init();
  23.264 +                file = URLMapper.findFileObject(url);
  23.265 +                if (file != null) {
  23.266 +                    init(file, false);
  23.267                  } else {
  23.268                      Runnable r = new Runnable() {
  23.269                          public void run() {
  23.270 @@ -320,9 +414,7 @@
  23.271                      SwingUtilities.invokeLater(r);
  23.272                  }
  23.273              } else {
  23.274 -                default_ = true;
  23.275 -                setList(UserTaskList.getDefault());
  23.276 -                init();
  23.277 +                init(getDefaultFile(), true);
  23.278                  UserTaskViewRegistry.getInstance().setDefaultView(this);
  23.279              }
  23.280          }
  23.281 @@ -415,7 +507,7 @@
  23.282          objectOutput.write(4); // SERIAL VERSION
  23.283  
  23.284          // Write out the UID of the currently selected task, or null if none
  23.285 -        objectOutput.writeObject(null); // Not yet implemented
  23.286 +        objectOutput.writeObject(null); // Unused. Was never implemented
  23.287  
  23.288          // Here I should record a few things; in particular, sorting order, view
  23.289          // preferences, etc.
  23.290 @@ -423,12 +515,10 @@
  23.291          // byte so we can do the right thing later without corrupting the userdir
  23.292          objectOutput.write(6); // SERIAL VERSION
  23.293  
  23.294 -        UserTaskList tl = (UserTaskList)getUserTaskList();
  23.295 +        UserTaskList tl = getUserTaskList();
  23.296          if (!default_) {
  23.297 -            FileObject fo = tl.getFile();
  23.298 -        
  23.299              // Write out the name of the tasklist
  23.300 -            URL url = URLMapper.findURL(fo, URLMapper.EXTERNAL);
  23.301 +            URL url = URLMapper.findURL(file, URLMapper.EXTERNAL);
  23.302              String urlString = url.toExternalForm();
  23.303              objectOutput.writeObject(urlString);
  23.304          } else {
  23.305 @@ -477,32 +567,18 @@
  23.306          
  23.307          objectOutput.writeObject(m);
  23.308  
  23.309 -        tl.save(); // Only does something if the list has changed...        
  23.310 +        if (autoSaver.isModified())
  23.311 +            autoSaver.save(); // Only does something if the list has changed...        
  23.312      }
  23.313  
  23.314      /**
  23.315 -     * Start showing new tasklist.
  23.316 -     *
  23.317 -     * @param list new tree
  23.318 -     */
  23.319 -    private void setList(UserTaskList list) {
  23.320 -        tasklist = list;
  23.321 -        if (tt != null) {
  23.322 -            tt.setTreeTableModel(
  23.323 -                new UserTasksTreeTableModel(tasklist, tt.getSortingModel(), 
  23.324 -                getFilter()));
  23.325 -        }
  23.326 -        updateNameAndToolTip();
  23.327 -    }
  23.328 -    
  23.329 -    /**
  23.330       * Updates the name of this TC and the tooltip 
  23.331       * corresponding to the FileObject.
  23.332       */
  23.333      private void updateNameAndToolTip() {
  23.334 -        setToolTipText(FileUtil.getFileDisplayName(tasklist.getFile()));
  23.335 +        setToolTipText(FileUtil.getFileDisplayName(file));
  23.336          if (!default_) {
  23.337 -            setName(tasklist.getFile().getNameExt());
  23.338 +            setName(file.getNameExt());
  23.339          } else {
  23.340              setName(NbBundle.getMessage(UserTaskView.class, "TaskViewName")); // NOI18N
  23.341          }
  23.342 @@ -522,11 +598,7 @@
  23.343      }
  23.344  
  23.345      protected java.lang.String preferredID() {
  23.346 -        // although TC.preferredId says that the return value of
  23.347 -        // preferredID must not be unique it does not seem to work
  23.348 -        // so viewId is used to identify the views
  23.349 -        // + viewId; 
  23.350 -        return "org.netbeans.modules.tasklist.usertasks.Window";// NOI18N
  23.351 +        return "org.netbeans.modules.tasklist.usertasks.Window"; // NOI18N
  23.352      }    
  23.353  
  23.354      protected void setFiltered() {
  23.355 @@ -601,12 +673,32 @@
  23.356      }    
  23.357      
  23.358      /**
  23.359 -     * Common part for all constructors
  23.360 +     * Common part for all constructors.
  23.361 +     *
  23.362 +     * file and default_ variable should be initialized before calling this.
  23.363       */
  23.364 -    private void init() {
  23.365 +    @AWTThreadAnnotation
  23.366 +    private void init(FileObject file, boolean default_) {
  23.367          assert SwingUtilities.isEventDispatchThread();
  23.368 +        
  23.369 +        this.file = file;
  23.370 +        this.default_ = default_;
  23.371              
  23.372 -        tasklist.getFile().addFileChangeListener(this);
  23.373 +        try {
  23.374 +            tasklist = readDocument(file);
  23.375 +            this.autoSaver = new AutoSaver(tasklist, file);
  23.376 +        } catch (IOException e) {
  23.377 +            NotifyDescriptor nd = new NotifyDescriptor.Message(
  23.378 +                    NbBundle.getMessage(TaskListDataObject.class, 
  23.379 +                    "ErrorReadingFile", e.getMessage())); // NOI18N
  23.380 +            DialogDisplayer.getDefault().notify(nd);
  23.381 +        }
  23.382 +        
  23.383 +        updateNameAndToolTip();
  23.384 +        
  23.385 +        new DueTasksNotifier(tasklist);
  23.386 +        
  23.387 +        file.addFileChangeListener(this);
  23.388          
  23.389          setIcon(ICON);
  23.390          
  23.391 @@ -615,10 +707,7 @@
  23.392          JPanel centerPanel = new JPanel();
  23.393          centerPanel.setLayout(new BorderLayout());
  23.394          
  23.395 -        manager = new ExplorerManager();
  23.396 -        
  23.397 -        tt = new UserTasksTreeTable(
  23.398 -            manager, getUserTaskList(), getFilter());
  23.399 +        tt = new UserTasksTreeTable(getUserTaskList(), getFilter());
  23.400  
  23.401          configureActions();
  23.402          
  23.403 @@ -634,13 +723,14 @@
  23.404                  TreePath path = new TreePath(tt.getTreeTableModel().getRoot());
  23.405                  tt.scrollTo(path);
  23.406                  
  23.407 +                /** todo
  23.408                  Node n = getExplorerManager().getSelectedNodes()[0];
  23.409                  
  23.410                  Action[] actions = n.getActions(false);
  23.411                  JPopupMenu pm = Utilities.actionsToPopup(actions,
  23.412                      e.getComponent());
  23.413                  if(pm != null)
  23.414 -                    pm.show(e.getComponent(), e.getX(), e.getY());
  23.415 +                    pm.show(e.getComponent(), e.getX(), e.getY());*/
  23.416              }
  23.417          });
  23.418          
  23.419 @@ -658,10 +748,9 @@
  23.420          add(toolbar, BorderLayout.WEST);
  23.421  
  23.422          tt.select(new TreePath(tt.getTreeTableModel().getRoot()));
  23.423 -    }
  23.424 -
  23.425 -    public ExplorerManager getExplorerManager() {
  23.426 -        return manager;
  23.427 +        
  23.428 +        associateLookup(Lookups.fixed(new UserTaskViewNode(this),
  23.429 +                getActionMap()));
  23.430      }
  23.431  
  23.432      /**
  23.433 @@ -830,7 +919,7 @@
  23.434          if (view.getClientProperty("isSliding") == Boolean.TRUE)
  23.435       **/
  23.436      
  23.437 -    /** 
  23.438 +    /*
  23.439       * debug Ctrl+C,V,X
  23.440       *
  23.441      private void debugCopyPaste() {
  23.442 @@ -901,10 +990,5 @@
  23.443          FilterAction filter = (FilterAction) 
  23.444              FilterAction.get(FilterAction.class);
  23.445          map.put(find.getActionMapKey(), filter);
  23.446 -
  23.447 -        // following line tells the top component which lookup should be 
  23.448 -        // associated with it
  23.449 -        Lookup lookup = ExplorerUtils.createLookup(manager, map);
  23.450 -        associateLookup(lookup);
  23.451      }
  23.452  }
    24.1 --- a/tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/UserTaskViewRegistry.java	Mon Dec 04 21:57:00 2006 +0000
    24.2 +++ b/tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/UserTaskViewRegistry.java	Mon Dec 04 21:59:57 2006 +0000
    24.3 @@ -27,7 +27,7 @@
    24.4  import javax.swing.event.ChangeEvent;
    24.5  import javax.swing.event.ChangeListener;
    24.6  import javax.swing.event.EventListenerList;
    24.7 -import org.netbeans.modules.tasklist.usertasks.model.UserTaskList;
    24.8 +import org.netbeans.modules.tasklist.usertasks.util.AWTThreadAnnotation;
    24.9  import org.openide.DialogDisplayer;
   24.10  import org.openide.NotifyDescriptor;
   24.11  import org.openide.NotifyDescriptor.Message;
   24.12 @@ -71,11 +71,12 @@
   24.13       *
   24.14       * @return the default view or null if an error occured
   24.15       */
   24.16 +    @AWTThreadAnnotation
   24.17      public UserTaskView getDefault() {
   24.18  	if (defview == null) {
   24.19              try {
   24.20                  defview = new UserTaskView(
   24.21 -                    UserTaskList.getDefault(), true);
   24.22 +                        UserTaskView.getDefaultFile(), true);
   24.23                  defview.showInMode();
   24.24              } catch (IOException ioe) {
   24.25                  DialogDisplayer.getDefault().notify(new Message(
   24.26 @@ -142,7 +143,7 @@
   24.27          while (it.hasNext()) {
   24.28              WeakReference wr = (WeakReference) it.next();
   24.29  	    UserTaskView tlv = (UserTaskView) wr.get();
   24.30 -            if (tlv != null && tlv.getUserTaskList().getFile() == file) 
   24.31 +            if (tlv != null && tlv.getAutoSaver().getFile() == file) 
   24.32                  return tlv;
   24.33          }
   24.34          return null;
   24.35 @@ -232,6 +233,7 @@
   24.36              }
   24.37          }
   24.38      }
   24.39 +    
   24.40      /** 
   24.41       * Creates a new instance of UserTaskViewRegistry 
   24.42       */
    25.1 --- a/tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/UserTasksTreeTable.java	Mon Dec 04 21:57:00 2006 +0000
    25.2 +++ b/tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/UserTasksTreeTable.java	Mon Dec 04 21:59:57 2006 +0000
    25.3 @@ -22,6 +22,7 @@
    25.4  import com.toedter.calendar.JDateChooserCellEditor;
    25.5  import java.awt.Graphics;
    25.6  import java.awt.Point;
    25.7 +import java.awt.event.MouseEvent;
    25.8  import java.io.Serializable;
    25.9  import java.util.ArrayList;
   25.10  import java.util.List;
   25.11 @@ -29,6 +30,7 @@
   25.12  
   25.13  import javax.swing.Action;
   25.14  import javax.swing.ImageIcon;
   25.15 +import javax.swing.JPopupMenu;
   25.16  import javax.swing.ListSelectionModel;
   25.17  import javax.swing.event.ListSelectionEvent;
   25.18  import javax.swing.event.ListSelectionListener;
   25.19 @@ -60,26 +62,24 @@
   25.20  import org.netbeans.modules.tasklist.usertasks.treetable.AdvancedTreeTableNode;
   25.21  import org.netbeans.modules.tasklist.usertasks.treetable.DefaultMutableTreeTableNode;
   25.22  import org.netbeans.modules.tasklist.usertasks.treetable.DefaultTreeTableModel;
   25.23 -import org.netbeans.modules.tasklist.usertasks.treetable.NodesTreeTable;
   25.24  import org.netbeans.modules.tasklist.usertasks.treetable.SortingHeaderRenderer;
   25.25  import org.netbeans.modules.tasklist.usertasks.treetable.TreeTable;
   25.26  import org.netbeans.modules.tasklist.usertasks.treetable.TreeTableDragGestureRecognizer;
   25.27  import org.netbeans.modules.tasklist.usertasks.util.UTUtils;
   25.28 -import org.openide.explorer.ExplorerManager;
   25.29 -import org.openide.filesystems.FileObject;
   25.30 -import org.openide.filesystems.FileUtil;
   25.31 +import org.openide.awt.MouseUtils;
   25.32  import org.openide.nodes.Node;
   25.33  import org.openide.util.actions.SystemAction;
   25.34  import org.netbeans.modules.tasklist.usertasks.model.UserTask;
   25.35  import org.netbeans.modules.tasklist.usertasks.model.UserTaskList;
   25.36  import org.netbeans.modules.tasklist.usertasks.renderers.OwnerTableCellRenderer;
   25.37 +import org.openide.util.Utilities;
   25.38  
   25.39  /**
   25.40   * TT for user tasks
   25.41   *
   25.42   * @author tl
   25.43   */
   25.44 -public class UserTasksTreeTable extends NodesTreeTable {
   25.45 +public class UserTasksTreeTable extends TreeTable {
   25.46      private UserTask selected;
   25.47      
   25.48      /**
   25.49 @@ -89,10 +89,11 @@
   25.50       * @param utl list with user tasks
   25.51       * @param filter used filter or null
   25.52       */
   25.53 -    public UserTasksTreeTable(ExplorerManager em, UserTaskList utl,
   25.54 +    public UserTasksTreeTable(UserTaskList utl,
   25.55      Filter filter) {
   25.56 -        super(em, new DefaultTreeTableModel(
   25.57 +        super(new DefaultTreeTableModel(
   25.58              new DefaultMutableTreeTableNode(), new String[] {""})); // NOI18N
   25.59 +        setAutoscrolls(false);
   25.60          setTreeTableModel(
   25.61              new UserTasksTreeTableModel(utl, getSortingModel(), filter));
   25.62          setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
   25.63 @@ -140,6 +141,32 @@
   25.64              }
   25.65          );
   25.66          
   25.67 +        addMouseListener(new MouseUtils.PopupMouseAdapter() {
   25.68 +            public void showPopup(MouseEvent e) {
   25.69 +                int row = rowAtPoint(e.getPoint());
   25.70 +                int col = columnAtPoint(e.getPoint());
   25.71 +                Action[] actions;
   25.72 +
   25.73 +                if (row < 0 || col < 0) {
   25.74 +                    actions = getFreeSpaceActions();
   25.75 +                } else {
   25.76 +                    if (!getSelectionModel().isSelectedIndex(row)) {
   25.77 +                        setRowSelectionInterval(row, row);
   25.78 +                    }
   25.79 +                    Node n = createNode(getNodeForRow(row));
   25.80 +
   25.81 +                    if (n == null)
   25.82 +                        return;
   25.83 +                    actions = n.getActions(false);
   25.84 +                }
   25.85 +                JPopupMenu pm = Utilities.actionsToPopup(actions,
   25.86 +                        UserTasksTreeTable.this);
   25.87 +
   25.88 +                if (pm != null)
   25.89 +                    pm.show(UserTasksTreeTable.this, e.getX(), e.getY());
   25.90 +            }
   25.91 +        });
   25.92 +        
   25.93          setColumnsConfig(createDefaultColumnsConfig());
   25.94          TreeTableDragGestureRecognizer.enableDnD(this);
   25.95          setTransferHandler(new MyTransferHandler());
   25.96 @@ -288,7 +315,7 @@
   25.97      
   25.98      public javax.swing.Action[] getFreeSpaceActions() {
   25.99          return new Action[] {
  25.100 -            SystemAction.get(NewTaskAction.class),
  25.101 +            // TODO: new SystemAction.get(NewTaskAction.class),
  25.102              null,
  25.103              SystemAction.get(FilterAction.class),
  25.104              null,
  25.105 @@ -333,9 +360,10 @@
  25.106                  if (result.length() == 0)
  25.107                      result = null;
  25.108              } else if (node instanceof UserTaskListTreeTableNode) {
  25.109 -                FileObject fo = ((UserTaskListTreeTableNode) node).
  25.110 -                    getUserTaskList().getFile();
  25.111 -                result = FileUtil.getFileDisplayName(fo);
  25.112 +                // todo FileObject fo = ((UserTaskListTreeTableNode) node).
  25.113 +                //    getUserTaskList().getFile();
  25.114 +                // result = FileUtil.getFileDisplayName(fo);
  25.115 +                result = "todo";
  25.116              }
  25.117          }
  25.118          return result;
    26.1 --- a/tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/actions/ClearCompletedAction.java	Mon Dec 04 21:57:00 2006 +0000
    26.2 +++ b/tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/actions/ClearCompletedAction.java	Mon Dec 04 21:59:57 2006 +0000
    26.3 @@ -77,7 +77,7 @@
    26.4       * @param ut a task
    26.5       */
    26.6      private void clearCompleted(UserTask ut) {
    26.7 -        if (!ut.isProgressComputed())
    26.8 +        if (!ut.isValuesComputed())
    26.9              ut.setDone(false);
   26.10          Iterator it = ut.getSubtasks().iterator();
   26.11          while (it.hasNext()) {
    27.1 --- a/tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/actions/GoToUserTaskAction.java	Mon Dec 04 21:57:00 2006 +0000
    27.2 +++ b/tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/actions/GoToUserTaskAction.java	Mon Dec 04 21:59:57 2006 +0000
    27.3 @@ -19,6 +19,8 @@
    27.4  package org.netbeans.modules.tasklist.usertasks.actions;
    27.5  
    27.6  import java.awt.event.ActionEvent;
    27.7 +import java.beans.PropertyChangeEvent;
    27.8 +import java.beans.PropertyChangeListener;
    27.9  import java.net.MalformedURLException;
   27.10  import java.net.URL;
   27.11  import javax.swing.ImageIcon;
   27.12 @@ -31,6 +33,7 @@
   27.13  import org.openide.text.Line;
   27.14  import org.openide.util.NbBundle;
   27.15  import org.openide.util.Utilities;
   27.16 +import org.openide.util.WeakListeners;
   27.17  
   27.18  
   27.19  /**
   27.20 @@ -40,7 +43,10 @@
   27.21   * @author Tor Norbye
   27.22   * @author tl
   27.23   */
   27.24 -public class GoToUserTaskAction extends UTViewAction {
   27.25 +public class GoToUserTaskAction extends UTViewAction 
   27.26 +        implements PropertyChangeListener {
   27.27 +    private UserTask last;
   27.28 +    
   27.29      /**
   27.30       * Constructor.
   27.31       * 
   27.32 @@ -63,8 +69,23 @@
   27.33      }
   27.34  
   27.35      public void valueChanged(ListSelectionEvent e) {
   27.36 +        if (last != null)
   27.37 +            last.removePropertyChangeListener(this);
   27.38          UserTask ut = getSingleSelectedTask();
   27.39          setEnabled(ut != null && 
   27.40                  (ut.getLine() != null || ut.getUrl() != null));
   27.41 +        last = ut;
   27.42 +        if (last != null)
   27.43 +            last.addPropertyChangeListener(this);
   27.44 +    }
   27.45 +
   27.46 +    public void propertyChange(PropertyChangeEvent evt) {
   27.47 +        if (evt.getPropertyName() == UserTask.PROP_URL ||
   27.48 +                evt.getPropertyName() == UserTask.PROP_LINE_NUMBER ||
   27.49 +                evt.getPropertyName() == UserTask.PROP_LINE) {
   27.50 +            UserTask ut = getSingleSelectedTask();
   27.51 +            setEnabled(ut != null && 
   27.52 +                    (ut.getLine() != null || ut.getUrl() != null));
   27.53 +        }
   27.54      }
   27.55  }
    28.1 --- a/tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/actions/MoveLeftAction.java	Mon Dec 04 21:57:00 2006 +0000
    28.2 +++ b/tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/actions/MoveLeftAction.java	Mon Dec 04 21:59:57 2006 +0000
    28.3 @@ -21,7 +21,6 @@
    28.4  
    28.5  import java.awt.event.ActionEvent;
    28.6  import javax.swing.event.ListSelectionEvent;
    28.7 -import javax.swing.tree.TreeNode;
    28.8  import javax.swing.tree.TreePath;
    28.9  import org.netbeans.modules.tasklist.usertasks.UserTaskListTreeTableNode;
   28.10  import org.netbeans.modules.tasklist.usertasks.UserTaskTreeTableNode;
    29.1 --- a/tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/actions/MoveRightAction.java	Mon Dec 04 21:57:00 2006 +0000
    29.2 +++ b/tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/actions/MoveRightAction.java	Mon Dec 04 21:59:57 2006 +0000
    29.3 @@ -26,6 +26,7 @@
    29.4  import org.netbeans.modules.tasklist.usertasks.UserTaskTreeTableNode;
    29.5  import org.netbeans.modules.tasklist.usertasks.UserTaskView;
    29.6  import org.netbeans.modules.tasklist.usertasks.model.UserTask;
    29.7 +import org.netbeans.modules.tasklist.usertasks.util.UTUtils;
    29.8  import org.openide.util.NbBundle;
    29.9  
   29.10  /**
   29.11 @@ -92,6 +93,9 @@
   29.12              if (last instanceof UserTaskTreeTableNode) {
   29.13                  UserTaskTreeTableNode n = (UserTaskTreeTableNode) last;
   29.14                  TreeNode parent = n.getParent();
   29.15 +                if (parent == null)
   29.16 +                    UTUtils.LOGGER.fine(n.getUserTask() + 
   29.17 +                            " does not have a parent"); // NOI18N
   29.18                  int index = parent.getIndex(n);
   29.19                  setEnabled(index != 0);
   29.20              } else {
    30.1 --- a/tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/actions/NewTaskAction.java	Mon Dec 04 21:57:00 2006 +0000
    30.2 +++ b/tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/actions/NewTaskAction.java	Mon Dec 04 21:59:57 2006 +0000
    30.3 @@ -25,14 +25,20 @@
    30.4  import java.awt.event.ActionListener;
    30.5  import java.net.URL;
    30.6  import javax.swing.JButton;
    30.7 +import javax.swing.event.ListSelectionEvent;
    30.8 +import javax.swing.tree.TreePath;
    30.9  
   30.10  import org.netbeans.modules.tasklist.usertasks.EditTaskPanel;
   30.11 +import org.netbeans.modules.tasklist.usertasks.UserTaskListTreeTableNode;
   30.12 +import org.netbeans.modules.tasklist.usertasks.actions.UTViewAction;
   30.13 +import org.netbeans.modules.tasklist.usertasks.util.AWTThreadAnnotation;
   30.14  import org.netbeans.modules.tasklist.usertasks.util.UTUtils;
   30.15  import org.netbeans.modules.tasklist.usertasks.UserTaskViewRegistry;
   30.16  import org.netbeans.modules.tasklist.usertasks.model.UserTask;
   30.17  import org.netbeans.modules.tasklist.usertasks.model.UserTaskList;
   30.18  import org.netbeans.modules.tasklist.usertasks.UserTaskListNode;
   30.19  import org.netbeans.modules.tasklist.usertasks.UserTaskNode;
   30.20 +import org.netbeans.modules.tasklist.usertasks.UserTaskTreeTableNode;
   30.21  import org.netbeans.modules.tasklist.usertasks.UserTaskView;
   30.22  import org.openide.DialogDescriptor;
   30.23  import org.openide.DialogDisplayer;
   30.24 @@ -46,7 +52,6 @@
   30.25  import org.openide.text.Line;
   30.26  import org.openide.util.HelpCtx;
   30.27  import org.openide.util.NbBundle;
   30.28 -import org.openide.util.actions.NodeAction;
   30.29  
   30.30  /**
   30.31   * Action which brings up a dialog where you can create
   30.32 @@ -56,34 +61,40 @@
   30.33   * @author Trond Norbye
   30.34   * @author tl
   30.35   */
   30.36 -public class NewTaskAction extends NodeAction {
   30.37 -
   30.38 +public class NewTaskAction extends UTViewAction {
   30.39      private static final long serialVersionUID = 1;
   30.40  
   30.41 -    private DialogDescriptor dd;
   30.42 -    private EditTaskPanel panel;
   30.43 -    private Dialog dialog;
   30.44 -    private JButton addAnotherButton;
   30.45 +    private static DialogDescriptor dd;
   30.46 +    private static EditTaskPanel panel;
   30.47 +    private static Dialog dialog;
   30.48 +    private static JButton addAnotherButton;
   30.49      
   30.50 -    private UserTaskView utv;
   30.51 -    private UserTask parent;
   30.52 -    private UserTaskList utl;
   30.53 -    private URL url;
   30.54 -    private int lineNumber;
   30.55 -    private boolean associate;
   30.56 +    /**
   30.57 +     * Constructor.
   30.58 +     *
   30.59 +     * @param utv a user task view.
   30.60 +     */
   30.61 +    public NewTaskAction(UserTaskView utv) {
   30.62 +        super(utv, "newTask");
   30.63 +    }
   30.64      
   30.65 -    protected boolean enable(Node[] node) {
   30.66 -        return node.length == 1 && 
   30.67 -            (node[0] instanceof UserTaskNode || 
   30.68 -            node[0] instanceof UserTaskListNode);
   30.69 +    public void valueChanged(ListSelectionEvent e) {
   30.70 +        TreePath[] paths = utv.getTreeTable().getSelectedPaths();
   30.71 +        boolean enabled = false;
   30.72 +        if (paths.length == 1) {
   30.73 +            Object last = paths[0].getLastPathComponent();
   30.74 +            enabled = last instanceof UserTaskTreeTableNode ||
   30.75 +                    last instanceof UserTaskListTreeTableNode;
   30.76 +        }
   30.77 +        setEnabled(enabled);
   30.78      }
   30.79 -
   30.80 +    
   30.81      /**
   30.82       * Creates a panel for editing a task
   30.83       *
   30.84       * @return created panel
   30.85       */
   30.86 -    private EditTaskPanel getEditTaskPanel() {
   30.87 +    private static EditTaskPanel getEditTaskPanel() {
   30.88          if (panel == null) {
   30.89              panel = new EditTaskPanel(false);
   30.90              panel.setPreferredSize(new Dimension(600,500));
   30.91 @@ -96,7 +107,7 @@
   30.92       *
   30.93       * @return the created dialog
   30.94       */
   30.95 -    private Dialog getDialog() {
   30.96 +    private static Dialog getDialog() {
   30.97          if (dialog == null) {
   30.98              dialog = DialogDisplayer.getDefault().createDialog(
   30.99                  getDialogDescriptor());
  30.100 @@ -110,13 +121,14 @@
  30.101       *
  30.102       * @return created dialog descriptor
  30.103       */
  30.104 -    private DialogDescriptor getDialogDescriptor() {
  30.105 +    private static DialogDescriptor getDialogDescriptor() {
  30.106          if (dd == null) {
  30.107              dd = new DialogDescriptor(getEditTaskPanel(),
  30.108                   NbBundle.getMessage(NewTaskAction.class,
  30.109 -                                     "TITLE_add_todo")); // NOI18N
  30.110 +                 "TITLE_add_todo")); // NOI18N
  30.111              dd.setModal(true);
  30.112 -            dd.setHelpCtx(new HelpCtx("org.netbeans.modules.tasklist.usertasks.NewTaskDialog")); // NOI18N
  30.113 +            dd.setHelpCtx(new HelpCtx(
  30.114 +                    "org.netbeans.modules.tasklist.usertasks.NewTaskDialog")); // NOI18N
  30.115              dd.setMessageType(NotifyDescriptor.PLAIN_MESSAGE);
  30.116  
  30.117              // dialog buttons
  30.118 @@ -132,55 +144,29 @@
  30.119                  DialogDescriptor.OK_OPTION,
  30.120                  DialogDescriptor.CANCEL_OPTION
  30.121              });
  30.122 -            dd.setButtonListener(new ActionListener() {
  30.123 -                public void actionPerformed(ActionEvent e) {
  30.124 -                    Object src = e.getSource();
  30.125 -                    if (src == addAnotherButton) {
  30.126 -                        addAnotherTask();
  30.127 -                    }
  30.128 -                }
  30.129 -            });
  30.130          }
  30.131          return dd;
  30.132      }
  30.133      
  30.134 -    /**
  30.135 -     * Will be called if the user pressed "Add Another" button
  30.136 -     */
  30.137 -    private void addAnotherTask() {
  30.138 -        UserTask ut = new UserTask("", utl); // NOI18N
  30.139 -        panel.fillObject(ut);
  30.140 -
  30.141 -        // See if the user wants to append or prepend
  30.142 -        boolean append = panel.getAppend();
  30.143 -        if (parent != null) {
  30.144 -            if (append)
  30.145 -                parent.getSubtasks().add(ut);
  30.146 -            else
  30.147 -                parent.getSubtasks().add(0, ut);
  30.148 +    public void actionPerformed(ActionEvent e) {
  30.149 +        TreePath[] tp = utv.getTreeTable().getSelectedPaths();
  30.150 +        final UserTask parent;
  30.151 +        final UserTaskList utl;
  30.152 +        Object last = tp[0].getLastPathComponent();
  30.153 +        if (last instanceof UserTaskTreeTableNode) {
  30.154 +            parent = ((UserTaskTreeTableNode) last).getUserTask();
  30.155 +            utl = parent.getList();
  30.156          } else {
  30.157 -            if (append)
  30.158 -                utl.getSubtasks().add(ut);
  30.159 -            else
  30.160 -                utl.getSubtasks().add(0, ut);
  30.161 +            parent = null;
  30.162 +            utl = ((UserTaskListTreeTableNode) last).
  30.163 +                    getUserTaskList();
  30.164          }
  30.165 -
  30.166 -        // After the add - view the todo list as well!
  30.167 -        utv.showInMode();
  30.168 -        utv.select(ut);
  30.169 -        utv.scrollTo(ut);
  30.170 -
  30.171 -        ut = new UserTask("", utl); // NOI18N
  30.172 -        panel.fillPanel(ut);
  30.173 -        panel.focusSummary();
  30.174 -    }
  30.175 -    
  30.176 -    protected void performAction(Node[] nodes) {
  30.177 +        
  30.178          // Get the current filename and line number so we can initialize
  30.179          // the filename:linenumber columns
  30.180          
  30.181          // First try to get the editor window itself; if you right click
  30.182 -        // on a node in the Todo Window, that node becomes the activated
  30.183 +        // on a node in the User Tasks Window, that node becomes the activated
  30.184          // node (which is good - it makes the properties window show the
  30.185          // todo item's properties, etc.) but that means that we can't
  30.186          // find the editor position via the normal means.
  30.187 @@ -188,35 +174,95 @@
  30.188          // ask for its nodes.
  30.189          
  30.190          // find cursor position
  30.191 -        Line cursor = UTUtils.findCursorPosition(nodes);
  30.192 +        Line cursor = UTUtils.findCursorPosition(null); // TODO: null
  30.193          if (cursor == null) {
  30.194              Node[] editorNodes = UTUtils.getEditorNodes();
  30.195              if (editorNodes != null)
  30.196                  cursor = UTUtils.findCursorPosition(editorNodes);
  30.197          }
  30.198 +        int lineNumber;
  30.199 +        URL url;
  30.200          if (cursor != null) {
  30.201 -            this.lineNumber = cursor.getLineNumber();
  30.202 -            this.url = UTUtils.getExternalURLForLine(cursor);
  30.203 +            lineNumber = cursor.getLineNumber();
  30.204 +            url = UTUtils.getExternalURLForLine(cursor);
  30.205          } else {
  30.206 -            this.url = null;
  30.207 -            this.lineNumber = -1;
  30.208 +            url = null;
  30.209 +            lineNumber = -1;
  30.210          }
  30.211          
  30.212 -        // find parent task
  30.213 -        if (nodes[0] instanceof UserTaskNode) {
  30.214 -            parent = ((UserTaskNode) nodes[0]).getTask();
  30.215 -            utl = parent.getList();
  30.216 -        } else {
  30.217 -            parent = null;
  30.218 -            utl = ((UserTaskListNode) nodes[0]).getUserTaskList();
  30.219 +        // After the add - view the todo list as well!
  30.220 +        final UserTaskView utv = UserTaskViewRegistry.getInstance().getCurrent();
  30.221 +
  30.222 +        UserTask ut = new UserTask("", utl); // NOI18N
  30.223 +
  30.224 +        final EditTaskPanel panel = getEditTaskPanel();
  30.225 +        panel.fillPanel(ut);
  30.226 +        panel.setAssociatedFilePos(false);
  30.227 +        panel.setUrl(url);
  30.228 +        panel.setLineNumber(lineNumber);
  30.229 +        panel.focusSummary();
  30.230 +        
  30.231 +        Dialog d = getDialog();
  30.232 +        addAnotherButton.setEnabled(true);
  30.233 +        d.setVisible(true);
  30.234 +
  30.235 +        DialogDescriptor dd = getDialogDescriptor();
  30.236 +        dd.setButtonListener(new ActionListener() {
  30.237 +                public void actionPerformed(ActionEvent e) {
  30.238 +                    Object src = e.getSource();
  30.239 +                    if (src == addAnotherButton) {
  30.240 +                        UserTask ut = new UserTask("", utl); // NOI18N
  30.241 +                        panel.fillObject(ut);
  30.242 +
  30.243 +                        // See if the user wants to append or prepend
  30.244 +                        boolean append = panel.getAppend();
  30.245 +                        if (parent != null) {
  30.246 +                            if (append)
  30.247 +                                parent.getSubtasks().add(ut);
  30.248 +                            else
  30.249 +                                parent.getSubtasks().add(0, ut);
  30.250 +                        } else {
  30.251 +                            if (append)
  30.252 +                                utl.getSubtasks().add(ut);
  30.253 +                            else
  30.254 +                                utl.getSubtasks().add(0, ut);
  30.255 +                        }
  30.256 +
  30.257 +                        // After the add - view the todo list as well!
  30.258 +                        utv.showInMode();
  30.259 +                        utv.select(ut);
  30.260 +                        utv.scrollTo(ut);
  30.261 +
  30.262 +                        ut = new UserTask("", utl); // NOI18N
  30.263 +                        panel.fillPanel(ut);
  30.264 +                        panel.focusSummary();
  30.265 +                    }
  30.266 +                }
  30.267 +            });
  30.268 +            
  30.269 +        if (dd.getValue() == NotifyDescriptor.OK_OPTION) {
  30.270 +            panel.fillObject(ut);
  30.271 +
  30.272 +            // See if the user wants to append or prepend
  30.273 +            boolean append = panel.getAppend();
  30.274 +            if (parent != null) {
  30.275 +            	if (append)
  30.276 +                    parent.getSubtasks().add(ut);
  30.277 +            	else
  30.278 +                    parent.getSubtasks().add(0, ut);
  30.279 +            } else {
  30.280 +            	if (append)
  30.281 +                    utl.getSubtasks().add(ut);
  30.282 +            	else
  30.283 +                    utl.getSubtasks().add(0, ut);
  30.284 +            }
  30.285 +
  30.286 +            assert utv != null;
  30.287 +            
  30.288 +            utv.showInMode();
  30.289 +            utv.select(ut);
  30.290 +            utv.scrollTo(ut);
  30.291          }
  30.292 -        
  30.293 -        associate = false;
  30.294 -        
  30.295 -        // After the add - view the todo list as well!
  30.296 -        utv = UserTaskViewRegistry.getInstance().getCurrent();
  30.297 -
  30.298 -        performTheAction();
  30.299      }
  30.300  
  30.301      /**
  30.302 @@ -224,9 +270,8 @@
  30.303       *
  30.304       * @param line the associated line
  30.305       */
  30.306 +    @AWTThreadAnnotation
  30.307      public static void performAction(Line line) {
  30.308 -        NewTaskAction nta = (NewTaskAction) NewTaskAction.get(NewTaskAction.class);
  30.309 -
  30.310          DataObject dob = DataEditorSupport.findDataObject(line);
  30.311          if (dob == null)
  30.312              return;
  30.313 @@ -236,43 +281,36 @@
  30.314          if (url == null)
  30.315              return;
  30.316  
  30.317 -        nta.associate = true;
  30.318 -        nta.url = url;
  30.319 -        nta.lineNumber = line.getLineNumber();
  30.320 -        
  30.321          // After the add - view the todo list as well!
  30.322 -        nta.utv = UserTaskViewRegistry.getInstance().getLastActivated();
  30.323 -        if (nta.utv == null) {
  30.324 -            nta.utv = UserTaskViewRegistry.getInstance().getDefault();
  30.325 -            nta.utv.showInMode();
  30.326 +        UserTaskView utv = UserTaskViewRegistry.getInstance().getLastActivated();
  30.327 +        if (utv == null) {
  30.328 +            utv = UserTaskViewRegistry.getInstance().getDefault();
  30.329 +            utv.showInMode();
  30.330          }    
  30.331 -        nta.utl = nta.utv.getUserTaskList();
  30.332 +        UserTaskList utl = utv.getUserTaskList();
  30.333          
  30.334          // find parent task
  30.335 -        Node[] nodes = nta.utv.getExplorerManager().getSelectedNodes();
  30.336 +        /* TODO: Node[] nodes = utv.getExplorerManager().getSelectedNodes();*/
  30.337 +        UserTask parent = null;
  30.338 +        /* TODO
  30.339          if (nodes.length > 0 && nodes[0] instanceof UserTaskNode) {
  30.340 -            nta.parent = ((UserTaskNode) nodes[0]).getTask();
  30.341 +            parent = ((UserTaskNode) nodes[0]).getTask();
  30.342          } else {
  30.343 -            nta.parent = null;
  30.344 -        }
  30.345 +            parent = null;
  30.346 +        }*/
  30.347          
  30.348 -        nta.performTheAction();
  30.349 -    }
  30.350 -    
  30.351 -    /**
  30.352 -     * Performs the action
  30.353 -     */
  30.354 -    private void performTheAction() {
  30.355 -        UserTask ut = new UserTask("", utl); // NOI18N
  30.356 +        UserTask ut = new UserTask(line.getText(), utl); // NOI18N
  30.357  
  30.358          EditTaskPanel panel = getEditTaskPanel();
  30.359          panel.fillPanel(ut);
  30.360 -        panel.setAssociatedFilePos(associate);
  30.361 +        panel.setAssociatedFilePos(true);
  30.362          panel.setUrl(url);
  30.363 -        panel.setLineNumber(lineNumber);
  30.364 +        panel.setLineNumber(line.getLineNumber());
  30.365          panel.focusSummary();
  30.366          
  30.367 -        getDialog().setVisible(true);
  30.368 +        Dialog d = getDialog();
  30.369 +        addAnotherButton.setEnabled(false);
  30.370 +        d.setVisible(true);
  30.371  
  30.372          if (getDialogDescriptor().getValue() == NotifyDescriptor.OK_OPTION) {
  30.373              panel.fillObject(ut);
  30.374 @@ -307,14 +345,4 @@
  30.375      protected String iconResource() {
  30.376          return "org/netbeans/modules/tasklist/usertasks/actions/newTask.gif"; // NOI18N
  30.377      }
  30.378 -    
  30.379 -    public HelpCtx getHelpCtx() {
  30.380 -        return HelpCtx.DEFAULT_HELP;
  30.381 -        // If you will provide context help then use:
  30.382 -        // return new HelpCtx (NewTodoItemAction.class);
  30.383 -    }
  30.384 -    
  30.385 -    protected boolean asynchronous() {
  30.386 -        return false;
  30.387 -    }    
  30.388  }
    31.1 --- a/tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/actions/ScheduleAction.java	Mon Dec 04 21:57:00 2006 +0000
    31.2 +++ b/tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/actions/ScheduleAction.java	Mon Dec 04 21:59:57 2006 +0000
    31.3 @@ -80,7 +80,7 @@
    31.4                  public Object compute(Object obj) {
    31.5                      if (obj instanceof UserTask) {
    31.6                          UserTask ut = (UserTask) obj;
    31.7 -                        if (!ut.isEffortComputed() && !ut.isDone()) {
    31.8 +                        if (!ut.isValuesComputed() && !ut.isDone()) {
    31.9                              tasks.add(ut);
   31.10                          }
   31.11                      } 
    32.1 --- a/tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/actions/UTCopyAction.java	Mon Dec 04 21:57:00 2006 +0000
    32.2 +++ b/tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/actions/UTCopyAction.java	Mon Dec 04 21:59:57 2006 +0000
    32.3 @@ -26,6 +26,7 @@
    32.4  import javax.swing.tree.TreePath;
    32.5  import org.netbeans.modules.tasklist.usertasks.UserTaskListTreeTableNode;
    32.6  import org.netbeans.modules.tasklist.usertasks.UserTaskView;
    32.7 +import org.netbeans.modules.tasklist.usertasks.util.UTUtils;
    32.8  
    32.9  /**
   32.10   * Copy.
   32.11 @@ -52,6 +53,7 @@
   32.12                  break;
   32.13              }
   32.14          }
   32.15 +        UTUtils.LOGGER.fine("enabled=" + enabled);
   32.16          setEnabled(enabled);
   32.17      }
   32.18  
    33.1 --- a/tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/actions/ViewTasksAction.java	Mon Dec 04 21:57:00 2006 +0000
    33.2 +++ b/tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/actions/ViewTasksAction.java	Mon Dec 04 21:59:57 2006 +0000
    33.3 @@ -21,6 +21,7 @@
    33.4  
    33.5  import org.netbeans.modules.tasklist.usertasks.UserTaskView;
    33.6  import org.netbeans.modules.tasklist.usertasks.UserTaskViewRegistry;
    33.7 +import org.netbeans.modules.tasklist.usertasks.util.AWTThreadAnnotation;
    33.8  import org.openide.util.HelpCtx;
    33.9  import org.openide.util.NbBundle;
   33.10  import org.openide.util.actions.CallableSystemAction;
   33.11 @@ -43,6 +44,7 @@
   33.12          return false;
   33.13      }
   33.14  
   33.15 +    @AWTThreadAnnotation
   33.16      static void show() {
   33.17          UserTaskView view = UserTaskViewRegistry.getInstance().getDefault();
   33.18          if (view != null) {
    34.1 --- a/tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/filter/Bundle.properties	Mon Dec 04 21:57:00 2006 +0000
    34.2 +++ b/tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/filter/Bundle.properties	Mon Dec 04 21:59:57 2006 +0000
    34.3 @@ -24,6 +24,11 @@
    34.4  GreaterEquals=Greater than or equals
    34.5  duration_desc=Duration condition value
    34.6  
    34.7 +## UTPriorityCondition
    34.8 +prio_desc=Priority condition value
    34.9 +LBL_PriorityCheckList=Choose priority
   34.10 +IsOneOf=Is one of
   34.11 +
   34.12  ## UserTaskProperties
   34.13  LBL_detailsProperty=Description
   34.14  HNT_detailsProperty=Full description of the task
    35.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    35.2 +++ b/tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/filter/UTPriorityCondition.java	Mon Dec 04 21:59:57 2006 +0000
    35.3 @@ -0,0 +1,154 @@
    35.4 +/*
    35.5 + * The contents of this file are subject to the terms of the Common Development
    35.6 + * and Distribution License (the License). You may not use this file except in
    35.7 + * compliance with the License.
    35.8 + *
    35.9 + * You can obtain a copy of the License at http://www.netbeans.org/cddl.html
   35.10 + * or http://www.netbeans.org/cddl.txt.
   35.11 + *
   35.12 + * When distributing Covered Code, include this CDDL Header Notice in each file
   35.13 + * and include the License file at http://www.netbeans.org/cddl.txt.
   35.14 + * If applicable, add the following below the CDDL Header, with the fields
   35.15 + * enclosed by brackets [] replaced by your own identifying information:
   35.16 + * "Portions Copyrighted [year] [name of copyright owner]"
   35.17 + *
   35.18 + * The Original Software is NetBeans. The Initial Developer of the Original
   35.19 + * Software is Sun Microsystems, Inc. Portions Copyright 1997-2006 Sun
   35.20 + * Microsystems, Inc. All Rights Reserved.
   35.21 + */
   35.22 +
   35.23 +package org.netbeans.modules.tasklist.usertasks.filter;
   35.24 +
   35.25 +import java.awt.BorderLayout;
   35.26 +import java.util.Arrays;
   35.27 +import javax.swing.*;
   35.28 +import org.netbeans.modules.tasklist.core.checklist.CheckList;
   35.29 +import org.netbeans.modules.tasklist.core.checklist.DefaultCheckListModel;
   35.30 +import org.netbeans.modules.tasklist.core.filter.FilterCondition;
   35.31 +import org.netbeans.modules.tasklist.usertasks.model.UserTask;
   35.32 +import org.openide.util.NbBundle;
   35.33 +
   35.34 +/**
   35.35 + * "Priority is" - condition
   35.36 + *
   35.37 + * @author tl
   35.38 + */
   35.39 +public class UTPriorityCondition extends FilterCondition {
   35.40 +    /**
   35.41 +     * Creates an array of filter conditions for the specified property
   35.42 +     *
   35.43 +     * @param index index of the property
   35.44 +     */
   35.45 +    public static UTPriorityCondition[] createConditions() {
   35.46 +        return new UTPriorityCondition[] {
   35.47 +            new UTPriorityCondition()
   35.48 +        };
   35.49 +    };
   35.50 +    
   35.51 +    
   35.52 +    private static int NPRIORITIES = 5;
   35.53 +    
   35.54 +    // 5 = Number of different priorities
   35.55 +    protected boolean[] priorities = new boolean[NPRIORITIES];
   35.56 +    
   35.57 +    /**
   35.58 +     * Creates a new instance
   35.59 +     *
   35.60 +     * @param prop index of a property
   35.61 +     */
   35.62 +    public UTPriorityCondition() {
   35.63 +        Arrays.fill(priorities, true);
   35.64 +    }
   35.65 +    
   35.66 +    
   35.67 +    public UTPriorityCondition(final UTPriorityCondition rhs) {
   35.68 +        super(rhs);
   35.69 +        // copy priorities
   35.70 +        for (int i = 0; i < NPRIORITIES; i++) 
   35.71 +            this.priorities[i] = rhs.priorities[i];
   35.72 +    }
   35.73 +    
   35.74 +    public Object clone() {
   35.75 +        return new UTPriorityCondition(this);
   35.76 +    }
   35.77 +    
   35.78 +    public boolean isTrue(Object o1) {
   35.79 +        Integer k = (Integer) o1;
   35.80 +        return priorities[k - 1];
   35.81 +    }
   35.82 +    
   35.83 +    public JComponent createConstantComponent() {
   35.84 +        CheckList list = new CheckList(
   35.85 +                new DefaultCheckListModel(
   35.86 +                priorities, UserTask.getPriorityNames()));
   35.87 +        JPanel panel = new JPanel(new BorderLayout());
   35.88 +        panel.setOpaque(false);
   35.89 +        panel.setBorder(BorderFactory.createCompoundBorder(
   35.90 +                UIManager.getBorder("TextField.border"), // NOI18N
   35.91 +                BorderFactory.createEmptyBorder(2, 2, 2, 2)
   35.92 +                ));
   35.93 +        panel.add(list, BorderLayout.CENTER);
   35.94 +        panel.setToolTipText(NbBundle.getMessage(UTPriorityCondition.class,
   35.95 +                "prio_desc"));
   35.96 +        
   35.97 +        list.getAccessibleContext().setAccessibleName(
   35.98 +                NbBundle.getMessage(UTPriorityCondition.class, 
   35.99 +                "LBL_PriorityCheckList"));
  35.100 +        list.getAccessibleContext().setAccessibleDescription(
  35.101 +                NbBundle.getMessage(UTPriorityCondition.class, 
  35.102 +                "LBL_PriorityCheckList"));
  35.103 +        
  35.104 +        return panel;
  35.105 +    }
  35.106 +    
  35.107 +    public void getConstantFrom(JComponent cmp) {
  35.108 +        // Nothing to do. The array of booleans will not be cloned in
  35.109 +        // DefaultCheckListModel
  35.110 +    }
  35.111 +    
  35.112 +    protected String getDisplayName() {
  35.113 +        return NbBundle.getMessage(UTPriorityCondition.class, "IsOneOf");
  35.114 +    }
  35.115 +    
  35.116 +    
  35.117 +    private static class Convertor extends FilterCondition.Convertor {
  35.118 +        private static final String ATTR_PRIORITIES = "priorities";
  35.119 +        
  35.120 +        public Convertor() { 
  35.121 +            super("PriorityCondition");
  35.122 +        }
  35.123 +        
  35.124 +        public static UTPriorityCondition.Convertor create() {
  35.125 +            return new UTPriorityCondition.Convertor();
  35.126 +        }
  35.127 +        
  35.128 +        protected Object readElement(org.w3c.dom.Element element) 
  35.129 +                throws java.io.IOException, java.lang.ClassNotFoundException {
  35.130 +            UTPriorityCondition cond = new UTPriorityCondition();
  35.131 +            super.readCondition(element, cond);
  35.132 +            
  35.133 +            String spriorities = element.getAttribute(ATTR_PRIORITIES);
  35.134 +            boolean bpriorities [] = new boolean[NPRIORITIES];
  35.135 +            for (int i = 0; i < NPRIORITIES; i++) 
  35.136 +                bpriorities[i] = (spriorities.charAt(i) == '+');
  35.137 +            cond.priorities = bpriorities;
  35.138 +            
  35.139 +            return cond;
  35.140 +        }
  35.141 +        
  35.142 +        // write methods for supported condition types
  35.143 +        protected void writeElement(org.w3c.dom.Document document, 
  35.144 +                org.w3c.dom.Element element, Object obj)
  35.145 +                throws java.io.IOException, org.w3c.dom.DOMException {
  35.146 +            UTPriorityCondition cond = (UTPriorityCondition)obj;
  35.147 +            super.writeCondition(document, element, cond);
  35.148 +            
  35.149 +            StringBuffer str = new StringBuffer(NPRIORITIES);
  35.150 +            for (int i = 0; i < NPRIORITIES; i++) 
  35.151 +                str.append(cond.priorities[i] ? '+' : '-');
  35.152 +            element.setAttribute(ATTR_PRIORITIES, str.toString());
  35.153 +        }
  35.154 +    }
  35.155 +    
  35.156 +    
  35.157 +}
    36.1 --- a/tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/filter/UserTaskFilter.java	Mon Dec 04 21:57:00 2006 +0000
    36.2 +++ b/tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/filter/UserTaskFilter.java	Mon Dec 04 21:59:57 2006 +0000
    36.3 @@ -19,13 +19,13 @@
    36.4  
    36.5  package org.netbeans.modules.tasklist.usertasks.filter;
    36.6  
    36.7 +import java.io.Serializable;
    36.8  import org.netbeans.modules.tasklist.core.filter.AppliedFilterCondition;
    36.9  import org.netbeans.modules.tasklist.core.filter.BooleanFilterCondition;
   36.10  import org.netbeans.modules.tasklist.core.filter.DateFilterCondition;
   36.11  import org.netbeans.modules.tasklist.core.filter.Filter;
   36.12  import org.netbeans.modules.tasklist.core.filter.FilterConvertor;
   36.13  import org.netbeans.modules.tasklist.core.filter.IntegerFilterCondition;
   36.14 -import org.netbeans.modules.tasklist.core.filter.PriorityCondition;
   36.15  import org.netbeans.modules.tasklist.core.filter.StringFilterCondition;
   36.16  import org.netbeans.modules.tasklist.core.filter.SuggestionProperty;
   36.17  
   36.18 @@ -83,7 +83,7 @@
   36.19          if (property.equals(UserTaskProperties.PROP_SUMMARY)) {
   36.20              return applyConditions(property, StringFilterCondition.createConditions());
   36.21          } else if (property.equals(UserTaskProperties.PROP_PRIORITY)) {
   36.22 -            return applyConditions(property, PriorityCondition.createConditions());
   36.23 +            return applyConditions(property, UTPriorityCondition.createConditions());
   36.24          } else if (property.equals(UserTaskProperties.PROP_CATEGORY)) {
   36.25              return applyConditions(property, StringFilterCondition.createConditions());
   36.26          } else if (property.equals(UserTaskProperties.PROP_DETAILS)) {
   36.27 @@ -122,7 +122,7 @@
   36.28      }
   36.29      
   36.30  
   36.31 -    private static class Convertor extends FilterConvertor {        
   36.32 +    public static class Convertor extends FilterConvertor {        
   36.33          public Convertor() {
   36.34              super("UserTaskFilter"); // NOI18N
   36.35          }
    37.1 --- a/tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/filter/UserTaskProperties.java	Mon Dec 04 21:57:00 2006 +0000
    37.2 +++ b/tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/filter/UserTaskProperties.java	Mon Dec 04 21:59:57 2006 +0000
    37.3 @@ -25,7 +25,11 @@
    37.4  import org.netbeans.modules.tasklist.core.TaskProperties;
    37.5  import org.netbeans.modules.tasklist.core.filter.SuggestionProperty;
    37.6  import org.netbeans.modules.tasklist.usertasks.model.UserTask;
    37.7 +import org.netbeans.modules.tasklist.usertasks.util.UTUtils;
    37.8  
    37.9 +/**
   37.10 + * @author unknown 
   37.11 + */
   37.12  public class UserTaskProperties extends TaskProperties {
   37.13      public static final String PROPID_PRIORITY = "priority"; // NOI18N
   37.14      public static final String PROPID_SUMMARY = "summary"; // NOI18N
   37.15 @@ -45,137 +49,138 @@
   37.16      public static final String PROPID_COMPLETED_DATE = "completedDate"; // NOI18N
   37.17      public static final String PROPID_START = "start"; // NOI18N
   37.18      public static final String PROPID_SPENT_TIME_TODAY = "spentTimeToday"; // NOI18N
   37.19 -
   37.20 -  public static SuggestionProperty PROP_SUMMARY = 
   37.21 -    new SuggestionProperty(PROPID_SUMMARY, String.class) { 
   37.22 -      public Object getValue(Object obj) {return ((UserTask) obj).getSummary(); }
   37.23 +    
   37.24 +    public static SuggestionProperty PROP_SUMMARY =
   37.25 +            new SuggestionProperty(PROPID_SUMMARY, String.class) {
   37.26 +        public Object getValue(Object obj) {return ((UserTask) obj).getSummary(); }
   37.27      };
   37.28 -
   37.29 -  public static SuggestionProperty PROP_PRIORITY = 
   37.30 -    new SuggestionProperty(PROPID_PRIORITY, String.class) {   
   37.31 -      public Object getValue(Object obj) {
   37.32 -          return new Integer(((UserTask) obj).getPriority()); 
   37.33 -      }
   37.34 +    
   37.35 +    public static SuggestionProperty PROP_PRIORITY =
   37.36 +            new SuggestionProperty(PROPID_PRIORITY, String.class) {
   37.37 +        public Object getValue(Object obj) {
   37.38 +            // UTUtils.LOGGER.fine(obj.getClass().getName());
   37.39 +            return new Integer(((UserTask) obj).getPriority());
   37.40 +        }
   37.41      };
   37.42 -
   37.43 -  public static SuggestionProperty PROP_DETAILS = 
   37.44 -    new SuggestionProperty(PROPID_DETAILS, String.class) {   
   37.45 -      public Object getValue(Object obj) {return ((UserTask) obj).getDetails(); }
   37.46 +    
   37.47 +    public static SuggestionProperty PROP_DETAILS =
   37.48 +            new SuggestionProperty(PROPID_DETAILS, String.class) {
   37.49 +        public Object getValue(Object obj) {return ((UserTask) obj).getDetails(); }
   37.50      };
   37.51 -
   37.52 +    
   37.53      public static final SuggestionProperty PROP_CATEGORY =
   37.54 -        new SuggestionProperty(PROPID_CATEGORY, String.class) {
   37.55 -            public Object getValue(Object obj) {
   37.56 -                return ((UserTask) obj).getCategory();
   37.57 -            }
   37.58 -        };
   37.59 -
   37.60 +            new SuggestionProperty(PROPID_CATEGORY, String.class) {
   37.61 +        public Object getValue(Object obj) {
   37.62 +            return ((UserTask) obj).getCategory();
   37.63 +        }
   37.64 +    };
   37.65 +    
   37.66      public static final SuggestionProperty PROP_FILENAME =
   37.67 -        new SuggestionProperty(PROPID_FILENAME, String.class) {
   37.68 -            public Object getValue(Object obj) {
   37.69 -                URL url = ((UserTask) obj).getUrl();
   37.70 -                if (url == null)
   37.71 -                    return ""; // NOI18N
   37.72 -                else
   37.73 -                    return url.toExternalForm();
   37.74 -            }
   37.75 -        };
   37.76 -
   37.77 +            new SuggestionProperty(PROPID_FILENAME, String.class) {
   37.78 +        public Object getValue(Object obj) {
   37.79 +            URL url = ((UserTask) obj).getUrl();
   37.80 +            if (url == null)
   37.81 +                return ""; // NOI18N
   37.82 +            else
   37.83 +                return url.toExternalForm();
   37.84 +        }
   37.85 +    };
   37.86 +    
   37.87      public static final SuggestionProperty PROP_LINE_NUMBER =
   37.88 -        new SuggestionProperty(PROPID_LINE_NUMBER, Integer.class) {
   37.89 -            public Object getValue(Object obj) {
   37.90 -                return new Integer(((UserTask) obj).getLineNumber() + 1);
   37.91 -            }
   37.92 -        };
   37.93 -
   37.94 +            new SuggestionProperty(PROPID_LINE_NUMBER, Integer.class) {
   37.95 +        public Object getValue(Object obj) {
   37.96 +            return new Integer(((UserTask) obj).getLineNumber() + 1);
   37.97 +        }
   37.98 +    };
   37.99 +    
  37.100      public static final SuggestionProperty PROP_CREATED_DATE =
  37.101 -        new SuggestionProperty(PROPID_CREATED_DATE, Date.class) {
  37.102 -            public Object getValue(Object obj) {
  37.103 -                return new Date(((UserTask) obj).getCreatedDate());
  37.104 -            }
  37.105 -        };
  37.106 -
  37.107 +            new SuggestionProperty(PROPID_CREATED_DATE, Date.class) {
  37.108 +        public Object getValue(Object obj) {
  37.109 +            return new Date(((UserTask) obj).getCreatedDate());
  37.110 +        }
  37.111 +    };
  37.112 +    
  37.113      public static final SuggestionProperty PROP_LAST_EDITED_DATE =
  37.114 -        new SuggestionProperty(PROPID_LAST_EDITED_DATE, Date.class) {
  37.115 -            public Object getValue(Object obj) {
  37.116 -                return new Date(((UserTask) obj).getLastEditedDate());
  37.117 -            }
  37.118 -        };
  37.119 -
  37.120 +            new SuggestionProperty(PROPID_LAST_EDITED_DATE, Date.class) {
  37.121 +        public Object getValue(Object obj) {
  37.122 +            return new Date(((UserTask) obj).getLastEditedDate());
  37.123 +        }
  37.124 +    };
  37.125 +    
  37.126      public static final SuggestionProperty PROP_COMPLETED_DATE =
  37.127 -        new SuggestionProperty(PROPID_COMPLETED_DATE, Date.class) {
  37.128 +            new SuggestionProperty(PROPID_COMPLETED_DATE, Date.class) {
  37.129          public Object getValue(Object obj) {
  37.130              return new Date(((UserTask) obj).getCompletedDate());
  37.131          }
  37.132      };
  37.133 -        
  37.134 +    
  37.135      public static final SuggestionProperty PROP_DUE_DATE =
  37.136 -        new SuggestionProperty(PROPID_DUE_DATE, Date.class) {
  37.137 -            public Object getValue(Object obj) {
  37.138 -                return ((UserTask) obj).getDueDate();
  37.139 -            }
  37.140 -        };
  37.141 -
  37.142 +            new SuggestionProperty(PROPID_DUE_DATE, Date.class) {
  37.143 +        public Object getValue(Object obj) {
  37.144 +            return ((UserTask) obj).getDueDate();
  37.145 +        }
  37.146 +    };
  37.147 +    
  37.148      public static final SuggestionProperty PROP_DONE =
  37.149 -        new SuggestionProperty(PROPID_DONE, Boolean.class) {
  37.150 -            public Object getValue(Object obj) {
  37.151 -                return Boolean.valueOf(((UserTask) obj).isDone());
  37.152 -            }
  37.153 -        };
  37.154 -
  37.155 +            new SuggestionProperty(PROPID_DONE, Boolean.class) {
  37.156 +        public Object getValue(Object obj) {
  37.157 +            return Boolean.valueOf(((UserTask) obj).isDone());
  37.158 +        }
  37.159 +    };
  37.160 +    
  37.161      public static final SuggestionProperty PROP_PERCENT_COMPLETE =
  37.162 -        new SuggestionProperty(PROPID_PERCENT_COMPLETE, Integer.class) {
  37.163 -            public Object getValue(Object obj) {
  37.164 -                return new Integer(((UserTask) obj).getPercentComplete());
  37.165 -            }
  37.166 -        };
  37.167 -
  37.168 +            new SuggestionProperty(PROPID_PERCENT_COMPLETE, Integer.class) {
  37.169 +        public Object getValue(Object obj) {
  37.170 +            return new Integer(((UserTask) obj).getPercentComplete());
  37.171 +        }
  37.172 +    };
  37.173 +    
  37.174      public static final SuggestionProperty PROP_EFFORT =
  37.175 -        new SuggestionProperty(PROPID_EFFORT, Integer.class) {
  37.176 -            public Object getValue(Object obj) {
  37.177 -                return new Integer(((UserTask) obj).getEffort());
  37.178 -            }
  37.179 -        };
  37.180 -
  37.181 +            new SuggestionProperty(PROPID_EFFORT, Integer.class) {
  37.182 +        public Object getValue(Object obj) {
  37.183 +            return new Integer(((UserTask) obj).getEffort());
  37.184 +        }
  37.185 +    };
  37.186 +    
  37.187      public static final SuggestionProperty PROP_REMAINING_EFFORT =
  37.188 -        new SuggestionProperty(PROPID_REMAINING_EFFORT, Integer.class) {
  37.189 -            public Object getValue(Object obj) {
  37.190 -                return new Integer(((UserTask) obj).getRemainingEffort());
  37.191 -            }
  37.192 -        };
  37.193 -
  37.194 +            new SuggestionProperty(PROPID_REMAINING_EFFORT, Integer.class) {
  37.195 +        public Object getValue(Object obj) {
  37.196 +            return new Integer(((UserTask) obj).getRemainingEffort());
  37.197 +        }
  37.198 +    };
  37.199 +    
  37.200      public static final SuggestionProperty PROP_SPENT_TIME =
  37.201 -        new SuggestionProperty(PROPID_SPENT_TIME, Integer.class) {
  37.202 -            public Object getValue(Object obj) {
  37.203 -                return new Integer(((UserTask) obj).getSpentTime());
  37.204 -            }
  37.205 -        };
  37.206 -
  37.207 +            new SuggestionProperty(PROPID_SPENT_TIME, Integer.class) {
  37.208 +        public Object getValue(Object obj) {
  37.209 +            return new Integer(((UserTask) obj).getSpentTime());
  37.210 +        }
  37.211 +    };
  37.212 +    
  37.213      public static final SuggestionProperty PROP_SPENT_TIME_TODAY =
  37.214 -        new SuggestionProperty(PROPID_SPENT_TIME_TODAY, Integer.class) {
  37.215 -            public Object getValue(Object obj) {
  37.216 -                return new Integer(((UserTask) obj).getSpentTimeToday());
  37.217 -            }
  37.218 -        };
  37.219 -
  37.220 +            new SuggestionProperty(PROPID_SPENT_TIME_TODAY, Integer.class) {
  37.221 +        public Object getValue(Object obj) {
  37.222 +            return new Integer(((UserTask) obj).getSpentTimeToday());
  37.223 +        }
  37.224 +    };
  37.225 +    
  37.226      public static final SuggestionProperty PROP_OWNER =
  37.227 -        new SuggestionProperty(PROPID_OWNER, String.class) {
  37.228 -            public Object getValue(Object obj) {
  37.229 -                return ((UserTask) obj).getOwner();
  37.230 -            }
  37.231 -        };
  37.232 -
  37.233 +            new SuggestionProperty(PROPID_OWNER, String.class) {
  37.234 +        public Object getValue(Object obj) {
  37.235 +            return ((UserTask) obj).getOwner();
  37.236 +        }
  37.237 +    };
  37.238 +    
  37.239      public static final SuggestionProperty PROP_START =
  37.240 -        new SuggestionProperty(PROPID_START, Date.class) {
  37.241 -            public Object getValue(Object obj) {
  37.242 -                long start = ((UserTask) obj).getStart();
  37.243 -                if (start == -1)
  37.244 -                    return null;
  37.245 -                else
  37.246 -                    return new Date(start);
  37.247 -            }
  37.248 -        };
  37.249 -
  37.250 +            new SuggestionProperty(PROPID_START, Date.class) {
  37.251 +        public Object getValue(Object obj) {
  37.252 +            long start = ((UserTask) obj).getStart();
  37.253 +            if (start == -1)
  37.254 +                return null;
  37.255 +            else
  37.256 +                return new Date(start);
  37.257 +        }
  37.258 +    };
  37.259 +    
  37.260      public static SuggestionProperty getProperty(String propID) {
  37.261          if (propID.equals(PROPID_CATEGORY)) {
  37.262              return PROP_CATEGORY;
  37.263 @@ -205,13 +210,13 @@
  37.264              return PROP_DETAILS;
  37.265          } else if (propID.equals(PROPID_OWNER)) {
  37.266              return PROP_OWNER;
  37.267 -        } else if (propID.equals(PROPID_PRIORITY)) { 
  37.268 +        } else if (propID.equals(PROPID_PRIORITY)) {
  37.269              return PROP_PRIORITY;
  37.270 -        } else if (propID.equals(PROPID_SUMMARY)) { 
  37.271 +        } else if (propID.equals(PROPID_SUMMARY)) {
  37.272              return PROP_SUMMARY;
  37.273 -        } else if (propID.equals(PROPID_DETAILS)) { 
  37.274 +        } else if (propID.equals(PROPID_DETAILS)) {
  37.275              return PROP_DETAILS;
  37.276 -        } else if (propID.equals(PROPID_START)) { 
  37.277 +        } else if (propID.equals(PROPID_START)) {
  37.278              return PROP_START;
  37.279          } else if (propID.equals(PROPID_SPENT_TIME_TODAY)) {
  37.280              return PROP_SPENT_TIME_TODAY;
    38.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    38.2 +++ b/tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/filter/conditions-1_0.dtd	Mon Dec 04 21:59:57 2006 +0000
    38.3 @@ -0,0 +1,39 @@
    38.4 +<?xml version="1.0" encoding="UTF-8"?>
    38.5 +
    38.6 +<!--
    38.7 +    Document   : filters-1_0.dtd
    38.8 +    Created on : April 20, 2004, 12:14 PM
    38.9 +    Author     : or141057
   38.10 +    Description:
   38.11 +        DTD schema for saved filter conditions
   38.12 +-->
   38.13 +
   38.14 +<!-- BEWARE: The actual contents of settings is not checked against -->
   38.15 +<!-- this DTD so it is possible that this file and the reality go -->
   38.16 +<!-- out of. Check the code when in doubt. -->
   38.17 +    
   38.18 +
   38.19 +<!ELEMENT BooleanCondition EMPTY >
   38.20 +<!ATTLIST BooleanCondition 
   38.21 +    id CDATA #REQUIRED>
   38.22 +
   38.23 +<!ELEMENT StringCondition EMPTY >
   38.24 +<!ATTLIST StringCondition
   38.25 +    id CDATA #REQUIRED
   38.26 +    constant CDATA #REQUIRED>
   38.27 +
   38.28 +<!ELEMENT IntegerCondition EMPTY >
   38.29 +<!ATTLIST IntegerCondition 
   38.30 +    id CDATA #REQUIRED
   38.31 +    constant CDATA #REQUIRED>
   38.32 +
   38.33 +<!ELEMENT PriorityCondition EMPTY >
   38.34 +<!ATTLIST PriorityCondition
   38.35 +    priorities CDATA #REQUIRED>
   38.36 +
   38.37 +<!ELEMENT DateCondition EMPTY >
   38.38 +<!ATTLIST DateCondition
   38.39 +    id CDATA #REQUIRED
   38.40 +    date CDATA #REQUIRED>
   38.41 +
   38.42 +
    39.1 --- a/tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/mf-layer.xml	Mon Dec 04 21:57:00 2006 +0000
    39.2 +++ b/tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/mf-layer.xml	Mon Dec 04 21:59:57 2006 +0000
    39.3 @@ -19,21 +19,21 @@
    39.4  -->
    39.5  <!DOCTYPE filesystem PUBLIC "-//NetBeans//DTD Filesystem 1.1//EN" "http://www.netbeans.org/dtds/filesystem-1_1.dtd">
    39.6  <filesystem>
    39.7 -    <folder name="Actions">
    39.8 +<!--    <folder name="Actions">
    39.9          <folder name="View">
   39.10              <file name="org-netbeans-modules-tasklist-usertasks-actions-ViewTasksAction.instance" />
   39.11 -            <!--<file name="org-netbeans-modules-tasklist-usertasks-actions-ShowScheduleViewAction.instance" />-->
   39.12 +            <file name="org-netbeans-modules-tasklist-usertasks-actions-ShowScheduleViewAction.instance" />
   39.13          </folder>
   39.14          <folder name="Edit">
   39.15              <file name="org-netbeans-modules-tasklist-usertasks-actions-NewTaskAction.instance" />
   39.16          </folder>
   39.17 -    </folder>        
   39.18 +    </folder>    -->    
   39.19  
   39.20 -    <folder name="Shortcuts">
   39.21 +<!--    <folder name="Shortcuts">
   39.22          <file name="INSERT.shadow">
   39.23              <attr name="originalFile" stringvalue="Actions/Edit/org-netbeans-modules-tasklist-usertasks-actions-NewTaskAction.instance"/>
   39.24          </file>
   39.25 -    </folder>
   39.26 +    </folder>-->
   39.27        
   39.28      <folder name="Menu">
   39.29          <folder name="Window">
   39.30 @@ -98,11 +98,15 @@
   39.31                      <attr name="hint.originalPublicID"
   39.32                      stringvalue="-//NetBeans org.netbeans.modules.tasklist//DTD UserTaskFilter 1.0//EN"/>
   39.33                  </file>
   39.34 -
   39.35 +                <file name="DTD_UTPriorityCondition_1_0" url="filter/conditions-1_0.dtd">
   39.36 +                    <attr name="hint.originalPublicID"
   39.37 +                        stringvalue="-//NetBeans org.netbeans.modules.tasklist//DTD UTPriorityCondition 1.0//EN"/>
   39.38 +                </file>
   39.39              </folder>
   39.40          </folder>
   39.41  
   39.42          <folder name="lookups">
   39.43 +                          
   39.44              <folder name="NetBeans_org_netbeans_modules_tasklist">
   39.45                  <file name="DTD_UserTaskFilter_1_0.instance">
   39.46                      <attr name="instanceCreate" methodvalue="org.netbeans.api.settings.Factory.create"/>
   39.47 @@ -110,6 +114,12 @@
   39.48                      <attr name="settings.instanceClass" stringvalue="org.netbeans.modules.tasklist.usertasks.filter.UserTaskFilter"/>
   39.49                      <attr name="settings.instanceOf" stringvalue="org.netbeans.modules.tasklist.usertasks.filter.UserTaskFilter"/>
   39.50                  </file>
   39.51 +                <file name="DTD_UTPriorityCondition_1_0.instance">
   39.52 +                    <attr name="instanceCreate" methodvalue="org.netbeans.api.settings.Factory.create"/>
   39.53 +                    <attr name="settings.convertor" methodvalue="org.netbeans.modules.tasklist.usertasks.filter.UTPriorityCondition$Convertor.create"/>
   39.54 +                    <attr name="settings.instanceClass" stringvalue="org.netbeans.modules.tasklist.usertasks.filter.UTPriorityCondition"/>
   39.55 +                    <attr name="settings.instanceOf" stringvalue="org.netbeans.modules.tasklist.usertasks.filter.UTPriorityCondition"/>
   39.56 +                </file>
   39.57              </folder>
   39.58          </folder>
   39.59  
   39.60 @@ -124,6 +134,10 @@
   39.61                                          <attr name="settings.providerPath"
   39.62                                          stringvalue="xml/lookups/NetBeans_org_netbeans_modules_tasklist/DTD_UserTaskFilter_1_0.instance"/>
   39.63                                      </file>
   39.64 +                                    <file name="UTPriorityCondition">
   39.65 +                                        <attr name="settings.providerPath"
   39.66 +                                            stringvalue="xml/lookups/NetBeans_org_netbeans_modules_tasklist/DTD_UTPriorityCondition_1_0.instance"/>
   39.67 +                                    </file>
   39.68                                  </folder>
   39.69                              </folder>
   39.70                          </folder>
    40.1 --- a/tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/model/Bundle.properties	Mon Dec 04 21:57:00 2006 +0000
    40.2 +++ b/tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/model/Bundle.properties	Mon Dec 04 21:59:57 2006 +0000
    40.3 @@ -27,5 +27,7 @@
    40.4  CannotCreateDir=Cannot create directory {0}.
    40.5  FileNotValid=File {0} is not valid.
    40.6  
    40.7 +## StartedUserTask
    40.8 +InactivityDetected=User inactivity detected.
    40.9 +ActivityDetected=User activity detected.
   40.10  
   40.11 -
    41.1 --- a/tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/model/Dependency.java	Mon Dec 04 21:57:00 2006 +0000
    41.2 +++ b/tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/model/Dependency.java	Mon Dec 04 21:59:57 2006 +0000
    41.3 @@ -19,9 +19,6 @@
    41.4  
    41.5  package org.netbeans.modules.tasklist.usertasks.model;
    41.6  
    41.7 -import org.netbeans.modules.tasklist.usertasks.*;
    41.8 -
    41.9 -
   41.10  /**
   41.11   * Dependency for a task
   41.12   *
    42.1 --- a/tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/model/Duration.java	Mon Dec 04 21:57:00 2006 +0000
    42.2 +++ b/tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/model/Duration.java	Mon Dec 04 21:59:57 2006 +0000
    42.3 @@ -1,8 +1,5 @@
    42.4  package org.netbeans.modules.tasklist.usertasks.model;
    42.5  
    42.6 -import java.text.MessageFormat;
    42.7 -import org.openide.util.NbBundle;
    42.8 -
    42.9  /**
   42.10   * A duration class.
   42.11   */
   42.12 @@ -55,7 +52,7 @@
   42.13          this.minutes = this.minutes % 60;
   42.14          
   42.15          this.days = minutes / minutesPerDay;
   42.16 -        this.weeks = minutes / daysPerWeek;
   42.17 +        this.weeks = this.days / daysPerWeek;
   42.18          this.days = this.days % daysPerWeek;
   42.19      }
   42.20  
   42.21 @@ -81,4 +78,12 @@
   42.22          return (weeks * daysPerWeek + days) * minutesPerDay + hours * 60 +
   42.23                  minutes;
   42.24      }
   42.25 +
   42.26 +    public boolean equals(Object obj) {
   42.27 +        if (!(obj instanceof Duration))
   42.28 +            return false;
   42.29 +        Duration d = (Duration) obj;
   42.30 +        return d.weeks == weeks && d.days == days && d.hours == hours &&
   42.31 +                d.minutes == minutes;
   42.32 +    }
   42.33  }
    43.1 --- a/tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/model/StartedUserTask.java	Mon Dec 04 21:57:00 2006 +0000
    43.2 +++ b/tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/model/StartedUserTask.java	Mon Dec 04 21:59:57 2006 +0000
    43.3 @@ -7,6 +7,8 @@
    43.4  import javax.swing.event.EventListenerList;
    43.5  import org.netbeans.modules.tasklist.core.util.ActivityListener;
    43.6  import org.netbeans.modules.tasklist.usertasks.options.Settings;
    43.7 +import org.openide.awt.StatusDisplayer;
    43.8 +import org.openide.util.NbBundle;
    43.9  
   43.10  /**
   43.11   * Started user task.
   43.12 @@ -115,6 +117,9 @@
   43.13                  long lastActivity = ActivityListener.getLastActivityMillis();
   43.14                  long cur = System.currentTimeMillis();
   43.15                  if ((cur - lastActivity) < INACTIVITY_DURATION) {
   43.16 +                    StatusDisplayer.getDefault().setStatusText(
   43.17 +                            NbBundle.getMessage(StartedUserTask.class,
   43.18 +                            "ActivityDetected"));
   43.19                      state = STATE_WORKING;
   43.20                      
   43.21                      startedAt = lastActivity;
   43.22 @@ -137,7 +142,9 @@
   43.23                      ActivityListener.getLastActivityMillis()) > INACTIVITY_DURATION &&
   43.24                      Settings.getDefault().getDetectInactivity()) { // NOI18N
   43.25                      state = STATE_SUSPENDED;
   43.26 -
   43.27 +                    StatusDisplayer.getDefault().setStatusText(
   43.28 +                            NbBundle.getMessage(StartedUserTask.class, 
   43.29 +                            "InactivityDetected"));
   43.30                  }
   43.31                  
   43.32                  started.setSpentTime(initialSpentTime + diff);                    
   43.33 @@ -210,7 +217,7 @@
   43.34                  if (task == null) {
   43.35                      throw new InternalError("no task is running"); // NOI18N
   43.36                  } else {
   43.37 -                    task.setSpentTimeComputed(false);
   43.38 +                    task.setValuesComputed(false);
   43.39                      started = task;
   43.40                      startedAt = System.currentTimeMillis();
   43.41                      initialSpentTime = task.getSpentTime();
    44.1 --- a/tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/model/Timeout.java	Mon Dec 04 21:57:00 2006 +0000
    44.2 +++ b/tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/model/Timeout.java	Mon Dec 04 21:59:57 2006 +0000
    44.3 @@ -19,13 +19,11 @@
    44.4  
    44.5  package org.netbeans.modules.tasklist.usertasks.model;
    44.6  
    44.7 -import org.netbeans.modules.tasklist.usertasks.*;
    44.8 -
    44.9  /**
   44.10   * This is the "callback" interface from the TimeoutProvider class...
   44.11   * @author Trond Norbye
   44.12   */
   44.13 -interface Timeout {
   44.14 +public interface Timeout {
   44.15      /**
   44.16       * Callback function for the TimeoutProvider to call when the timeout
   44.17       * expired. This function will block the TimeoutProviders thread, so
    45.1 --- a/tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/model/TimeoutProvider.java	Mon Dec 04 21:57:00 2006 +0000
    45.2 +++ b/tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/model/TimeoutProvider.java	Mon Dec 04 21:59:57 2006 +0000
    45.3 @@ -22,7 +22,6 @@
    45.4  import java.util.LinkedList;
    45.5  import java.util.ListIterator;
    45.6  import java.util.Vector;
    45.7 -import org.netbeans.modules.tasklist.usertasks.*;
    45.8  
    45.9  /**
   45.10   * The TimeoutProvider class implements a way to let object that implements
   45.11 @@ -30,7 +29,7 @@
   45.12   *
   45.13   * @author Trond Norbye
   45.14   */
   45.15 -class TimeoutProvider implements Runnable {
   45.16 +public class TimeoutProvider implements Runnable {
   45.17      /** An inner class used to stash away all of the data */
   45.18      private class Entry {
   45.19          /** Create a new Entry instance 
   45.20 @@ -67,7 +66,7 @@
   45.21       * Get the one and only instance of the TimeoutProvider
   45.22       * @return the handle to the TimeoutProvider
   45.23       */
   45.24 -    static TimeoutProvider getInstance() { 
   45.25 +    public static TimeoutProvider getInstance() { 
   45.26  	if (instance == null) {
   45.27  	    instance = new TimeoutProvider();
   45.28  	}
   45.29 @@ -80,7 +79,7 @@
   45.30       * @param userRef the owners reference (null == all timeouts belonging to
   45.31       *                to this object)
   45.32       */
   45.33 -    void cancel(Timeout owner, Object userRef) {
   45.34 +    public void cancel(Timeout owner, Object userRef) {
   45.35  	synchronized (alarms) {
   45.36  	    ListIterator i = alarms.listIterator(0);
   45.37  
   45.38 @@ -104,7 +103,7 @@
   45.39       * @param userRef an object the user would like to get back with the timeout
   45.40       * @param timeout the time this object should time out
   45.41       */
   45.42 -    void add(Timeout owner, Object userRef, long timeout) {
   45.43 +    public void add(Timeout owner, Object userRef, long timeout) {
   45.44  	synchronized (alarms) {
   45.45  	    ListIterator i = alarms.listIterator(0);
   45.46  	    boolean done = false;
    46.1 --- a/tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/model/UserTask.java	Mon Dec 04 21:57:00 2006 +0000
    46.2 +++ b/tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/model/UserTask.java	Mon Dec 04 21:59:57 2006 +0000
    46.3 @@ -35,7 +35,6 @@
    46.4  import java.util.Iterator;
    46.5  import java.util.List;
    46.6  import java.util.ResourceBundle;
    46.7 -import java.util.logging.Level;
    46.8  
    46.9  import javax.swing.event.EventListenerList;
   46.10  import javax.swing.tree.TreePath;
   46.11 @@ -49,7 +48,6 @@
   46.12  import org.openide.text.Line;
   46.13  import org.openide.util.NbBundle;
   46.14  import org.netbeans.modules.tasklist.core.util.ObjectList;
   46.15 -import org.netbeans.modules.tasklist.usertasks.*;
   46.16  import org.netbeans.modules.tasklist.usertasks.annotations.UTAnnotation;
   46.17  import org.netbeans.modules.tasklist.usertasks.util.UnaryFunction;
   46.18  
   46.19 @@ -271,15 +269,16 @@
   46.20      public static final String PROP_START = "start"; // NOI18N
   46.21      public static final String PROP_SPENT_TIME_TODAY = "spentTimeToday"; // NOI18N
   46.22      
   46.23 -    /** last modified. long as returned by System.currentTimeMillise() */
   46.24 +    /** last modified. long as returned by System.currentTimeMillis() */
   46.25      public static final String PROP_LAST_EDITED_DATE = 
   46.26              "lastEditedDate"; // NOI18N
   46.27 -
   46.28 +    
   46.29 +    /** see setValuesComputed */
   46.30 +    public static final String PROP_VALUES_COMPUTED = 
   46.31 +            "valuesComputed"; // NOI18N
   46.32 +    
   46.33      // ATTENTION: if you add new fields here do not forget to update copyFrom
   46.34      
   46.35 -    /** <UserTaskListener> */
   46.36 -    protected EventListenerList listeners = new EventListenerList();
   46.37 -
   46.38      /**
   46.39       * When false, don't update the "last modified" date. 
   46.40       * Used by the restore code.
   46.41 @@ -328,8 +327,10 @@
   46.42      /**
   46.43       * true means progress will be computed automatically as a weighted average 
   46.44       * of the subtasks. If a task has no children it means 0%
   46.45 +     * true means that the effort will be computed automatically as them sum of the
   46.46 +     * subtask efforts. If a task has no children it means 0
   46.47       */
   46.48 -    private boolean percentComputed = false;
   46.49 +    private boolean valuesComputed = false;
   46.50      
   46.51      private Date dueDate;
   46.52      private boolean dueAlarmSent;
   46.53 @@ -338,18 +339,11 @@
   46.54      private long created;
   46.55      private long lastEditedDate;
   46.56  
   46.57 -    /**
   46.58 -     * true means that the effort will be computed automatically as them sum of the
   46.59 -     * subtask efforts. If a task has no children it means 0
   46.60 -     */
   46.61 -    private boolean effortComputed = false;
   46.62 -    
   46.63      /** in minutes */
   46.64      private int effort = 60;
   46.65      
   46.66      /** Time spent on this task */
   46.67      private int spentTime = 0;
   46.68 -    private boolean spentTimeComputed;
   46.69      
   46.70      private PropertyChangeListener lineListener;
   46.71  
   46.72 @@ -437,9 +431,7 @@
   46.73                  switch (ev.getType()) {
   46.74                      case ObjectList.Event.EVENT_ADDED:
   46.75                          if (Settings.getDefault().getAutoSwitchToComputed()) {
   46.76 -                            setProgressComputed(true);
   46.77 -                            setEffortComputed(true);
   46.78 -                            setSpentTimeComputed(true);
   46.79 +                            setValuesComputed(true);
   46.80                          }
   46.81                          structureChanged();
   46.82                          break;
   46.83 @@ -448,8 +440,7 @@
   46.84                          break;
   46.85                      }
   46.86                      case ObjectList.Event.EVENT_REORDERED:
   46.87 -                        if (UserTask.this.list != null)
   46.88 -                            UserTask.this.list.markChanged();
   46.89 +                        structureChanged();
   46.90                          break;
   46.91                      case ObjectList.Event.EVENT_STRUCTURE_CHANGED:
   46.92                          structureChanged();
   46.93 @@ -459,17 +450,13 @@
   46.94                  }
   46.95              }
   46.96              public void structureChanged() {
   46.97 -                if (isProgressComputed()) {
   46.98 +                if (isValuesComputed()) {
   46.99                      setProgress_(computeProgress());
  46.100 -                }
  46.101 -                if (isEffortComputed()) {
  46.102                      setEffort_(computeEffort());
  46.103 -                }
  46.104 -                if (isSpentTimeComputed()) {
  46.105                      setSpentTime_(computeSpentTime());
  46.106                  }
  46.107                  if (UserTask.this.list != null) {
  46.108 -                    UserTask.this.list.markChanged();
  46.109 +                    UserTask.this.list.fireChange();
  46.110                  }
  46.111              }
  46.112          });
  46.113 @@ -632,12 +619,12 @@
  46.114       */
  46.115      public void setSpentTime(int spentTime) {
  46.116          assert spentTime >= 0;
  46.117 -        if (spentTimeComputed)
  46.118 -            setSpentTimeComputed(false);
  46.119 +        if (valuesComputed)
  46.120 +            setValuesComputed(false);
  46.121      
  46.122          setSpentTime_(spentTime);
  46.123  
  46.124 -        if (isProgressComputed() && getSubtasks().size() == 0)
  46.125 +        if (isValuesComputed() && getSubtasks().size() == 0)
  46.126              setProgress_(computeProgress());
  46.127      }
  46.128      
  46.129 @@ -656,40 +643,41 @@
  46.130                  new Integer(old), new Integer(spentTime));
  46.131              if (getParent() != null) {
  46.132                  UserTask p = (UserTask) getParent();
  46.133 -                if (p.isSpentTimeComputed())
  46.134 -                    p.setSpentTime_(p.computeSpentTime());
  46.135 -                if (p.isSpentTimeComputed())
  46.136 +                if (p.isValuesComputed())
  46.137                      p.setSpentTime_(p.computeSpentTime());
  46.138              }
  46.139          }
  46.140      }
  46.141      
  46.142      /**
  46.143 -     * Sets whether the spent time of this task should be computed
  46.144 +     * Sets whether the spent time, progress and effort of this task 
  46.145 +     * should be computed
  46.146       *
  46.147 -     * @param v true = the spent time will be computed
  46.148 +     * @param v true = the spent time, progress and effort will be computed
  46.149       */
  46.150 -    public void setSpentTimeComputed(boolean v) {
  46.151 -        if (this.spentTimeComputed != v) {
  46.152 +    public void setValuesComputed(boolean v) {
  46.153 +        if (this.valuesComputed != v) {
  46.154              if (isStarted())
  46.155                  stop();
  46.156 -            this.spentTimeComputed = v;
  46.157 -            firePropertyChange("spentTimeComputed", Boolean.valueOf(!v), // NOI18N
  46.158 -                Boolean.valueOf(v));
  46.159 +            this.valuesComputed = v;
  46.160 +            firePropertyChange(PROP_VALUES_COMPUTED, 
  46.161 +                    Boolean.valueOf(!v), Boolean.valueOf(v));
  46.162              if (v) {
  46.163                  setSpentTime_(computeSpentTime());
  46.164 +                setProgress_(computeProgress());
  46.165 +                setProgress_(computeProgress());
  46.166              }
  46.167          }
  46.168      }
  46.169      
  46.170      /**
  46.171 -     * Getter for property spentTimeComputed.
  46.172 +     * Getter for property valuesComputed.
  46.173       *
  46.174 -     * @return true = the spent time will be computed as the sum of the 
  46.175 -     * subtask values
  46.176 +     * @return true = the spent time, effort and progress 
  46.177 +     * will be computed as the sum of the subtask values
  46.178       */
  46.179 -    public boolean isSpentTimeComputed() {
  46.180 -        return spentTimeComputed;
  46.181 +    public boolean isValuesComputed() {
  46.182 +        return valuesComputed;
  46.183      }
  46.184      
  46.185      /**
  46.186 @@ -701,7 +689,7 @@
  46.187       * @return spent time in minutes
  46.188       */
  46.189      int computeSpentTime() {
  46.190 -        assert spentTimeComputed;
  46.191 +        assert valuesComputed;
  46.192  
  46.193          int sum = 0;
  46.194          Iterator it = getSubtasks().iterator();        
  46.195 @@ -760,7 +748,7 @@
  46.196       * @return true = this task could be started
  46.197       */
  46.198      public boolean isStartable() {
  46.199 -        return !isSpentTimeComputed() && !isDone() && areDependenciesDone();
  46.200 +        return !isValuesComputed() && !isDone() && areDependenciesDone();
  46.201      }
  46.202      
  46.203      /**
  46.204 @@ -918,10 +906,10 @@
  46.205       * @return computed percentage
  46.206       */
  46.207      private float computeProgress() {
  46.208 -        assert percentComputed;
  46.209 +        assert valuesComputed;
  46.210          
  46.211          if (getSubtasks().size() == 0) {
  46.212 -            if (isSpentTimeComputed() || isEffortComputed())
  46.213 +            if (isValuesComputed())
  46.214                  return 100.0f;
  46.215              
  46.216              float p = (((float) getSpentTime()) / getEffort()) * 100.0f;
  46.217 @@ -946,32 +934,6 @@
  46.218          return p;
  46.219      }
  46.220  
  46.221 -    /**
  46.222 -     * Returns true if progress of this task will be computed automatically
  46.223 -     * from the progress of subtasks
  46.224 -     *
  46.225 -     * @return true = automatically computed
  46.226 -     */
  46.227 -    public boolean isProgressComputed() {
  46.228 -        return percentComputed;
  46.229 -    }
  46.230 -
  46.231 -    /**
  46.232 -     * Sets whether the progress of this task should be computed
  46.233 -     *
  46.234 -     * @param v true = the progress will be computed
  46.235 -     */
  46.236 -    public void setProgressComputed(boolean v) {
  46.237 -        if (this.percentComputed != v) {
  46.238 -            this.percentComputed = v;
  46.239 -            firePropertyChange("progressComputed", Boolean.valueOf(!v), // NOI18N
  46.240 -                Boolean.valueOf(v));
  46.241 -            if (v) {
  46.242 -                setProgress_(computeProgress());
  46.243 -            }
  46.244 -        }
  46.245 -    }
  46.246 -    
  46.247      /** 
  46.248       * Sets the percentage complete for this task. Will also
  46.249       * update the done flag for this task. 
  46.250 @@ -990,8 +952,8 @@
  46.251       */
  46.252      public void setProgress(float progress) {
  46.253          assert progress >= 0 && progress <= 100;
  46.254 -        if (percentComputed)
  46.255 -            setProgressComputed(false);
  46.256 +        if (valuesComputed)
  46.257 +            setValuesComputed(false);
  46.258          
  46.259          setProgress_(progress);
  46.260          
  46.261 @@ -1036,7 +998,7 @@
  46.262                  new Float(old), new Float(progress));
  46.263              if (getParent() != null) {
  46.264                  UserTask p = (UserTask) getParent();
  46.265 -                if (p.isProgressComputed())
  46.266 +                if (p.isValuesComputed())
  46.267                      p.setProgress_(p.computeProgress());
  46.268              }
  46.269          }
  46.270 @@ -1382,13 +1344,11 @@
  46.271          }
  46.272  
  46.273          progress = from.progress;
  46.274 -        percentComputed = from.percentComputed;
  46.275 +        valuesComputed = from.valuesComputed;
  46.276          category = from.category;
  46.277          created = from.created;
  46.278          effort = from.effort;
  46.279 -        effortComputed = from.effortComputed;
  46.280          spentTime = from.spentTime;
  46.281 -        spentTimeComputed = from.spentTimeComputed;
  46.282          dependencies.clear();
  46.283          dependencies.addAll(from.dependencies);
  46.284          owner = from.owner;
  46.285 @@ -1426,31 +1386,6 @@
  46.286      }
  46.287      
  46.288      /**
  46.289 -     * Getter for property effortComputed.
  46.290 -     *
  46.291 -     * @return true = effort will be computed as the sum of the subtask efforts
  46.292 -     */
  46.293 -    public boolean isEffortComputed() {
  46.294 -        return effortComputed;
  46.295 -    }
  46.296 -    
  46.297 -    /**
  46.298 -     * Setter for property effortComputed.
  46.299 -     *
  46.300 -     * @param effortComputed New value of property effortComputed.
  46.301 -     */
  46.302 -    public void setEffortComputed(boolean effortComputed) {
  46.303 -        if (this.effortComputed != effortComputed) {
  46.304 -            this.effortComputed = effortComputed;
  46.305 -            firePropertyChange("effortComputed", Boolean.valueOf(!effortComputed), // NOI18N
  46.306 -                Boolean.valueOf(effortComputed));
  46.307 -            if (effortComputed) {
  46.308 -                setEffort_(computeEffort());
  46.309 -            }
  46.310 -        }
  46.311 -    }
  46.312 -    
  46.313 -    /**
  46.314       * Computes "effort" property as the sum of the subtask efforts.
  46.315       * This method should only be called if effortComputed == true
  46.316       *
  46.317 @@ -1459,7 +1394,7 @@
  46.318       * @return effort in minutes
  46.319       */
  46.320      int computeEffort() {
  46.321 -        assert effortComputed;
  46.322 +        assert valuesComputed;
  46.323          
  46.324          Iterator it = getSubtasks().iterator();
  46.325          int sum = 0;
  46.326 @@ -1477,12 +1412,12 @@
  46.327       */
  46.328      public void setEffort(int effort) {
  46.329          assert effort >= 0;
  46.330 -        if (effortComputed)
  46.331 -            setEffortComputed(false);
  46.332 +        if (valuesComputed)
  46.333 +            setValuesComputed(false);
  46.334      
  46.335          setEffort_(effort);
  46.336  
  46.337 -        if (isProgressComputed() && getSubtasks().size() == 0)
  46.338 +        if (isValuesComputed() && getSubtasks().size() == 0)
  46.339              setProgress_(computeProgress());
  46.340      }
  46.341  
  46.342 @@ -1496,14 +1431,17 @@
  46.343          int old = this.effort;
  46.344          
  46.345          if (this.effort != effort) {
  46.346 +            int oldre = getRemainingEffort();
  46.347              this.effort = effort;
  46.348              firePropertyChange("effort",  // NOI18N
  46.349                  new Integer(old), new Integer(effort));
  46.350 +            firePropertyChange("remainingEffort",
  46.351 +                    oldre, getRemainingEffort());
  46.352              if (getParent() != null) {
  46.353                  UserTask p = (UserTask) getParent();
  46.354 -                if (p.isEffortComputed())
  46.355 +                if (p.isValuesComputed())
  46.356                      p.setEffort_(p.computeEffort());
  46.357 -                if (p.isProgressComputed())
  46.358 +                if (p.isValuesComputed())
  46.359                      p.setProgress_(p.computeProgress());
  46.360              }
  46.361          }
  46.362 @@ -1534,7 +1472,7 @@
  46.363      }
  46.364      
  46.365      /**
  46.366 -     * Fires a PropertyChangeEvent
  46.367 +     * Fires a PropertyChangeEvent. Also fires an event for PROP_DEEP_CHANGE
  46.368       *
  46.369       * @param propertyName changed property
  46.370       * @param oldValue old value (may be null)
  46.371 @@ -1543,7 +1481,7 @@
  46.372      protected void firePropertyChange(String propertyName, Object oldValue, Object newValue) {
  46.373          supp.firePropertyChange(propertyName, oldValue, newValue);
  46.374          if (list != null)
  46.375 -            list.markChanged();
  46.376 +            list.fireChange();
  46.377      }
  46.378      
  46.379      /**
  46.380 @@ -1831,7 +1769,7 @@
  46.381       */
  46.382      public int getSpentTimeToday() {
  46.383          int sum = 0;
  46.384 -        if (isSpentTimeComputed()) {
  46.385 +        if (isValuesComputed()) {
  46.386              for (int i = 0; i < getSubtasks().size(); i++) {
  46.387                  UserTask ut = (UserTask) getSubtasks().get(i);
  46.388                  sum += ut.getSpentTimeToday();
    47.1 --- a/tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/model/UserTaskList.java	Mon Dec 04 21:57:00 2006 +0000
    47.2 +++ b/tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/model/UserTaskList.java	Mon Dec 04 21:59:57 2006 +0000
    47.3 @@ -19,44 +19,16 @@
    47.4  
    47.5  package org.netbeans.modules.tasklist.usertasks.model;
    47.6  
    47.7 -import java.awt.event.ActionEvent;
    47.8 -import java.awt.event.ActionListener;
    47.9 -import java.io.BufferedOutputStream;
   47.10 -import java.io.File;
   47.11 -import java.io.FileOutputStream;
   47.12 -import java.io.IOException;
   47.13 -import java.io.InputStream;
   47.14 -import java.io.OutputStream;
   47.15 -import java.io.OutputStreamWriter;
   47.16 -import java.io.Writer;
   47.17 -import java.net.URISyntaxException;
   47.18 -import java.text.ParseException;
   47.19  import java.util.ArrayList;
   47.20  import java.util.Iterator;
   47.21  import java.util.List;
   47.22  import java.util.Set;
   47.23 -import java.util.logging.Level;
   47.24 +import javax.swing.event.ChangeEvent;
   47.25 +import javax.swing.event.ChangeListener;
   47.26 +import javax.swing.event.EventListenerList;
   47.27  
   47.28 -import javax.swing.SwingUtilities;
   47.29 -import javax.swing.Timer;
   47.30 -import net.fortuna.ical4j.data.ParserException;
   47.31 -import net.fortuna.ical4j.model.ValidationException;
   47.32 -import org.netbeans.modules.tasklist.usertasks.options.Settings;
   47.33 -import org.netbeans.modules.tasklist.usertasks.translators.ICalExportFormat;
   47.34 -import org.netbeans.modules.tasklist.usertasks.translators.ICalImportFormat;
   47.35 -import org.netbeans.modules.tasklist.usertasks.util.UTUtils;
   47.36 -import org.openide.DialogDescriptor;
   47.37 -import org.openide.DialogDisplayer;
   47.38 -import org.openide.NotifyDescriptor;
   47.39 -import org.openide.NotifyDescriptor.Message;
   47.40 -import org.openide.filesystems.FileLock;
   47.41 -import org.openide.filesystems.FileObject;
   47.42 -import org.openide.filesystems.FileUtil;
   47.43 -import org.openide.util.NbBundle;
   47.44  import org.netbeans.modules.tasklist.core.util.ObjectList;
   47.45 -
   47.46 -import org.netbeans.modules.tasklist.usertasks.*;
   47.47 -
   47.48 +import org.netbeans.modules.tasklist.usertasks.DueTasksNotifier;
   47.49  
   47.50  /**
   47.51   * This class represents the tasklist itself
   47.52 @@ -65,7 +37,7 @@
   47.53   * @author Trond Norbye
   47.54   * @author tl
   47.55   */
   47.56 -public class UserTaskList implements Timeout, ObjectList.Owner {    
   47.57 +public class UserTaskList implements ObjectList.Owner {    
   47.58      /**
   47.59       * Callback for the UserTaskList.process method
   47.60       */
   47.61 @@ -77,172 +49,25 @@
   47.62           */
   47.63          public void process(UserTask ut);
   47.64      }
   47.65 -
   47.66 -    /**
   47.67 -     * Callback for finding the next timeout
   47.68 -     */
   47.69 -    private static class FindNextTimeoutUserTaskProcessor implements
   47.70 -    UserTaskProcessor {
   47.71 -        private long nextTimeout = Long.MAX_VALUE;
   47.72 -        
   47.73 -        /** Task for the next timeout */
   47.74 -        public UserTask ref = null;
   47.75 -        
   47.76 -        public void process(UserTask t) {
   47.77 -            long n = t.getDueTime();
   47.78 -            if (n != Long.MAX_VALUE && !t.isDueAlarmSent() && !t.isDone() &&
   47.79 -                n > System.currentTimeMillis() && n < nextTimeout) {
   47.80 -                nextTimeout = n;
   47.81 -                ref = t;
   47.82 -            }
   47.83 -        }
   47.84 -    }
   47.85 -    
   47.86 -    private static class ShowExpiredUserTaskProcessor implements
   47.87 -        UserTaskProcessor {
   47.88 -        public void process(UserTask t) {
   47.89 -            long n = t.getDueTime();
   47.90 -            if (n != Long.MAX_VALUE && !t.isDueAlarmSent() &&
   47.91 -                !t.isDone() && 
   47.92 -                n <= System.currentTimeMillis()) {
   47.93 -                showExpiredTask(t);
   47.94 -            }
   47.95 -        }
   47.96 -
   47.97 -        /**
   47.98 -         * Present the user with a dialog that shows information of the task that
   47.99 -         * expired... 
  47.100 -         *
  47.101 -         * @param task the task to show
  47.102 -         */
  47.103 -        private void showExpiredTask(UserTask task) {
  47.104 -            task.setDueAlarmSent(true);
  47.105 -
  47.106 -            final UserTask t = task;
  47.107 -            SwingUtilities.invokeLater(new Runnable() {
  47.108 -                public void run() {
  47.109 -                    UserTaskDuePanel panel = new UserTaskDuePanel(t);
  47.110 -
  47.111 -                    String title = NbBundle.getMessage(UserTaskList.class, "TaskDueLabel"); // NOI18N
  47.112 -                    DialogDescriptor d = new DialogDescriptor(panel, title);                
  47.113 -                    d.setModal(true);
  47.114 -                    d.setMessageType(NotifyDescriptor.PLAIN_MESSAGE);
  47.115 -                    d.setOptions(new Object[] {DialogDescriptor.OK_OPTION});
  47.116 -                    java.awt.Dialog dlg = DialogDisplayer.getDefault().createDialog(d);
  47.117 -                    dlg.pack();
  47.118 -                    dlg.setVisible(true);
  47.119 -                }
  47.120 -            });
  47.121 -        }
  47.122 -    }
  47.123 -    
  47.124 -    private static UserTaskList tasklist = null;
  47.125 -    
  47.126 -    /**
  47.127 -     * Copies the content of one stream to another.
  47.128 -     *
  47.129 -     * @param is input stream
  47.130 -     * @param os output stream
  47.131 -     */
  47.132 -    private static void copyStream(InputStream is, OutputStream os) 
  47.133 -    throws IOException {
  47.134 -        byte[] buffer = new byte[1024];
  47.135 -        int read;
  47.136 -        while ((read = is.read(buffer)) != -1) {
  47.137 -            os.write(buffer, 0, read);
  47.138 -        }
  47.139 -    }
  47.140 -    
  47.141 -    /**
  47.142 -     * Returns the default task list
  47.143 -     *
  47.144 -     * @return default task list
  47.145 -     */
  47.146 -    public static UserTaskList getDefault() throws IOException {
  47.147 -        if (tasklist != null) 
  47.148 -            return tasklist;
  47.149 -                
  47.150 -        File f = getDefaultFile();
  47.151 -        FileObject fo = FileUtil.toFileObject(f);
  47.152 -        if (fo != null) 
  47.153 -            return readDocument(fo);
  47.154 -
  47.155 -        File dir = f.getParentFile();
  47.156 -        if (!dir.exists() && !dir.mkdirs()) {
  47.157 -            throw new IOException(
  47.158 -                NbBundle.getMessage(UserTaskList.class,
  47.159 -                    "CannotCreateDir", dir.getAbsolutePath())); // NOI18N
  47.160 -        }
  47.161 -        OutputStream os = new FileOutputStream(f);
  47.162 -        try {
  47.163 -            InputStream is = UserTaskList.class.getResourceAsStream(
  47.164 -                    "/org/netbeans/modules/tasklist/usertasks/tasklist.ics"); // NOI18N
  47.165 -            try {
  47.166 -                copyStream(is, os);
  47.167 -            } finally {
  47.168 -                is.close();
  47.169 -            }
  47.170 -        } finally {
  47.171 -            os.close();
  47.172 -        }
  47.173 -
  47.174 -        tasklist = readDocument(FileUtil.toFileObject(f));
  47.175 -        return tasklist;
  47.176 -    }
  47.177      
  47.178      private UserTaskObjectList tasks;
  47.179  
  47.180 -    /** Has the options set changed such that we need to save */
  47.181 -    protected boolean needSave = false;
  47.182 -    protected boolean dontSave = false;
  47.183 -    
  47.184      /** 
  47.185       * this value is used by ICalImport/ExportFormat to store additional
  47.186       * not editable parameters
  47.187       */
  47.188      public Object userObject;
  47.189      
  47.190 -    /** File being shown in this tasklist */
  47.191 -    private FileObject file = null;
  47.192 -    
  47.193 -    /** The current timeout */
  47.194 -    private long currentTimeout;
  47.195 +    private DueTasksNotifier dueTasksNotifier;
  47.196 +
  47.197 +    /** <ChangeListener> */
  47.198 +    private EventListenerList listeners = new EventListenerList();
  47.199      
  47.200      /**
  47.201 -     * During loading of a tasklist I may encounter items that have expired
  47.202 -     * while the IDE was shut down. Since the load-function turns off the 
  47.203 -     * effect of markChanged, I need to store this information in another
  47.204 -     * variable, and save the tasklist when the load is finished..
  47.205 -     */
  47.206 -    private boolean expiredTask;
  47.207 -    
  47.208 -    /** Timer which keeps track of outstanding save requests - that way
  47.209 -     * deleting multiple items for example will not cause multiple saves. */
  47.210 -    private Timer runTimer = null;
  47.211 -
  47.212 -
  47.213 -    // User can work on one task at time (simplification) ~~~~~~~~~~~~~~~
  47.214 -
  47.215 -    /**
  47.216 -     * Creates a new instance of TaskList
  47.217 +     * Creates a new instance.
  47.218       */
  47.219      public UserTaskList() {
  47.220          tasks = new UserTaskObjectList(this);
  47.221 -        tasks.addListener(new ObjectList.Listener() {
  47.222 -            public void listChanged(ObjectList.Event ev) {
  47.223 -                markChanged();
  47.224 -            }
  47.225 -        });
  47.226 -        
  47.227 -        expiredTask = false;
  47.228 -        currentTimeout = Long.MAX_VALUE;
  47.229 -    }
  47.230 -    
  47.231 -    /** 
  47.232 -     * Location of the tasklist 
  47.233 -     */
  47.234 -    public FileObject getFile() {
  47.235 -        return file;
  47.236      }
  47.237      
  47.238      /**
  47.239 @@ -309,96 +134,6 @@
  47.240          }
  47.241      }
  47.242      
  47.243 -    /** Write items out to disk */
  47.244 -    public void save() {
  47.245 -        if (!needSave || dontSave) {
  47.246 -            return;
  47.247 -        }
  47.248 -
  47.249 -        // Write out items to disk
  47.250 -        scheduleWrite();
  47.251 -    }
  47.252 -    
  47.253 -    /**
  47.254 -     * Returns the default .ics file.
  47.255 -     *
  47.256 -     * @return default ics file
  47.257 -     */
  47.258 -    private static File getDefaultFile() {
  47.259 -        String name = Settings.getDefault().getExpandedFilename();
  47.260 -        File fname = FileUtil.normalizeFile(new File(name));
  47.261 -        return fname;
  47.262 -    }
  47.263 -    
  47.264 -    /**
  47.265 -     * Reads an ics file
  47.266 -     *
  47.267 -     * @param is an .ics file
  47.268 -     */
  47.269 -    private static UserTaskList readDocument(InputStream is) throws IOException {
  47.270 -        ICalImportFormat io = new ICalImportFormat();
  47.271 -
  47.272 -        UserTaskList ret = new UserTaskList();
  47.273 -        ret.dontSave = true;
  47.274 -        try {
  47.275 -            io.read(ret, is);
  47.276 -        } catch (ParserException e) {
  47.277 -            // NOTE the exception text should be localized!
  47.278 -            DialogDisplayer.getDefault().notify(new Message(e.getMessage(),
  47.279 -               NotifyDescriptor.ERROR_MESSAGE));
  47.280 -            UTUtils.LOGGER.log(Level.SEVERE, "", e); // NOI18N
  47.281 -        } catch (IOException e) {
  47.282 -            // NOTE the exception text should be localized!
  47.283 -            DialogDisplayer.getDefault().notify(new Message(e.getMessage(),
  47.284 -               NotifyDescriptor.ERROR_MESSAGE));
  47.285 -            UTUtils.LOGGER.log(Level.SEVERE, "", e); // NOI18N
  47.286 -        }
  47.287 -
  47.288 -        ret.needSave = false;
  47.289 -        ret.dontSave = false;        
  47.290 -
  47.291 -        ret.orderNextTimeout();
  47.292 -        
  47.293 -        if (ret.expiredTask) {
  47.294 -            // One (or more) tasks expired while the IDE was closed...
  47.295 -            // save the list as soon as possible...
  47.296 -            ret.expiredTask = true;
  47.297 -            ret.markChanged();
  47.298 -        }
  47.299 -        return ret;
  47.300 -    }
  47.301 -    
  47.302 -    /**
  47.303 -     * Reads an ics file
  47.304 -     *
  47.305 -     * @param fo an .ics file
  47.306 -     */
  47.307 -    public static UserTaskList readDocument(FileObject fo) throws IOException {
  47.308 -        if (fo.isValid()) {
  47.309 -            InputStream is = fo.getInputStream();
  47.310 -            UserTaskList ret = null;
  47.311 -            try {
  47.312 -                long m = System.currentTimeMillis();
  47.313 -                ret = readDocument(is);
  47.314 -                UTUtils.LOGGER.fine("File " + fo + " read in " + // NOI18N
  47.315 -                    (System.currentTimeMillis() - m) + "ms"); // NOI18N
  47.316 -            } finally {
  47.317 -                try {
  47.318 -                    is.close();
  47.319 -                } catch (IOException e) {
  47.320 -                    UTUtils.LOGGER.log(Level.WARNING, 
  47.321 -                            "closing file failed", e); // NOI18N
  47.322 -                }
  47.323 -            }
  47.324 -            ret.file = fo;
  47.325 -            return ret;
  47.326 -        } else {
  47.327 -            throw new IOException(
  47.328 -                NbBundle.getMessage(UserTaskList.class,
  47.329 -                    "FileNotValid", FileUtil.getFileDisplayName(fo))); // NOI18N
  47.330 -        }
  47.331 -    }
  47.332 -
  47.333      // Look up a particular item by uid
  47.334      public UserTask findItem(Iterator tasks, String uid) {
  47.335          while (tasks.hasNext()) {
  47.336 @@ -431,138 +166,6 @@
  47.337      }
  47.338          
  47.339      /** 
  47.340 -     * Schedule a document save 
  47.341 -     */
  47.342 -    private void scheduleWrite() {
  47.343 -        // Stop our current timer; the previous node has not
  47.344 -        // yet been scanned; too brief an interval
  47.345 -	if (runTimer != null) {
  47.346 -	    runTimer.stop();
  47.347 -	    runTimer = null;
  47.348 -	}
  47.349 -	runTimer = new Timer(300, // 0.3 second delay
  47.350 -		     new ActionListener() {
  47.351 -			 public void actionPerformed(ActionEvent evt) {
  47.352 -                             runTimer = null;
  47.353 -                             
  47.354 -                             // Write out items to disk
  47.355 -                             try {
  47.356 -                                 writeDocument();
  47.357 -                             } catch (IOException ioe) {
  47.358 -                                 ioe.printStackTrace();
  47.359 -                                 DialogDisplayer.getDefault().notify(new Message(
  47.360 -                                    ioe, NotifyDescriptor.ERROR_MESSAGE));
  47.361 -                             }
  47.362 -                             needSave = false;
  47.363 -			 }
  47.364 -		     });
  47.365 -	runTimer.setRepeats(false);
  47.366 -	runTimer.setCoalesce(true);
  47.367 -	runTimer.start();
  47.368 -    }
  47.369 -
  47.370 -    /** 
  47.371 -     * Write the list to iCal.
  47.372 -     */
  47.373 -    private void writeDocument() throws IOException {
  47.374 -        if (this.file == null)
  47.375 -            return;
  47.376 -        
  47.377 -        ICalExportFormat io = new ICalExportFormat();
  47.378 -        
  47.379 -        FileLock lock = this.file.lock();
  47.380 -        try {
  47.381 -            Writer w = new OutputStreamWriter(new BufferedOutputStream(
  47.382 -                    file.getOutputStream(lock)), "UTF-8");;
  47.383 -            try {
  47.384 -                io.writeList(this, w, false);
  47.385 -            } catch (ParseException e) {
  47.386 -                e.printStackTrace();
  47.387 -                throw new IOException(e.getMessage());
  47.388 -            } catch (URISyntaxException e) {
  47.389 -                e.printStackTrace();
  47.390 -                throw new IOException(e.getMessage());
  47.391 -            } catch (ValidationException e) {
  47.392 -                e.printStackTrace();
  47.393 -                throw new IOException(e.getMessage());
  47.394 -            } finally {
  47.395 -                try {
  47.396 -                    w.close();
  47.397 -                } catch (IOException e) {
  47.398 -                    UTUtils.LOGGER.log(Level.WARNING, 
  47.399 -                            "failed closing file", e);
  47.400 -                }
  47.401 -            }
  47.402 -        } finally {
  47.403 -            lock.releaseLock();
  47.404 -        }
  47.405 -
  47.406 -        // Remove permissions for others on the file when on Unix
  47.407 -        // varieties
  47.408 -        if (new File("/bin/chmod").exists()) { // NOI18N
  47.409 -            try {
  47.410 -                Runtime.getRuntime().exec(
  47.411 -                     new String[] {"/bin/chmod", "go-rwx",  // NOI18N
  47.412 -                         FileUtil.toFile(this.file).getAbsolutePath()});
  47.413 -            } catch (Exception e) {
  47.414 -                // Silently accept
  47.415 -                UTUtils.LOGGER.log(Level.INFO, 
  47.416 -                        "chmod call failed", e); // NOI18N
  47.417 -            }
  47.418 -        }
  47.419 -
  47.420 -        needSave = false;
  47.421 -    }
  47.422 -    
  47.423 -    /**
  47.424 -     * Order a timeout for the next due date
  47.425 -     */
  47.426 -    void orderNextTimeout() {
  47.427 -        ShowExpiredUserTaskProcessor se =
  47.428 -            new ShowExpiredUserTaskProcessor();
  47.429 -        processDepthFirst(se, getSubtasks());
  47.430 -        
  47.431 -        FindNextTimeoutUserTaskProcessor p = 
  47.432 -            new FindNextTimeoutUserTaskProcessor();
  47.433 -        processDepthFirst(p, getSubtasks());
  47.434 -        
  47.435 -        if (p.ref != null && p.ref.getDueTime() != Long.MAX_VALUE && 
  47.436 -            !p.ref.isDueAlarmSent() && !p.ref.isDone() &&
  47.437 -            p.ref.getDueTime() != currentTimeout) {
  47.438 -            // cancel the previous ordered timeout, and add the new one
  47.439 -            if (currentTimeout != Long.MAX_VALUE) {
  47.440 -                TimeoutProvider.getInstance().cancel(this, null);
  47.441 -            }
  47.442 -            TimeoutProvider.getInstance().add(this, p.ref, p.ref.getDueTime());
  47.443 -            currentTimeout = p.ref.getDueTime();
  47.444 -        }
  47.445 -    }
  47.446 -    
  47.447 -    public String toString() {
  47.448 -        return "UserTaskList(" + file + ")"; // NOI18N
  47.449 -    }
  47.450 -    
  47.451 -    /**
  47.452 -     * Callback function for the TimeoutProvider to call when the timeout
  47.453 -     * expired. This function will block the TimeoutProviders thread, so
  47.454 -     * it should be used for a timeconsuming task (one should probably
  47.455 -     * reschedule oneself with the SwingUtilities.invokeLater() ???)
  47.456 -     * @param o the object provided as a user reference
  47.457 -     */
  47.458 -    public void timeoutExpired(Object o) {
  47.459 -        // order the next timeout for this list
  47.460 -        orderNextTimeout();
  47.461 -    }
  47.462 -
  47.463 -    protected void setNeedSave(boolean b) {
  47.464 -        needSave = b;
  47.465 -    }
  47.466 -
  47.467 -    protected void setDontSave(boolean b) {
  47.468 -        dontSave = b;
  47.469 -    }
  47.470 -
  47.471 -    /** 
  47.472       * Returns top-level tasks holded by this list. 
  47.473       *
  47.474       * @return list of top-level tasks
  47.475 @@ -571,18 +174,6 @@
  47.476          return tasks;
  47.477      }
  47.478  
  47.479 -    /**
  47.480 -     * Notify the task list that some aspect of it has been changed, so
  47.481 -     * it should save itself soon. Eventually calls save 
  47.482 -     */
  47.483 -    public void markChanged() {
  47.484 -        if (dontSave)
  47.485 -            return;
  47.486 -        orderNextTimeout();
  47.487 -        needSave = true;
  47.488 -        save();
  47.489 -    }
  47.490 -
  47.491      public ObjectList getObjectList() {
  47.492          return tasks;
  47.493      }
  47.494 @@ -622,7 +213,46 @@
  47.495          }
  47.496      }
  47.497      
  47.498 -    /** For debugging purposes, only. Writes directly to serr. 
  47.499 +    /**
  47.500 +     * Adds a change listener. The listener will be notified whenever some
  47.501 +     * change occures to a task at any level in this task list.
  47.502 +     *
  47.503 +     * @param l a listener
  47.504 +     */
  47.505 +    public void addChangeListener(ChangeListener l) {
  47.506 +        listeners.add(ChangeListener.class, l);
  47.507 +    }
  47.508 +    
  47.509 +    /**
  47.510 +     * Removes a change listener.
  47.511 +     *
  47.512 +     * @param l a listener.
  47.513 +     */
  47.514 +    public void removeChangeListener(ChangeListener l) {
  47.515 +        listeners.remove(ChangeListener.class, l);
  47.516 +    }
  47.517 +    
  47.518 +    /**
  47.519 +     * Fires a ChangeEvent
  47.520 +     */
  47.521 +    void fireChange() {
  47.522 +        // Guaranteed to return a non-null array
  47.523 +        Object[] list = listeners.getListenerList();
  47.524 +
  47.525 +        // Process the listeners last to first, notifying
  47.526 +        // those that are interested in this event
  47.527 +        ChangeEvent changeEvent = null;
  47.528 +        for (int i = list.length - 2; i >= 0; i -= 2) {
  47.529 +            if (list[i] == ChangeListener.class) {
  47.530 +                // Lazily create the event:
  47.531 +                if (changeEvent == null)
  47.532 +                    changeEvent = new ChangeEvent(this);
  47.533 +                ((ChangeListener) list[i+1]).stateChanged(changeEvent);
  47.534 +            }
  47.535 +        }
  47.536 +    }
  47.537 +    
  47.538 +    /* For debugging purposes, only. Writes directly to serr. 
  47.539      public void print() {
  47.540          System.err.println("\nTask List:\n-------------");
  47.541          Iterator it = tasks.iterator();
    48.1 --- a/tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/model/UserTaskObjectList.java	Mon Dec 04 21:57:00 2006 +0000
    48.2 +++ b/tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/model/UserTaskObjectList.java	Mon Dec 04 21:59:57 2006 +0000
    48.3 @@ -25,6 +25,8 @@
    48.4  
    48.5  /**
    48.6   * List of UserTasks
    48.7 + *
    48.8 + * @author tl
    48.9   */
   48.10  public class UserTaskObjectList extends ObjectList<UserTask> {
   48.11      private ObjectList.Owner parent;
    49.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    49.2 +++ b/tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/model/package.html	Mon Dec 04 21:59:57 2006 +0000
    49.3 @@ -0,0 +1,13 @@
    49.4 +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    49.5 +
    49.6 +<html>
    49.7 +  <head>
    49.8 +    <title>Model for user tasks</title>
    49.9 +  </head>
   49.10 +  <body>
   49.11 +    <p>
   49.12 +        This package contains all classes to model user tasks.
   49.13 +        The code should be independant of any UI classes.
   49.14 +    </p>
   49.15 +  </body>
   49.16 +</html>
    50.1 --- a/tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/options/Settings.java	Mon Dec 04 21:57:00 2006 +0000
    50.2 +++ b/tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/options/Settings.java	Mon Dec 04 21:59:57 2006 +0000
    50.3 @@ -61,7 +61,6 @@
    50.4       */
    50.5      public static final String PROP_WORKING_DAYS = "workingDays"; // NOI18N
    50.6          
    50.7 -    
    50.8      /** default working days. */
    50.9      private static boolean[] DEF_WORKING_DAYS = {
   50.10          true, true, true, true, true, false, false};
    51.1 --- a/tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/renderers/DoneTreeTableCellRenderer.java	Mon Dec 04 21:57:00 2006 +0000
    51.2 +++ b/tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/renderers/DoneTreeTableCellRenderer.java	Mon Dec 04 21:59:57 2006 +0000
    51.3 @@ -52,7 +52,7 @@
    51.4          
    51.5          if (node instanceof UserTaskTreeTableNode) {
    51.6              UserTask ut = ((UserTaskTreeTableNode) node).getUserTask(); 
    51.7 -            setEnabled(!ut.isProgressComputed() && ut.areDependenciesDone());
    51.8 +            setEnabled(!ut.isValuesComputed() && ut.areDependenciesDone());
    51.9          }
   51.10          return this;
   51.11      }
    52.1 --- a/tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/transfer/MyTransferHandler.java	Mon Dec 04 21:57:00 2006 +0000
    52.2 +++ b/tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/transfer/MyTransferHandler.java	Mon Dec 04 21:59:57 2006 +0000
    52.3 @@ -225,6 +225,7 @@
    52.4  
    52.5          if (exportSuccess && action == MOVE && transferredTasks != null) {
    52.6              UserTasksTreeTable tt = (UserTasksTreeTable) comp;
    52.7 +            tt.clearSelection();
    52.8              TreePath next = null;
    52.9              for (int i = 0; i < transferredTasks.length; i++) {
   52.10                  UserTask ut = transferredTasks[i];
    53.1 --- a/tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/translators/HistoryTextExportFormat.java	Mon Dec 04 21:57:00 2006 +0000
    53.2 +++ b/tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/translators/HistoryTextExportFormat.java	Mon Dec 04 21:59:57 2006 +0000
    53.3 @@ -241,6 +241,8 @@
    53.4          StreamResult result = new StreamResult(panel.getFile());
    53.5          try {
    53.6              tr.transform(source, result);
    53.7 +            Settings.getDefault().setLastUsedExportFolder(
    53.8 +                    panel.getFile().getParentFile());
    53.9          } catch (TransformerException ex) {
   53.10              String msg = NbBundle.getMessage(HistoryTextExportFormat.class, 
   53.11                      "CannotWriteFile",  // NOI18N
   53.12 @@ -390,9 +392,9 @@
   53.13          if (info.object instanceof UserTask) {
   53.14              fillDataCell(td, ((UserTask) info.object).getSummary(), level);
   53.15          } else if (info.object instanceof UserTaskList) {
   53.16 -            fillDataCell(td, FileUtil.getFileDisplayName(
   53.17 +            /* TODO fillDataCell(td, FileUtil.getFileDisplayName(
   53.18                      ((UserTaskList) info.object).getFile()),
   53.19 -                    level);
   53.20 +                    level);*/
   53.21          } else {
   53.22              fillDataCell(td, loc("AllTaskLists"), level); // NOI18N
   53.23          }
    54.1 --- a/tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/translators/HtmlExportFormat.java	Mon Dec 04 21:57:00 2006 +0000
    54.2 +++ b/tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/translators/HtmlExportFormat.java	Mon Dec 04 21:59:57 2006 +0000
    54.3 @@ -20,7 +20,10 @@
    54.4  package org.netbeans.modules.tasklist.usertasks.translators;
    54.5  
    54.6  import java.io.File;
    54.7 +import java.io.FileOutputStream;
    54.8 +import java.io.IOException;
    54.9  import java.io.InputStream;
   54.10 +import java.io.OutputStream;
   54.11  import java.net.MalformedURLException;
   54.12  import java.net.URL;
   54.13  import java.util.logging.Level;
   54.14 @@ -36,6 +39,8 @@
   54.15  import org.netbeans.modules.tasklist.core.util.SimpleWizardPanel;
   54.16  import org.netbeans.modules.tasklist.usertasks.options.Settings;
   54.17  import org.netbeans.modules.tasklist.usertasks.util.UTUtils;
   54.18 +import org.openide.DialogDisplayer;
   54.19 +import org.openide.NotifyDescriptor;
   54.20  import org.openide.WizardDescriptor;
   54.21  import org.openide.awt.HtmlBrowser;
   54.22  import org.openide.util.NbBundle;
   54.23 @@ -51,6 +56,28 @@
   54.24          "usertasks-table-html.xsl", // NOI18N
   54.25          "usertasks-tree-html.xsl" // NOI18N
   54.26      };
   54.27 +
   54.28 +    /**
   54.29 +     * Copies a resource to a file.
   54.30 +     * 
   54.31 +     * @param from see Class.getResourceAsStream
   54.32 +     * @param to destination
   54.33 +     */
   54.34 +    private static void copyResourceToFile(String from, File to) 
   54.35 +            throws IOException {
   54.36 +        InputStream is = TextExportFormat.class.getResourceAsStream(from);
   54.37 +        try {
   54.38 +            OutputStream os = new FileOutputStream(to);
   54.39 +            try {
   54.40 +                UTUtils.copyStream(is, os);
   54.41 +            } finally {
   54.42 +                os.close();
   54.43 +            }
   54.44 +        } finally {
   54.45 +            is.close();
   54.46 +        }
   54.47 +    }
   54.48 +    
   54.49      private String res = "usertasks-effort-html.xsl"; // NOI18N
   54.50      
   54.51      /** 
   54.52 @@ -161,10 +188,22 @@
   54.53              wd.getProperty(getClass().getName() + 
   54.54                  ".TemplatesPanel"); // NOI18N
   54.55          this.res = LAYOUTS[templatesPanel.getLayoutIndex()];
   54.56 +        File dir = chooseFilePanel.getFile().getParentFile();
   54.57          super.doExportImport(provider, wd);
   54.58 +        try {
   54.59 +            copyResourceToFile(
   54.60 +                    "/org/netbeans/modules/tasklist/core/task.gif", // NOI18N
   54.61 +                    new File(dir, "undone.gif")); // NOI18N
   54.62 +            copyResourceToFile(
   54.63 +                    "/org/netbeans/modules/tasklist/core/doneItem.gif", // NOI18N
   54.64 +                    new File(dir, "done.gif")); // NOI18N
   54.65 +        } catch (IOException ex) {
   54.66 +            NotifyDescriptor nd = new NotifyDescriptor.Message(ex.getMessage(),
   54.67 +                    NotifyDescriptor.Message.ERROR_MESSAGE);
   54.68 +            DialogDisplayer.getDefault().notify(nd);
   54.69 +        }
   54.70          if (templatesPanel.getOpenFile()) {
   54.71              showFileInBrowser(chooseFilePanel.getFile());
   54.72          }
   54.73      }
   54.74 -    
   54.75  }
    55.1 --- a/tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/translators/ICalExportFormat.java	Mon Dec 04 21:57:00 2006 +0000
    55.2 +++ b/tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/translators/ICalExportFormat.java	Mon Dec 04 21:59:57 2006 +0000
    55.3 @@ -430,21 +430,15 @@
    55.4          }
    55.5          ((PercentComplete) prop).setPercentage(task.getPercentComplete());
    55.6  
    55.7 -        setXProperty(pl, "X-NETBEANS-PROGRESS-COMPUTED", "yes",  // NOI18N
    55.8 -            task.isProgressComputed());
    55.9 +        setXProperty(pl, "X-NETBEANS-VALUES-COMPUTED", "yes",  // NOI18N
   55.10 +            task.isValuesComputed());
   55.11          
   55.12          setXProperty(pl, "X-NETBEANS-EFFORT",  // NOI18N
   55.13              Integer.toString(task.getEffort()), true);
   55.14  
   55.15 -        setXProperty(pl, "X-NETBEANS-EFFORT-COMPUTED", "yes",  // NOI18N
   55.16 -            task.isEffortComputed());
   55.17 -
   55.18          setXProperty(pl, "X-NETBEANS-SPENT-TIME",  // NOI18N
   55.19              Integer.toString(task.getSpentTime()), true);
   55.20  
   55.21 -        setXProperty(pl, "X-NETBEANS-SPENT-TIME-COMPUTED", "yes",  // NOI18N
   55.22 -            task.isSpentTimeComputed()); 
   55.23 -
   55.24          // Category (XXX standard allows MULTIPLE categories, I must handle
   55.25          // that when I parse back)
   55.26          String category = task.getCategory();
    56.1 --- a/tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/translators/ICalImportFormat.java	Mon Dec 04 21:57:00 2006 +0000
    56.2 +++ b/tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/translators/ICalImportFormat.java	Mon Dec 04 21:59:57 2006 +0000
    56.3 @@ -44,7 +44,6 @@
    56.4  import net.fortuna.ical4j.model.Calendar;
    56.5  import net.fortuna.ical4j.model.CategoryList;
    56.6  import net.fortuna.ical4j.model.Component;
    56.7 -import net.fortuna.ical4j.model.Date;
    56.8  import net.fortuna.ical4j.model.Parameter;
    56.9  import net.fortuna.ical4j.model.ParameterList;
   56.10  import net.fortuna.ical4j.model.Property;
   56.11 @@ -278,10 +277,6 @@
   56.12          if (prop != null)
   56.13              ut.setPercentComplete(((PercentComplete) prop).getPercentage());
   56.14          
   56.15 -        prop = pl.getProperty("X-NETBEANS-PROGRESS-COMPUTED"); // NOI18N
   56.16 -        if (prop != null)
   56.17 -            ut.setProgressComputed(prop.getValue().equals("yes"));
   56.18 -        
   56.19          prop = pl.getProperty("X-NETBEANS-OWNER"); // NOI18N
   56.20          if (prop != null)
   56.21              ut.setOwner(prop.getValue());
   56.22 @@ -307,10 +302,6 @@
   56.23              }
   56.24          }
   56.25          
   56.26 -        prop = pl.getProperty("X-NETBEANS-EFFORT-COMPUTED"); // NOI18N
   56.27 -        if (prop != null)
   56.28 -            ut.setEffortComputed(prop.getValue().equals("yes")); // NOI18N
   56.29 -
   56.30          prop = pl.getProperty("X-NETBEANS-SPENT-TIME"); // NOI18N
   56.31          if (prop != null) {
   56.32              try {
   56.33 @@ -320,10 +311,6 @@
   56.34              }
   56.35          }
   56.36          
   56.37 -        prop = pl.getProperty("X-NETBEANS-SPENT-TIME-COMPUTED"); // NOI18N
   56.38 -        if (prop != null)
   56.39 -            ut.setSpentTimeComputed(prop.getValue().equals("yes")); // NOI18N
   56.40 -        
   56.41          prop = pl.getProperty(Property.CATEGORIES);
   56.42          if (prop != null) {
   56.43              CategoryList cl = ((Categories) prop).getCategories();
   56.44 @@ -397,6 +384,28 @@
   56.45                  }
   56.46              }
   56.47          }
   56.48 +        
   56.49 +        if (pl.getProperty("X-NETBEANS-PROGRESS-COMPUTED") !=   // NOI18N
   56.50 +                null &&
   56.51 +                pl.getProperty("X-NETBEANS-PROGRESS-COMPUTED"). // NOI18N
   56.52 +                getValue().equals("yes") &&  // NOI18N
   56.53 +                pl.getProperty("X-NETBEANS-EFFORT-COMPUTED") !=  // NOI18N
   56.54 +                null &&
   56.55 +                pl.getProperty("X-NETBEANS-EFFORT-COMPUTED"). // NOI18N
   56.56 +                getValue().equals("yes") &&  // NOI18N
   56.57 +                pl.getProperty("X-NETBEANS-SPENT-TIME-COMPUTED") !=  // NOI18N
   56.58 +                null &&
   56.59 +                pl.getProperty("X-NETBEANS-SPENT-TIME-COMPUTED"). // NOI18N
   56.60 +                getValue().equals("yes")  // NOI18N
   56.61 +                ) {
   56.62 +            ut.setValuesComputed(true);
   56.63 +        } else {
   56.64 +            prop = pl.getProperty("X-NETBEANS-VALUES-COMPUTED"); // NOI18N
   56.65 +            if (prop != null)
   56.66 +                ut.setValuesComputed(prop.getValue().equals("yes")); // NOI18N
   56.67 +            else
   56.68 +                ut.setValuesComputed(false);
   56.69 +        }
   56.70  //            } else if ("X-NETBEANS-STARTTIME".equals(name)) { // NOI18N  
   56.71  //                long start = Long.MAX_VALUE;
   56.72  //                try {
    57.1 --- a/tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/translators/SpentTimesUserTaskProcessor.java	Mon Dec 04 21:57:00 2006 +0000
    57.2 +++ b/tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/translators/SpentTimesUserTaskProcessor.java	Mon Dec 04 21:59:57 2006 +0000
    57.3 @@ -142,7 +142,7 @@
    57.4          UserTaskInfo info = (UserTaskInfo) obj;
    57.5          info.spentTimes = new long[periods.size() - 1];
    57.6          if ((info.object instanceof UserTask) && 
    57.7 -                !((UserTask) info.object).isSpentTimeComputed()) {
    57.8 +                !((UserTask) info.object).isValuesComputed()) {
    57.9              for (WorkPeriod wp: ((UserTask) info.object).getWorkPeriods()) {
   57.10                  for (int i = 0; i < periods.size() - 1; i++) {
   57.11                      long ov = overlap(wp.getStart(), wp.getStart() + 
    58.1 --- a/tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/translators/TextExportFormat.java	Mon Dec 04 21:57:00 2006 +0000
    58.2 +++ b/tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/translators/TextExportFormat.java	Mon Dec 04 21:59:57 2006 +0000
    58.3 @@ -20,9 +20,11 @@
    58.4  package org.netbeans.modules.tasklist.usertasks.translators;
    58.5  
    58.6  import java.io.File;
    58.7 +import java.io.FileOutputStream;
    58.8 +import java.io.IOException;
    58.9  import java.io.InputStream;
   58.10 +import java.io.OutputStream;
   58.11  import java.util.logging.Level;
   58.12 -import java.util.prefs.Preferences;
   58.13  import javax.xml.transform.Transformer;
   58.14  import javax.xml.transform.TransformerConfigurationException;
   58.15  import javax.xml.transform.TransformerException;
   58.16 @@ -64,12 +66,6 @@
   58.17      }
   58.18      
   58.19      public org.openide.WizardDescriptor getWizard() {
   58.20 -        Preferences p = Preferences.userNodeForPackage(TextExportFormat.class);
   58.21 -        String file = p.get("TextExportFormat.file", // NOI18N
   58.22 -                new File(System.getProperty("user.home"), // NOI18N
   58.23 -                "tasklist.txt").getAbsolutePath()); // NOI18N
   58.24 -        boolean open = p.getBoolean("TextExportFormat.open", true);
   58.25 -        
   58.26          SaveFilePanel chooseFilePanel = new SaveFilePanel();
   58.27          SimpleWizardPanel chooseFileWP = new SimpleWizardPanel(chooseFilePanel);
   58.28          chooseFilePanel.setWizardPanel(chooseFileWP);
   58.29 @@ -78,8 +74,9 @@
   58.30                  NbBundle.getMessage(XmlExportFormat.class, 
   58.31                      "TextFilter"), // NOI18N
   58.32                  new String[] {".txt"})); // NOI18N
   58.33 -        chooseFilePanel.setFile(new File(file)); // NOI18N
   58.34 -        chooseFilePanel.setOpenFileCheckBox(open);
   58.35 +        chooseFilePanel.setFile(new File(
   58.36 +                Settings.getDefault().getLastUsedExportFolder(), 
   58.37 +                "tasklist.txt")); // NOI18N
   58.38          chooseFileWP.setContentHighlightedIndex(0);
   58.39          chooseFilePanel.setOpenFileCheckBoxVisible(true);
   58.40  
   58.41 @@ -111,8 +108,7 @@
   58.42       * @param file file to be opened
   58.43       */
   58.44      private static void openFileInIde(File file) {
   58.45 -        try
   58.46 -        {
   58.47 +        try {
   58.48              FileObject fo = FileUtil.toFileObject(file);
   58.49              if (fo != null) {
   58.50                  DataObject do_ = DataObject.find(fo);
   58.51 @@ -153,22 +149,18 @@
   58.52                      "XSL-Transformer cannot be created", e); // NOI18N
   58.53              return null;
   58.54          }
   58.55 -   }
   58.56 +    }
   58.57      
   58.58      public void doExportImport(ExportImportProvider provider, 
   58.59      WizardDescriptor wd) {
   58.60 -        SaveFilePanel chooseFilePanel = (SaveFilePanel)
   58.61 -            wd.getProperty(CHOOSE_FILE_PANEL_PROP);
   58.62 +        SaveFilePanel panel = (SaveFilePanel)
   58.63 +                wd.getProperty(CHOOSE_FILE_PANEL_PROP);
   58.64          super.doExportImport(provider, wd);
   58.65 -        if (chooseFilePanel.getOpenExportedFile()) {
   58.66 -            openFileInIde(chooseFilePanel.getFile());
   58.67 +        File dir = panel.getFile().getParentFile();
   58.68 +        Settings.getDefault().setLastUsedExportFolder(dir);
   58.69 +        if (panel.getOpenExportedFile()) {
   58.70 +            openFileInIde(panel.getFile());
   58.71          }
   58.72 -        
   58.73 -        Preferences p = Preferences.userNodeForPackage(TextExportFormat.class);
   58.74 -        p.put("TextExportFormat.file", // NOI18N
   58.75 -                chooseFilePanel.getFile().getAbsolutePath());
   58.76 -        p.putBoolean("TextExportFormat.open", 
   58.77 -                chooseFilePanel.getOpenExportedFile());
   58.78      }
   58.79      
   58.80  }
    59.1 --- a/tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/translators/XmlExportFormat.java	Mon Dec 04 21:57:00 2006 +0000
    59.2 +++ b/tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/translators/XmlExportFormat.java	Mon Dec 04 21:59:57 2006 +0000
    59.3 @@ -199,23 +199,20 @@
    59.4          node.setAttribute("progress", // NOI18N
    59.5              String.valueOf(task.getPercentComplete()));
    59.6          
    59.7 -        if (task.isProgressComputed()) {
    59.8 +        if (task.isValuesComputed()) {
    59.9 +            // for backward compatibility only
   59.10              node.setAttribute("progress-computed", "yes"); // NOI18N
   59.11 +            node.setAttribute("effort-computed", "yes"); // NOI18N
   59.12 +            node.setAttribute("spent-time-computed", "yes"); // NOI18N
   59.13 +            
   59.14 +            node.setAttribute("values-computed", "yes"); // NOI18N
   59.15          }
   59.16  
   59.17          node.setAttribute("effort", String.valueOf(task.getEffort())); // NOI18N
   59.18          
   59.19 -        if (task.isEffortComputed()) {
   59.20 -            node.setAttribute("effort-computed", "yes"); // NOI18N
   59.21 -        }
   59.22 -        
   59.23          node.setAttribute("spent-time", // NOI18N
   59.24              String.valueOf(task.getSpentTime()));
   59.25          
   59.26 -        if (task.isSpentTimeComputed()) {
   59.27 -            node.setAttribute("spent-time-computed", "yes"); // NOI18N
   59.28 -        }
   59.29 -        
   59.30          if (task.getDueDate() != null) {
   59.31              node.setAttribute("due", dateToString(task.getDueDate())); // NOI18N
   59.32          }
    60.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    60.2 +++ b/tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/translators/usertasks-1_3.dtd	Mon Dec 04 21:59:57 2006 +0000
    60.3 @@ -0,0 +1,71 @@
    60.4 +<?xml version="1.0" encoding="UTF-8"?>
    60.5 +
    60.6 +<!--
    60.7 +The contents of this file are subject to the terms of the Common Development
    60.8 +and Distribution License (the License). You may not use this file except in
    60.9 +compliance with the License.
   60.10 +
   60.11 +You can obtain a copy of the License at http://www.netbeans.org/cddl.html
   60.12 +or http://www.netbeans.org/cddl.txt.
   60.13 +
   60.14 +When distributing Covered Code, include this CDDL Header Notice in each file
   60.15 +and include the License file at http://www.netbeans.org/cddl.txt.
   60.16 +If applicable, add the following below the CDDL Header, with the fields
   60.17 +enclosed by brackets [] replaced by your own identifying information:
   60.18 +"Portions Copyrighted [year] [name of copyright owner]"
   60.19 +
   60.20 +The Original Software is NetBeans. The Initial Developer of the Original
   60.21 +Software is Sun Microsystems, Inc. Portions Copyright 1997-2006 Sun
   60.22 +Microsystems, Inc. All Rights Reserved.
   60.23 +-->
   60.24 +
   60.25 +<!--
   60.26 +    Description: export format for user tasks
   60.27 +-->
   60.28 +
   60.29 +<!ELEMENT tasks (task)*>
   60.30 +
   60.31 +<!--
   60.32 +    due, created, completed, start and modified - date format: YYYY-MM-DDThh:mm:ssTZD
   60.33 +        (see http://www.w3.org/TR/NOTE-datetime)
   60.34 +    line - 1 = the first line in a file
   60.35 +    effort - effort in minutes
   60.36 +    spent - spent time in minutes
   60.37 +    
   60.38 +    progress-computed, effort-computed and spent-time-computed will be ignored
   60.39 +    and only here for backward compatibility (see the new attribute
   60.40 +    values-computed)
   60.41 +-->
   60.42 +<!ELEMENT task (summary, details?, work-periods?, (task)*)>
   60.43 +<!ATTLIST task
   60.44 +    priority (high|medium-high|medium|medium-low|low)  "medium"
   60.45 +    category CDATA #IMPLIED
   60.46 +    progress CDATA #REQUIRED
   60.47 +    progress-computed (yes|no) "no"
   60.48 +    effort CDATA #REQUIRED
   60.49 +    effort-computed (yes|no) "no"
   60.50 +    due CDATA #IMPLIED
   60.51 +    file CDATA #IMPLIED
   60.52 +    line CDATA #IMPLIED
   60.53 +    created CDATA #REQUIRED
   60.54 +    modified CDATA #REQUIRED
   60.55 +    completed CDATA #IMPLIED
   60.56 +    spent-time CDATA #REQUIRED
   60.57 +    spent-time-computed (yes|no) "no"
   60.58 +    owner CDATA #IMPLIED
   60.59 +    start CDATA #IMPLIED
   60.60 +    values-computed (yes|no) "no"
   60.61 +>
   60.62 +
   60.63 +<!ELEMENT details (#PCDATA)>
   60.64 +<!ELEMENT work-periods (period)+>
   60.65 +
   60.66 +<!ELEMENT period EMPTY>
   60.67 +
   60.68 +<!--
   60.69 +    duration - duration of a work period in minutes
   60.70 +-->
   60.71 +<!ATTLIST period
   60.72 +    start CDATA #REQUIRED
   60.73 +    duration CDATA #REQUIRED
   60.74 +>
    61.1 --- a/tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/translators/usertasks-simple-html.xsl	Mon Dec 04 21:57:00 2006 +0000
    61.2 +++ b/tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/translators/usertasks-simple-html.xsl	Mon Dec 04 21:59:57 2006 +0000
    61.3 @@ -32,10 +32,15 @@
    61.4              <head>
    61.5                  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
    61.6                  <title>Task List</title>
    61.7 +                <style type="text/css">
    61.8 +                    ul { list-style-type: none }
    61.9 +                </style>
   61.10              </head>
   61.11              <body style="font-family: sans-serif">
   61.12                  <h1>Task List</h1>
   61.13 -                <xsl:apply-templates/>
   61.14 +                <ul>
   61.15 +                    <xsl:apply-templates/>
   61.16 +                </ul>
   61.17                  <p/>
   61.18                  <hr/>
   61.19                  <p><a href="http://validator.w3.org/check/referer">Valid XHTML 1.0!</a> This page was created by the <a href="http://www.netbeans.org">NetBeans</a> 
   61.20 @@ -44,20 +49,11 @@
   61.21          </html>
   61.22      </xsl:template>
   61.23      
   61.24 -    <xsl:template match="tasks/task">
   61.25 -        <xsl:apply-templates select="." mode="textonly"/>
   61.26 -        <xsl:if test="count(task) != 0">
   61.27 -            <ul style="list-style-type: none">
   61.28 -                <xsl:apply-templates select="task"/>
   61.29 -            </ul>
   61.30 -        </xsl:if>
   61.31 -    </xsl:template>
   61.32 -    
   61.33      <xsl:template match="task">
   61.34          <li>
   61.35              <xsl:apply-templates select="." mode="textonly"/>
   61.36              <xsl:if test="count(task) != 0">
   61.37 -                <ul style="list-style-type: none">
   61.38 +                <ul>
   61.39                      <xsl:apply-templates select="task"/>
   61.40                  </ul>
   61.41              </xsl:if>
   61.42 @@ -67,18 +63,13 @@
   61.43      <xsl:template match="task" mode="textonly">
   61.44          <xsl:choose>
   61.45              <xsl:when test="@progress = 100">
   61.46 -                <span style="font-size: larger; color: green">&#x2714;</span>
   61.47 -            </xsl:when>
   61.48 -            <xsl:when test="@progress = 0">
   61.49 -                <span style="font-size: larger; color: red">&#x2714;</span>
   61.50 +                <img src="done.gif" alt="Done"/>
   61.51              </xsl:when>
   61.52              <xsl:otherwise>
   61.53 -                <span style="font-size: larger; color: red">&#x27a0;</span>
   61.54 +                <img src="undone.gif" alt="Undone"/>
   61.55              </xsl:otherwise>
   61.56          </xsl:choose>
   61.57 -        <span>
   61.58 -            <xsl:value-of select="summary"/>
   61.59 -        </span>
   61.60 +        <xsl:value-of select="summary"/>
   61.61          <xsl:if test="details != ''">
   61.62              <br/>
   61.63              (<xsl:value-of select="details"/>)
    62.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    62.2 +++ b/tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/util/JLinkButton.java	Mon Dec 04 21:59:57 2006 +0000
    62.3 @@ -0,0 +1,417 @@
    62.4 +/*
    62.5 + * The contents of this file are subject to the terms of the Common Development
    62.6 + * and Distribution License (the License). You may not use this file except in
    62.7 + * compliance with the License.
    62.8 + *
    62.9 + * You can obtain a copy of the License at http://www.netbeans.org/cddl.html
   62.10 + * or http://www.netbeans.org/cddl.txt.
   62.11 + *
   62.12 + * When distributing Covered Code, include this CDDL Header Notice in each file
   62.13 + * and include the License file at http://www.netbeans.org/cddl.txt.
   62.14 + * If applicable, add the following below the CDDL Header, with the fields
   62.15 + * enclosed by brackets [] replaced by your own identifying information:
   62.16 + * "Portions Copyrighted [year] [name of copyright owner]"
   62.17 + *
   62.18 + * The Original Software is NetBeans. The Initial Developer of the Original
   62.19 + * Software is Sun Microsystems, Inc. Portions Copyright 1997-2006 Sun
   62.20 + * Microsystems, Inc. All Rights Reserved.
   62.21 + */
   62.22 +
   62.23 +package org.netbeans.modules.tasklist.usertasks.util;
   62.24 +
   62.25 +import java.awt.Color;
   62.26 +import java.awt.Cursor;
   62.27 +import java.awt.FontMetrics;
   62.28 +import java.awt.Graphics;
   62.29 +import java.awt.Insets;
   62.30 +import java.awt.Rectangle;
   62.31 +import java.net.URL;
   62.32 +
   62.33 +import javax.swing.Action;
   62.34 +import javax.swing.ButtonModel;
   62.35 +import javax.swing.Icon;
   62.36 +import javax.swing.JButton;
   62.37 +import javax.swing.JComponent;
   62.38 +import javax.swing.UIManager;
   62.39 +import javax.swing.plaf.ComponentUI;
   62.40 +import javax.swing.plaf.metal.MetalButtonUI;
   62.41 +
   62.42 +/**
   62.43 + * Clickable Link
   62.44 + * 
   62.45 + * Initial source code from
   62.46 + * http://www.java2s.com/Code/Java/Swing-Components/TreeTable.htm
   62.47 + * 
   62.48 + * @author tl 
   62.49 + */
   62.50 +public class JLinkButton extends JButton {
   62.51 +    private static final String uiString = "LinkButtonUI";
   62.52 +    
   62.53 +    /** the text will always be underlined */
   62.54 +    public static final int ALWAYS_UNDERLINE = 0;
   62.55 +    
   62.56 +    /** the text will only be underlined on mouse over. */
   62.57 +    public static final int HOVER_UNDERLINE = 1;
   62.58 +    
   62.59 +    /** never underline the text. */
   62.60 +    public static final int NEVER_UNDERLINE = 2;
   62.61 +
   62.62 +    /**
   62.63 +     * Registers default UI class for JLinkButton.
   62.64 +     */
   62.65 +    public static void registerUI() {
   62.66 +        UIManager.getDefaults().put("LinkButtonUI", "BasicLinkButtonUI");
   62.67 +    }
   62.68 +    
   62.69 +    private int linkBehavior;
   62.70 +    private Color linkColor;
   62.71 +    private Color colorPressed;
   62.72 +    private Color visitedLinkColor;
   62.73 +    private Color disabledLinkColor;
   62.74 +    private URL buttonURL;
   62.75 +    private boolean isLinkVisited;
   62.76 +
   62.77 +    /**
   62.78 +     * Empty link. 
   62.79 +     */
   62.80 +    public JLinkButton() {
   62.81 +        this(null, null, null);
   62.82 +    }
   62.83 +    
   62.84 +    /**
   62.85 +     * Constructor.
   62.86 +     * 
   62.87 +     * @param action todo? 
   62.88 +     */
   62.89 +    public JLinkButton(Action action) {
   62.90 +        this();
   62.91 +        setAction(action);
   62.92 +    }
   62.93 +    
   62.94 +    /**
   62.95 +     * Constructor.
   62.96 +     * 
   62.97 +     * @param icon shows an icon. 
   62.98 +     */
   62.99 +    public JLinkButton(Icon icon) {
  62.100 +        this(null, icon, null);
  62.101 +    }
  62.102 +    
  62.103 +    /**
  62.104 +     * Constructor.
  62.105 +     * 
  62.106 +     * @param s text of the button 
  62.107 +     */
  62.108 +    public JLinkButton(String s) {
  62.109 +        this(s, null, null);
  62.110 +    }
  62.111 +    
  62.112 +    /**
  62.113 +     * Constructor.
  62.114 +     * 
  62.115 +     * @param url target URL 
  62.116 +     */
  62.117 +    public JLinkButton(URL url) {
  62.118 +        this(null, null, url);
  62.119 +    }
  62.120 +    
  62.121 +    /**
  62.122 +     * Constructor.
  62.123 +     * 
  62.124 +     * @param s text
  62.125 +     * @param url target url 
  62.126 +     */
  62.127 +    public JLinkButton(String s, URL url) {
  62.128 +        this(s, null, url);
  62.129 +    }
  62.130 +    
  62.131 +    /**
  62.132 +     * Constructor.
  62.133 +     * 
  62.134 +     * @param icon an icon
  62.135 +     * @param url target url 
  62.136 +     */
  62.137 +    public JLinkButton(Icon icon, URL url) {
  62.138 +        this(null, icon, url);
  62.139 +    }
  62.140 +
  62.141 +    /*
  62.142 +     * Constructor.
  62.143 +     * 
  62.144 +     * @param text text of the button
  62.145 +     * @param icon an icon
  62.146 +     * @param url target url
  62.147 +     */ 
  62.148 +    public JLinkButton(String text, Icon icon, URL url) {
  62.149 +        super(text, icon);
  62.150 +        linkBehavior = ALWAYS_UNDERLINE;
  62.151 +        linkColor = Color.blue;
  62.152 +        colorPressed = Color.red;
  62.153 +        visitedLinkColor = new Color(128, 0, 128);
  62.154 +        if (text == null && url != null)
  62.155 +            setText(url.toExternalForm());
  62.156 +        setLinkURL(url);
  62.157 +        setCursor(Cursor.getPredefinedCursor(12));
  62.158 +        setBorderPainted(false);
  62.159 +        setContentAreaFilled(false);
  62.160 +        setRolloverEnabled(true);
  62.161 +        setMargin(new Insets(0, 0, 0, 0));
  62.162 +    }
  62.163 +    
  62.164 +    public void updateUI() {
  62.165 +        setUI(BasicLinkButtonUI.createUI(this));
  62.166 +    }
  62.167 +    
  62.168 +    
  62.169 +    public String getUIClassID() {
  62.170 +        return "LinkButtonUI";
  62.171 +    }
  62.172 +    
  62.173 +    /**
  62.174 +     * Setups the text for the tooltip. 
  62.175 +     */
  62.176 +    private void setupToolTipText() {
  62.177 +        String tip = null;
  62.178 +        if (buttonURL != null)
  62.179 +            tip = buttonURL.toExternalForm();
  62.180 +        setToolTipText(tip);
  62.181 +    }
  62.182 +    
  62.183 +    /**
  62.184 +     * Sets the behaviour.
  62.185 +     * 
  62.186 +     * @param bnew one of the *_UNDERLINE constants from this class. 
  62.187 +     */
  62.188 +    public void setLinkBehavior(int bnew) {
  62.189 +        if (bnew != ALWAYS_UNDERLINE && bnew != HOVER_UNDERLINE
  62.190 +                && bnew != NEVER_UNDERLINE)
  62.191 +            throw new IllegalArgumentException("Not a legal LinkBehavior");
  62.192 +
  62.193 +        int old = linkBehavior;
  62.194 +        linkBehavior = bnew;
  62.195 +        firePropertyChange("linkBehavior", old, bnew);
  62.196 +        repaint();
  62.197 +    }
  62.198 +    
  62.199 +    /**
  62.200 +     * Returns the current behaviour.
  62.201 +     * 
  62.202 +     * @return one of the *_UNDERLINE constants from this class. 
  62.203 +     */
  62.204 +    public int getLinkBehavior() {
  62.205 +        return linkBehavior;
  62.206 +    }
  62.207 +    
  62.208 +    /**
  62.209 +     * Sets the color of the link.
  62.210 +     * 
  62.211 +     * @param color new color 
  62.212 +     */
  62.213 +    public void setLinkColor(Color color) {
  62.214 +        Color colorOld = linkColor;
  62.215 +        linkColor = color;
  62.216 +        firePropertyChange("linkColor", colorOld, color);
  62.217 +        repaint();
  62.218 +    }
  62.219 +
  62.220 +    /**
  62.221 +     * Returns the color of the link.
  62.222 +     * 
  62.223 +     * @return color 
  62.224 +     */
  62.225 +    public Color getLinkColor() {
  62.226 +        return linkColor;
  62.227 +    }
  62.228 +    
  62.229 +    /**
  62.230 +     * Sets the color of the link used when the mouse is over it. 
  62.231 +     * 
  62.232 +     * @param colorNew new color
  62.233 +     */
  62.234 +    public void setActiveLinkColor(Color colorNew) {
  62.235 +        Color colorOld = colorPressed;
  62.236 +        colorPressed = colorNew;
  62.237 +        firePropertyChange("activeLinkColor", colorOld, colorNew);
  62.238 +        repaint();
  62.239 +    }
  62.240 +    
  62.241 +    /**
  62.242 +     * Returns the color of the link when the mouse is over it.
  62.243 +     * 
  62.244 +     * @return color 
  62.245 +     */
  62.246 +    public Color getActiveLinkColor() {
  62.247 +        return colorPressed;
  62.248 +    }
  62.249 +    
  62.250 +    /**
  62.251 +     * Sets disabled color.
  62.252 +     * 
  62.253 +     * @param color new color 
  62.254 +     */
  62.255 +    public void setDisabledLinkColor(Color color) {
  62.256 +        Color colorOld = disabledLinkColor;
  62.257 +        disabledLinkColor = color;
  62.258 +        firePropertyChange("disabledLinkColor", colorOld, color);
  62.259 +        if (!isEnabled())
  62.260 +            repaint();
  62.261 +    }
  62.262 +    
  62.263 +    /**
  62.264 +     * Returns disabled color.
  62.265 +     * 
  62.266 +     * @return disabled color 
  62.267 +     */
  62.268 +    public Color getDisabledLinkColor() {
  62.269 +        return disabledLinkColor;
  62.270 +    }
  62.271 +    
  62.272 +    /**
  62.273 +     * Sets color for the visited state.
  62.274 +     * 
  62.275 +     * @param colorNew new color 
  62.276 +     */
  62.277 +    public void setVisitedLinkColor(Color colorNew) {
  62.278 +        Color colorOld = visitedLinkColor;
  62.279 +        visitedLinkColor = colorNew;
  62.280 +        firePropertyChange("visitedLinkColor", colorOld, colorNew);
  62.281 +        repaint();
  62.282 +    }
  62.283 +    
  62.284 +    /**
  62.285 +     * Returns color for the visited state.
  62.286 +     * 
  62.287 +     * @return color 
  62.288 +     */
  62.289 +    public Color getVisitedLinkColor() {
  62.290 +        return visitedLinkColor;
  62.291 +    }
  62.292 +    
  62.293 +    /**
  62.294 +     * Returns the URL.
  62.295 +     * 
  62.296 +     * @return URL 
  62.297 +     */
  62.298 +    public URL getLinkURL() {
  62.299 +        return buttonURL;
  62.300 +    }
  62.301 +    
  62.302 +    /**
  62.303 +     * Sets new URL.
  62.304 +     * 
  62.305 +     * @param url new URL 
  62.306 +     */
  62.307 +    public void setLinkURL(URL url) {
  62.308 +        URL urlOld = buttonURL;
  62.309 +        buttonURL = url;
  62.310 +        setupToolTipText();
  62.311 +        firePropertyChange("linkURL", urlOld, url);
  62.312 +        revalidate();
  62.313 +        repaint();
  62.314 +    }
  62.315 +    
  62.316 +    /**
  62.317 +     * Sets the visited flag.
  62.318 +     * 
  62.319 +     * @param flagNew new value for the visited flag 
  62.320 +     */
  62.321 +    public void setLinkVisited(boolean flagNew) {
  62.322 +        boolean flagOld = isLinkVisited;
  62.323 +        isLinkVisited = flagNew;
  62.324 +        firePropertyChange("linkVisited", flagOld, flagNew);
  62.325 +        repaint();
  62.326 +    }
  62.327 +    
  62.328 +    /**
  62.329 +     * Checks whether the link is visited.
  62.330 +     * 
  62.331 +     * @return true = visited. 
  62.332 +     */
  62.333 +    public boolean isLinkVisited() {
  62.334 +        return isLinkVisited;
  62.335 +    }
  62.336 +    
  62.337 +    protected String paramString() {
  62.338 +        String str;
  62.339 +        if (linkBehavior == ALWAYS_UNDERLINE)
  62.340 +            str = "ALWAYS_UNDERLINE";
  62.341 +        else if (linkBehavior == HOVER_UNDERLINE)
  62.342 +            str = "HOVER_UNDERLINE";
  62.343 +        else if (linkBehavior == NEVER_UNDERLINE)
  62.344 +            str = "NEVER_UNDERLINE";
  62.345 +        else
  62.346 +            str = "SYSTEM_DEFAULT";
  62.347 +        String colorStr = linkColor == null ? "" : linkColor.toString();
  62.348 +        String colorPressStr = colorPressed == null ? "" : colorPressed
  62.349 +                .toString();
  62.350 +        String disabledLinkColorStr = disabledLinkColor == null ? ""
  62.351 +                : disabledLinkColor.toString();
  62.352 +        String visitedLinkColorStr = visitedLinkColor == null ? ""
  62.353 +                : visitedLinkColor.toString();
  62.354 +        String buttonURLStr = buttonURL == null ? "" : buttonURL.toString();
  62.355 +        String isLinkVisitedStr = isLinkVisited ? "true" : "false";
  62.356 +        return super.paramString() + ",linkBehavior=" + str + ",linkURL="
  62.357 +                + buttonURLStr + ",linkColor=" + colorStr + ",activeLinkColor="
  62.358 +                + colorPressStr + ",disabledLinkColor=" + disabledLinkColorStr
  62.359 +                + ",visitedLinkColor=" + visitedLinkColorStr
  62.360 +                + ",linkvisitedString=" + isLinkVisitedStr;
  62.361 +    }
  62.362 +}
  62.363 +
  62.364 +/**
  62.365 + * Default UI delegate. 
  62.366 + */
  62.367 +class BasicLinkButtonUI extends MetalButtonUI {
  62.368 +    private static final BasicLinkButtonUI ui = new BasicLinkButtonUI();
  62.369 +
  62.370 +    /**
  62.371 +     * Returns the UI for the specified component.
  62.372 +     * 
  62.373 +     * @param jcomponent a JLinkButton
  62.374 +     * @return created UI 
  62.375 +     */
  62.376 +    public static ComponentUI createUI(JComponent jcomponent) {
  62.377 +        return ui;
  62.378 +    }
  62.379 +    
  62.380 +    protected void paintText(Graphics g, JComponent com, Rectangle rect,
  62.381 +            String s) {
  62.382 +        JLinkButton bn = (JLinkButton) com;
  62.383 +        ButtonModel bnModel = bn.getModel();
  62.384 +        Color color = bn.getForeground();
  62.385 +        Object obj = null;
  62.386 +        if (bnModel.isEnabled()) {
  62.387 +            if (bnModel.isPressed())
  62.388 +                bn.setForeground(bn.getActiveLinkColor());
  62.389 +            else if (bn.isLinkVisited())
  62.390 +                bn.setForeground(bn.getVisitedLinkColor());
  62.391 +            
  62.392 +            else
  62.393 +                bn.setForeground(bn.getLinkColor());
  62.394 +        } else {
  62.395 +            if (bn.getDisabledLinkColor() != null)
  62.396 +                bn.setForeground(bn.getDisabledLinkColor());
  62.397 +        }
  62.398 +        super.paintText(g, com, rect, s);
  62.399 +        int behaviour = bn.getLinkBehavior();
  62.400 +        boolean drawLine = false;
  62.401 +        if (behaviour == JLinkButton.HOVER_UNDERLINE) {
  62.402 +            if (bnModel.isRollover())
  62.403 +                drawLine = true;
  62.404 +        } else if (behaviour == JLinkButton.ALWAYS_UNDERLINE)
  62.405 +            drawLine = true;
  62.406 +        if (!drawLine)
  62.407 +            return;
  62.408 +        FontMetrics fm = g.getFontMetrics();
  62.409 +        int x = rect.x + getTextShiftOffset();
  62.410 +        int y = (rect.y + fm.getAscent() + fm.getDescent() + 
  62.411 +                getTextShiftOffset()) - 1;
  62.412 +        if (bnModel.isEnabled()) {
  62.413 +            g.setColor(bn.getForeground());
  62.414 +            g.drawLine(x, y, (x + rect.width) - 1, y);
  62.415 +        } else {
  62.416 +            g.setColor(bn.getBackground().brighter());
  62.417 +            g.drawLine(x, y, (x + rect.width) - 1, y);
  62.418 +        }
  62.419 +    }
  62.420 +}
  62.421 \ No newline at end of file
    63.1 --- a/tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/util/UTUtils.java	Mon Dec 04 21:57:00 2006 +0000
    63.2 +++ b/tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/util/UTUtils.java	Mon Dec 04 21:59:57 2006 +0000
    63.3 @@ -22,6 +22,9 @@
    63.4  import java.awt.Component;
    63.5  import java.awt.Dimension;
    63.6  import java.io.File;
    63.7 +import java.io.IOException;
    63.8 +import java.io.InputStream;
    63.9 +import java.io.OutputStream;
   63.10  import java.net.URL;
   63.11  import java.util.ArrayList;
   63.12  import java.util.List;
   63.13 @@ -61,10 +64,25 @@
   63.14      public static final Logger LOGGER = TLUtils.getLogger(UTUtils.class);
   63.15      
   63.16      static {
   63.17 -        LOGGER.setLevel(Level.OFF);
   63.18 +        LOGGER.setLevel(Level.FINE);
   63.19      }
   63.20  
   63.21      /**
   63.22 +     * Copies the content of one stream to another.
   63.23 +     *
   63.24 +     * @param is input stream
   63.25 +     * @param os output stream
   63.26 +     */
   63.27 +    public static void copyStream(InputStream is, OutputStream os) 
   63.28 +    throws IOException {
   63.29 +        byte[] buffer = new byte[1024];
   63.30 +        int read;
   63.31 +        while ((read = is.read(buffer)) != -1) {
   63.32 +            os.write(buffer, 0, read);
   63.33 +        }
   63.34 +    }
   63.35 +    
   63.36 +    /**
   63.37       * Creates a tag in another one.
   63.38       *
   63.39       * @param el an XML node
   63.40 @@ -131,7 +149,8 @@
   63.41          return sb.toString();
   63.42      }
   63.43      
   63.44 -    /** Create the default toolbar representation of an array of actions.
   63.45 +    /** 
   63.46 +     * Create the default toolbar representation of an array of actions.
   63.47       * Null items in the array will add a separator to the toolbar.
   63.48       *
   63.49       * @param actions actions to show in the generated toolbar
   63.50 @@ -421,4 +440,17 @@
   63.51          }
   63.52          return r;
   63.53      }
   63.54 +    
   63.55 +    /**
   63.56 +     * Dumps the hierarchy of class loaders.
   63.57 +     * 
   63.58 +     * @param cl a class loader or null
   63.59 +     */
   63.60 +    public static void dumpClassLoaders(ClassLoader cl) {
   63.61 +        while (cl != null) {
   63.62 +            UTUtils.LOGGER.fine(cl.getClass().getName() + 
   63.63 +                    " " + cl.toString()); // NOI18N
   63.64 +            cl = cl.getParent();
   63.65 +        }
   63.66 +    }
   63.67  }
    64.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    64.2 +++ b/tasklist.usertasks/test/unit/src/org/netbeans/modules/tasklist/usertasks/model/DurationTest.java	Mon Dec 04 21:59:57 2006 +0000
    64.3 @@ -0,0 +1,47 @@
    64.4 +/*
    64.5 + * The contents of this file are subject to the terms of the Common Development
    64.6 + * and Distribution License (the License). You may not use this file except in
    64.7 + * compliance with the License.
    64.8 + *
    64.9 + * You can obtain a copy of the License at http://www.netbeans.org/cddl.html
   64.10 + * or http://www.netbeans.org/cddl.txt.
   64.11 + *
   64.12 + * When distributing Covered Code, include this CDDL Header Notice in each file
   64.13 + * and include the License file at http://www.netbeans.org/cddl.txt.
   64.14 + * If applicable, add the following below the CDDL Header, with the fields
   64.15 + * enclosed by brackets [] replaced by your own identifying information:
   64.16 + * "Portions Copyrighted [year] [name of copyright owner]"
   64.17 + *
   64.18 + * The Original Software is NetBeans. The Initial Developer of the Original
   64.19 + * Software is Sun Microsystems, Inc. Portions Copyright 1997-2006 Sun
   64.20 + * Microsystems, Inc. All Rights Reserved.
   64.21 + */
   64.22 +
   64.23 +package org.netbeans.modules.tasklist.usertasks.model;
   64.24 +
   64.25 +import junit.framework.Test;
   64.26 +
   64.27 +import org.netbeans.junit.NbTestCase;
   64.28 +import org.netbeans.junit.NbTestSuite;
   64.29 +
   64.30 +/**
   64.31 + * Tests for Duration.
   64.32 + * 
   64.33 + * @author tl
   64.34 + */
   64.35 +public class DurationTest extends NbTestCase {
   64.36 +    public DurationTest (String name) {
   64.37 +        super (name);
   64.38 +    }
   64.39 +
   64.40 +    public static Test suite () {
   64.41 +        return new NbTestSuite(TaskListTest.class);
   64.42 +    }
   64.43 +
   64.44 +    public void testDummy() throws Exception {
   64.45 +        Duration d = new Duration(8 * 60, 8 * 60, 7, true);
   64.46 +        assertTrue(d.equals(new Duration(0, 1, 0, 0)));
   64.47 +        d = new Duration(60, 8 * 60, 5, true);
   64.48 +        assertTrue(d.equals(new Duration(0, 0, 1, 0)));
   64.49 +    }
   64.50 +}
    65.1 --- a/tasklist.usertasks/test/unit/src/org/netbeans/modules/tasklist/usertasks/model/TaskTest.java	Mon Dec 04 21:57:00 2006 +0000
    65.2 +++ b/tasklist.usertasks/test/unit/src/org/netbeans/modules/tasklist/usertasks/model/TaskTest.java	Mon Dec 04 21:59:57 2006 +0000
    65.3 @@ -45,7 +45,7 @@
    65.4      public void testGetEffort() {
    65.5          UserTaskList utl = new UserTaskList();
    65.6          UserTask root = new UserTask("root", utl); // NOI18N
    65.7 -        root.setEffortComputed(true);
    65.8 +        root.setValuesComputed(true);
    65.9          
   65.10          UserTask a = new UserTask("a", utl); // NOI18N
   65.11          a.setEffort(200);
   65.12 @@ -67,8 +67,7 @@
   65.13      public void testGetEffort2() {
   65.14          UserTaskList utl = new UserTaskList();
   65.15          UserTask root = new UserTask("root", utl); // NOI18N
   65.16 -        root.setEffortComputed(true);
   65.17 -        root.setProgressComputed(true);
   65.18 +        root.setValuesComputed(true);
   65.19          
   65.20          UserTask a = new UserTask("a", utl); // NOI18N
   65.21          a.setEffort(200);
    66.1 --- a/tasklist.usertasks/test/unit/src/org/netbeans/modules/tasklist/usertasks/model/UserTaskListTest.java	Mon Dec 04 21:57:00 2006 +0000
    66.2 +++ b/tasklist.usertasks/test/unit/src/org/netbeans/modules/tasklist/usertasks/model/UserTaskListTest.java	Mon Dec 04 21:59:57 2006 +0000
    66.3 @@ -59,12 +59,6 @@
    66.4          return new NbTestSuite(UserTaskListTest.class);
    66.5      }
    66.6  
    66.7 -    protected void setUp () throws Exception {
    66.8 -    }
    66.9 -
   66.10 -    protected void tearDown () throws Exception {
   66.11 -    }
   66.12 -
   66.13      /**
   66.14       * Save to/restore from .ics.
   66.15       *
   66.16 @@ -135,9 +129,7 @@
   66.17          ut.setDone(true);
   66.18          assertEquals(15, ut2.getLastEditedDate());
   66.19          
   66.20 -        ut.setProgressComputed(true);
   66.21 -        ut.setEffortComputed(true);
   66.22 -        ut.setSpentTimeComputed(true);
   66.23 +        ut.setValuesComputed(true);
   66.24          ut3.setDone(true);
   66.25          assertEquals(15, ut2.getLastEditedDate());
   66.26      }
   66.27 @@ -159,7 +151,7 @@
   66.28          ut.getSubtasks().add(ut2);
   66.29          ut.getSubtasks().add(ut3);
   66.30          ut3.setDone(true);
   66.31 -        ut.setProgressComputed(true);
   66.32 +        ut.setValuesComputed(true);
   66.33          
   66.34          ut.setLastEditedDate(15000);
   66.35          ut2.setLastEditedDate(15000);
   66.36 @@ -210,7 +202,6 @@
   66.37          assertTrue(utl.getSubtasks().size() == 0);
   66.38      }
   66.39      
   66.40 -    /** This is just a dummy place holder test */
   66.41      public void testUserTaskList() throws Exception {
   66.42          UserTaskList list = (UserTaskList)openList("tasklist.ics"); // NOI18N
   66.43          List subtasks = list.getSubtasks();
   66.44 @@ -228,7 +219,9 @@
   66.45      }
   66.46  
   66.47  
   66.48 -   /** Test the import/export feature */
   66.49 +    /** 
   66.50 +     * Test the import/export feature 
   66.51 +     */
   66.52      public void testSimpleICalImportExport() throws Exception {
   66.53          String contents = "BEGIN:VCALENDAR\r\nPRODID:-//NetBeans tasklist//NONSGML 1.0//EN\r\nVERSION:2.0\r\n\r\nBEGIN:VTODO\r\nUID:nb1031618664570.1@proto/192.129.100.100\r\nCREATED:20020910T004424Z\r\nSUMMARY:This is a test task\r\nPERCENT-COMPLETE:0\r\nEND:VTODO\r\n\r\nEND:VCALENDAR\r\n"; // NOI18N
   66.54          ByteArrayInputStream reader = new ByteArrayInputStream(contents.getBytes()); 
   66.55 @@ -312,5 +305,4 @@
   66.56          UserTaskList list = UserTaskList.readDocument(fo);
   66.57          return list;
   66.58      }
   66.59 -
   66.60  }