+ }
+
+ /**
+ * true if lastParmSet is a user preset
+ */
+ boolean isUserPreset = false;
+
+ private void reInitDialog(String nextPreset)
+ {
+ settingDialog = true;
+ // updateTable(null,null); // first reset to defaults
+ WsParamSetI pset = null;
+ if (nextPreset != null && nextPreset.length() > 0)
+ {
+ pset = paramStore.getPreset(nextPreset);
+ }
+ if (pset != null)
+ {
+ if (pset.isModifiable())
+ {
+ isUserPreset = true;
+ setDescr.setText(pset.getDescription());
+ updateTable(null, pset.getArguments());
+ lastParmSet = nextPreset;
+ }
+ else
+ {
+ isUserPreset = false;
+ setDescr.setText("");
+ // must be a default preset from service
+ updateTable(pset, null);
+ lastParmSet = nextPreset;
+ }
+ }
+ else
+ {
+ isUserPreset = false;
+ // Service defaults
+ setDescr.setText("");
+ updateTable(null, null);
+ lastParmSet = SVC_DEF;
+ }
+
+ initArgSetModified();
+ syncSetNamesWithStore();
+ setName.setSelectedItem(lastParmSet);
+ SetNamePanel.validate();
+ validate();
+ settingDialog = false;
+ }
+
+ /**
+ * Rebuild the AlignFrame web service menus (after add/delete of a preset
+ * option).
+ */
+ protected void updateWebServiceMenus()
+ {
+ for (AlignFrame alignFrame : Desktop.getAlignFrames())
+ {
+ alignFrame.BuildWebServiceMenu();
+ }
+ }
+
+ String curSetName = null;
+
+ @Override
+ public void itemStateChanged(ItemEvent e)
+ {
+ if (e.getSource() == setName && e.getStateChange() == e.SELECTED)
+ {
+ final String setname = (String) setName.getSelectedItem();
+ System.out.println("Item state changed for " + setname
+ + " (handling ? " + !settingDialog + ")");
+ if (settingDialog)
+ {
+ // ignore event
+ return;
+ }
+ if (setname == null)
+ {
+ return;
+ }
+ javax.swing.SwingUtilities.invokeLater(new Runnable()
+ {
+ @Override
+ public void run()
+ {
+ doPreferenceComboStateChange(setname);
+ }
+ });
+ }
+ }
+
+ private void doPreferenceComboStateChange(String setname)
+ {
+ // user has selected a different item from combo-box
+ if (isModified())
+ {
+ String lsetname = (curSetName != null) ? curSetName : lastParmSet;
+ if (lsetname.equals(setname))
+ {
+ // setname was just edited - so ignore this event.
+ return;
+ }
+ settingDialog = true;
+ System.out.println("Prompting to save " + lsetname);
+ if (JvOptionPane
+ .showConfirmDialog(
+ this,
+ "Parameter set '"
+ + lsetname
+ + "' is modifed, and your changes will be lost.\nReally change preset ?",
+ "Warning: Unsaved Changes",
+ JvOptionPane.OK_CANCEL_OPTION) != JvOptionPane.OK_OPTION)
+ {
+ // revert the combobox to the current item
+ settingDialog = true;
+ setName.setSelectedItem(lsetname);
+ settingDialog = false;
+ // and leave.
+ return;
+ // System.out.println("Saving for " + lsetname);
+ // _storeCurrentPreset(lsetname);
+
+ }
+ }
+ settingDialog = true;
+ reInitDialog(setname);
+ settingDialog = false;
+
+ }
+
+ private void _renameExistingPreset(String oldName, String curSetName2)
+ {
+ paramStore.updatePreset(oldName, curSetName2, setDescr.getText(),
+ getJobParams());
+ }
+
+ /**
+ * store current settings as given name. You should then reset gui.
+ *
+ * @param curSetName2
+ */
+ private void _storeCurrentPreset(String curSetName2)
+ {
+ paramStore.storePreset(curSetName2, setDescr.getText(), getJobParams());
+ }
+
+ private void _updatePreset(String lastParmSet2, String curname)
+ {
+ paramStore.updatePreset(lastParmSet2, curname, setDescr.getText(),
+ getJobParams());
+
+ }
+
+ /**
+ * last saved name for this user preset
+ */
+ String lastSetName = null;
+
+ /**
+ * last saved value of the description text for this user preset
+ */
+ String lastDescrText = null;
+
+ @Override
+ public void actionPerformed(ActionEvent e)
+ {
+ if (e.getSource() instanceof Component)
+ {
+ Component src = (Component) e.getSource();
+ if (src.getParent() == setName)
+ {
+ // rename any existing records we know about for this set.
+ String newname = e.getActionCommand().trim();
+ String msg = null;
+ if (isServicePreset(newname))
+ {
+ final String oldname = curSetName != null ? curSetName
+ : lastParmSet;
+ final Component ourframe = this;
+ settingDialog = true;
+ setName.getEditor().setItem(oldname);
+ settingDialog = false;
+ javax.swing.SwingUtilities.invokeLater(new Runnable()
+ {
+ @Override
+ public void run()
+ {
+ JvOptionPane.showMessageDialog(ourframe, MessageManager
+ .getString("label.invalid_name_preset_exists"),
+ MessageManager.getString("label.invalid_name"),
+ JvOptionPane.WARNING_MESSAGE);
+ }
+ });
+
+ return;
+ }
+ curSetName = newname;
+ System.err.println("New name for user setting " + curSetName
+ + " (was " + setName.getSelectedItem() + ")");
+ if (curSetName.equals(setName.getSelectedItem()))
+ {
+ curSetName = null;
+ }
+ if (curSetName != null)
+ {
+ argSetModified(setName, true);
+ return;
+ }
+
+ }
+ }
+ }
+
+ private void checkDescrModified()
+ {
+ if (!settingDialog)
+ {
+
+ argSetModified(
+ setDescr,
+ (lastDescrText == null ? setDescr.getText().trim().length() > 0
+ : !setDescr.getText().equals(lastDescrText)));
+
+ }
+ }
+
+ @Override
+ public void insertUpdate(DocumentEvent e)
+ {
+ checkDescrModified();
+ }
+
+ @Override
+ public void removeUpdate(DocumentEvent e)
+ {
+ checkDescrModified();
+ }
+
+ @Override
+ public void changedUpdate(DocumentEvent e)
+ {
+ checkDescrModified();
+ }
+
+ /**
+ *
+ * @return null or the service preset selected by the user
+ */
+ public WsParamSetI getPreset()
+ {
+ if (isUserPreset || isModified()
+ || (lastParmSet != null && lastParmSet.equals(SVC_DEF)))
+ {
+ return null;
+ }
+ else
+ {
+ return paramStore.getPreset(lastParmSet);
+ }