diff -r ba198baeb89c apisupport.project/src/org/netbeans/modules/apisupport/project/ui/wizard/winsys/BasicSettingsPanel.form --- a/apisupport.project/src/org/netbeans/modules/apisupport/project/ui/wizard/winsys/BasicSettingsPanel.form Wed May 04 08:56:05 2011 +0200 +++ b/apisupport.project/src/org/netbeans/modules/apisupport/project/ui/wizard/winsys/BasicSettingsPanel.form Wed May 04 19:38:20 2011 +0200 @@ -1,4 +1,4 @@ - +
@@ -167,5 +167,18 @@ + + + + + + + + + + + + + diff -r ba198baeb89c apisupport.project/src/org/netbeans/modules/apisupport/project/ui/wizard/winsys/BasicSettingsPanel.java --- a/apisupport.project/src/org/netbeans/modules/apisupport/project/ui/wizard/winsys/BasicSettingsPanel.java Wed May 04 08:56:05 2011 +0200 +++ b/apisupport.project/src/org/netbeans/modules/apisupport/project/ui/wizard/winsys/BasicSettingsPanel.java Wed May 04 19:38:20 2011 +0200 @@ -45,18 +45,33 @@ package org.netbeans.modules.apisupport.project.ui.wizard.winsys; import java.awt.Cursor; +import java.awt.EventQueue; +import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.Collection; +import java.util.Properties; +import java.util.Set; +import java.util.TreeSet; import javax.swing.DefaultComboBoxModel; +import org.apache.tools.ant.module.api.support.ActionUtils; +import org.netbeans.api.project.Project; +import org.netbeans.modules.apisupport.project.NbModuleProject; +import org.netbeans.modules.apisupport.project.Util; import org.netbeans.modules.apisupport.project.layers.LayerUtils; import org.netbeans.modules.apisupport.project.ui.wizard.BasicWizardIterator; +import org.netbeans.spi.project.support.ant.GeneratedFilesHelper; import org.openide.WizardDescriptor; +import org.openide.execution.ExecutorTask; import org.openide.filesystems.FileObject; import org.openide.filesystems.FileSystem; +import org.openide.filesystems.FileUtil; import org.openide.util.AsyncGUIJob; +import org.openide.util.Exceptions; import org.openide.util.HelpCtx; import org.openide.util.NbBundle; +import org.openide.util.Task; +import org.openide.util.TaskListener; import org.openide.util.Utilities; /** @@ -138,6 +153,7 @@ for (FileObject fo : fos) { if (fo.isData() && "wsmode".equals(fo.getExt())) { //NOI18N col.add(fo.getName()); + data.existingMode(fo.getName()); } } modes = col.toArray(new String[col.size()]); @@ -224,6 +240,7 @@ cbUndockingNotAllowed = new javax.swing.JCheckBox(); cbDraggingNotAllowed = new javax.swing.JCheckBox(); cbMaximizationNotAllowed = new javax.swing.JCheckBox(); + redefine = new javax.swing.JButton(); setLayout(new java.awt.GridBagLayout()); @@ -320,6 +337,17 @@ gridBagConstraints.weighty = 0.1; gridBagConstraints.insets = new java.awt.Insets(12, 6, 0, 0); add(cbMaximizationNotAllowed, gridBagConstraints); + + org.openide.awt.Mnemonics.setLocalizedText(redefine, "&Redefine..."); + redefine.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + redefineActionPerformed(evt); + } + }); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.anchor = java.awt.GridBagConstraints.PAGE_END; + gridBagConstraints.insets = new java.awt.Insets(0, 0, 0, 12); + add(redefine, gridBagConstraints); }// //GEN-END:initComponents private void windowPosChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_windowPosChanged @@ -330,6 +358,74 @@ if( !cbSlidingNotAllowed.isEnabled() ) cbSlidingNotAllowed.setSelected( false ); }//GEN-LAST:event_windowPosChanged + + private static FileObject findBuildXml(Project project) { + return project.getProjectDirectory().getFileObject(GeneratedFilesHelper.BUILD_XML_PATH); + } + +private void redefineActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_redefineActionPerformed + final Project prj = data.getProject(); + final Properties p = new Properties(); + redefine.setEnabled(false); + redefine.setText("Launching..."); + + try { + FileObject fo = prj.getProjectDirectory().getFileObject("build/designdir"); + if (fo != null) { + return; + } + fo = FileUtil.createFolder(prj.getProjectDirectory(), "build/designdir"); + final FileObject finalFO = fo; + File path = FileUtil.toFile(fo); + p.setProperty("run.args", "--nosplash --designlayout --userdir " + path); + + ExecutorTask task = ActionUtils.runTarget(findBuildXml(prj), new String[] { "run" }, p); + class PostProcess implements TaskListener, Runnable { + Set modeNames; + + @Override + public void taskFinished(Task task) { + FileObject modes = finalFO.getFileObject("config/Windows2Local/Modes"); + if (modes != null) { + modeNames = new TreeSet(); + for (FileObject m : modes.getChildren()) { + if (m.isData() && "wsmode".equals(m.getExt())) { //NOI18N + modeNames.add(m.getName()); + try { + data.defineMode(m.getName(), m.asText()); + } catch (IOException ex) { + Exceptions.printStackTrace(ex); + } + } + } + EventQueue.invokeLater(this); + } + } + + @Override + public void run() { + redefine.setEnabled(true); + redefine.setText("Redefine..."); + int s = comMode.getModel().getSize(); + for (int i = 0; i < s; i++) { + modeNames.remove((String)comMode.getModel().getElementAt(i)); + } + boolean first = true; + for (String mn : modeNames) { + ((DefaultComboBoxModel)comMode.getModel()).addElement(mn); + if (first) { + comMode.getModel().setSelectedItem(mn); + } + first = false; + } + } + } + task.addTaskListener(new PostProcess()); + } catch (IOException e) { + Util.err.notify(e); + } + +}//GEN-LAST:event_redefineActionPerformed // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JCheckBox cbClosingNotAllowed; @@ -341,6 +437,7 @@ private javax.swing.JCheckBox cbUndockingNotAllowed; private javax.swing.JComboBox comMode; private javax.swing.JLabel lblMode; + private javax.swing.JButton redefine; // End of variables declaration//GEN-END:variables private void initAccessibility() { diff -r ba198baeb89c apisupport.project/src/org/netbeans/modules/apisupport/project/ui/wizard/winsys/NewTCIterator.java --- a/apisupport.project/src/org/netbeans/modules/apisupport/project/ui/wizard/winsys/NewTCIterator.java Wed May 04 08:56:05 2011 +0200 +++ b/apisupport.project/src/org/netbeans/modules/apisupport/project/ui/wizard/winsys/NewTCIterator.java Wed May 04 19:38:20 2011 +0200 @@ -46,10 +46,14 @@ import java.io.File; import java.io.IOException; +import java.io.OutputStream; import java.util.Collections; import java.util.HashMap; +import java.util.HashSet; import java.util.Map; import java.util.Set; +import java.util.TreeMap; +import java.util.TreeSet; import java.util.logging.Level; import java.util.logging.Logger; import org.netbeans.api.project.Project; @@ -111,6 +115,8 @@ private boolean draggingNotAllowed = false; private boolean undockingNotAllowed = false; private boolean maximizationNotAllowed = false; + private Map newModes; + private Set existingModes; private CreatedModifiedFiles files; @@ -153,6 +159,28 @@ public String getMode() { return mode; } + + public void defineMode(String name, String definition) { + if (newModes == null) { + newModes = new TreeMap(); + } + newModes.put(name, definition); + } + void existingMode(String name) { + if (existingModes == null) { + existingModes = new TreeSet(); + } + existingModes.add(name); + } + + Map getNewModes() { + if (newModes == null) { + return null; + } + TreeMap copy = new TreeMap(newModes); + copy.keySet().removeAll(existingModes); + return copy.isEmpty() ? null : copy; + } public void setMode(String mode) { this.mode = mode; @@ -215,7 +243,7 @@ } } - public static void generateFileChanges(DataModel model) { + public static void generateFileChanges(final DataModel model) { CreatedModifiedFiles fileChanges = new CreatedModifiedFiles(model.getProject()); Project project = model.getProject(); NbModuleProvider moduleInfo = model.getModuleInfo(); @@ -377,6 +405,30 @@ fileChanges.add(fileChanges.bundleKey(bundlePath, "HINT_" + name + "TopComponent", // NOI18N "This is a " + name + " window")); //NOI18N + final Map newModes = model.getNewModes(); + if (newModes != null) { + Set files = new HashSet(); + for (String wsmode : newModes.keySet()) { + files.add(wsmode + ".wsmode"); + } + + fileChanges.add(fileChanges.layerModifications(new CreatedModifiedFiles.LayerOperation() { + @Override + public void run(FileSystem layer) throws IOException { + FileObject fo = FileUtil.createFolder(layer.getRoot(), "Windows2/Modes"); + for (Map.Entry entry : newModes.entrySet()) { + FileObject wsmode = fo.createData(entry.getKey() + ".wsmode"); + OutputStream os = wsmode.getOutputStream(); + try { + os.write(entry.getValue().getBytes("UTF-8")); + } finally { + os.close(); + } + } + } + }, files)); + } + model.setCreatedModifiedFiles(fileChanges); }