/* * Copyright (C) 2013 Vinu K.N * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package org.domainmath.gui.packages.optim; import java.awt.Desktop; import java.awt.Image; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; import java.util.ArrayList; import java.util.Collections; import java.util.List; import javax.swing.JMenuItem; import javax.swing.JPopupMenu; import org.domainmath.gui.about.AboutDlg; public class OptimizationFrame extends javax.swing.JFrame { private int glpkIndex=1; private JPopupMenu popup; private JMenuItem pcloseItem; private JMenuItem pcloseAllItem; private List fileNameList =Collections.synchronizedList(new ArrayList()); private int qpIndex=1; private int sqpIndex=1; private int tabIndex=1; /** * Creates new form GlpkFrame */ public OptimizationFrame() { this.setIconImage(icon); initComponents(); this.popupTab(); this.pack(); } private void popupTab(){ popup = new JPopupMenu(); pcloseItem = new JMenuItem("Close"); pcloseAllItem = new JMenuItem("Close All"); popup.add(pcloseItem); popup.add(pcloseAllItem); jTabbedPane1.addMouseListener(new PopupListener(popup)); pcloseItem.addActionListener(new java.awt.event.ActionListener() { @Override public void actionPerformed(ActionEvent e) { if(jTabbedPane1.getSelectedIndex() >= 0) { removeFileNameFromList(jTabbedPane1.getSelectedIndex()); jTabbedPane1.remove(jTabbedPane1.getSelectedIndex()); tabIndex--; } } }); pcloseAllItem.addActionListener(new java.awt.event.ActionListener() { @Override public void actionPerformed(ActionEvent e) { int i=jTabbedPane1.getTabCount()-1; while(i != -1) { removeFileNameFromList(i); jTabbedPane1.remove(i); tabIndex--; i--; } } }); } public void removeFileNameFromList(int index) { fileNameList.remove(index); } public void addFileNameToList(String name) { fileNameList.add(name); } /** * 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() { statusPanel2 = new org.domainmath.gui.StatusPanel(); jTabbedPane1 = new javax.swing.JTabbedPane(); jMenuBar1 = new javax.swing.JMenuBar(); jMenu1 = new javax.swing.JMenu(); jMenuItem2 = new javax.swing.JMenuItem(); jMenuItem3 = new javax.swing.JMenuItem(); jMenuItem4 = new javax.swing.JMenuItem(); jSeparator1 = new javax.swing.JPopupMenu.Separator(); closeItem = new javax.swing.JMenuItem(); closeAllItem = new javax.swing.JMenuItem(); jSeparator2 = new javax.swing.JPopupMenu.Separator(); jMenuItem1 = new javax.swing.JMenuItem(); helpMenu = new javax.swing.JMenu(); forumItem = new javax.swing.JMenuItem(); onlineHelpItem = new javax.swing.JMenuItem(); howToItem = new javax.swing.JMenuItem(); faqItem = new javax.swing.JMenuItem(); jSeparator14 = new javax.swing.JPopupMenu.Separator(); suggestionsItem = new javax.swing.JMenuItem(); reportBugItem = new javax.swing.JMenuItem(); feedBackItem = new javax.swing.JMenuItem(); jSeparator7 = new javax.swing.JPopupMenu.Separator(); AboutItem = new javax.swing.JMenuItem(); setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE); java.util.ResourceBundle bundle = java.util.ResourceBundle.getBundle("org/domainmath/gui/packages/optim/resources/optim_en"); // NOI18N setTitle(bundle.getString("OptimFrame.title")); // NOI18N jTabbedPane1.setTabLayoutPolicy(javax.swing.JTabbedPane.SCROLL_TAB_LAYOUT); jMenu1.setText("File"); jMenuItem2.setText(bundle.getString("glpkItem.text")); // NOI18N jMenuItem2.setToolTipText("<html> Function File: [<var>xopt</var>,\n<var>fmin</var>, <var>status</var>, <var>extra</var>]\n= <b>glpk</b> (<var>c, A, b, lb, ub, ctype, vartype,\nsense, param</var>)<var><a name=\"index-glpk-2449\"></a></var><br>\n<p>Solve a linear program using the GNU <span class=\"sc\">glpk</span>\nlibrary. Given three\narguments, <code>glpk</code> solves the following standard\nLP: </p>\n<pre class=\"example\"> min C'*x<br></pre>\n<p>subject to </p>\n<pre class=\"example\"> A*x = b<br> x >= 0<br></pre>\n<p>but may also solve problems of the form </p>\n<pre class=\"example\"> [ min | max ] C'*x<br></pre>\n<p>subject to </p>\n<pre class=\"example\"> A*x [ \"=\" | \"<=\" | \">=\" ] b<br> x >= LB<br> x <= UB<br></pre></html>"); jMenuItem2.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jMenuItem2ActionPerformed(evt); } }); jMenu1.add(jMenuItem2); jMenuItem3.setText(bundle.getString("qpItem.text")); // NOI18N jMenuItem3.setToolTipText("<html>Function File: [<var>x</var>, <var>obj</var>, <var>info</var>,\n<var>lambda</var>] = <b>qp</b> (<var>x0,\nH, q, A, b, lb, ub, A_lb, A_in, A_ub</var>)<var><a\n name=\"index-qp-2454\"></a></var><var></var><var></var><var></var><var></var><var></var><br>\n<p>Solve the quadratic program </p>\n<pre class=\"example\"> min 0.5 x'*H*x + x'*q<br> x<br></pre>\n<p>subject to </p>\n<pre class=\"example\"> A*x = b<br> lb <= x <= ub<br> A_lb <= A_in*x <= A_ub<br></pre>\n<p class=\"noindent\">using a null-space active-set method. </p></html>\n"); jMenuItem3.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jMenuItem3ActionPerformed(evt); } }); jMenu1.add(jMenuItem3); jMenuItem4.setText(bundle.getString("sqpItem.text")); // NOI18N jMenuItem4.setToolTipText("<html>Function File: [<small class=\"dots\">...</small>] = <b>sqp</b>\n(<var>x0, phi, g, h, lb, ub, maxiter, tol</var>)<var><a\n name=\"index-sqp-2467\"></a></var><br>\n<p>Solve the nonlinear program </p>\n<pre class=\"example\"> min phi (x)<br> x<br></pre>\n<p>subject to </p>\n<pre class=\"example\"> g(x) = 0<br> h(x) >= 0<br> lb <= x <= ub<br></pre>\n<p class=\"noindent\">using a sequential quadratic\nprogramming method. </p><html>\n"); jMenuItem4.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jMenuItem4ActionPerformed(evt); } }); jMenu1.add(jMenuItem4); jMenu1.add(jSeparator1); closeItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_W, java.awt.event.InputEvent.CTRL_MASK)); closeItem.setText(bundle.getString("closeItem.name")); // NOI18N closeItem.setToolTipText(bundle.getString("closeItem.tooltip")); // NOI18N closeItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { closeItemActionPerformed(evt); } }); jMenu1.add(closeItem); closeAllItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_W, java.awt.event.InputEvent.SHIFT_MASK | java.awt.event.InputEvent.CTRL_MASK)); closeAllItem.setText(bundle.getString("closeAllItem.name")); // NOI18N closeAllItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { closeAllItemActionPerformed(evt); } }); jMenu1.add(closeAllItem); jMenu1.add(jSeparator2); jMenuItem1.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_X, java.awt.event.InputEvent.ALT_MASK)); jMenuItem1.setText(bundle.getString("exitItem.text")); // NOI18N jMenuItem1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jMenuItem1ActionPerformed(evt); } }); jMenu1.add(jMenuItem1); jMenuBar1.add(jMenu1); java.util.ResourceBundle bundle1 = java.util.ResourceBundle.getBundle("org/domainmath/gui/resources/DomainMath_en"); // NOI18N helpMenu.setText(bundle1.getString("helpMenu.name")); // NOI18N forumItem.setText("Forum"); forumItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { forumItemActionPerformed(evt); } }); helpMenu.add(forumItem); onlineHelpItem.setText("Help and Support"); onlineHelpItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { onlineHelpItemActionPerformed(evt); } }); helpMenu.add(onlineHelpItem); howToItem.setText("How to..."); howToItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { howToItemActionPerformed(evt); } }); helpMenu.add(howToItem); faqItem.setText("Online FAQ"); faqItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { faqItemActionPerformed(evt); } }); helpMenu.add(faqItem); helpMenu.add(jSeparator14); suggestionsItem.setText("Suggestions"); suggestionsItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { suggestionsItemActionPerformed(evt); } }); helpMenu.add(suggestionsItem); reportBugItem.setText(bundle1.getString("reportBugItem.name")); // NOI18N reportBugItem.setToolTipText(bundle1.getString("reportBugItem.tooltip")); // NOI18N reportBugItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { reportBugItemActionPerformed(evt); } }); helpMenu.add(reportBugItem); feedBackItem.setText(bundle1.getString("yourFeedbackItem.name")); // NOI18N feedBackItem.setToolTipText(bundle1.getString("yourFeedbackItem.tooltip")); // NOI18N feedBackItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { feedBackItemActionPerformed(evt); } }); helpMenu.add(feedBackItem); helpMenu.add(jSeparator7); AboutItem.setText(bundle1.getString("aboutItem.name")); // NOI18N AboutItem.setToolTipText(bundle1.getString("aboutItem.tooltip")); // NOI18N AboutItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { AboutItemActionPerformed(evt); } }); helpMenu.add(AboutItem); jMenuBar1.add(helpMenu); setJMenuBar(jMenuBar1); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jTabbedPane1) .addComponent(statusPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, 848, Short.MAX_VALUE) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addComponent(jTabbedPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 524, Short.MAX_VALUE) .addGap(0, 0, 0) .addComponent(statusPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) ); pack(); }// </editor-fold>//GEN-END:initComponents private void jMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem1ActionPerformed dispose(); }//GEN-LAST:event_jMenuItem1ActionPerformed private void forumItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_forumItemActionPerformed setPath("http://domainmathide.freeforums.org/"); }//GEN-LAST:event_forumItemActionPerformed private void onlineHelpItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_onlineHelpItemActionPerformed setPath("http://domainmathide.freeforums.org/help-and-support-f5.html"); }//GEN-LAST:event_onlineHelpItemActionPerformed private void howToItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_howToItemActionPerformed setPath("http://domainmathide.freeforums.org/how-to-f9.html"); }//GEN-LAST:event_howToItemActionPerformed private void faqItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_faqItemActionPerformed setPath("http://domainmathide.freeforums.org/faq-f8.html"); }//GEN-LAST:event_faqItemActionPerformed private void suggestionsItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_suggestionsItemActionPerformed setPath("http://domainmathide.freeforums.org/suggestions-f6.html"); }//GEN-LAST:event_suggestionsItemActionPerformed private void reportBugItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_reportBugItemActionPerformed setPath("http://domainmathide.freeforums.org/bugs-f3.html"); }//GEN-LAST:event_reportBugItemActionPerformed private void feedBackItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_feedBackItemActionPerformed setPath("http://domainmathide.freeforums.org/feedback-f4.html"); }//GEN-LAST:event_feedBackItemActionPerformed private void AboutItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_AboutItemActionPerformed AboutDlg aboutDlg = new AboutDlg(this,true); aboutDlg.setLocationRelativeTo(this); aboutDlg.setVisible(true); }//GEN-LAST:event_AboutItemActionPerformed private void jMenuItem2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem2ActionPerformed jTabbedPane1.add("glpk #"+this.glpkIndex, new GlpkPanel()); jTabbedPane1.setSelectedIndex(this.tabIndex-1); this.tabIndex++; this.addFileNameToList("glpk #"+this.glpkIndex); this.glpkIndex++; }//GEN-LAST:event_jMenuItem2ActionPerformed private void closeAllItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_closeAllItemActionPerformed int i=jTabbedPane1.getTabCount()-1; while(i != -1) { removeFileNameFromList(i); jTabbedPane1.remove(i); this.tabIndex--; i--; } }//GEN-LAST:event_closeAllItemActionPerformed private void closeItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_closeItemActionPerformed if(jTabbedPane1.getSelectedIndex() >= 0) { removeFileNameFromList(jTabbedPane1.getSelectedIndex()); jTabbedPane1.remove(jTabbedPane1.getSelectedIndex()); this.tabIndex--; } }//GEN-LAST:event_closeItemActionPerformed private void jMenuItem3ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem3ActionPerformed jTabbedPane1.add("qp #"+this.qpIndex, new QpPanel()); jTabbedPane1.setSelectedIndex(this.tabIndex-1); this.tabIndex++; this.addFileNameToList("qp #"+this.qpIndex); this.qpIndex++; }//GEN-LAST:event_jMenuItem3ActionPerformed private void jMenuItem4ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem4ActionPerformed jTabbedPane1.add("sqp #"+this.sqpIndex, new SqpPanel()); jTabbedPane1.setSelectedIndex(this.tabIndex-1); this.tabIndex++; this.addFileNameToList("sqp #"+this.sqpIndex); this.sqpIndex++; }//GEN-LAST:event_jMenuItem4ActionPerformed /** * @param args the command line arguments */ public static void main(String args[]) { java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new OptimizationFrame().setVisible(true); } }); } public void setPath(String path) { try { URI uri = new URI(path); Desktop desktop=Desktop.getDesktop(); desktop.browse(uri); } catch (URISyntaxException | IOException ex) { ex.printStackTrace(); } } public Image icon = Toolkit.getDefaultToolkit().getImage(getClass().getResource("/org/domainmath/gui/resources/DomainMath.png")); // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JMenuItem AboutItem; private javax.swing.JMenuItem closeAllItem; private javax.swing.JMenuItem closeItem; private javax.swing.JMenuItem faqItem; private javax.swing.JMenuItem feedBackItem; private javax.swing.JMenuItem forumItem; private javax.swing.JMenu helpMenu; private javax.swing.JMenuItem howToItem; private javax.swing.JMenu jMenu1; private javax.swing.JMenuBar jMenuBar1; private javax.swing.JMenuItem jMenuItem1; private javax.swing.JMenuItem jMenuItem2; private javax.swing.JMenuItem jMenuItem3; private javax.swing.JMenuItem jMenuItem4; private javax.swing.JPopupMenu.Separator jSeparator1; private javax.swing.JPopupMenu.Separator jSeparator14; private javax.swing.JPopupMenu.Separator jSeparator2; private javax.swing.JPopupMenu.Separator jSeparator7; private javax.swing.JTabbedPane jTabbedPane1; private javax.swing.JMenuItem onlineHelpItem; private javax.swing.JMenuItem reportBugItem; private org.domainmath.gui.StatusPanel statusPanel2; private javax.swing.JMenuItem suggestionsItem; // End of variables declaration//GEN-END:variables class PopupListener extends MouseAdapter { JPopupMenu popup; PopupListener(JPopupMenu popupMenu) { popup = popupMenu; } @Override public void mousePressed(MouseEvent e) { maybeShowPopup(e); } @Override public void mouseReleased(MouseEvent e) { maybeShowPopup(e); } private void maybeShowPopup(MouseEvent e) { if (e.isPopupTrigger() && jTabbedPane1.getTabCount() > 0) { popup.show(e.getComponent(), e.getX(), e.getY()); } } } }