/** * EphemerisView.java * Created On 2006, Apr 6, 2006 3:33:23 PM * @author E. Rajasekar */ package app.astrosoft.ui.view; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.Font; import java.awt.Point; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Calendar; import java.util.Date; import javax.swing.BorderFactory; import javax.swing.ButtonGroup; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JRadioButton; import javax.swing.table.JTableHeader; import app.astrosoft.consts.AstrosoftTableColumn; import app.astrosoft.consts.DisplayStrings; import app.astrosoft.consts.Language; import app.astrosoft.consts.TableStyle; import app.astrosoft.core.Ephemeris; import app.astrosoft.core.Ephemeris.Mode; import app.astrosoft.pref.AstrosoftPref; import app.astrosoft.ui.AstroSoft; import app.astrosoft.ui.comp.CalendarChooser; import app.astrosoft.ui.comp.CalendarSpinner; import app.astrosoft.ui.comp.DateListener; import app.astrosoft.ui.comp.TitleLabel; import app.astrosoft.ui.comp.TitledTable; import app.astrosoft.ui.table.AstrosoftTable; import app.astrosoft.ui.table.AstrosoftTableModel; import app.astrosoft.ui.table.Table; import app.astrosoft.ui.util.UIUtil; import app.astrosoft.util.AstroUtil; public class EphemerisView extends AstrosoftView { private static final Dimension viewSize = new Dimension(750, 450); private static final Dimension dailyTableSize = new Dimension(viewSize.width, viewSize.height); private static final Dimension monthyTableSize = new Dimension(viewSize.width, 288); private AstrosoftTable ephTable; private AstrosoftTableModel tableModel; private TitledTable tablePanel; private CalendarChooser monthChooser; private Calendar ephDate; private Mode ephMode; public EphemerisView(Ephemeris eph, Point loc) { super(viewSize, loc); ephMode = eph.getMode(); ephDate = eph.getDate(); tableModel = new AstrosoftTableModel(eph.getEphemerisTable()); ephTable = new AstrosoftTable(tableModel, TableStyle.SCROLL_SINGLE_ROW_SELECT); ephTable.setColumnWidth(60, AstrosoftTableColumn.Sun, AstrosoftTableColumn.Moon, AstrosoftTableColumn.Rahu, AstrosoftTableColumn.Ketu); monthChooser = CalendarChooser.getMonthChooser(); tablePanel = new TitledTable(ephTable, dailyTableSize); JTableHeader header = ephTable.getTableHeader(); tablePanel.add(createEphSelector(header.getBackground(), header.getForeground()), BorderLayout.PAGE_START); add(tablePanel,BorderLayout.PAGE_START); monthChooser.addDateListener(new DateListener(){ public void dateChanged(Date date) { ephDate = AstroUtil.getCalendar(date); updateEphTable(); } }); } private void updateEphTable(){ Table table = new Ephemeris(ephDate, ephMode).getEphemerisTable(); tableModel.updateColumns(table.getColumnMetaData()); tableModel.updateData(table.getTableData()); } private JPanel createEphModeSelector(Color bgClr, Color fgClr){ JPanel panel = new JPanel(); ActionListener modeListener = new ActionListener(){ public void actionPerformed(ActionEvent e) { ephMode = Mode.valueOf(e.getActionCommand()); if (ephMode.isMonthly()){ tablePanel.setScrollPaneSize(monthyTableSize); ((CalendarSpinner) monthChooser).setDateFormat(CalendarSpinner.FMT_YEAR); }else{ tablePanel.setScrollPaneSize(dailyTableSize); int row = ephTable.getSelectedRow(); if (row != -1){ ephDate.set(Calendar.MONTH, row); } monthChooser.setSelectedDate(ephDate.getTime()); ((CalendarSpinner) monthChooser).setDateFormat(CalendarSpinner.FMT_MONTH_YEAR); } updateEphTable(); } }; ButtonGroup bg = new ButtonGroup(); for(Mode m : Mode.values()){ JRadioButton button = new JRadioButton(m.toString()); bg.add(button); button.setActionCommand(m.name()); button.addActionListener(modeListener); panel.add(button); button.setBackground(bgClr); button.setForeground(fgClr); if ( m == ephMode) { button.setSelected(true); } } panel.setBackground(bgClr); return panel; } private JPanel createEphTitle(Color bgClr, Color fgClr){ JPanel panel = new JPanel(); AstrosoftPref preferences = AstroSoft.getPreferences(); StringBuilder text = new StringBuilder(DisplayStrings.EPHEMERIS_STR.toString()); text.append(" For "); text.append(preferences.getPlace().city()); text.append(" at "); text.append(AstroUtil.timeFormat(preferences.getEphCalcTime())); JLabel title = new TitleLabel(text.toString()); panel.add(title); title.setFont(UIUtil.getFont(Language.ENGLISH, Font.BOLD, 12)); title.setForeground(fgClr); panel.setBackground(bgClr); return panel; } private JPanel createEphSelector(Color bgClr, Color fgClr){ JPanel ephSelector = new JPanel(new BorderLayout()); JPanel chooser = monthChooser.getChooser(); monthChooser.setBackground(bgClr); monthChooser.setForeground(fgClr); ephSelector.setBackground(bgClr); ephSelector.add(chooser, BorderLayout.WEST); ephSelector.add(createEphTitle(bgClr, fgClr), BorderLayout.CENTER); ephSelector.add(createEphModeSelector(bgClr, fgClr), BorderLayout.EAST); ephSelector.setBorder(BorderFactory.createEtchedBorder()); return ephSelector; } }