/** * AstroSoft.java * * Created on December 13, 2002, 5:16 PM * * @author E. Rajasekar */ package app.astrosoft.ui; import java.awt.BorderLayout; import java.awt.Cursor; import java.awt.Dimension; import java.awt.Point; import java.awt.Rectangle; import java.util.Arrays; import java.util.Calendar; import java.util.Date; import java.util.EnumSet; import java.util.GregorianCalendar; import java.util.Map; import java.util.concurrent.FutureTask; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.UIManager; import app.astrosoft.beans.BirthData; import app.astrosoft.beans.PlanetChartData; import app.astrosoft.consts.Ayanamsa; import app.astrosoft.consts.Command; import app.astrosoft.consts.DisplayStrings; import app.astrosoft.consts.Language; import app.astrosoft.consts.Nakshathra; import app.astrosoft.consts.Rasi; import app.astrosoft.consts.Varga; import app.astrosoft.core.Compactibility; import app.astrosoft.core.Ephemeris; import app.astrosoft.core.Horoscope; import app.astrosoft.core.Muhurtha; import app.astrosoft.core.Panchang; import app.astrosoft.core.Ephemeris.Mode; import app.astrosoft.export.AstrosoftExporter; import app.astrosoft.pref.AstrosoftPref; import app.astrosoft.pref.AstrosoftPref.Preference; import app.astrosoft.ui.comp.AstrosoftMenuBar; import app.astrosoft.ui.comp.AstrosoftToolBar; import app.astrosoft.ui.comp.Chart; import app.astrosoft.ui.comp.DateListener; import app.astrosoft.ui.dlg.BirthInputDialog; import app.astrosoft.ui.dlg.CompactibilityInputDialog; import app.astrosoft.ui.dlg.ExportDialog; import app.astrosoft.ui.dlg.MuhurthaInput; import app.astrosoft.ui.dlg.ComputeNumberDialog; import app.astrosoft.ui.dlg.OptionDialog; import app.astrosoft.ui.dlg.PlaceOptionDialog; import app.astrosoft.ui.dlg.PrintDialog; import app.astrosoft.ui.dlg.TimeInputDialog; import app.astrosoft.ui.util.UIConsts; import app.astrosoft.ui.view.AshtavargaView; import app.astrosoft.ui.view.BhavaView; import app.astrosoft.ui.view.CompactibilityView; import app.astrosoft.ui.view.EphemerisView; import app.astrosoft.ui.view.FindNameView; import app.astrosoft.ui.view.InfoView; import app.astrosoft.ui.view.MuhurthaPanel; import app.astrosoft.ui.view.PanchangView; import app.astrosoft.ui.view.PlanetView; import app.astrosoft.ui.view.ShadBalaView; import app.astrosoft.ui.view.VargaChartView; import app.astrosoft.ui.view.ViewContainer; import app.astrosoft.ui.view.ViewManager; import app.astrosoft.ui.view.VimDasaView; import app.astrosoft.ui.view.YogaCombinationsView; import app.astrosoft.ui.view.ViewManager.View; import app.astrosoft.util.AstroUtil; import app.astrosoft.util.AstrosoftFileFilter; import app.astrosoft.util.FileOps; public class AstroSoft extends javax.swing.JFrame implements AstrosoftActionHandler { private Horoscope h; private Ephemeris eph; private Panchang pan; private AstrosoftMenuBar mbar; private AstrosoftToolBar toolbar; private JPanel home; private AstrosoftActionManager actionMgr; private ViewManager viewManager; private Compactibility compactibility; private Muhurtha muhurtha; private static AstrosoftPref preferences = new AstrosoftPref(); //public static Calendar today = new GregorianCalendar(); //AstroSoft.getPreferences().getPlace().astrosoftTimeZone().getTimeZone()); public static Calendar today = new GregorianCalendar(AstroSoft.getPreferences().getPlace().astrosoftTimeZone().getTimeZone()); //Until Abslayout is completely removed: private static Rectangle bounds = new Rectangle(0,0, getScreenSize().width, getScreenSize().height); private AstroSoft() { initComponents(); System.out.println(getScreenSize()); setPreferredSize(getScreenSize()); //this.setPreferredSize(new Dimension(800, 600)); // show(); getContentPane().setLayout(new BorderLayout()); formMenuAndToolBar(); home = new JPanel(); home.setLayout(null); //home.setLayout(new BorderLayout()); // home.setBounds(0,0,screenSize.width , screenSize.height); home.setBounds(bounds); enableActions(false); setVisible(true); pack(); viewManager = new ViewManager(new AstrosoftViewContainer()); } private AstroSoft(String[] args){ this(); System.out.println("Logging properties: " + System.getProperty("java.util.logging.config.file")); if(args.length > 0 && args[0] != null && !args[0].trim().isEmpty()){ openHoroscope(args[0]); } } public void formMenuAndToolBar() { actionMgr = new AstrosoftActionManager(this); mbar = new AstrosoftMenuBar(actionMgr); setJMenuBar(mbar); toolbar = new AstrosoftToolBar(actionMgr); this.add(toolbar, BorderLayout.PAGE_START); } /** * This method is called from within the constructor to initialize the form. * WARNING: Do NOT modify this code. The content of this method is always * regenerated by the Form Editor. */ private void initComponents() { // GEN-BEGIN:initComponents setTitle("AstroSoft"); setName("AstroSoft"); addWindowListener(new java.awt.event.WindowAdapter() { public void windowClosing(java.awt.event.WindowEvent evt) { exitForm(evt); } }); } // GEN-END:initComponents /** Exit the Application */ private void exitForm(java.awt.event.WindowEvent evt) { // GEN-FIRST:event_exitForm System.exit(0); } // GEN-LAST:event_exitForm /** * @param args * the command line arguments */ public static void main(String[] args) { try { //FIXME: //UIManager.setLookAndFeel( //"com.sun.java.swing.plaf.windows.WindowsLookAndFeel"); // UIManager.setLookAndFeel(new // com.incors.plaf.kunststoff.KunststoffLookAndFeel()); // UIManager.setLookAndFeel(new // net.sourceforge.mlf.metouia.MetouiaLookAndFeel()); //UIManager //.setLookAndFeel("com.digitprop.tonic.TonicLookAndFeel"); // Skin theSkinToUse = SkinLookAndFeel.loadThemePack(args[0] + // "/lib/" + "themepack.zip"); // SkinLookAndFeel.setSkin(theSkinToUse); // finally set the Skin Look And Feel // UIManager.setLookAndFeel(new SkinLookAndFeel()); //UIManager.setLookAndFeel("com.jgoodies.looks.plastic.PlasticLookAndFeel"); //com.jgoodies.looks.plastic.PlasticLookAndFeel.setMyCurrentTheme(new //ExperienceGreen()); //Plastic3DLookAndFeel.setMyCurrentTheme(new ExperienceGreen()); //UIManager.setLookAndFeel(new Plastic3DLookAndFeel()); /* * Skin theSkinToUse = * SkinLookAndFeel.loadThemePack("C:\\Data\\AstroSoft\\lib\\toxicthemepack.zip"); * SkinLookAndFeel.setSkin(theSkinToUse); * * UIManager.setLookAndFeel(new SkinLookAndFeel()); */ } catch (Exception e) { e.printStackTrace(); } setUIDefaults(); AstroSoft as = new AstroSoft(args); //as.setVisible(true); } private static void setUIDefaults() { try { UIManager.setLookAndFeel(UIConsts.getLookAndFeel()); } catch (Exception e) { e.printStackTrace(); } //JFrame.setDefaultLookAndFeelDecorated(true); Map defaults = UIConsts.getUIDefaults(); for(Object key : defaults.keySet()){ UIManager.put(key, defaults.get(key)); } } public void computeHoroscope(BirthData birthData){ h = new Horoscope(birthData); viewManager.showView(View.CHART_VIEW); } public JPanel createChartView() { JPanel infoView = new InfoView(h.getHoroscopeInfo(), new Point(20,20)); //FIXME: /*EnumMap<Planet, Integer> pos = new EnumMap<Planet, Integer>(Planet.class); pos.put(Planet.Sun, 1); pos.put(Planet.Moon, 1); pos.put(Planet.Mars, 1); pos.put(Planet.Mercury, 1); pos.put(Planet.Jupiter, 1); pos.put(Planet.Venus, 1); pos.put(Planet.Saturn, 1); pos.put(Planet.Rahu, 1); pos.put(Planet.Ketu, 1); pos.put(Planet.Ascendant, 1);*/ //Chart rasi = new Chart(new PlanetChartData(Varga.Rasi.toString(), h.getDivChart(Varga.Rasi), h.getPlanetDirection(), DisplayFormat.SYMBOL), new Dimension(360,320)); Chart rasi = new Chart(new PlanetChartData(Varga.Rasi, h.getPlanetaryInfo()), new Dimension(360,320)); Chart navamsa = new Chart(new PlanetChartData(Varga.Navamsa, h.getPlanetaryInfo()), new Dimension(360,320)); JPanel view = new JPanel(); view.add(infoView); view.add(rasi); view.add(navamsa); view.setBounds(bounds); return view; } public void printHoroscope() { new PrintDialog(this); } public JPanel createShadbalaView(){ if(h.getShadBala() != null){ return new ShadBalaView(h.getTitle(), h.getShadBala(), new Point(30,20)); }else{ OptionDialog.showDialog("No ShadBala for Birth Year < 1900", JOptionPane.ERROR_MESSAGE); return createChartView(); } } public void showPanchang(Calendar date) { pan = new Panchang(date); viewManager.showView(View.PANCHANG_VIEW); } public void displayCompactibility(Horoscope boy, Horoscope girl) { compactibility = new Compactibility(boy, girl); actionMgr.enableAction(Command.PRINT, true); viewManager.showView(View.COMPACTIBILITY_VIEW); } public void displayCompactibility(String bName, String gName, Rasi bRasi, Rasi gRasi, Nakshathra bNak, Nakshathra gNak) { compactibility = new Compactibility(bName, gName, bNak, gNak, bRasi, gRasi); actionMgr.enableAction(Command.PRINT, true); viewManager.showView(View.COMPACTIBILITY_VIEW); } public void displayMuhurtha(Muhurtha m) { muhurtha = m; viewManager.showView(View.MUHURTHA_VIEW); // Muhurtha m = new Muhurtha(today, Rasi.Mesha, Nakshathra.Mrigasira, // false, false, 1); } public void newHoroscope() { new BirthInputDialog(this); //FIXME: Should not enable menus if cancel clicked enableActions(true); } public void openHoroscope() { String selectedFile = FileOps.openFileDialog(this, FileOps.FileDialogMode.OPEN, AstrosoftFileFilter.HOROSCOPE_EXTN); if (selectedFile != null) { openHoroscope(selectedFile); } } public void openHoroscope(String horoscopeFile) { h = Horoscope.createFromFile(horoscopeFile); if (h != null) { enableActions(true); } else { OptionDialog.showDialog(" Invalid File ", JOptionPane.ERROR_MESSAGE); this.repaint(); this.setVisible(true); return; } viewManager.showView(View.CHART_VIEW); } public void saveHoroscope() { if (h != null){ String selectedFile = FileOps.openFileDialog(this, FileOps.FileDialogMode.SAVE, AstrosoftFileFilter.HOROSCOPE_EXTN); if (selectedFile != null) { h.saveToFile(selectedFile); } } } public void openCompactibility(){ String fileName = FileOps.openFileDialog(this, FileOps.FileDialogMode.OPEN, AstrosoftFileFilter.COMPACTIBILITY_EXTN); if (fileName != null) { compactibility = Compactibility.createFromXML(fileName); if (compactibility != null){ actionMgr.enableAction(Command.PRINT, true); viewManager.showView(View.COMPACTIBILITY_VIEW); } } } public void editCompactibility(){ if (compactibility != null){ if (compactibility.hasHoroscope()){ new CompactibilityInputDialog(this, compactibility.getBoyBirthData(), compactibility.getGirlBirthData()); }else{ new CompactibilityInputDialog(this, compactibility.getBoyName(), compactibility.getGirlName(), compactibility.getBoyRasi(), compactibility.getGirlRasi(), compactibility.getBoyNak(), compactibility.getGirlNak()); } } } public void saveCompactibility(){ if (compactibility != null){ String selectedFile = FileOps.openFileDialog(this, FileOps.FileDialogMode.SAVE, AstrosoftFileFilter.COMPACTIBILITY_EXTN); if (selectedFile != null) { compactibility.saveToXML(selectedFile); } } } public void editHoroscope() { new BirthInputDialog(this, h.getBirthData()); } public void exportHoroscope2Pdf(){ if (h != null){ String selectedFile = FileOps.openFileDialog(this, FileOps.FileDialogMode.SAVE, AstrosoftFileFilter.PDF_EXTN); FutureTask<Object> task = AstrosoftExporter.export2Pdf(AstrosoftExporter.Type.Horosocope, h, selectedFile); ExportDialog exportDlg = new ExportDialog(this,"Export Horosocope ", task,selectedFile); } } public void exportCompactibility2Pdf(){ if (compactibility != null){ String selectedFile = FileOps.openFileDialog(this, FileOps.FileDialogMode.SAVE, AstrosoftFileFilter.PDF_EXTN); AstrosoftExporter.export2Pdf(AstrosoftExporter.Type.Compactibility, compactibility, selectedFile); } } public void setWaitCursor(){ setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); } public void setDefaultCursor(){ setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); } public void computeNumeroNumber(){ new ComputeNumberDialog(this); } private void optionAyanamsaChanged(Ayanamsa ayanamsa) { if (eph != null) { eph.setAyanamsa(ayanamsa); viewManager.showView(View.EPHEMERIS_VIEW); } if (pan != null) { viewManager.showView(View.PANCHANG_VIEW); } if (h != null) { h.setAyanamsa(ayanamsa); viewManager.showView(View.CHART_VIEW); } } private void optionLangChanged(String lang) { if (eph != null) { viewManager.showView(View.EPHEMERIS_VIEW); } if (pan != null) { viewManager.showView(View.PANCHANG_VIEW); } if (h != null) { h.languageChanged(); viewManager.showView(View.CHART_VIEW); } } public void optionChanged(final Preference preference){ DateListener listener = new DateListener(){ public void dateChanged(Date date) { preferences.preferenceChanged(preference, date); } }; switch(preference){ case Place: new PlaceOptionDialog(this); break; case EphCalcTime: new TimeInputDialog(DisplayStrings.EPH_TIME_STR, this, AstroUtil.doubleTimeToDate(preferences.getEphCalcTime()), listener); break; case PanCalcTime: new TimeInputDialog(DisplayStrings.PAN_TIME_STR, this, AstroUtil.doubleTimeToDate(preferences.getPanCalcTime()), listener); break; } } public void enableActions(boolean enable) { EnumSet<Command> actions = EnumSet.of(Command.SAVE,Command.SAVE_COMPACTIBILITY, Command.EDIT_COMPACTIBILITY, Command.EDIT_CHART, Command.CHART_VIEW, Command.PLANET_POS_VIEW, Command.BHAVA_POS_VIEW, Command.DIV_CHART_VIEW, Command.ASHTAVARGA_VIEW, Command.SHADBALA_VIEW, Command.YOGA_COMBINATIONS_VIEW, Command.DASAS_VIEW); actionMgr.enableActions(actions, enable); } public void viewChanged(View view) { switch(view){ case EPHEMERIS_VIEW: eph = new Ephemeris(AstroUtil.getCalendar(), Mode.Daily); viewManager.showView(view); break; case PANCHANG_VIEW: pan = new Panchang(today); viewManager.showView(view); break; case COMPACTIBILITY_VIEW: new CompactibilityInputDialog(this); break; case MUHURTHA_VIEW: new MuhurthaInput(this); break; default: viewManager.showView(view); } } public void refreshUI() { getContentPane( ).removeAll( ); //getContentPane().remove(home); getContentPane().add(toolbar, BorderLayout.PAGE_START); getContentPane().add(home, BorderLayout.CENTER); this.repaint(); this.setVisible(true); } public void optionChanged(Preference preference, Object value) { preferences.preferenceChanged(preference, value); switch (preference) { case Ayanamsa: optionAyanamsaChanged((Ayanamsa) value); break; case Language: optionLangChanged(((Language) value).name()); break; } } public static AstrosoftPref getPreferences(){ return preferences; } /** * @return Returns the horoscope. */ public Horoscope getHoroscope() { return h; } public Compactibility getCompactibility() { return compactibility; } public static Dimension getScreenSize(){ return java.awt.Toolkit.getDefaultToolkit().getScreenSize(); //return new Dimension(800,600); } private class AstrosoftViewContainer implements ViewContainer{ public void addView(JPanel view){ home.removeAll(); //home.add(view, BorderLayout.CENTER); home.add(view); refreshUI(); } public JPanel createView(View view) { switch(view){ case CHART_VIEW: return createChartView(); case DASAS_VIEW: return new VimDasaView(h.getTitle(), h.getVimshottariDasa()); case BHAVA_POS_VIEW: return new BhavaView(h.getTitle(), h.getHousePosition()); case PLANET_POS_VIEW: return new PlanetView(h.getTitle(), h.getPlanetaryInfo()); case SHADBALA_VIEW: return createShadbalaView(); case DIV_CHART_VIEW: return new VargaChartView(h.getTitle(), h.getPlanetaryInfo()); case ASHTAVARGA_VIEW: return new AshtavargaView(h.getTitle(), h.getAshtaVarga(), new Point(30,20)); case PANCHANG_VIEW: return new PanchangView(pan, new Point(30,20)); case EPHEMERIS_VIEW: return new EphemerisView(eph, new Point(10,2)); case COMPACTIBILITY_VIEW: actionMgr.enableActions(EnumSet.of(Command.SAVE_COMPACTIBILITY), true); return new CompactibilityView(DisplayStrings.MRAG_COMP_STR.toString(Language.ENGLISH), compactibility, new Point(30,20)); case MUHURTHA_VIEW: return new MuhurthaPanel(muhurtha, AstroSoft.this); case FIND_NAME_VIEW: return new FindNameView(); case YOGA_COMBINATIONS_VIEW: return new YogaCombinationsView(h.getTitle(),h.getYogaCombinations(),h.getPlanetaryInfo()); } return null; } } }