package kiyut.ekspos; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.Toolkit; import java.awt.event.ActionListener; import java.awt.event.WindowEvent; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.Collections; import javax.swing.BorderFactory; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JTextArea; import javax.swing.WindowConstants; import javax.swing.text.Document; import kiyut.ekspos.prefs.GeneralPreferences; /** Thought of the day Frame * * @author tonny */ public class TOTDWindow extends JFrame implements ActionListener { private JPanel contentPane; private JPanel centerPane; private JPanel bottomPane; private JButton closeBtn; private JButton nextBtn; private JButton prevBtn; private JCheckBox showTipCkb; private JTextArea textArea; private ArrayList<TOTDText> texts; private int index; // index for ArrayList text private GeneralPreferences prefs; /** * Creates new TOTDWindow */ public TOTDWindow() { //loadConfig(); loadText(); initObject(); setAlwaysOnTop(true); //setVisible(true); } private void initObject() { setTitle("Thought of the day"); setIconImage(Toolkit.getDefaultToolkit().createImage(getClass().getResource("/kiyut/ekspos/totd16.png"))); setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); //setSize(new Dimension(300,300)); contentPane = (JPanel) this.getContentPane(); contentPane.setLayout(new BorderLayout()); contentPane.setBorder(BorderFactory.createEmptyBorder(20,20,20,20)); centerPane = new JPanel(); bottomPane = new JPanel(); centerPane.setPreferredSize(new Dimension(225,175)); Color tempColor = javax.swing.UIManager.getDefaults().getColor("TextArea.background"); Color backColor = new Color(tempColor.getRed(),tempColor.getGreen(),tempColor.getBlue(),tempColor.getAlpha()); textArea = new JTextArea("Thought of the day"); textArea.setBackground(backColor); textArea.setLineWrap(true); textArea.setWrapStyleWord(true); textArea.setBorder(BorderFactory.createTitledBorder("Thought of the day")); textArea.setEditable(false); centerPane.setLayout(new BorderLayout()); centerPane.add(textArea,BorderLayout.CENTER); prefs = GeneralPreferences.getInstance(); showTipCkb = new JCheckBox("Show next time"); showTipCkb.setSelected(prefs.getBoolean(GeneralPreferences.TOTD_KEY)); centerPane.add(showTipCkb,BorderLayout.SOUTH); closeBtn = new JButton("Close"); prevBtn = new JButton("Previous"); nextBtn = new JButton("Next"); bottomPane.add(prevBtn); bottomPane.add(nextBtn); bottomPane.add(closeBtn); closeBtn.setActionCommand("close"); prevBtn.setActionCommand("previous"); nextBtn.setActionCommand("next"); closeBtn.addActionListener(this); prevBtn.addActionListener(this); nextBtn.addActionListener(this); contentPane.add(centerPane,BorderLayout.CENTER); contentPane.add(bottomPane,BorderLayout.SOUTH); getRootPane().setDefaultButton(closeBtn); showText(); } public void actionPerformed(java.awt.event.ActionEvent e) { if (e.getActionCommand().equalsIgnoreCase("close")) { closeForm(); } else if (e.getActionCommand().equalsIgnoreCase("next")) { showNext(); } else if (e.getActionCommand().equalsIgnoreCase("previous")) { showPrevious(); } } private void loadText() { index = 0; texts = new ArrayList<TOTDText>(); InputStream is = null; BufferedReader reader = null; try { is = getClass().getResourceAsStream("/kiyut/ekspos/totd.txt"); reader = new BufferedReader(new InputStreamReader(is)); String str; while ((str=reader.readLine()) != null) { TOTDText totdText = new TOTDText(); int indexOf = str.indexOf(','); try { totdText.setAuthor(str.substring(0,indexOf).trim()); totdText.setText(str.substring(indexOf+1,str.length()).trim()); texts.add(totdText); } catch (Exception ex) { System.err.println("-----TOTD text in wrong format-----"); System.err.println(str); continue; } } } catch (Exception ex) { System.err.println("Unable to load totd.txt."); //System.exit(1); } finally { if (reader != null) { try { reader.close(); } catch (Exception ex) {} reader = null; } if (is != null) { try { is.close(); } catch (Exception ex) { } is = null; } } Collections.shuffle(texts); } private void showNext() { if (index < texts.size()-1) { index++; } else { index = 0; } showText(); } private void showPrevious() { if (index > 0) { index--; } else { index = texts.size() - 1; } showText(); } private void showText() { try { // clear the text Document doc = textArea.getDocument(); doc.remove(0,doc.getLength()); } catch (Exception e) { // do nothing } // insert new text TOTDText totdText = texts.get(index); textArea.insert(totdText.getText() + "\n\n-" + totdText.getAuthor(),0); } private void closeForm() { prefs.putBoolean(GeneralPreferences.TOTD_KEY, showTipCkb.isSelected()); prefs.save(); this.dispatchEvent(new WindowEvent(this,WindowEvent.WINDOW_CLOSING)); } public class TOTDText { String author; String text; public TOTDText() { } public void setAuthor(String author) { this.author = author; } public String getAuthor() { return this.author; } public void setText(String text) { this.text = text; } public String getText() { return this.text; } } }