Nexuiz demo recorder: bump to v0.3
authorgreenmarine <greenmarine@f962a42d-fe04-0410-a3ab-8c8b0445ebaa>
Sat, 20 Feb 2010 22:26:30 +0000 (22:26 +0000)
committergreenmarine <greenmarine@f962a42d-fe04-0410-a3ab-8c8b0445ebaa>
Sat, 20 Feb 2010 22:26:30 +0000 (22:26 +0000)
- New feature: apply properties selectively from template to jobs

git-svn-id: svn://svn.icculus.org/nexuiz/trunk@8655 f962a42d-fe04-0410-a3ab-8c8b0445ebaa

16 files changed:
misc/tools/NexuizDemoRecorder/main/pom.xml
misc/tools/NexuizDemoRecorder/main/src/main/java/com/nexuiz/demorecorder/application/jobs/RecordJob.java
misc/tools/NexuizDemoRecorder/main/src/main/java/com/nexuiz/demorecorder/ui/swinggui/ApplyTemplateDialog.java [new file with mode: 0644]
misc/tools/NexuizDemoRecorder/main/src/main/java/com/nexuiz/demorecorder/ui/swinggui/SwingGUI.java
misc/tools/NexuizDemoRecorder/main/src/main/resources/about.html
misc/tools/NexuizDemoRecorder/main/src/main/resources/help/DemoRecorderHelpTOC.xml
misc/tools/NexuizDemoRecorder/main/src/main/resources/help/JavaHelpSearch/DOCS
misc/tools/NexuizDemoRecorder/main/src/main/resources/help/JavaHelpSearch/DOCS.TAB
misc/tools/NexuizDemoRecorder/main/src/main/resources/help/JavaHelpSearch/OFFSETS
misc/tools/NexuizDemoRecorder/main/src/main/resources/help/JavaHelpSearch/POSITIONS
misc/tools/NexuizDemoRecorder/main/src/main/resources/help/JavaHelpSearch/SCHEMA
misc/tools/NexuizDemoRecorder/main/src/main/resources/help/JavaHelpSearch/TMAP
misc/tools/NexuizDemoRecorder/main/src/main/resources/help/Map.jhm
misc/tools/NexuizDemoRecorder/main/src/main/resources/help/html/apply_templates.html [new file with mode: 0644]
misc/tools/NexuizDemoRecorder/main/src/main/resources/help/html/changelog.html
misc/tools/NexuizDemoRecorder/main/src/main/resources/icons/editpaste.png [new file with mode: 0644]

index e5a6988..0390194 100644 (file)
@@ -4,7 +4,7 @@
        <groupId>NexuizDemoRecorder</groupId>
        <artifactId>NexuizDemoRecorder</artifactId>
        <packaging>jar</packaging>
-       <version>0.3-SNAPSHOT</version>
+       <version>0.3</version>
        <name>NexuizDemoRecorder</name>
        <url>http://maven.apache.org</url>
        <dependencies>
index 429ff98..32f6631 100644 (file)
@@ -417,9 +417,12 @@ public class RecordJob implements Runnable, Serializable {
 \r
        public void setDemoFile(File demoFile) {\r
                this.checkForProcessingState();\r
-               if (demoFile == null || !demoFile.exists()) {\r
+               if (demoFile == null) {\r
                        throw new DemoRecorderException("Could not locate demo file!");\r
                }\r
+               if (!demoFile.exists()) {\r
+                       throw new DemoRecorderException("Could not locate demo file!: " + demoFile.getAbsolutePath());\r
+               }\r
                if (!doReadWriteTest(demoFile.getParentFile())) {\r
                        throw new DemoRecorderException("The directory you specified for the demo to be recorded is not writable!");\r
                }\r
diff --git a/misc/tools/NexuizDemoRecorder/main/src/main/java/com/nexuiz/demorecorder/ui/swinggui/ApplyTemplateDialog.java b/misc/tools/NexuizDemoRecorder/main/src/main/java/com/nexuiz/demorecorder/ui/swinggui/ApplyTemplateDialog.java
new file mode 100644 (file)
index 0000000..84b2c29
--- /dev/null
@@ -0,0 +1,175 @@
+package com.nexuiz.demorecorder.ui.swinggui;\r
+\r
+import java.awt.Frame;\r
+import java.awt.event.ActionEvent;\r
+import java.awt.event.ActionListener;\r
+import java.awt.event.ItemEvent;\r
+import java.awt.event.ItemListener;\r
+import java.io.File;\r
+import java.util.List;\r
+\r
+import javax.swing.JButton;\r
+import javax.swing.JCheckBox;\r
+import javax.swing.JDialog;\r
+import javax.swing.JLabel;\r
+import javax.swing.JOptionPane;\r
+\r
+import net.miginfocom.swing.MigLayout;\r
+\r
+import com.nexuiz.demorecorder.application.DemoRecorderUtils;\r
+import com.nexuiz.demorecorder.application.jobs.RecordJob;\r
+\r
+public class ApplyTemplateDialog extends JDialog implements ActionListener, ItemListener {\r
+\r
+       private static final long serialVersionUID = 4807155579295688578L;\r
+       private Frame parentFrame;\r
+       private RecordJobTemplate template;\r
+       private List<RecordJob> jobs;\r
+       \r
+       private JCheckBox engineCB = new JCheckBox("Engine", true);\r
+       private JCheckBox engineParametersCB = new JCheckBox("Engine parameters", true);\r
+       private JCheckBox dpVideoDirCB = new JCheckBox("DPVideo directory", true);\r
+       private JCheckBox relativeDemoPathCB = new JCheckBox("Relative demo path", true);\r
+       private JCheckBox jobNameCB = new JCheckBox("Job name", true);\r
+       private JCheckBox demoDirectoryCB = new JCheckBox("Demo directory", true);\r
+       private JCheckBox execBeforeCapCB = new JCheckBox("Exec before capture", true);\r
+       private JCheckBox execAfterCB = new JCheckBox("Exec after capture", true);\r
+       private JCheckBox videoDestination = new JCheckBox("Video destination", true);\r
+       private JCheckBox pluginSettingsCB = new JCheckBox("Plug-in settings", true);\r
+       private JCheckBox selectAllCB = new JCheckBox("Select/deselect all", true);\r
+       \r
+       private JButton applyButton = new JButton("Apply");\r
+       private JButton cancelButton = new JButton("Cancel");\r
+       \r
+       public ApplyTemplateDialog(Frame owner, RecordJobTemplate template, List<RecordJob> jobs) {\r
+               super(owner, true);\r
+               this.parentFrame = owner;\r
+               this.template = template;\r
+               this.jobs = jobs;\r
+               \r
+               setDefaultCloseOperation(DISPOSE_ON_CLOSE);\r
+               setTitle("Apply template");\r
+               this.setupLayout();\r
+       }\r
+       \r
+       public void showDialog() {\r
+               this.pack();\r
+               this.setLocationRelativeTo(this.parentFrame);\r
+               this.setVisible(true);\r
+       }\r
+\r
+       private void setupLayout() {\r
+               setLayout(new MigLayout());\r
+               getContentPane().add(new JLabel("Select which properties you want to apply to the selected jobs"), "wrap");\r
+               \r
+               this.setupCheckBoxes();\r
+               \r
+               applyButton.addActionListener(this);\r
+               cancelButton.addActionListener(this);\r
+               getContentPane().add(applyButton);\r
+               getContentPane().add(cancelButton);\r
+       }\r
+       \r
+       private void setupCheckBoxes() {\r
+               getContentPane().add(engineCB, "wrap");\r
+               getContentPane().add(engineParametersCB, "wrap");\r
+               getContentPane().add(dpVideoDirCB, "wrap");\r
+               getContentPane().add(relativeDemoPathCB, "wrap");\r
+               getContentPane().add(jobNameCB, "wrap");\r
+               getContentPane().add(demoDirectoryCB, "wrap");\r
+               getContentPane().add(execBeforeCapCB, "wrap");\r
+               getContentPane().add(execAfterCB, "wrap");\r
+               getContentPane().add(videoDestination, "wrap");\r
+               getContentPane().add(pluginSettingsCB, "wrap");\r
+               getContentPane().add(selectAllCB, "wrap");\r
+               \r
+               selectAllCB.addItemListener(this);\r
+       }\r
+\r
+       @Override\r
+       public void actionPerformed(ActionEvent e) {\r
+               if (e.getSource() == applyButton) {\r
+                       this.applyTemplates();\r
+                       dispose();\r
+               } else if (e.getSource() == cancelButton) {\r
+                       dispose();\r
+               }\r
+       }\r
+       \r
+       private void applyTemplates() {\r
+               String errors = "";\r
+               for (RecordJob job : this.jobs) {\r
+                       try {\r
+                               this.applyTemplate(job);\r
+                       } catch (Throwable e) {\r
+                               errors += "Job <B>" + job.getJobName() + "</B>: " + e.getMessage() + "<BR>";\r
+                       }\r
+               }\r
+               \r
+               if (!errors.equals("")) {\r
+                       //error occurred!\r
+                       String errorMsg = "<HTML><BODY>Error occurred while trying to apply templates:<BR><BR>" + errors + "</BODY></HTML>";\r
+                       JOptionPane.showMessageDialog(this.parentFrame, errorMsg, "Error(s) while applying template", JOptionPane.INFORMATION_MESSAGE);\r
+               }\r
+       }\r
+       \r
+       private void applyTemplate(RecordJob job) {\r
+               if (engineCB.isSelected()) {\r
+                       job.setEnginePath(template.getEnginePath());\r
+               }\r
+               if (engineParametersCB.isSelected()) {\r
+                       job.setEngineParameters(template.getEngineParameters());\r
+               }\r
+               if (dpVideoDirCB.isSelected()) {\r
+                       job.setDpVideoPath(template.getDpVideoPath());\r
+               }\r
+               if (relativeDemoPathCB.isSelected()) {\r
+                       job.setRelativeDemoPath(template.getRelativeDemoPath());\r
+               }\r
+               if (jobNameCB.isSelected()) {\r
+                       job.setJobName(template.getJobName());\r
+               }\r
+               if (demoDirectoryCB.isSelected()) {\r
+                       File demoDir = template.getDemoFile();\r
+                       String demoFileName = DemoRecorderUtils.getJustFileNameOfPath(job.getDemoFile());\r
+                       String newDemoPath = demoDir.getAbsolutePath() + File.separator + demoFileName;\r
+                       job.setDemoFile(new File(newDemoPath));\r
+               }\r
+               if (execBeforeCapCB.isEnabled()) {\r
+                       job.setExecuteBeforeCap(template.getExecuteBeforeCap());\r
+               }\r
+               if (execAfterCB.isSelected()) {\r
+                       job.setExecuteAfterCap(template.getExecuteAfterCap());\r
+               }\r
+               if (videoDestination.isSelected()) {\r
+                       File videoDestinatinDir = template.getVideoDestination();\r
+                       String videoFileName = DemoRecorderUtils.getJustFileNameOfPath(job.getVideoDestination());\r
+                       String newVideoPath = videoDestinatinDir.getAbsolutePath() + File.separator + videoFileName;\r
+                       job.setVideoDestination(new File(newVideoPath));\r
+               }\r
+               if (pluginSettingsCB.isSelected()) {\r
+                       job.setEncoderPluginSettings(template.getEncoderPluginSettings());\r
+               }\r
+       }\r
+\r
+       @Override\r
+       public void itemStateChanged(ItemEvent e) {\r
+               if (e.getSource() == selectAllCB) {\r
+                       boolean selected = false;\r
+                       if (e.getStateChange() == ItemEvent.SELECTED) {\r
+                               selected = true;\r
+                       }\r
+                       \r
+                       engineCB.setSelected(selected);\r
+                       engineParametersCB.setSelected(selected);\r
+                       dpVideoDirCB.setSelected(selected);\r
+                       relativeDemoPathCB.setSelected(selected);\r
+                       jobNameCB.setSelected(selected);\r
+                       demoDirectoryCB.setSelected(selected);\r
+                       execBeforeCapCB.setSelected(selected);\r
+                       execAfterCB.setSelected(selected);\r
+                       videoDestination.setSelected(selected);\r
+                       pluginSettingsCB.setSelected(selected);\r
+               }\r
+       }\r
+}\r
index 6778794..7b1d8cc 100644 (file)
@@ -85,6 +85,7 @@ public class SwingGUI extends JFrame implements WindowListener, DemoRecorderUI {
        private static final String LABEL_JOB_CLEAR = "Clear";\r
        private static final String LABEL_JOB_EDIT = "Edit job";\r
        private static final String LABEL_JOB_DUPLICATE = "Duplicate job";\r
+       private static final String LABEL_JOB_APPLYTEMPL = "Apply template";\r
        private static final String LABEL_JOB_START = "Start job";\r
        private static final String LABEL_JOB_SHOWERROR = "Show error message";\r
        private static final String LABEL_JOB_RESET_STATE_WAITING = "Reset job status to 'waiting'";\r
@@ -115,6 +116,7 @@ public class SwingGUI extends JFrame implements WindowListener, DemoRecorderUI {
        private JButton jobs_clear = new JButton(LABEL_JOB_CLEAR, getIcon("editclear.png"));\r
        private JMenuItem jobs_contextmenu_edit = new JMenuItem(LABEL_JOB_EDIT, getIcon("edit.png"));\r
        private JMenuItem jobs_contextmenu_duplicate = new JMenuItem(LABEL_JOB_DUPLICATE, getIcon("editcopy.png"));\r
+       private JMenuItem jobs_contextmenu_applytempl = new JMenuItem(LABEL_JOB_APPLYTEMPL, getIcon("editpaste.png"));\r
        private JMenuItem jobs_contextmenu_delete = new JMenuItem(LABEL_JOB_DELETE, getIcon("editdelete.png"));\r
        private JMenuItem jobs_contextmenu_start = new JMenuItem(LABEL_JOB_START, getIcon("player_play.png"));\r
        private JMenuItem jobs_contextmenu_showerror = new JMenuItem(LABEL_JOB_SHOWERROR, getIcon("status_unknown.png"));\r
@@ -142,7 +144,7 @@ public class SwingGUI extends JFrame implements WindowListener, DemoRecorderUI {
        private static final String mainHelpSetName = "help/DemoRecorderHelp.hs";\r
 \r
        public SwingGUI(DemoRecorderApplication appLayer) {\r
-               super("Nexuiz Demo Recorder v0.2");\r
+               super("Nexuiz Demo Recorder v0.3");\r
                addWindowListener(this);\r
 \r
                this.appLayer = appLayer;\r
@@ -237,6 +239,7 @@ public class SwingGUI extends JFrame implements WindowListener, DemoRecorderUI {
                \r
                this.jobs_contextmenu_edit.addActionListener(this.jobButtonActionListener);\r
                this.jobs_contextmenu_duplicate.addActionListener(this.jobButtonActionListener);\r
+               this.jobs_contextmenu_applytempl.addActionListener(this.jobButtonActionListener);\r
                this.jobs_contextmenu_delete.addActionListener(this.jobButtonActionListener);\r
                this.jobs_contextmenu_start.addActionListener(this.jobButtonActionListener);\r
                this.jobs_contextmenu_showerror.addActionListener(this.jobButtonActionListener);\r
@@ -345,6 +348,7 @@ public class SwingGUI extends JFrame implements WindowListener, DemoRecorderUI {
                this.jobsTablePopupMenu = new JPopupMenu();\r
                this.jobsTablePopupMenu.add(jobs_contextmenu_edit);\r
                this.jobsTablePopupMenu.add(jobs_contextmenu_duplicate);\r
+               this.jobsTablePopupMenu.add(jobs_contextmenu_applytempl);\r
                this.jobsTablePopupMenu.add(jobs_contextmenu_delete);\r
                this.jobsTablePopupMenu.add(jobs_contextmenu_start);\r
                //add JMenus for plugins\r
@@ -598,6 +602,12 @@ public class SwingGUI extends JFrame implements WindowListener, DemoRecorderUI {
                                        jobsTable.setRowSelectionInterval(jobsTable.getRowCount() - selectedJobs.size(), jobsTable.getRowCount() - 1);\r
                                        configureTableButtons();\r
                                }\r
+                       } else if (e.getSource() == jobs_contextmenu_applytempl) {\r
+                               if (selectedTemplates.size() == 1 && selectedJobs.size() > 0) {\r
+                                       RecordJobTemplate template = (RecordJobTemplate) selectedTemplates.get(0);\r
+                                       ApplyTemplateDialog applyDialog = new ApplyTemplateDialog(SwingGUI.this, template, selectedJobs);\r
+                                       applyDialog.showDialog();\r
+                               }\r
                        } else if (jobs_contextmenu_runPluginMenuItems.contains(e.getSource())) {\r
                                int index = jobs_contextmenu_runPluginMenuItems.indexOf(e.getSource());\r
                                EncoderPlugin selectedPlugin = appLayer.getEncoderPlugins().get(index);\r
@@ -946,6 +956,7 @@ public class SwingGUI extends JFrame implements WindowListener, DemoRecorderUI {
                        //Disable all buttons first\r
                        jobs_contextmenu_edit.setEnabled(false);\r
                        jobs_contextmenu_duplicate.setEnabled(false);\r
+                       jobs_contextmenu_applytempl.setEnabled(false);\r
                        jobs_contextmenu_delete.setEnabled(false);\r
                        jobs_contextmenu_resetstate_waiting.setEnabled(false);\r
                        jobs_contextmenu_resetstate_done.setEnabled(false);\r
@@ -975,9 +986,10 @@ public class SwingGUI extends JFrame implements WindowListener, DemoRecorderUI {
                                        //none of the jobs is processing\r
                                        jobs_contextmenu_delete.setEnabled(true);\r
                                        jobs_contextmenu_resetstate_waiting.setEnabled(true);\r
-                               } else {\r
-                                       jobs_contextmenu_edit.setEnabled(false);\r
-                                       jobs_contextmenu_duplicate.setEnabled(false);\r
+                                       \r
+                                       if (templatesTable.getSelectedRowCount() == 1) {\r
+                                               jobs_contextmenu_applytempl.setEnabled(true);\r
+                                       }\r
                                }\r
                                \r
                                //Start button\r
index 1672934..c831190 100644 (file)
@@ -1,5 +1,5 @@
 <html>\r
-    <h1>Nexuiz Demo Recorder v0.2</h1>\r
+    <h1>Nexuiz Demo Recorder v0.3</h1>\r
     Written by GreEn`mArine<br>\r
     <h2>Credits</h2>\r
     <ul>\r
index 2e12b8d..d2581f4 100644 (file)
@@ -8,6 +8,8 @@
 \r
  <tocitem text="Templates " target="html.templates"/>\r
 \r
+ <tocitem text="Applying templates " target="html.apply_templates"/>\r
+\r
  <tocitem text="Open/Save Jobs and Templates " target="html.open-save"/>\r
 \r
  <tocitem text="Preferences dialog " target="html.preferences"/>\r
index 4a370ac..93cdf67 100644 (file)
Binary files a/misc/tools/NexuizDemoRecorder/main/src/main/resources/help/JavaHelpSearch/DOCS and b/misc/tools/NexuizDemoRecorder/main/src/main/resources/help/JavaHelpSearch/DOCS differ
index b612798..a84787b 100644 (file)
@@ -1,14 +1,12 @@
-\ 1eÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÝ\7fÿÿÿÿÿ÷_÷_ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÝ\7fÿÿÿÿÿÿÿÝ\7fÿÿÿÿÿÿÿuÿÿuÿÿÿÿÿÿÿÿ÷_ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿuÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÝ\7fÿÿÿÿý×ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷_ÿÿÿuÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿý×ÿÿÿÿÿÿÿÿ÷_ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@\ 17û*ÌebøÖBìå(â\8d¦Ob³J6,Ù©
-³vRꯪ\8c/\8eX³r\8d\8b1\8b3,Ï\8bª8³J4³\8a6/4³<£J8¨Ò¨â¯3þ*0³K¬É\8b£J³\8a4º¾\8c+\8cÿ\8b4³h£"\8d(Ì£J4®º\8d+9\vªÌê/\8c.»Ì/\8c\8b\8c*7¢\8c.9"\8d*6Ë0¿üÈ£(£Jî£
-Ì*4£;*1¤,⮣K0£
-0³"£\18ºþ¨ÞʸÒó\v6ªÊ»³\v2(ªªªªªºªª®0¸Â£
-£"º®3â\8c*͸ª£
-4®4£Kªº0ª¨Â¨Ê(ȳ
-ºªª®þÌ.¯®0£
-0º2¢ºªìª³
-Ì*0¾0³:.\8c\8a6(Ê(È£"\8c+þêº\8c*2.몣
-ªªº0ªªº2.£
-0ªª³
-0ª£
+\ 1eÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÝ\7fÿÿÿÿÿ÷_÷_ÿÿÿÿÿÿÿuÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷_ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÝ\7fÿÿÿÿÿuÿÿuÿÿÿÿÿÿÿÿ÷_ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷_ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÝ\7fÿÿÿÿÿÿÿuÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿý×ÿÿÿÝ\7fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿuÿÿÿÿÿÿÿý×ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÐ\ 17û*2erøÖBìõ(â\8d¦Or³J6,Ùù
\1a\8bª¾ª0¾9bÎR\8d(ÆË1\8b3,Í\96\8b\8b<£bÌË3b\8d(ò£J£\8a¼ßè¨ÂÍ.³'/\8d*Ï(Òêú0£
+3öBÍ,Ú(Ø£J3(â\8d+£J3²£=\92,⮣\8b
+9
+ºÍ+0º¬Î¢øÂë¼ÂøÂãJ\8eZ(Âã\96*\8eFBÿó"\8c¢\8d\8c+®èÂó\v4¸Ì¿2*0£\8a0¸Ò\8cèº0¾4£
+£2Î*ÎB¨Ò¬Âªª\8c\8d/0³
+øÂëê®4¼Âͪ*îÌ,È£
+ªªªªªêªª»\8c*¨È®¨Â\8câ«6âª\8c*ãJ4º«£
\8c*\8c\8a2,ªªª»û0º¾¸Â\8c(ÂèÊ\8a꫺«0¬Â£\v³2èÂ\8c(Ê¢\8c\8a0¯ûªª0³\v\8c\8bê0£"몣
+ªªºªªèȺ\8c(ªªÌ(ª\8c*ªª\8c*£(³
 ªª£
\8c¢Ì*ª\8c*0ª«ªê«\8c*0ªÌ,ÂÿÌ,ÂÌ,ÂÿÿÌ/0¿ÿÿÿÿÿÿÌ/ó\v0³"Ì/ÿüÂÿÿÌ,È¿ÿüÂÿÌ/ÿ0¿Ì/þ«ªªªªªêªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªª¦
\ No newline at end of file
ªê«\8c*0ªÌ,ÂÿÌ,Âó\vÿüÂó\vÿÿÿÿÿÿüÂÿ0³"Ì/ÿüÂÿÿÌ,È¿ÿÿüÂÿ0¿Ì/þªªªªªªª¯ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿö
\ No newline at end of file
index bdbbc97..1d01078 100644 (file)
Binary files a/misc/tools/NexuizDemoRecorder/main/src/main/resources/help/JavaHelpSearch/OFFSETS and b/misc/tools/NexuizDemoRecorder/main/src/main/resources/help/JavaHelpSearch/OFFSETS differ
index 2d259c8..8353f0d 100644 (file)
Binary files a/misc/tools/NexuizDemoRecorder/main/src/main/resources/help/JavaHelpSearch/POSITIONS and b/misc/tools/NexuizDemoRecorder/main/src/main/resources/help/JavaHelpSearch/POSITIONS differ
index d004b62..fce491e 100644 (file)
Binary files a/misc/tools/NexuizDemoRecorder/main/src/main/resources/help/JavaHelpSearch/TMAP and b/misc/tools/NexuizDemoRecorder/main/src/main/resources/help/JavaHelpSearch/TMAP differ
index 9d004f1..eba21ca 100644 (file)
 
 <mapID target="html.license" url="html/license.html"/>
 
+<mapID target="html.open-save" url="html/open-save.html"/>
+
 <mapID target="html.compat-limitations" url="html/compat-limitations.html"/>
 
-<mapID target="html.open-save" url="html/open-save.html"/>
+<mapID target="html.apply_templates" url="html/apply_templates.html"/>
 
 <mapID target="html.introduction" url="html/introduction.html"/>
 
diff --git a/misc/tools/NexuizDemoRecorder/main/src/main/resources/help/html/apply_templates.html b/misc/tools/NexuizDemoRecorder/main/src/main/resources/help/html/apply_templates.html
new file mode 100644 (file)
index 0000000..660e364
--- /dev/null
@@ -0,0 +1,77 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">\r
+\r
+<html>\r
+  <head>\r
+    <meta name="generator" content="HTML Tidy, see www.w3.org">\r
+\r
+    <title></title>\r
+  </head>\r
+\r
+  <body>\r
+<H1>Applying templates</H1>\r
+<P>Since version 0.3 you are able to\r
+selectively apply settings from a template of your choice to any job\r
+you like. One reason might be that you want jobs that have already\r
+been recorded to be recorded using different config settings (e.g.\r
+other quality settings, resolution, etc.). If you wanted to do this\r
+for many jobs at once, it would be very tedious to edit each job\r
+manually, setting up changes.</P>\r
+<P>You can apply properties of templates\r
+very easily:</P>\r
+<UL>\r
+       <LI><P>Select the template you want to\r
+       use</P>\r
+       <LI><P>Select the job(s) whose\r
+       properties you want to be affected by the template</P>\r
+       <LI><P>Right-click inside the jobs\r
+       table and select &ldquo;Apply template&rdquo;</P>\r
+       <LI><P>A new dialog will open where you\r
+       will be able to select which one of the settings should be copied\r
+       from the template to the job. Please, be aware that old settings of\r
+       the job will be overwritten!</P>\r
+       <LI><P>Usually the settings will be\r
+       copied 1:1 from the template to the job. <B>There are 2 exceptions,\r
+       though</B>:</P>\r
+       <UL>\r
+               <LI><P><B>Demo directory:</B> Here\r
+               copying the value from the template to the job would not make\r
+               sense, because in a template you actually specified a <B>directory</B>,\r
+               <U>not</U> a <B>file</B>. However, a job needs to point at a <B>file</B>.\r
+               What will happen shall be demonstrated by the following example:\r
+               Let's say that the job's path to the demo file (before applying the\r
+               template) has been <B>C:\Nexuiz\data\demos\mydemo.dem</B>\r
+               and the path setup in the template has been pointing to the\r
+               directory<B> C:\Games\Nexuiz2.5.2\data\demos</B>.\r
+               The new demo file path, after the &ldquo;apply&rdquo; process is\r
+               done, would be <B>C:\Games\Nexuiz2.5.2\data\demos\mydemo.dem</B>;\r
+               this means that from the <B>job's</B>\r
+               demo path the program will just take the name of the demo by itself\r
+               (mydemo.dem), and put the path from the <B>template</B>\r
+               in front of it</P>\r
+               <LI><P><b>Video\r
+               destination:</b> Here the same thing happens like for the Demo\r
+               directory. The new video destination will be &lt;Directory set up\r
+               in the template&gt; + &lt;just the filename of the setting of the\r
+               job&gt;</P>\r
+       </UL>\r
+</UL>\r
+<P>Another example of how this feature could be useful is this one: Suppose some\r
+movie maker was to create a community movie with frags from different\r
+people, or a movie maker was to continue or finish a movie from\r
+someone else. If one person creates a queue of jobs (which naturally\r
+includes the demo's names, start second and end second) and then\r
+decides not to record the frags herself but send it to some other\r
+movie maker, all that needs to be done is to save the job queue and\r
+send it to the other movie maker, together with the demos. The other\r
+movie maker can then copy the demos into his own demo directory and\r
+import the job queue. Of course the problem would then be that all\r
+these imported jobs could not really be executed right away, because\r
+all these paths might be incorrect, I mean, would simply not exist or\r
+match to the system of the movie maker who wants to record the jobs\r
+(e.g. path to Nexuiz engine or demo directory). But this can easily\r
+be fixed. The movie maker just needs to select the imported jobs and\r
+apply one of her own templates to them, and by doing so, fix all\r
+incorrect paths.</P>\r
+  </body>\r
+</html>\r
+\r
index f49cf04..f15c319 100644 (file)
@@ -19,6 +19,8 @@
        <LI><P>Open dialogs for jobs or templates allow you to select whether to overwrite\r
        the current list/queue or not (if not, the loaded items will be added to the\r
        current list/queue)</P>\r
+       <LI><P>New feature: <a href="apply_templates.html">Applying properties of a template </a>\r
+       selectively to one or more selected jobs</P>\r
 </UL>\r
 \r
 \r
diff --git a/misc/tools/NexuizDemoRecorder/main/src/main/resources/icons/editpaste.png b/misc/tools/NexuizDemoRecorder/main/src/main/resources/icons/editpaste.png
new file mode 100644 (file)
index 0000000..f9156c1
Binary files /dev/null and b/misc/tools/NexuizDemoRecorder/main/src/main/resources/icons/editpaste.png differ