/**
* MuhurthaPanel.java
* Created On 2005, Oct 22, 2005 7:08:58 PM
* @author E. Rajasekar
*/
package app.astrosoft.ui.view;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.ParseException;
import java.util.Calendar;
import java.util.GregorianCalendar;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.border.LineBorder;
import app.astrosoft.beans.Interval;
import app.astrosoft.beans.MuhurthaBean;
import app.astrosoft.consts.AstrosoftTableColumn;
import app.astrosoft.consts.DisplayFormat;
import app.astrosoft.consts.TableStyle;
import app.astrosoft.core.Muhurtha;
import app.astrosoft.ui.AstrosoftActionHandler;
import app.astrosoft.ui.table.AstrosoftTable;
import app.astrosoft.ui.table.AstrosoftTableModel;
import app.astrosoft.ui.table.Cell;
import app.astrosoft.ui.table.SortableTable;
import app.astrosoft.ui.table.SortableTableModel;
import app.astrosoft.ui.window.DefaultWindowLabelModel;
import app.astrosoft.ui.window.TablePopupWindowModel;
import app.astrosoft.ui.window.WindowLabelModel;
public class MuhurthaPanel extends JPanel {
private static final int VISIBLE_TABLE_ROWS = 15;
private Muhurtha muhurtha;
private Point loc = new Point(20,30);
private Dimension tableSize = new Dimension(700, 350);
private AstrosoftActionHandler handler;
SortableTableModel model;
SortableTable mTable;
JButton okButton;
JButton panButton;
public MuhurthaPanel(Muhurtha muhurtha, AstrosoftActionHandler handler){
this.muhurtha = muhurtha;
this.handler = handler;
muhurtha.calcMuhurtha();
model = new SortableTableModel(muhurtha.getNextTransitPeriods(),MuhurthaBean.getColumnMetaData() , AstrosoftTableColumn.Period);
mTable = new SortableTable(model, TableStyle.SCROLL_SINGLE_ROW_SELECT);
okButton = new JButton("More");
okButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
moreClicked();
}
});
panButton = new JButton("Panchang");
panButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
panchangClicked();
}
});
TablePopupWindowModel popupModel = new TablePopupWindowModel(){
DefaultWindowLabelModel windowModel = new DefaultWindowLabelModel();
public WindowLabelModel getModel(Cell cell) {
int colIndex;
switch(cell.col){
case Nakshathra:
colIndex = model.getColumnIndex(AstrosoftTableColumn.Longitude);
break;
case Period:
colIndex = model.getColumnIndex(AstrosoftTableColumn.PeriodPopup);
break;
default:
colIndex = model.getColumnIndex(cell.col);
break;
}
windowModel.setText(model.getValueAt(cell.row,colIndex).toString());
return windowModel;
}
};
mTable.addColumnPopupWindow(AstrosoftTableColumn.Period, popupModel);
mTable.addColumnPopupWindow(AstrosoftTableColumn.Nakshathra, popupModel);
setLayout(new BorderLayout());
//mTable.setShowHorizontalLines( true );
showPanel();
}
public void setLoc(Point loc){
this.loc = loc;
}
public void setTableSize(Dimension size){
this.tableSize = size;
}
public void showPanel(){
setBounds(loc.x,loc.y, tableSize.width + loc.x + 50, tableSize.height + loc.y + 40);
showTable();
JPanel buttonPanel = new JPanel();
buttonPanel.add(okButton);
buttonPanel.add(panButton);
add(buttonPanel, BorderLayout.PAGE_END);
}
private void showTable() {
mTable.setPreferredScrollableViewportSize(tableSize);
JScrollPane scrollPane = new JScrollPane(mTable);
JPanel p = new JPanel();
p.add(mTable.getTableHeader());
p.add(scrollPane);
add(p, BorderLayout.CENTER);
if (mTable.getModel().getRowCount() <= VISIBLE_TABLE_ROWS) {
mTable.setBorder(new LineBorder(AstrosoftTable.tableBorderClr));
scrollPane.setBorder(new LineBorder(this.getBackground()));
mTable.getTableHeader().setBorder(new LineBorder(AstrosoftTable.tableBorderClr));
}
//scrollPane.setViewportBorder(new LineBorder(Color.WHITE));
}
private void moreClicked(){
model.updateData(muhurtha.getNextTransitPeriods());
}
private void panchangClicked(){
int selectedRow = mTable.getSelectedRow();
if (selectedRow != -1) {
AstrosoftTableModel model = (AstrosoftTableModel)mTable.getModel();
Calendar cal = new GregorianCalendar();
try {
cal = Interval.parseDate((String)model.getValueAt(selectedRow,model.getColumnIndex(AstrosoftTableColumn.Period)), DisplayFormat.DATE);
} catch (ParseException e) {
e.printStackTrace();
}
handler.showPanchang(cal);
}
}
}