Finished version 1.5

Added timeline viewer for a single day
  Added icon resources
  Modified build file to clean more stuff

committer: Jonathan Bernard <jdbernard@gmail.com>
This commit is contained in:
Jonathan Bernard 2008-10-18 18:18:51 -05:00
parent 789e708f69
commit ffdce9c00d
19 changed files with 1070 additions and 104 deletions

View File

@ -87,7 +87,7 @@
<delete> <delete>
<fileset dir="${basedir}"> <fileset dir="${basedir}">
<include name="*.log" /> <include name="*.log" />
<include name="*.log.lck" /> <include name="*.log.*" />
<include name="timestamper.config" /> <include name="timestamper.config" />
</fileset> </fileset>
</delete> </delete>

BIN
lib/jcalendar-1.3.2.jar Executable file

Binary file not shown.

View File

@ -22,12 +22,14 @@ dist.jar=${dist.dir}/TimeStamper.jar
dist.javadoc.dir=${dist.dir}/javadoc dist.javadoc.dir=${dist.dir}/javadoc
excludes= excludes=
file.reference.appframework-1.0.3.jar=lib/appframework-1.0.3.jar file.reference.appframework-1.0.3.jar=lib/appframework-1.0.3.jar
file.reference.jcalendar-1.3.2.jar=C:\\Documents and Settings\\jbernard\\My Documents\\Development\\TimeStamper\\lib\\jcalendar-1.3.2.jar
file.reference.swing-worker-1.1.jar=lib/swing-worker-1.1.jar file.reference.swing-worker-1.1.jar=lib/swing-worker-1.1.jar
includes=** includes=**
jar.compress=false jar.compress=false
javac.classpath=\ javac.classpath=\
${file.reference.appframework-1.0.3.jar}:\ ${file.reference.appframework-1.0.3.jar}:\
${file.reference.swing-worker-1.1.jar} ${file.reference.swing-worker-1.1.jar}:\
${file.reference.jcalendar-1.3.2.jar}
# Space-separated list of extra javac options # Space-separated list of extra javac options
javac.compilerargs= javac.compilerargs=
javac.deprecation=false javac.deprecation=false

View File

@ -4,6 +4,7 @@
<Properties> <Properties>
<Property name="defaultCloseOperation" type="int" value="2"/> <Property name="defaultCloseOperation" type="int" value="2"/>
<Property name="name" type="java.lang.String" value="Form" noResource="true"/> <Property name="name" type="java.lang.String" value="Form" noResource="true"/>
<Property name="undecorated" type="boolean" value="true"/>
</Properties> </Properties>
<SyntheticProperties> <SyntheticProperties>
<SyntheticProperty name="formSizePolicy" type="int" value="1"/> <SyntheticProperty name="formSizePolicy" type="int" value="1"/>
@ -22,44 +23,334 @@
<Layout> <Layout>
<DimensionLayout dim="0"> <DimensionLayout dim="0">
<Group type="103" groupAlignment="0" attributes="0"> <Group type="103" groupAlignment="0" attributes="0">
<Group type="102" alignment="0" attributes="0"> <Component id="mainPanel" alignment="0" max="32767" attributes="0"/>
<EmptySpace max="-2" attributes="0"/>
<Component id="timelineDayDisplay1" max="32767" attributes="0"/>
<EmptySpace max="-2" attributes="0"/>
</Group>
</Group> </Group>
</DimensionLayout> </DimensionLayout>
<DimensionLayout dim="1"> <DimensionLayout dim="1">
<Group type="103" groupAlignment="0" attributes="0"> <Group type="103" groupAlignment="0" attributes="0">
<Group type="102" alignment="0" attributes="0"> <Component id="mainPanel" alignment="0" max="32767" attributes="0"/>
<EmptySpace max="-2" attributes="0"/>
<Component id="timelineDayDisplay1" max="32767" attributes="0"/>
<EmptySpace max="-2" attributes="0"/>
</Group>
</Group> </Group>
</DimensionLayout> </DimensionLayout>
</Layout> </Layout>
<SubComponents> <SubComponents>
<Container class="jdbernard.timestamper.TimelineDayDisplay" name="timelineDayDisplay1"> <Container class="javax.swing.JPanel" name="mainPanel">
<Properties> <Properties>
<Property name="name" type="java.lang.String" value="timelineDayDisplay1" noResource="true"/> <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
<Property name="timeline" type="jdbernard.timestamper.Timeline" editor="org.netbeans.modules.form.RADConnectionPropertyEditor"> <Border info="org.netbeans.modules.form.compat2.border.LineBorderInfo">
<Connection code="timeline" type="code"/> <LineBorder thickness="2"/>
</Border>
</Property> </Property>
<Property name="name" type="java.lang.String" value="mainPanel" noResource="true"/>
</Properties> </Properties>
<Events>
<EventHandler event="mousePressed" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="mainPanelMousePressed"/>
</Events>
<AuxValues>
<AuxValue name="JavaCodeGenerator_ListenersCodePost" type="java.lang.String" value="mainPanel.addMouseMotionListener(this);"/>
</AuxValues>
<Layout> <Layout>
<DimensionLayout dim="0"> <DimensionLayout dim="0">
<Group type="103" groupAlignment="0" attributes="0"> <Group type="103" groupAlignment="0" attributes="0">
<EmptySpace min="0" pref="380" max="32767" attributes="0"/> <Group type="102" alignment="1" attributes="0">
<EmptySpace max="-2" attributes="0"/>
<Group type="103" groupAlignment="1" attributes="0">
<Component id="dayDisplay" alignment="0" pref="405" max="32767" attributes="0"/>
<Component id="detailPanel" alignment="0" max="32767" attributes="0"/>
</Group>
<EmptySpace max="-2" attributes="0"/>
</Group>
</Group> </Group>
</DimensionLayout> </DimensionLayout>
<DimensionLayout dim="1"> <DimensionLayout dim="1">
<Group type="103" groupAlignment="0" attributes="0"> <Group type="103" groupAlignment="0" attributes="0">
<EmptySpace min="0" pref="278" max="32767" attributes="0"/> <Group type="102" alignment="1" attributes="0">
<EmptySpace max="-2" attributes="0"/>
<Component id="dayDisplay" pref="339" max="32767" attributes="0"/>
<EmptySpace max="-2" attributes="0"/>
<Component id="detailPanel" min="-2" max="-2" attributes="0"/>
<EmptySpace max="-2" attributes="0"/>
</Group>
</Group> </Group>
</DimensionLayout> </DimensionLayout>
</Layout> </Layout>
<SubComponents>
<Container class="jdbernard.timestamper.TimelineDayDisplay" name="dayDisplay">
<Properties>
<Property name="name" type="java.lang.String" value="dayDisplay" noResource="true"/>
<Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[100, 100]"/>
</Property>
</Properties>
<Layout>
<DimensionLayout dim="0">
<Group type="103" groupAlignment="0" attributes="0">
<EmptySpace min="0" pref="405" max="32767" attributes="0"/>
</Group>
</DimensionLayout>
<DimensionLayout dim="1">
<Group type="103" groupAlignment="0" attributes="0">
<EmptySpace min="0" pref="339" max="32767" attributes="0"/>
</Group>
</DimensionLayout>
</Layout>
</Container>
<Container class="javax.swing.JPanel" name="detailPanel">
<Properties>
<Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
<Border info="org.netbeans.modules.form.compat2.border.LineBorderInfo">
<LineBorder/>
</Border>
</Property>
<Property name="name" type="java.lang.String" value="detailPanel" noResource="true"/>
</Properties>
<Layout>
<DimensionLayout dim="0">
<Group type="103" groupAlignment="0" attributes="0">
<Group type="102" alignment="1" attributes="0">
<Component id="textPane" max="32767" attributes="0"/>
<EmptySpace max="-2" attributes="0"/>
<Component id="buttonPanel" min="-2" pref="139" max="-2" attributes="0"/>
</Group>
</Group>
</DimensionLayout>
<DimensionLayout dim="1">
<Group type="103" groupAlignment="0" attributes="0">
<Component id="buttonPanel" alignment="0" max="32767" attributes="0"/>
<Component id="textPane" alignment="1" max="32767" attributes="0"/>
</Group>
</DimensionLayout>
</Layout>
<SubComponents>
<Container class="javax.swing.JPanel" name="textPane">
<Properties>
<Property name="name" type="java.lang.String" value="textPane" noResource="true"/>
</Properties>
<Layout>
<DimensionLayout dim="0">
<Group type="103" groupAlignment="0" attributes="0">
<Group type="102" alignment="1" attributes="0">
<EmptySpace max="-2" attributes="0"/>
<Group type="103" groupAlignment="1" attributes="0">
<Component id="notesScrollPane" alignment="0" pref="238" max="32767" attributes="0"/>
<Component id="timestampDateChooser" alignment="0" pref="238" max="32767" attributes="0"/>
<Component id="markTextField" alignment="0" pref="238" max="32767" attributes="0"/>
</Group>
<EmptySpace max="-2" attributes="0"/>
</Group>
</Group>
</DimensionLayout>
<DimensionLayout dim="1">
<Group type="103" groupAlignment="0" attributes="0">
<Group type="102" alignment="0" attributes="0">
<EmptySpace max="-2" attributes="0"/>
<Component id="timestampDateChooser" min="-2" max="-2" attributes="0"/>
<EmptySpace max="-2" attributes="0"/>
<Component id="markTextField" min="-2" max="-2" attributes="0"/>
<EmptySpace max="-2" attributes="0"/>
<Component id="notesScrollPane" pref="36" max="32767" attributes="0"/>
<EmptySpace max="-2" attributes="0"/>
</Group>
</Group>
</DimensionLayout>
</Layout>
<SubComponents>
<Component class="javax.swing.JTextField" name="markTextField">
<Properties>
<Property name="text" type="java.lang.String" resourceKey="markTextField.text"/>
<Property name="name" type="java.lang.String" value="markTextField" noResource="true"/>
</Properties>
</Component>
<Container class="javax.swing.JScrollPane" name="notesScrollPane">
<Properties>
<Property name="name" type="java.lang.String" value="notesScrollPane" noResource="true"/>
</Properties>
<Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
<SubComponents>
<Component class="javax.swing.JTextArea" name="notesTextArea">
<Properties>
<Property name="columns" type="int" value="20"/>
<Property name="rows" type="int" value="5"/>
<Property name="name" type="java.lang.String" value="notesTextArea" noResource="true"/>
</Properties>
</Component>
</SubComponents>
</Container>
<Component class="com.toedter.calendar.JDateChooser" name="timestampDateChooser">
<Properties>
<Property name="dateFormatString" type="java.lang.String" resourceKey="timestampDateChooser.dateFormatString"/>
<Property name="name" type="java.lang.String" value="timestampDateChooser" noResource="true"/>
</Properties>
</Component>
</SubComponents>
</Container>
<Container class="javax.swing.JPanel" name="buttonPanel">
<Properties>
<Property name="name" type="java.lang.String" value="buttonPanel" noResource="true"/>
</Properties>
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout"/>
<SubComponents>
<Container class="javax.swing.JPanel" name="datePanel">
<Properties>
<Property name="name" type="java.lang.String" value="datePanel" noResource="true"/>
</Properties>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
<GridBagConstraints gridX="0" gridY="0" gridWidth="1" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="1.0" weightY="0.0"/>
</Constraint>
</Constraints>
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout"/>
<SubComponents>
<Component class="javax.swing.JLabel" name="dateLabel">
<Properties>
<Property name="background" type="java.awt.Color" resourceKey="dateLabel.background"/>
<Property name="horizontalAlignment" type="int" value="0"/>
<Property name="text" type="java.lang.String" resourceKey="dateLabel.text"/>
<Property name="name" type="java.lang.String" value="dateLabel" noResource="true"/>
<Property name="opaque" type="boolean" value="true"/>
</Properties>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
<GridBagConstraints gridX="0" gridY="0" gridWidth="5" gridHeight="1" fill="1" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="1.0" weightY="0.0"/>
</Constraint>
</Constraints>
</Component>
<Component class="javax.swing.JButton" name="prevWeekButton">
<Properties>
<Property name="action" type="javax.swing.Action" editor="org.netbeans.modules.swingapp.ActionEditor">
<action class="jdbernard.timestamper.PunchcardDisplayDialog" id="previousWeek" methodName="previousWeek"/>
</Property>
<Property name="hideActionText" type="boolean" value="true"/>
<Property name="margin" type="java.awt.Insets" editor="org.netbeans.beaninfo.editors.InsetsEditor">
<Insets value="[0, 2, 0, 2]"/>
</Property>
<Property name="name" type="java.lang.String" value="prevWeekButton" noResource="true"/>
</Properties>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
<GridBagConstraints gridX="0" gridY="1" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/>
</Constraint>
</Constraints>
</Component>
<Component class="javax.swing.JButton" name="prevDayButton">
<Properties>
<Property name="action" type="javax.swing.Action" editor="org.netbeans.modules.swingapp.ActionEditor">
<action class="jdbernard.timestamper.PunchcardDisplayDialog" id="previousDay" methodName="previousDay"/>
</Property>
<Property name="hideActionText" type="boolean" value="true"/>
<Property name="margin" type="java.awt.Insets" editor="org.netbeans.beaninfo.editors.InsetsEditor">
<Insets value="[0, 2, 0, 2]"/>
</Property>
<Property name="name" type="java.lang.String" value="prevDayButton" noResource="true"/>
</Properties>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
<GridBagConstraints gridX="1" gridY="1" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/>
</Constraint>
</Constraints>
</Component>
<Component class="javax.swing.JButton" name="currentDayButton">
<Properties>
<Property name="action" type="javax.swing.Action" editor="org.netbeans.modules.swingapp.ActionEditor">
<action class="jdbernard.timestamper.PunchcardDisplayDialog" id="currentDay" methodName="currentDay"/>
</Property>
<Property name="margin" type="java.awt.Insets" editor="org.netbeans.beaninfo.editors.InsetsEditor">
<Insets value="[0, 2, 0, 2]"/>
</Property>
<Property name="name" type="java.lang.String" value="currentDayButton" noResource="true"/>
</Properties>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
<GridBagConstraints gridX="2" gridY="1" gridWidth="1" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="1.0" weightY="0.0"/>
</Constraint>
</Constraints>
</Component>
<Component class="javax.swing.JButton" name="nextDayButton">
<Properties>
<Property name="action" type="javax.swing.Action" editor="org.netbeans.modules.swingapp.ActionEditor">
<action class="jdbernard.timestamper.PunchcardDisplayDialog" id="nextDay" methodName="nextDay"/>
</Property>
<Property name="hideActionText" type="boolean" value="true"/>
<Property name="margin" type="java.awt.Insets" editor="org.netbeans.beaninfo.editors.InsetsEditor">
<Insets value="[0, 2, 0, 2]"/>
</Property>
<Property name="name" type="java.lang.String" value="nextDayButton" noResource="true"/>
</Properties>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
<GridBagConstraints gridX="3" gridY="1" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/>
</Constraint>
</Constraints>
</Component>
<Component class="javax.swing.JButton" name="nextWeekButton">
<Properties>
<Property name="action" type="javax.swing.Action" editor="org.netbeans.modules.swingapp.ActionEditor">
<action class="jdbernard.timestamper.PunchcardDisplayDialog" id="nextWeek" methodName="nextWeek"/>
</Property>
<Property name="hideActionText" type="boolean" value="true"/>
<Property name="margin" type="java.awt.Insets" editor="org.netbeans.beaninfo.editors.InsetsEditor">
<Insets value="[0, 2, 0, 2]"/>
</Property>
<Property name="name" type="java.lang.String" value="nextWeekButton" noResource="true"/>
</Properties>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
<GridBagConstraints gridX="4" gridY="1" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/>
</Constraint>
</Constraints>
</Component>
</SubComponents>
</Container>
<Component class="javax.swing.JButton" name="newMarkerButton">
<Properties>
<Property name="action" type="javax.swing.Action" editor="org.netbeans.modules.swingapp.ActionEditor">
<action class="jdbernard.timestamper.PunchcardDisplayDialog" id="newMarker" methodName="newMarker"/>
</Property>
<Property name="name" type="java.lang.String" value="newMarkerButton" noResource="true"/>
</Properties>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
<GridBagConstraints gridX="0" gridY="1" gridWidth="1" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="1.0" weightY="0.0"/>
</Constraint>
</Constraints>
</Component>
<Component class="javax.swing.JButton" name="deleteMarkerButton">
<Properties>
<Property name="action" type="javax.swing.Action" editor="org.netbeans.modules.swingapp.ActionEditor">
<action class="jdbernard.timestamper.PunchcardDisplayDialog" id="deleteMarker" methodName="deleteMarker"/>
</Property>
<Property name="name" type="java.lang.String" value="deleteMarkerButton" noResource="true"/>
</Properties>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
<GridBagConstraints gridX="0" gridY="2" gridWidth="1" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="1.0" weightY="0.0"/>
</Constraint>
</Constraints>
</Component>
<Component class="javax.swing.JButton" name="saveMarkerChanges">
<Properties>
<Property name="action" type="javax.swing.Action" editor="org.netbeans.modules.swingapp.ActionEditor">
<action class="jdbernard.timestamper.PunchcardDisplayDialog" id="saveMarkerChanges" methodName="saveMarkerChanges"/>
</Property>
<Property name="name" type="java.lang.String" value="saveMarkerChanges" noResource="true"/>
</Properties>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
<GridBagConstraints gridX="0" gridY="3" gridWidth="1" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/>
</Constraint>
</Constraints>
</Component>
</SubComponents>
</Container>
</SubComponents>
</Container>
</SubComponents>
</Container> </Container>
</SubComponents> </SubComponents>
</Form> </Form>

View File

@ -6,20 +6,39 @@
package jdbernard.timestamper; package jdbernard.timestamper;
import java.awt.Frame;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.Toolkit;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import java.io.File; import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Calendar; import java.util.Calendar;
import javax.swing.JDialog;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import org.jdesktop.application.Action;
/** /**
* *
* @author jbernard * @author jbernard
*/ */
public class PunchcardDisplayDialog extends javax.swing.JDialog { public class PunchcardDisplayDialog extends JDialog
implements MouseMotionListener, ChangeListener {
/** Creates new form PunchcardDisplayDialog */ /** Creates new form PunchcardDisplayDialog */
public PunchcardDisplayDialog(java.awt.Frame parent, boolean modal) { public PunchcardDisplayDialog(Frame parent, boolean modal,
Timeline timeline, Calendar day) {
super(parent, modal); super(parent, modal);
this.timeline = timeline;
this.day = day;
initComponents(); initComponents();
timelineDayDisplay1.setDay(Calendar.getInstance()); markTextField.setFont(dayDisplay.getMarkFont());
notesTextArea.setFont(dayDisplay.getNotesFont());
dayDisplay.setTimeline(timeline);
dayDisplay.setDay(day);
dayDisplay.addChangeListener(this);
} }
/** This method is called from within the constructor to /** This method is called from within the constructor to
@ -30,58 +49,268 @@ public class PunchcardDisplayDialog extends javax.swing.JDialog {
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() { private void initComponents() {
java.awt.GridBagConstraints gridBagConstraints;
timelineDayDisplay1 = new jdbernard.timestamper.TimelineDayDisplay(); mainPanel = new javax.swing.JPanel();
dayDisplay = new jdbernard.timestamper.TimelineDayDisplay();
detailPanel = new javax.swing.JPanel();
textPane = new javax.swing.JPanel();
markTextField = new javax.swing.JTextField();
notesScrollPane = new javax.swing.JScrollPane();
notesTextArea = new javax.swing.JTextArea();
timestampDateChooser = new com.toedter.calendar.JDateChooser();
buttonPanel = new javax.swing.JPanel();
datePanel = new javax.swing.JPanel();
dateLabel = new javax.swing.JLabel();
prevWeekButton = new javax.swing.JButton();
prevDayButton = new javax.swing.JButton();
currentDayButton = new javax.swing.JButton();
nextDayButton = new javax.swing.JButton();
nextWeekButton = new javax.swing.JButton();
newMarkerButton = new javax.swing.JButton();
deleteMarkerButton = new javax.swing.JButton();
saveMarkerChanges = new javax.swing.JButton();
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE); setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
setName("Form"); // NOI18N setName("Form"); // NOI18N
setUndecorated(true);
timelineDayDisplay1.setName("timelineDayDisplay1"); // NOI18N mainPanel.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0), 2));
mainPanel.setName("mainPanel"); // NOI18N
mainPanel.addMouseListener(new java.awt.event.MouseAdapter() {
public void mousePressed(java.awt.event.MouseEvent evt) {
mainPanelMousePressed(evt);
}
});
mainPanel.addMouseMotionListener(this);
javax.swing.GroupLayout timelineDayDisplay1Layout = new javax.swing.GroupLayout(timelineDayDisplay1); dayDisplay.setName("dayDisplay"); // NOI18N
timelineDayDisplay1.setLayout(timelineDayDisplay1Layout); dayDisplay.setPreferredSize(new java.awt.Dimension(100, 100));
timelineDayDisplay1Layout.setHorizontalGroup(
timelineDayDisplay1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) javax.swing.GroupLayout dayDisplayLayout = new javax.swing.GroupLayout(dayDisplay);
.addGap(0, 380, Short.MAX_VALUE) dayDisplay.setLayout(dayDisplayLayout);
dayDisplayLayout.setHorizontalGroup(
dayDisplayLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 405, Short.MAX_VALUE)
); );
timelineDayDisplay1Layout.setVerticalGroup( dayDisplayLayout.setVerticalGroup(
timelineDayDisplay1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) dayDisplayLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 278, Short.MAX_VALUE) .addGap(0, 339, Short.MAX_VALUE)
);
detailPanel.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
detailPanel.setName("detailPanel"); // NOI18N
textPane.setName("textPane"); // NOI18N
org.jdesktop.application.ResourceMap resourceMap = org.jdesktop.application.Application.getInstance(jdbernard.timestamper.TimeStamperApp.class).getContext().getResourceMap(PunchcardDisplayDialog.class);
markTextField.setText(resourceMap.getString("markTextField.text")); // NOI18N
markTextField.setName("markTextField"); // NOI18N
notesScrollPane.setName("notesScrollPane"); // NOI18N
notesTextArea.setColumns(20);
notesTextArea.setRows(5);
notesTextArea.setName("notesTextArea"); // NOI18N
notesScrollPane.setViewportView(notesTextArea);
timestampDateChooser.setDateFormatString(resourceMap.getString("timestampDateChooser.dateFormatString")); // NOI18N
timestampDateChooser.setName("timestampDateChooser"); // NOI18N
javax.swing.GroupLayout textPaneLayout = new javax.swing.GroupLayout(textPane);
textPane.setLayout(textPaneLayout);
textPaneLayout.setHorizontalGroup(
textPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, textPaneLayout.createSequentialGroup()
.addContainerGap()
.addGroup(textPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(notesScrollPane, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 238, Short.MAX_VALUE)
.addComponent(timestampDateChooser, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 238, Short.MAX_VALUE)
.addComponent(markTextField, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 238, Short.MAX_VALUE))
.addContainerGap())
);
textPaneLayout.setVerticalGroup(
textPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(textPaneLayout.createSequentialGroup()
.addContainerGap()
.addComponent(timestampDateChooser, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(markTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(notesScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 36, Short.MAX_VALUE)
.addContainerGap())
);
buttonPanel.setName("buttonPanel"); // NOI18N
buttonPanel.setLayout(new java.awt.GridBagLayout());
datePanel.setName("datePanel"); // NOI18N
datePanel.setLayout(new java.awt.GridBagLayout());
dateLabel.setBackground(resourceMap.getColor("dateLabel.background")); // NOI18N
dateLabel.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
dateLabel.setText(resourceMap.getString("dateLabel.text")); // NOI18N
dateLabel.setName("dateLabel"); // NOI18N
dateLabel.setOpaque(true);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 0;
gridBagConstraints.gridwidth = 5;
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints.weightx = 1.0;
datePanel.add(dateLabel, gridBagConstraints);
javax.swing.ActionMap actionMap = org.jdesktop.application.Application.getInstance(jdbernard.timestamper.TimeStamperApp.class).getContext().getActionMap(PunchcardDisplayDialog.class, this);
prevWeekButton.setAction(actionMap.get("previousWeek")); // NOI18N
prevWeekButton.setHideActionText(true);
prevWeekButton.setMargin(new java.awt.Insets(0, 2, 0, 2));
prevWeekButton.setName("prevWeekButton"); // NOI18N
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 1;
datePanel.add(prevWeekButton, gridBagConstraints);
prevDayButton.setAction(actionMap.get("previousDay")); // NOI18N
prevDayButton.setHideActionText(true);
prevDayButton.setMargin(new java.awt.Insets(0, 2, 0, 2));
prevDayButton.setName("prevDayButton"); // NOI18N
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 1;
datePanel.add(prevDayButton, gridBagConstraints);
currentDayButton.setAction(actionMap.get("currentDay")); // NOI18N
currentDayButton.setMargin(new java.awt.Insets(0, 2, 0, 2));
currentDayButton.setName("currentDayButton"); // NOI18N
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 2;
gridBagConstraints.gridy = 1;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.weightx = 1.0;
datePanel.add(currentDayButton, gridBagConstraints);
nextDayButton.setAction(actionMap.get("nextDay")); // NOI18N
nextDayButton.setHideActionText(true);
nextDayButton.setMargin(new java.awt.Insets(0, 2, 0, 2));
nextDayButton.setName("nextDayButton"); // NOI18N
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 3;
gridBagConstraints.gridy = 1;
datePanel.add(nextDayButton, gridBagConstraints);
nextWeekButton.setAction(actionMap.get("nextWeek")); // NOI18N
nextWeekButton.setHideActionText(true);
nextWeekButton.setMargin(new java.awt.Insets(0, 2, 0, 2));
nextWeekButton.setName("nextWeekButton"); // NOI18N
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 4;
gridBagConstraints.gridy = 1;
datePanel.add(nextWeekButton, gridBagConstraints);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 0;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.weightx = 1.0;
buttonPanel.add(datePanel, gridBagConstraints);
newMarkerButton.setAction(actionMap.get("newMarker")); // NOI18N
newMarkerButton.setName("newMarkerButton"); // NOI18N
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 1;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.weightx = 1.0;
buttonPanel.add(newMarkerButton, gridBagConstraints);
deleteMarkerButton.setAction(actionMap.get("deleteMarker")); // NOI18N
deleteMarkerButton.setName("deleteMarkerButton"); // NOI18N
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 2;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.weightx = 1.0;
buttonPanel.add(deleteMarkerButton, gridBagConstraints);
saveMarkerChanges.setAction(actionMap.get("saveMarkerChanges")); // NOI18N
saveMarkerChanges.setName("saveMarkerChanges"); // NOI18N
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 3;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
buttonPanel.add(saveMarkerChanges, gridBagConstraints);
javax.swing.GroupLayout detailPanelLayout = new javax.swing.GroupLayout(detailPanel);
detailPanel.setLayout(detailPanelLayout);
detailPanelLayout.setHorizontalGroup(
detailPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, detailPanelLayout.createSequentialGroup()
.addComponent(textPane, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(buttonPanel, javax.swing.GroupLayout.PREFERRED_SIZE, 139, javax.swing.GroupLayout.PREFERRED_SIZE))
);
detailPanelLayout.setVerticalGroup(
detailPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(buttonPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(textPane, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
);
javax.swing.GroupLayout mainPanelLayout = new javax.swing.GroupLayout(mainPanel);
mainPanel.setLayout(mainPanelLayout);
mainPanelLayout.setHorizontalGroup(
mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, mainPanelLayout.createSequentialGroup()
.addContainerGap()
.addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(dayDisplay, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 405, Short.MAX_VALUE)
.addComponent(detailPanel, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addContainerGap())
);
mainPanelLayout.setVerticalGroup(
mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, mainPanelLayout.createSequentialGroup()
.addContainerGap()
.addComponent(dayDisplay, javax.swing.GroupLayout.DEFAULT_SIZE, 339, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(detailPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap())
); );
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout); getContentPane().setLayout(layout);
layout.setHorizontalGroup( layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup() .addComponent(mainPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addContainerGap()
.addComponent(timelineDayDisplay1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addContainerGap())
); );
layout.setVerticalGroup( layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup() .addComponent(mainPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addContainerGap()
.addComponent(timelineDayDisplay1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addContainerGap())
); );
pack(); pack();
}// </editor-fold>//GEN-END:initComponents }// </editor-fold>//GEN-END:initComponents
private void mainPanelMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_mainPanelMousePressed
mousePressRelativeToWindow = evt.getPoint();
}//GEN-LAST:event_mainPanelMousePressed
/** /**
* @param args the command line arguments * @param args the command line arguments
*/ */
public static void main(String args[]) throws Exception { public static void main(String args[]) throws Exception {
java.awt.EventQueue.invokeLater(new Runnable() { java.awt.EventQueue.invokeLater(new Runnable() {
public void run() { public void run() {
PunchcardDisplayDialog dialog = new PunchcardDisplayDialog(new javax.swing.JFrame(), true); Timeline timeline = null;
try { dialog.timelineDayDisplay1.setTimeline(Timeline.readFromFile("test-timeline.txt")); } Calendar day = Calendar.getInstance();
try { timeline = Timeline.readFromFile("test-timeline.txt"); }
catch (Exception e) { catch (Exception e) {
System.err.println("Could not open timeline text."); System.err.println("Could not open timeline text:");
e.printStackTrace(System.err);
timeline = new Timeline();
try { new File("PLACE_HERE").createNewFile(); } try { new File("PLACE_HERE").createNewFile(); }
catch (Exception e1) {} catch (Exception e1) {}
} }
PunchcardDisplayDialog dialog = new PunchcardDisplayDialog(new javax.swing.JFrame(), true, timeline, day);
dialog.addWindowListener(new java.awt.event.WindowAdapter() { dialog.addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(java.awt.event.WindowEvent e) { public void windowClosing(java.awt.event.WindowEvent e) {
System.exit(0); System.exit(0);
@ -92,9 +321,108 @@ public class PunchcardDisplayDialog extends javax.swing.JDialog {
}); });
} }
@Action
public void previousWeek() {
day.add(Calendar.WEEK_OF_YEAR, -1);
dayDisplay.setDay(day);
dateLabel.setText(dateFormatter.format(day.getTime()));
repaint();
}
@Action
public void previousDay() {
day.add(Calendar.DAY_OF_YEAR, -1);
dayDisplay.setDay(day);
dateLabel.setText(dateFormatter.format(day.getTime()));
repaint();
}
@Action
public void currentDay() {
day = Calendar.getInstance();
dayDisplay.setDay(day);
dateLabel.setText(dateFormatter.format(day.getTime()));
repaint();
}
@Action
public void nextDay() {
day.add(Calendar.DAY_OF_YEAR, 1);
dayDisplay.setDay(day);
dateLabel.setText(dateFormatter.format(day.getTime()));
repaint();
}
@Action
public void nextWeek() {
day.add(Calendar.WEEK_OF_YEAR, 1);
dayDisplay.setDay(day);
dateLabel.setText(dateFormatter.format(day.getTime()));
repaint();
}
@Action
public void newMarker() {
dayDisplay.addMarker(timestampDateChooser.getDate(),
markTextField.getText(), notesTextArea.getText());
repaint();
}
@Action
public void deleteMarker() {
dayDisplay.deleteSelectedMarker();
repaint();
}
@Action
public void saveMarkerChanges() {
deleteMarker();
newMarker();
}
// Variables declaration - do not modify//GEN-BEGIN:variables // Variables declaration - do not modify//GEN-BEGIN:variables
private jdbernard.timestamper.TimelineDayDisplay timelineDayDisplay1; private javax.swing.JPanel buttonPanel;
private javax.swing.JButton currentDayButton;
private javax.swing.JLabel dateLabel;
private javax.swing.JPanel datePanel;
private jdbernard.timestamper.TimelineDayDisplay dayDisplay;
private javax.swing.JButton deleteMarkerButton;
private javax.swing.JPanel detailPanel;
private javax.swing.JPanel mainPanel;
private javax.swing.JTextField markTextField;
private javax.swing.JButton newMarkerButton;
private javax.swing.JButton nextDayButton;
private javax.swing.JButton nextWeekButton;
private javax.swing.JScrollPane notesScrollPane;
private javax.swing.JTextArea notesTextArea;
private javax.swing.JButton prevDayButton;
private javax.swing.JButton prevWeekButton;
private javax.swing.JButton saveMarkerChanges;
private javax.swing.JPanel textPane;
private com.toedter.calendar.JDateChooser timestampDateChooser;
// End of variables declaration//GEN-END:variables // End of variables declaration//GEN-END:variables
private Calendar day;
private Timeline timeline; private Timeline timeline;
private SimpleDateFormat dateFormatter =
new SimpleDateFormat("EEE MMM dd");
private Point mousePressRelativeToWindow;
public void mouseDragged(MouseEvent e) {
setLocation(TimeStamperView.calculateWindowMovement(
e.getLocationOnScreen(), mousePressRelativeToWindow,
getBounds(),
new Rectangle(Toolkit.getDefaultToolkit().getScreenSize())));
}
public void mouseMoved(MouseEvent e) {
}
public void stateChanged(ChangeEvent e) {
Timeline.TimelineMarker marker = dayDisplay.getSelectedTimelineMarker();
timestampDateChooser.setDate(marker.getTimestamp());
markTextField.setText(marker.getMark());
notesTextArea.setText(marker.getNotes());
}
} }

View File

@ -222,6 +222,27 @@
<Property name="name" type="java.lang.String" value="loadTimelineMenuItem" noResource="true"/> <Property name="name" type="java.lang.String" value="loadTimelineMenuItem" noResource="true"/>
</Properties> </Properties>
</MenuItem> </MenuItem>
<Component class="javax.swing.JSeparator" name="seperator1">
<Properties>
<Property name="name" type="java.lang.String" value="seperator1" noResource="true"/>
</Properties>
</Component>
<MenuItem class="javax.swing.JCheckBoxMenuItem" name="showNotesDialogCheckBoxMenuItem">
<Properties>
<Property name="action" type="javax.swing.Action" editor="org.netbeans.modules.swingapp.ActionEditor">
<action class="jdbernard.timestamper.TimeStamperView" id="editNotes" methodName="editNotes"/>
</Property>
<Property name="name" type="java.lang.String" value="showNotesDialogCheckBoxMenuItem" noResource="true"/>
</Properties>
</MenuItem>
<MenuItem class="javax.swing.JCheckBoxMenuItem" name="showPunchcardCheckBoxMenuItem">
<Properties>
<Property name="action" type="javax.swing.Action" editor="org.netbeans.modules.swingapp.ActionEditor">
<action class="jdbernard.timestamper.TimeStamperView" id="showPunchcard" methodName="showPunchcard"/>
</Property>
<Property name="name" type="java.lang.String" value="showPunchcardCheckBoxMenuItem" noResource="true"/>
</Properties>
</MenuItem>
</SubComponents> </SubComponents>
</Container> </Container>
</NonVisualComponents> </NonVisualComponents>

View File

@ -11,9 +11,11 @@ import java.awt.Toolkit;
import java.awt.event.KeyEvent; import java.awt.event.KeyEvent;
import java.awt.event.MouseEvent; import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener; import java.awt.event.MouseMotionListener;
import java.util.Calendar;
import java.util.Date; import java.util.Date;
import java.util.Timer; import java.util.Timer;
import java.util.TimerTask; import java.util.TimerTask;
import javax.swing.ButtonGroup;
import javax.swing.JFileChooser; import javax.swing.JFileChooser;
import org.jdesktop.application.Action; import org.jdesktop.application.Action;
import org.jdesktop.application.ResourceMap; import org.jdesktop.application.ResourceMap;
@ -98,6 +100,9 @@ public class TimeStamperView extends FrameView implements MouseMotionListener {
saveTimelineMenuItem = new javax.swing.JMenuItem(); saveTimelineMenuItem = new javax.swing.JMenuItem();
saveTimelineAsMenuItem = new javax.swing.JMenuItem(); saveTimelineAsMenuItem = new javax.swing.JMenuItem();
loadTimelineMenuItem = new javax.swing.JMenuItem(); loadTimelineMenuItem = new javax.swing.JMenuItem();
seperator1 = new javax.swing.JSeparator();
showNotesDialogCheckBoxMenuItem = new javax.swing.JCheckBoxMenuItem();
showPunchcardCheckBoxMenuItem = new javax.swing.JCheckBoxMenuItem();
mainPanel.setBorder(javax.swing.BorderFactory.createMatteBorder(2, 2, 2, 2, new java.awt.Color(0, 0, 0))); mainPanel.setBorder(javax.swing.BorderFactory.createMatteBorder(2, 2, 2, 2, new java.awt.Color(0, 0, 0)));
mainPanel.setName("mainPanel"); // NOI18N mainPanel.setName("mainPanel"); // NOI18N
@ -177,13 +182,13 @@ public class TimeStamperView extends FrameView implements MouseMotionListener {
.addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(mainPanelLayout.createSequentialGroup() .addGroup(mainPanelLayout.createSequentialGroup()
.addComponent(totalTimeNow) .addComponent(totalTimeNow)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 23, Short.MAX_VALUE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 58, Short.MAX_VALUE)
.addComponent(currentTimeLabel)) .addComponent(currentTimeLabel))
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, mainPanelLayout.createSequentialGroup() .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, mainPanelLayout.createSequentialGroup()
.addComponent(currentTaskLabel) .addComponent(currentTaskLabel)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(startTimeLabel, javax.swing.GroupLayout.DEFAULT_SIZE, 95, Short.MAX_VALUE)) .addComponent(startTimeLabel, javax.swing.GroupLayout.DEFAULT_SIZE, 116, Short.MAX_VALUE))
.addComponent(taskTextField, javax.swing.GroupLayout.DEFAULT_SIZE, 266, Short.MAX_VALUE)) .addComponent(taskTextField, javax.swing.GroupLayout.DEFAULT_SIZE, 275, Short.MAX_VALUE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(optionsButton) .addComponent(optionsButton)
@ -226,6 +231,17 @@ public class TimeStamperView extends FrameView implements MouseMotionListener {
loadTimelineMenuItem.setName("loadTimelineMenuItem"); // NOI18N loadTimelineMenuItem.setName("loadTimelineMenuItem"); // NOI18N
optionsMenu.add(loadTimelineMenuItem); optionsMenu.add(loadTimelineMenuItem);
seperator1.setName("seperator1"); // NOI18N
optionsMenu.add(seperator1);
showNotesDialogCheckBoxMenuItem.setAction(actionMap.get("editNotes")); // NOI18N
showNotesDialogCheckBoxMenuItem.setName("showNotesDialogCheckBoxMenuItem"); // NOI18N
optionsMenu.add(showNotesDialogCheckBoxMenuItem);
showPunchcardCheckBoxMenuItem.setAction(actionMap.get("showPunchcard")); // NOI18N
showPunchcardCheckBoxMenuItem.setName("showPunchcardCheckBoxMenuItem"); // NOI18N
optionsMenu.add(showPunchcardCheckBoxMenuItem);
setComponent(mainPanel); setComponent(mainPanel);
}// </editor-fold>//GEN-END:initComponents }// </editor-fold>//GEN-END:initComponents
@ -252,7 +268,17 @@ public class TimeStamperView extends FrameView implements MouseMotionListener {
@Action @Action
public void editNotes() { public void editNotes() {
notesDialog.setVisible(notesButton.isSelected()); notesVisible = !notesVisible;
notesDialog.setVisible(notesVisible);
notesButton.setSelected(notesVisible);
showNotesDialogCheckBoxMenuItem.setSelected(notesVisible);
}
@Action
public void showPunchcard() {
punchcardVisible = !punchcardVisible;
showPunchcardCheckBoxMenuItem.setSelected(punchcardVisible);
getPunchcardDisplayDialog().setVisible(punchcardVisible);
} }
public void setNotesForActiveTask(String notes) { public void setNotesForActiveTask(String notes) {
@ -273,6 +299,9 @@ public class TimeStamperView extends FrameView implements MouseMotionListener {
private javax.swing.JPopupMenu optionsMenu; private javax.swing.JPopupMenu optionsMenu;
private javax.swing.JMenuItem saveTimelineAsMenuItem; private javax.swing.JMenuItem saveTimelineAsMenuItem;
private javax.swing.JMenuItem saveTimelineMenuItem; private javax.swing.JMenuItem saveTimelineMenuItem;
private javax.swing.JSeparator seperator1;
private javax.swing.JCheckBoxMenuItem showNotesDialogCheckBoxMenuItem;
private javax.swing.JCheckBoxMenuItem showPunchcardCheckBoxMenuItem;
private javax.swing.JLabel startTimeLabel; private javax.swing.JLabel startTimeLabel;
private javax.swing.JTextField taskTextField; private javax.swing.JTextField taskTextField;
private javax.swing.JLabel totalTimeNow; private javax.swing.JLabel totalTimeNow;
@ -285,6 +314,19 @@ public class TimeStamperView extends FrameView implements MouseMotionListener {
private Font thinTaskFont; private Font thinTaskFont;
private Date mostRecentTask; private Date mostRecentTask;
private NotesDialog notesDialog; private NotesDialog notesDialog;
private PunchcardDisplayDialog punchcardDisplayDialog;
private boolean notesVisible = false;
private boolean punchcardVisible = false;
private PunchcardDisplayDialog getPunchcardDisplayDialog() {
if (punchcardDisplayDialog == null) {
punchcardDisplayDialog = new PunchcardDisplayDialog(this.getFrame(),
false,
((TimeStamperApp) getApplication()).getActiveTimeline(),
Calendar.getInstance());
}
return punchcardDisplayDialog;
}
public void mouseDragged(MouseEvent e) { public void mouseDragged(MouseEvent e) {
getFrame().setLocation(calculateWindowMovement(e.getLocationOnScreen(), getFrame().setLocation(calculateWindowMovement(e.getLocationOnScreen(),

View File

@ -6,43 +6,73 @@ package jdbernard.timestamper;
import java.awt.BasicStroke; import java.awt.BasicStroke;
import java.awt.Color; import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics; import java.awt.Graphics;
import java.awt.Graphics2D; import java.awt.Graphics2D;
import java.awt.Insets; import java.awt.Insets;
import java.awt.Point;
import java.awt.Rectangle; import java.awt.Rectangle;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.geom.Rectangle2D; import java.awt.geom.Rectangle2D;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Calendar; import java.util.Calendar;
import java.util.Date;
import java.util.Iterator; import java.util.Iterator;
import javax.swing.JComponent; import javax.swing.JComponent;
import javax.swing.JLabel; import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
/** /**
* *
* @author jbernard * @author jbernard
*/ */
public class TimelineDayDisplay extends JComponent { public class TimelineDayDisplay extends JComponent implements MouseListener {
private class MarkerDisplayEntry {
public Timeline.TimelineMarker marker;
public float relY;
public float relHeight;
public Rectangle2D markBounds;
public Rectangle2D notesBounds;
public Rectangle bounds;
}
private Timeline timeline; private Timeline timeline;
private Calendar day; private ArrayList<MarkerDisplayEntry> markerEntries;
private Calendar day = Calendar.getInstance();
private Calendar nextDay = Calendar.getInstance();
private Timeline.TimelineMarker currentMarker;
private ArrayList<ChangeListener> changeListeners = new ArrayList<ChangeListener>();
private final Color evenTrans = new Color(0.75f, 0.75f, 0.75f, 0.4f); private Font markFont;// = getFont().deriveFont(Font.BOLD);
private final Color evenOpaque = new Color(0.75f, 0.75f, 0.75f, 1f); private Font notesFont;// = getFont();
private final Color oddTrans = new Color(0.5f, 0.5f, 0.5f, 0.4f);
private final Color oddOpaque = new Color(0.5f, 0.5f, 0.5f, 1f); private Color evenTrans = new Color(0.75f, 0.75f, 0.75f, 0.4f);
private Color evenOpaque = new Color(0.75f, 0.75f, 0.75f, 1f);
private Color oddTrans = new Color(0.5f, 0.5f, 0.5f, 0.4f);
private Color oddOpaque = new Color(0.5f, 0.5f, 0.5f, 1f);
private Color selectedTrans = new Color(0.5f, 0.75f, 0.5f, 0.4f);
private Color selectedOpaque = new Color(0.5f, 0.75f, 0.5f, 1f);
private Color fontColor = new Color(0.1f, 0.1f, 0.1f, 1f);
private long oneDayInMilli = (24 * 60 * 60 * 1000);
public TimelineDayDisplay() { public TimelineDayDisplay() {
super(); super();
addMouseListener(this);
} }
public TimelineDayDisplay(Timeline timeline, Calendar day) { public TimelineDayDisplay(Timeline timeline, Calendar day) {
super(); this();
this.timeline = timeline; this.timeline = timeline;
this.day = day; this.day = day;
updateMarkers(getGraphics());
} }
public void setTimeline(Timeline t) { public void setTimeline(Timeline t) {
timeline = t; timeline = t;
updateMarkers(getGraphics());
} }
public Timeline getTimeline() { public Timeline getTimeline() {
@ -50,44 +80,103 @@ public class TimelineDayDisplay extends JComponent {
} }
public void setDay(Calendar d) { public void setDay(Calendar d) {
day = d; day.setTime(d.getTime());
day.set(Calendar.HOUR_OF_DAY, 0); day.set(Calendar.HOUR_OF_DAY, 0);
day.set(Calendar.MINUTE, 0); day.set(Calendar.MINUTE, 0);
day.set(Calendar.SECOND, 0); day.set(Calendar.SECOND, 0);
nextDay.setTime(day.getTime());
nextDay.add(Calendar.DAY_OF_YEAR, 1);
updateMarkers(getGraphics());
} }
public Calendar getDay() { public Calendar getDay() {
return day; return day;
} }
@Override public void setMarkFont(Font f) {
public void paintComponent(Graphics g) { markFont = f;
Insets insets = this.getInsets(); }
Rectangle bounds = this.getBounds();
Rectangle canvasBounds = new Rectangle(insets.left, insets.top,
bounds.width - insets.left - insets.right - 1,
bounds.height - insets.top - insets.bottom - 1);
Calendar nextDay = Calendar.getInstance(); public Font getMarkFont() {
nextDay.setTime(day.getTime()); return markFont;
nextDay.add(Calendar.DAY_OF_YEAR, 1); }
Graphics2D g2d = (Graphics2D) g; public void setNotesFont(Font f) {
double hourHeight = canvasBounds.getHeight() / 24.0; notesFont = f;
long oneDayInMilli = (24 * 60 * 60 * 1000); }
Rectangle2D stringBounds = getFontMetrics(getFont()).getStringBounds("00:00 ", g);
for (int i = 1; i < 24; i++) {
int lineY = (int) Math.round(hourHeight * (double) i);
g.drawLine(canvasBounds.x + (int) stringBounds.getWidth(), canvasBounds.y + lineY,
canvasBounds.x + canvasBounds.width,
canvasBounds.y + lineY);
if ((hourHeight > (stringBounds.getHeight()) || ((i % 2) == 0))) { public Font getNotesFont() {
g.drawString(String.format("%1$02d:00", i), return notesFont;
canvasBounds.x + 2, lineY + (int) (stringBounds.getHeight() / 2)); }
}
}
public void setFontColor(Color f) {
fontColor = new Color(f.getRGB());
}
public Color getFontColor() {
return fontColor;
}
public void setEvenColor(Color c) {
evenOpaque = new Color(c.getRGB());
evenTrans = new Color((float) c.getRed() / 255f,
(float) c.getGreen() / 255f,
(float) c.getBlue() / 255f, 0.4f);
}
public Color getEvenColor() {
return evenOpaque;
}
public void setOddColor(Color c) {
oddOpaque = new Color(c.getRGB());
oddTrans = new Color((float) c.getRed() / 255f,
(float) c.getGreen() / 255f,
(float) c.getBlue() / 255f, 0.4f);
}
public Color getOddColor() {
return oddOpaque;
}
public void setSelectedColor(Color c) {
selectedOpaque = new Color(c.getRGB());
selectedTrans = new Color((float) c.getRed() / 255f,
(float) c.getGreen() / 255f,
(float) c.getBlue() / 255f, 0.4f);
}
public Color getSelectedColor() {
return selectedOpaque;
}
public Timeline.TimelineMarker getSelectedTimelineMarker() {
return currentMarker;
}
public void addMarker(Date timestamp, String mark, String notes) {
timeline.addMarker(timestamp, mark, notes);
updateMarkers(getGraphics());
}
public void deleteSelectedMarker() {
timeline.removeMarker(currentMarker);
updateMarkers(getGraphics());
}
public void updateSelectedMarker(String notes) {
currentMarker.setNotes(notes);
updateMarkers(getGraphics());
}
private void updateMarkers(Graphics g) {
markerEntries = new ArrayList<MarkerDisplayEntry>();
if (markFont == null) markFont = getFont().deriveFont(Font.BOLD);
if (notesFont == null) notesFont = getFont();
// get all relevant markers
Timeline.TimelineMarker tm = timeline.getLastMarker(day.getTime()); Timeline.TimelineMarker tm = timeline.getLastMarker(day.getTime());
Iterator<Timeline.TimelineMarker> itr = timeline.iterator(); Iterator<Timeline.TimelineMarker> itr = timeline.iterator();
@ -102,35 +191,180 @@ public class TimelineDayDisplay extends JComponent {
markers.add(tm); markers.add(tm);
for (int i = 0; i < markers.size(); i++) { for (int i = 0; i < markers.size() - 1; i++) {
int boxY = 0; MarkerDisplayEntry markerEntry = new MarkerDisplayEntry();
int boxHeight = 1;
if (i != 0) { markerEntry.marker = markers.get(i);
double relTime = markers.get(i).getTimestamp().getTime() - day.getTimeInMillis();
boxY = (int) Math.round((relTime / oneDayInMilli) // set string bounds
* canvasBounds.getHeight()) + canvasBounds.y; markerEntry.markBounds = getFontMetrics(markFont)
} .getStringBounds(markers.get(i).getMark(), g);
if (i == markers.size() - 1) { markerEntry.notesBounds = getFontMetrics(notesFont)
double relTime = nextDay.getTime().getTime() .getStringBounds(markers.get(i).getNotes(), g);
- markers.get(i).getTimestamp().getTime();
boxHeight = (int) Math.round(relTime / oneDayInMilli // calculate upper bound
* canvasBounds.getHeight()); if (i == 0) {
markerEntry.relY = 0;
} else { } else {
double relTime = markers.get(i + 1).getTimestamp().getTime() // calculate time in ms since the beginning of the day
- markers.get(i).getTimestamp().getTime(); markerEntry.relY = markers.get(i).getTimestamp().getTime()
boxHeight = (int) Math.round(relTime / oneDayInMilli - day.getTimeInMillis();
* canvasBounds.getHeight()); // calculate percentage of total time in day
markerEntry.relY /= oneDayInMilli;
} }
g.setColor((i % 2 == 0 ? evenTrans : oddTrans));
g.fillRect(canvasBounds.x + (int) stringBounds.getWidth() + 5, boxY, // calculate lower bound
canvasBounds.x + canvasBounds.width, boxHeight); if (i == 0)
g2d.setColor((i % 2 == 0 ? evenOpaque : oddOpaque)); markerEntry.relHeight =
markers.get(i + 1).getTimestamp().getTime()
- day.getTimeInMillis();
else if (i == markers.size() - 2)
markerEntry.relHeight = nextDay.getTimeInMillis()
- markers.get(i).getTimestamp().getTime();
else
markerEntry.relHeight =
markers.get(i + 1).getTimestamp().getTime()
- markers.get(i).getTimestamp().getTime();
markerEntry.relHeight /= oneDayInMilli;
markerEntries.add(markerEntry);
}
}
@Override
public void paintComponent(Graphics g) {
removeAll();
if (markerEntries == null) updateMarkers(g);
Insets insets = this.getInsets();
Rectangle bounds = this.getBounds();
Rectangle canvasBounds = new Rectangle(insets.left, insets.top,
bounds.width - insets.left - insets.right - 1,
bounds.height - insets.top - insets.bottom - 1);
double hourHeight = canvasBounds.getHeight() / 24.0;
Graphics2D g2d = (Graphics2D) g;
Rectangle2D stringBounds = getFontMetrics(getFont()).getStringBounds("00:00 ", g);
// draw hour lines
for (int i = 1; i < 24; i++) {
int lineY = (int) Math.round(hourHeight * (double) i);
g.drawLine(canvasBounds.x + (int) stringBounds.getWidth(), canvasBounds.y + lineY,
canvasBounds.x + canvasBounds.width,
canvasBounds.y + lineY);
//draw hours labels
if ((hourHeight > (stringBounds.getHeight()) || ((i % 2) == 0))) {
g.drawString(String.format("%1$02d:00", i),
canvasBounds.x + 2, lineY + (int) (stringBounds.getHeight() / 2));
}
}
for (int i = 0; i < markerEntries.size(); i++) {
MarkerDisplayEntry curEntry = markerEntries.get(i);
Rectangle2D markBounds;
Rectangle2D notesBounds;
boolean selected = curEntry.marker.equals(currentMarker);
// if i == 0, this is the default
curEntry.bounds = new Rectangle();
curEntry.bounds.y = 3;
curEntry.bounds.x = canvasBounds.x + (int) stringBounds.getWidth() + 5;
curEntry.bounds.height = 1;
curEntry.bounds.width = canvasBounds.width - (int) stringBounds.getWidth() - 8;
double relTime;
// calculate upper bound
curEntry.bounds.y = (int) Math.round(curEntry.relY
* canvasBounds.getHeight());
if (i == 0) curEntry.bounds.y += 3;
// calculate lower bound
curEntry.bounds.height = (int) Math.round(curEntry.relHeight
* canvasBounds.getHeight());
if (i ==0) curEntry.bounds.height -= 6;
else curEntry.bounds.height -= 3;
// draw box
if (selected) g.setColor(selectedTrans);
else g.setColor((i % 2 == 0 ? evenTrans : oddTrans));
g.fillRect(curEntry.bounds.x, curEntry.bounds.y, curEntry.bounds.width, curEntry.bounds.height);
if (selected) g.setColor(selectedOpaque);
else g2d.setColor((i % 2 == 0 ? evenOpaque : oddOpaque));
g2d.setStroke(new BasicStroke(3f)); g2d.setStroke(new BasicStroke(3f));
g2d.drawRect(canvasBounds.x + (int) stringBounds.getWidth() + 5, boxY, g2d.drawRect(curEntry.bounds.x, curEntry.bounds.y, curEntry.bounds.width, curEntry.bounds.height);
canvasBounds.x + canvasBounds.width, boxHeight);
// draw timestamp name
markBounds = (Rectangle2D) curEntry.markBounds.clone();
markBounds.setRect(curEntry.bounds.x + 3,
curEntry.bounds.y + stringBounds.getHeight(),
markBounds.getWidth(), markBounds.getHeight());
g.setColor(fontColor);
g.setFont(markFont);
g.drawString(curEntry.marker.getMark(),
(int) markBounds.getX(), (int) markBounds.getY());
// draw notes
notesBounds = (Rectangle2D) curEntry.notesBounds.clone();
notesBounds.setRect(curEntry.bounds.x + 6,
curEntry.bounds.y + stringBounds.getHeight() + markBounds.getHeight(),
notesBounds.getWidth(), notesBounds.getHeight());
if (curEntry.bounds.contains(notesBounds)) {
g.setFont(notesFont);
g.drawString(curEntry.marker.getNotes(),
(int) notesBounds.getX(), (int) notesBounds.getY());
}
} }
g.setColor(Color.BLACK); g.setColor(Color.BLACK);
g.drawRect(canvasBounds.x, canvasBounds.y, canvasBounds.width, canvasBounds.height); g.drawRect(canvasBounds.x, canvasBounds.y, canvasBounds.width, canvasBounds.height);
} }
public void addChangeListener(ChangeListener cl) {
changeListeners.add(cl);
}
public boolean removeChangeListener(ChangeListener cl) {
return changeListeners.remove(cl);
}
private void fireChangeEvent() {
for (ChangeListener cl : changeListeners)
cl.stateChanged(new ChangeEvent(this));
}
public void mouseClicked(MouseEvent e) {
Point topLeft = getLocationOnScreen();
for (MarkerDisplayEntry markerEntry : markerEntries) {
Rectangle absBounds = new Rectangle(markerEntry.bounds);
absBounds.translate(topLeft.x, topLeft.y);
if (absBounds.contains(e.getLocationOnScreen())) {
currentMarker = markerEntry.marker;
repaint();
}
}
fireChangeEvent();
}
public void mousePressed(MouseEvent e) {
}
public void mouseReleased(MouseEvent e) {
}
public void mouseEntered(MouseEvent e) {
}
public void mouseExited(MouseEvent e) {
}
} }

View File

@ -0,0 +1,42 @@
markTextField.text=
previousWeek.Action.text=<<
previousWeek.Action.shortDescription=Go back one week.
dateLabel.text=date
#NOI18N
dateLabel.background=255, 255, 153
prevWeekButton.text=jButton1
previousWeek.Action.icon=/jdbernard/timestamper/resources/icons/media-seek-backward.png
previousWeek.Action.smallIcon=/jdbernard/timestamper/resources/icons/media-seek-backward.png
prevDayButton.text=jButton1
previousDay.Action.smallIcon=/jdbernard/timestamper/resources/icons/media-playback-reverse.png
previousDay.Action.icon=/jdbernard/timestamper/resources/icons/media-playback-reverse.png
previousDay.Action.shortDescription=Go back one day.
previousDay.Action.text=Previous Day
currentDay.Action.text=Today
currentDay.Action.shortDescription=Go to today's date.
jButton2.text=jButton2
nextDay.Action.smallIcon=/jdbernard/timestamper/resources/icons/media-playback-start.png
nextDay.Action.icon=/jdbernard/timestamper/resources/icons/media-playback-start.png
nextDay.Action.shortDescription=Go one day forward.
nextDay.Action.text=Next Day
nextWeekButton.text=jButton3
nextWeek.Action.text=Next Week
nextWeek.Action.smallIcon=/jdbernard/timestamper/resources/icons/media-seek-forward.png
nextWeek.Action.icon=/jdbernard/timestamper/resources/icons/media-seek-forward.png
nextWeek.Action.shortDescription=Go one week forward.
newMarkerButton.text=jButton1
newMarker.Action.smallIcon=/jdbernard/timestamper/resources/icons/16-square-green-add.png
newMarker.Action.icon=/jdbernard/timestamper/resources/icons/16-square-green-add.png
newMarker.Action.shortDescription=Create a new timestamp mark.
newMarker.Action.text=New Marker
deleteMarkerButton.text=jButton1
deleteMarker.Action.text=Delete Marker
deleteMarker.Action.shortDescription=Delete a timestamp mark.
deleteMarker.Action.smallIcon=/jdbernard/timestamper/resources/icons/16-square-red-delete.png
deleteMarker.Action.icon=/jdbernard/timestamper/resources/icons/16-square-red-delete.png
saveMarkerChanges.text=jButton1
saveMarkerChanges.Action.smallIcon=/jdbernard/timestamper/resources/icons/document-save-16x16.png
saveMarkerChanges.Action.icon=/jdbernard/timestamper/resources/icons/document-save-16x16.png
saveMarkerChanges.Action.shortDescription=Save timeline marker changes.
saveMarkerChanges.Action.text=Save Changes
timestampDateChooser.dateFormatString=MMM d, yyyy HH:mm

View File

@ -17,7 +17,7 @@ notesButton.text=jButton1
editNotes.Action.smallIcon=/jdbernard/timestamper/resources/icons/16-em-pencil.png editNotes.Action.smallIcon=/jdbernard/timestamper/resources/icons/16-em-pencil.png
editNotes.Action.icon=/jdbernard/timestamper/resources/icons/16-em-pencil.png editNotes.Action.icon=/jdbernard/timestamper/resources/icons/16-em-pencil.png
editNotes.Action.shortDescription=Edit notes for this task editNotes.Action.shortDescription=Edit notes for this task
editNotes.Action.text=Notes editNotes.Action.text=Show Notes
jButton1.text= jButton1.text=
showOptionsMenu.Action.text=Options menu showOptionsMenu.Action.text=Options menu
showOptionsMenu.Action.shortDescription=Show the application's options menu. showOptionsMenu.Action.shortDescription=Show the application's options menu.
@ -49,3 +49,9 @@ notesButton2.text=jToggleButton1
optionsButton.rolloverIcon=icons/16-tool-a-hover.png optionsButton.rolloverIcon=icons/16-tool-a-hover.png
#NOI18N #NOI18N
exitButton.rolloverIcon=icons/16-em-cross-hover.png exitButton.rolloverIcon=icons/16-em-cross-hover.png
showNotesDialogCheckBoxMenuItem.text=CheckBox
showPunchcardCheckBoxMenuItem.text=CheckBox
showPunchcard.Action.shortDescription=View the timeline
showPunchcard.Action.text=Show Timeline
showPunchcard.Action.smallIcon=/jdbernard/timestamper/resources/icons/16-file-archive.png
showPunchcard.Action.icon=/jdbernard/timestamper/resources/icons/16-file-archive.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 293 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 345 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 321 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 636 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 660 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 764 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 782 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 770 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 771 B