Docjar: A Java Source and Docuemnt Enginecom.*    java.*    javax.*    org.*    all    new    plug-in

Quick Search    Search Deep

Source code: com/cybertivity/powerjournal/SingleEntryView.java


1   package com.cybertivity.powerjournal;
2   import java.awt.BorderLayout;
3   import java.awt.Color;
4   import java.awt.Container;
5   import java.awt.FlowLayout;
6   import java.awt.Image;
7   import java.awt.Insets;
8   import java.awt.Toolkit;
9   import java.awt.event.ActionEvent;
10  import java.awt.event.InputEvent;
11  import java.awt.event.KeyAdapter;
12  import java.awt.event.KeyEvent;
13  import java.awt.event.KeyListener;
14  import java.awt.event.WindowAdapter;
15  import java.awt.event.WindowEvent;
16  import java.util.ArrayList;
17  import java.util.HashMap;
18  import java.util.Iterator;
19  import java.util.Set;
20  import javax.swing.BorderFactory;
21  import javax.swing.JButton;
22  import javax.swing.JCheckBox;
23  import javax.swing.JComponent;
24  import javax.swing.JFrame;
25  import javax.swing.JLabel;
26  import javax.swing.JList;
27  import javax.swing.JMenu;
28  import javax.swing.JMenuBar;
29  import javax.swing.JOptionPane;
30  import javax.swing.JPanel;
31  import javax.swing.JScrollPane;
32  import javax.swing.JTextArea;
33  import javax.swing.JTextField;
34  import javax.swing.SwingConstants;
35  import javax.swing.SwingUtilities;
36  import javax.swing.UIManager;
37  import javax.swing.border.Border;
38  import javax.swing.event.ChangeEvent;
39  import javax.swing.event.ChangeListener;
40  import com.cybertivity.powerjournal.framework.*;
41  import com.cybertivity.powerjournal.gridpanel.*;
42  
43  /**
44   * Title:        PowerJournal
45   * Description:  $Id: SingleEntryView.java,v 1.2 2001/12/15 17:12:38 arrowood Exp $
46   * Copyright:    Copyright (c) 2001
47   * Company:      <A HREF="http://www.cybertivity.com">Cybertivity</A>
48   *
49   * @author <A HREF="mailto:chris.arrowood@cybertivity.com">Chris Arrowood</A>
50   * @created December 9, 2001
51   * @version 1.0
52   */
53  
54  public class SingleEntryView extends EntryView {
55  
56    private JPanel panelTitle = null;
57    private JPanel panelEntry = null;
58    private JPanel panelControl = null;
59    private HashMap buttons = new HashMap();
60    private JLabel lblEntryNumber = null;
61    private JLabel lblPosition = null;
62    private JLabel lblJournalName = null;
63    private JTextField txtDate = null;
64    private JTextArea txtEntryContents = null;
65    private JTextField txtEntryDesc = null;
66    private JCheckBox chkPrivate = null;
67    public final static String NEW_ENTRY_NUMBER_LABEL = "(NEXT)";
68    public final static String INITIAL_ENTRY_NUMBER = "";
69    public final static String EVENT_NEW = "New";
70    public final static String EVENT_PREVIOUS = "Prev.";
71    public final static String EVENT_LAST = "Last";
72    public final static String EVENT_FIRST = "First";
73    public final static String EVENT_NEXT = "Next";
74    public final static String EVENT_DELETE = "Delete";
75    public final static String EVENT_RELOAD = "Reload";
76    public final static String EVENT_VIEW_ALL = "View All";
77    private String appName = "";
78    private boolean guestMode = true;
79  
80  
81    public SingleEntryView(String appNameArg, boolean guestModeArg) {
82      appName = appNameArg;
83      guestMode = guestModeArg;
84      createWindow();
85    }
86  
87  
88    protected void cleanUp() { }
89  
90  
91    protected void handleModelEvent(ModelEvent event) { }
92  
93  
94    protected void displayEntries(ArrayList entries) { }
95  
96  
97    private void createWindow() {
98      content.removeAll();
99      BorderLayout layout = new BorderLayout();
100     content.setLayout(layout);
101     panelTitle = buildPanelTitle();
102     panelEntry = buildPanelEntry();
103     panelControl = buildPanelControl();
104     content.add(panelTitle, BorderLayout.NORTH);
105     content.add(panelEntry, BorderLayout.CENTER);
106     content.add(panelControl, BorderLayout.SOUTH);
107   }
108 
109 
110   private JPanel buildPanelTitle() {
111     JPanel panel = new JPanel();
112     BorderLayout layout = new BorderLayout();
113     JLabel labelTitle = new JLabel();
114     labelTitle.setFont(new java.awt.Font("SansSerif", 1, 20));
115     labelTitle.setHorizontalAlignment(SwingConstants.CENTER);
116     labelTitle.setHorizontalTextPosition(SwingConstants.CENTER);
117     labelTitle.setText(appName);
118     panel.add(labelTitle, BorderLayout.CENTER);
119     return panel;
120   }
121 
122 
123   private JPanel buildPanelControl() {
124     //create buttons
125     JButton btnPrev = makeButton("<.", EVENT_PREVIOUS, Color.magenta);
126     JButton btnNext = makeButton(">", EVENT_NEXT, Color.magenta);
127     JButton btnFirst = makeButton("<<", EVENT_FIRST, Color.magenta);
128     JButton btnLast = makeButton(">>", EVENT_LAST, Color.magenta);
129     JButton btnNew = makeButton(EVENT_NEW, EVENT_NEW, Color.blue);
130     JButton btnDelete = makeButton(EVENT_DELETE, EVENT_DELETE, Color.red);
131     JButton btnReload = makeButton(EVENT_RELOAD, EVENT_RELOAD, Color.blue);
132     JButton btnViewAll = makeButton(EVENT_VIEW_ALL, EVENT_VIEW_ALL, Color.blue);
133     btnPrev.setToolTipText("Previous Entry");
134     btnNext.setToolTipText("Next Entry");
135     btnFirst.setToolTipText("First Entry");
136     btnLast.setToolTipText("Last Entry");
137     btnNew.setToolTipText("Create a new entry");
138     btnDelete.setToolTipText("Delete current entry");
139     btnReload.setToolTipText("Cancel changes and the reload current entry.");
140     btnViewAll.setToolTipText("View a summary of all entries in this journal");
141     //create JPanel and add buttons
142     JPanel btnPanel = new JPanel();
143     FlowLayout btnPanelLayout = new FlowLayout();
144     btnPanel.setBorder(BorderFactory.createEtchedBorder());
145     btnPanel.setLayout(btnPanelLayout);
146     btnPanel.add(btnFirst, null);
147     btnPanel.add(btnPrev, null);
148     btnPanel.add(btnNext, null);
149     btnPanel.add(btnLast, null);
150     btnPanel.add(btnViewAll, null);
151     btnPanel.add(btnNew, null);
152     btnPanel.add(btnReload, null);
153     btnPanel.add(btnDelete, null);
154     //create Jpanel for copyright info
155     JPanel copyrightPanel = new JPanel();
156     JLabel copyrightLabel = new JLabel("© 2001 Chris Arrowood");
157     copyrightLabel.setForeground(Color.darkGray);
158     copyrightPanel.add(copyrightLabel);
159     //glue all of it together
160     JPanel panel = new JPanel();
161     BorderLayout layout = new BorderLayout();
162     panel.setLayout(layout);
163     panel.add(btnPanel, BorderLayout.CENTER);
164     panel.add(copyrightPanel, BorderLayout.SOUTH);
165     return panel;
166   }
167 
168 
169   private JPanel buildPanelEntry() {
170     JPanel panel = null;
171     try {
172       Insets insets = new Insets(2, 10, 0, 2);
173       GridPanelColumn leftColumn = createLabelColumn();
174       GridPanelColumn rightColumn = createTextBoxesColumn();
175       ArrayList columns = new ArrayList();
176       columns.add(0, leftColumn);
177       columns.add(1, rightColumn);
178       panel = GridPanelBuilder.createGridPanel(insets, columns);
179       panel.setBorder(BorderFactory.createEtchedBorder());
180     } catch (GridPanelException ex) {
181       panel = new JPanel();
182     }
183     return panel;
184   }
185 
186 
187 
188   private GridPanelColumn createTextBoxesColumn() {
189     //create text boxes
190     lblPosition = new JLabel("");
191     lblJournalName = new JLabel("");
192     lblEntryNumber = new JLabel(INITIAL_ENTRY_NUMBER);
193     txtDate = new JTextField(17);
194     txtEntryContents = new JTextArea("", 17, 45);
195     txtEntryDesc = new JTextField(40);
196     chkPrivate = new JCheckBox();
197     //set up text area
198     txtEntryContents.setBorder(txtEntryDesc.getBorder());
199     txtEntryContents.setFont(txtEntryDesc.getFont());
200     txtEntryContents.setWrapStyleWord(true);
201     txtEntryContents.setLineWrap(true);
202     //add to column
203     GridPanelColumn column = new GridPanelColumn();
204     column.add(lblJournalName, true, false);
205     column.add(lblPosition, true, false);
206     column.add(lblEntryNumber, true, false);
207     column.add(chkPrivate, true, false);
208     column.add(txtDate, true, false);
209     column.add(txtEntryDesc, true, false);
210     column.add(createEntryContentsPanel(txtEntryContents), true, true);
211     return column;
212   }
213 
214 
215   private GridPanelColumn createLabelColumn() {
216     GridPanelColumn column = new GridPanelColumn();
217     float hAlign = GridPanelColumn.RIGHT_ALIGNMENT;
218     float vAlign = GridPanelColumn.TOP_ALIGNMENT;
219     int fill = GridPanelColumn.NONE_FILL;
220     int anchor = GridPanelColumn.EAST_ANCHOR;
221     JLabel jLabelJournal = new JLabel("Journal:");
222     JLabel jLabelPostition = new JLabel("Postition:");
223     JLabel jLabelID = new JLabel("ID:");
224     JLabel jLabelPrivate = new JLabel("Private:");
225     JLabel jLabelDate = new JLabel("Date:");
226     JLabel jLabelDescription = new JLabel("Description:");
227     JLabel jLabelEntry = new JLabel("Entry:");
228     column.add(jLabelJournal, false, false, hAlign, vAlign, fill, anchor);
229     column.add(jLabelPostition, false, false, hAlign, vAlign, fill, anchor);
230     column.add(jLabelID, false, false, hAlign, vAlign, fill, anchor);
231     column.add(jLabelPrivate, false, false, hAlign, vAlign, fill, anchor);
232     column.add(jLabelDate, false, false, hAlign, vAlign, fill, anchor);
233     column.add(jLabelDescription, false, false, hAlign, vAlign, fill, anchor);
234     column.add(jLabelEntry, false, false, hAlign, vAlign, fill, anchor);
235     return column;
236   }
237 
238 
239   private JPanel createEntryContentsPanel(JTextArea textInputArea) {
240     JPanel textEntryPanel = new JPanel();
241     textInputArea.setEditable(true);
242     JScrollPane textScroller = new JScrollPane(textInputArea);
243     textScroller.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
244     textScroller.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
245     textEntryPanel.setLayout(new BorderLayout());
246     textEntryPanel.add(textScroller, BorderLayout.CENTER);
247     return textEntryPanel;
248   }
249 
250 
251   private JButton makeButton(String name, final String action, Color color) {
252     JButton btn = new JButton();
253     btn.setText(name);
254     if (color != null) {
255       btn.setForeground(color);
256     }
257 
258     btn.addActionListener(
259       new java.awt.event.ActionListener() {
260         //private final String actionFinal = action;
261         public void actionPerformed(ActionEvent e) {
262           fireEvent(action);
263         }
264       });
265     if (buttons != null) {
266       buttons.put(name, btn);
267     }
268     return btn;
269   }
270 
271 
272   protected void displayEntry(Entry displayEntry, boolean guestModeArg, boolean isNewEntry) {
273     guestMode = guestModeArg;
274     if (displayEntry != null) {
275       if (isNewEntry) {
276         lblEntryNumber.setText(NEW_ENTRY_NUMBER_LABEL);
277         lblPosition.setText("(New)");
278       } else {
279         lblEntryNumber.setText("" + displayEntry.getEntryNumber());
280         lblPosition.setText(displayEntry.getEntryPositionMemo());
281       }
282       txtDate.setText(displayEntry.getEntryDateAsString());
283       txtEntryContents.setText(displayEntry.getEntryContents());
284       txtEntryDesc.setText(displayEntry.getEntryDescription());
285       chkPrivate.setSelected(displayEntry.getEntryPrivate());
286       lblJournalName.setText(displayEntry.getJournalName().replace('_', ' '));
287       if (isNewEntry) {
288         txtEntryDesc.requestFocus();
289       }
290 
291     } else {
292       displayEntry(new Entry("", ""), guestMode, true);
293       if (guestMode) {
294         Dialogs.showError(content, "Entry not found", "The entry you specified does not exist.");
295       } else {
296         Dialogs.showError(content, "Entry not found", "The entry you specified does not exist. A new one has been created for you.");
297       }
298     }
299     enableControls();
300   }
301 
302 
303   private void buttonsSetEnabled(boolean enable) {
304     Set set = buttons.keySet();
305     Iterator iter = set.iterator();
306     while (iter.hasNext()) {
307       String name = (String) iter.next();
308       JButton btn = (JButton) buttons.get(name);
309       if (guestMode && (name.equals(EVENT_NEW))) {
310         btn.setEnabled(false);
311       } else if (guestMode && (name.equals(EVENT_DELETE))) {
312         btn.setEnabled(false);
313       } else if (guestMode && (name.equals(EVENT_RELOAD))) {
314         btn.setEnabled(false);
315       } else {
316         btn.setEnabled(enable);
317       }
318     }
319   }
320 
321 
322   protected void enableControls() {
323     txtDate.enable();
324     txtEntryContents.enable();
325     txtEntryDesc.enable();
326     buttonsSetEnabled(true);
327     chkPrivate.setEnabled(!guestMode);
328     txtDate.setEditable(!guestMode);
329     txtEntryContents.setEditable(!guestMode);
330     txtEntryDesc.setEditable(!guestMode);
331   }
332 
333 
334   protected void disableControls() {
335     txtDate.disable();
336     txtEntryContents.disable();
337     txtEntryDesc.disable();
338     buttonsSetEnabled(false);
339   }
340 
341 
342   protected void displayEntry(Entry entry, boolean guestMode) {
343     displayEntry(entry, guestMode, false);
344   }
345 
346 
347   public String getDisplayedEntryDescription() {
348     return txtEntryDesc.getText();
349   }
350 
351 
352   public String getDisplayedEntryDate() {
353     return txtDate.getText();
354   }
355 
356 
357   public String getDisplayedEntryContents() {
358     return txtEntryContents.getText();
359   }
360 
361 
362   protected String getSelectedEntryNumber() {
363     return lblEntryNumber.getText();
364   }
365 
366 
367   public String getDisplayedJournalName() {
368     return lblJournalName.getText();
369   }
370 
371 
372   public boolean getDisplayedEntryIsPrivate() {
373     return chkPrivate.isSelected();
374   }
375 
376 }