package org.chartsy.main; import java.awt.Color; import java.awt.Cursor; import java.io.IOException; import java.util.Collections; import java.util.List; import javax.swing.JComboBox; import javax.swing.text.AbstractDocument; import org.chartsy.main.data.DataProvider; import org.chartsy.main.data.Exchange; import org.chartsy.main.managers.DataProviderManager; import org.chartsy.main.managers.TemplateManager; import org.chartsy.main.templates.Template; import org.chartsy.main.utils.DesktopUtil; import org.chartsy.main.utils.UppercaseDocumentFilter; import org.chartsy.main.utils.autocomplete.StockAutoCompleter; import org.openide.util.Exceptions; import org.openide.windows.WindowManager; public class NewChartDialog extends javax.swing.JDialog { private static final String defaultDataProvider = "MrSwing"; private StockAutoCompleter completer = null; private String stock = null; private String dataProvider = null; private Template template = null; private String msgUrl = ""; /** Creates new form NewChartDialog */ public NewChartDialog(java.awt.Frame parent, boolean modal) { super(parent, modal); setTitle("New Chart"); initComponents(); parent.setIconImage(WindowManager.getDefault().getMainWindow().getIconImage()); getRootPane().setDefaultButton(btnNewChart); initForm(); } private void initForm() { msgLabel.setForeground(Color.red); msgLabel.setVisible(false); msgLabel.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); dataProvider = DataProviderManager.getDefault().getDataProvider(defaultDataProvider).getName(); List<String> dataProviders = DataProviderManager.getDefault().getDataProviders(); Collections.sort(dataProviders); lstDataProvider.setMaximumRowCount(dataProviders.size()); for (String s : dataProviders) { lstDataProvider.addItem(s); } lstDataProvider.setSelectedItem(defaultDataProvider); Object[] templates = TemplateManager.getDefault().getTemplateNames(); for (Object temp : templates) { lstTemplate.addItem(temp); } lstTemplate.setSelectedItem(TemplateManager.getDefault().getDefaultTemplate()); ((AbstractDocument) txtSymbol.getDocument()).setDocumentFilter(new UppercaseDocumentFilter()); completer = new StockAutoCompleter(txtSymbol); completer.setDataProvider(dataProvider); } public String getStock() { return stock; } public String getDataProvider() { return dataProvider; } public Template getTemplate() { return template; } /** 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. */ @SuppressWarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents private void initComponents() { lblLogo = new javax.swing.JLabel(); lblSymbol = new javax.swing.JLabel(); txtSymbol = new javax.swing.JTextField(); lblDataProvider = new javax.swing.JLabel(); lstDataProvider = new javax.swing.JComboBox(); lblExchange = new javax.swing.JLabel(); lstExchange = new javax.swing.JComboBox(); lblTemplate = new javax.swing.JLabel(); lstTemplate = new javax.swing.JComboBox(); btnNewChart = new javax.swing.JButton(); btnCancel = new javax.swing.JButton(); msgLabel = new javax.swing.JLabel(); setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE); setTitle(org.openide.util.NbBundle.getMessage(NewChartDialog.class, "NewChartDialog.title")); // NOI18N lblLogo.setBackground(new java.awt.Color(255, 255, 255)); lblLogo.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); lblLogo.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/chartsy/main/resources/logo.png"))); // NOI18N lblLogo.setText(org.openide.util.NbBundle.getMessage(NewChartDialog.class, "NewChartDialog.lblLogo.text")); // NOI18N lblLogo.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); lblSymbol.setFont(new java.awt.Font("Tahoma", 1, 11)); lblSymbol.setText(org.openide.util.NbBundle.getMessage(NewChartDialog.class, "NewChartDialog.lblSymbol.text")); // NOI18N txtSymbol.setColumns(6); txtSymbol.setText(org.openide.util.NbBundle.getMessage(NewChartDialog.class, "NewChartDialog.txtSymbol.text")); // NOI18N txtSymbol.setToolTipText(org.openide.util.NbBundle.getMessage(NewChartDialog.class, "NewChartDialog.txtSymbol.toolTipText")); // NOI18N lblDataProvider.setFont(new java.awt.Font("Tahoma", 1, 11)); lblDataProvider.setText(org.openide.util.NbBundle.getMessage(NewChartDialog.class, "NewChartDialog.lblDataProvider.text")); // NOI18N lstDataProvider.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { lstDataProviderActionPerformed(evt); } }); lblExchange.setFont(new java.awt.Font("Tahoma", 1, 11)); lblExchange.setText(org.openide.util.NbBundle.getMessage(NewChartDialog.class, "NewChartDialog.lblExchange.text")); // NOI18N lstExchange.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { lstExchangeActionPerformed(evt); } }); lblTemplate.setFont(new java.awt.Font("Tahoma", 1, 11)); lblTemplate.setText(org.openide.util.NbBundle.getMessage(NewChartDialog.class, "NewChartDialog.lblTemplate.text")); // NOI18N btnNewChart.setText(org.openide.util.NbBundle.getMessage(NewChartDialog.class, "NewChartDialog.btnNewChart.text")); // NOI18N btnNewChart.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { btnNewChartActionPerformed(evt); } }); btnCancel.setText(org.openide.util.NbBundle.getMessage(NewChartDialog.class, "NewChartDialog.btnCancel.text")); // NOI18N btnCancel.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { btnCancelActionPerformed(evt); } }); msgLabel.setHorizontalAlignment(javax.swing.SwingConstants.LEFT); msgLabel.setText(org.openide.util.NbBundle.getMessage(NewChartDialog.class, "NewChartDialog.msgLabel.text")); // NOI18N msgLabel.setHorizontalTextPosition(javax.swing.SwingConstants.LEFT); msgLabel.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { msgLabelMouseClicked(evt); } }); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addComponent(msgLabel, javax.swing.GroupLayout.DEFAULT_SIZE, 489, Short.MAX_VALUE) .addContainerGap()) .addGroup(layout.createSequentialGroup() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addComponent(lblSymbol) .addGap(56, 56, 56) .addComponent(txtSymbol, javax.swing.GroupLayout.PREFERRED_SIZE, 361, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(11, 11, 11)) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(lblTemplate) .addGroup(layout.createSequentialGroup() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(lblDataProvider) .addComponent(lblExchange)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(lstExchange, 0, 388, Short.MAX_VALUE) .addComponent(lstTemplate, 0, 388, Short.MAX_VALUE) .addComponent(lstDataProvider, 0, 388, Short.MAX_VALUE) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() .addComponent(btnNewChart) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(btnCancel)))))) .addGap(26, 26, 26)))) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addComponent(lblLogo, javax.swing.GroupLayout.DEFAULT_SIZE, 489, Short.MAX_VALUE) .addContainerGap())) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() .addContainerGap(166, Short.MAX_VALUE) .addComponent(msgLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 75, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(lblSymbol) .addComponent(txtSymbol, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGap(9, 9, 9) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(lblDataProvider) .addComponent(lstDataProvider, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(lblExchange) .addComponent(lstExchange, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(lblTemplate) .addComponent(lstTemplate, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(btnCancel) .addComponent(btnNewChart)) .addContainerGap()) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addGap(11, 11, 11) .addComponent(lblLogo, javax.swing.GroupLayout.DEFAULT_SIZE, 132, Short.MAX_VALUE) .addGap(159, 159, 159))) ); pack(); }// </editor-fold>//GEN-END:initComponents private void lstDataProviderActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_lstDataProviderActionPerformed {//GEN-HEADEREND:event_lstDataProviderActionPerformed this.msgLabel.setVisible(false); msgUrl = ""; JComboBox list = (JComboBox) evt.getSource(); dataProvider = (String) list.getSelectedItem(); lstExchange.removeAllItems(); if (completer != null) { completer.setDataProvider(dataProvider); } DataProvider dp = DataProviderManager.getDefault().getDataProvider(dataProvider); Exchange[] exchanges = dp.getExchanges(); if (exchanges == null || exchanges.length == 0) { lblExchange.setVisible(false); lstExchange.setVisible(false); } else { for (Exchange exchange : exchanges) { lstExchange.addItem(exchange.getExchange()); } } if (dp.needsRegistration() && !dp.isRegistred()) { this.msgLabel.setText(dp.getRegistrationMessage()); this.msgLabel.setVisible(true); this.msgUrl = dp.getRegistrationURL(); } }//GEN-LAST:event_lstDataProviderActionPerformed private void lstExchangeActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_lstExchangeActionPerformed {//GEN-HEADEREND:event_lstExchangeActionPerformed Object obj = lstDataProvider.getSelectedItem(); if (obj != null) { DataProvider dp = DataProviderManager.getDefault().getDataProvider((String) obj); int i = lstExchange.getSelectedIndex(); if (i != -1) { Exchange exchange = dp.getExchanges()[i]; String symbol = txtSymbol.getText(); if (symbol != null) { symbol.trim(); String delimiter = "."; if (symbol.contains(delimiter)) { int index = symbol.indexOf(delimiter); symbol = symbol.substring(0, index); } txtSymbol.setText(symbol + exchange.getSufix()); } } } }//GEN-LAST:event_lstExchangeActionPerformed private void btnNewChartActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_btnNewChartActionPerformed {//GEN-HEADEREND:event_btnNewChartActionPerformed completer.stopTimer(); dataProvider = (String) lstDataProvider.getSelectedItem(); stock = txtSymbol.getText().trim(); template = TemplateManager.getDefault().getTemplate(lstTemplate.getSelectedItem()); setVisible(false); }//GEN-LAST:event_btnNewChartActionPerformed private void btnCancelActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_btnCancelActionPerformed {//GEN-HEADEREND:event_btnCancelActionPerformed stock = null; dataProvider = null; template = null; setVisible(false); }//GEN-LAST:event_btnCancelActionPerformed private void msgLabelMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_msgLabelMouseClicked if (!msgUrl.isEmpty()) { try { DesktopUtil.browse(msgUrl); } catch (Exception ex) {} } }//GEN-LAST:event_msgLabelMouseClicked /** * @param args the command line arguments */ public static void main(String args[]) { java.awt.EventQueue.invokeLater(new Runnable() { public void run() { NewChartDialog dialog = new NewChartDialog(new javax.swing.JFrame(), true); dialog.addWindowListener(new java.awt.event.WindowAdapter() { public void windowClosing(java.awt.event.WindowEvent e) { System.exit(0); } }); dialog.setVisible(true); } }); } // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton btnCancel; private javax.swing.JButton btnNewChart; private javax.swing.JLabel lblDataProvider; private javax.swing.JLabel lblExchange; private javax.swing.JLabel lblLogo; private javax.swing.JLabel lblSymbol; private javax.swing.JLabel lblTemplate; private javax.swing.JComboBox lstDataProvider; private javax.swing.JComboBox lstExchange; private javax.swing.JComboBox lstTemplate; private javax.swing.JLabel msgLabel; private javax.swing.JTextField txtSymbol; // End of variables declaration//GEN-END:variables }