예제 #1
0
        private PropertyPage CreatePropertyPage(PropertyPage page, ExportFormat format)
        {
            var songNames = GetSongNames();

            switch (format)
            {
            case ExportFormat.WavMp3:
                page.AddDropDownList("Song :", songNames, songNames[0]);                                             // 0
                page.AddDropDownList("Format :", AudioFormatType.Names, AudioFormatType.Names[0]);                   // 1
                page.AddDropDownList("Sample Rate :", new[] { "11025", "22050", "44100", "48000" }, "44100");        // 2
                page.AddDropDownList("Bit Rate :", new[] { "96", "112", "128", "160", "192", "224", "256" }, "128"); // 3
                page.AddDropDownList("Mode :", new[] { "Loop N times", "Duration" }, "Loop N times");                // 4
                page.AddNumericUpDown("Loop count:", 1, 1, 10);                                                      // 5
                page.AddNumericUpDown("Duration (sec):", 120, 1, 1000);                                              // 6
                page.AddCheckBox("Separate channel files", false);                                                   // 7
                page.AddCheckBox("Separate intro file", false);                                                      // 8
                page.AddCheckBox("Stereo", false);                                                                   // 9
                if (PlatformUtils.IsDesktop)
                {
                    page.AddMultiColumnList(new[] { new ColumnDesc("", 0.0f, ColumnType.CheckBox), new ColumnDesc("Channel", 0.4f), new ColumnDesc("Pan (% L/R)", 0.6f, ColumnType.Slider, "{0} %") }, GetDefaultChannelsGridData(), 200);     // 10
                }
                else
                {
                    page.AddCheckBoxList("Channels", GetChannelNames(), GetDefaultActiveChannels());     // 10
                }
                page.SetPropertyEnabled(3, false);
                page.SetPropertyEnabled(6, false);
                page.SetPropertyVisible(7, PlatformUtils.IsDesktop);     // No separate files on mobile.
                page.SetPropertyVisible(8, PlatformUtils.IsDesktop);     // No separate files on mobile.
                page.SetPropertyVisible(9, PlatformUtils.IsDesktop);     // No stereo on mobile.
                page.SetColumnEnabled(10, 2, false);
                page.PropertyChanged += WavMp3_PropertyChanged;
                page.PropertyClicked += WavMp3_PropertyClicked;
                break;

            case ExportFormat.VideoPianoRoll:
                if (AddCommonVideoProperties(page, songNames))                                                                                                                                                                                // 0-5
                {
                    page.AddDropDownList("Piano Roll Zoom :", new[] { "12.5%", "25%", "50%", "100%", "200%", "400%", "800%" }, project.UsesFamiTrackerTempo ? "100%" : "25%", "Higher zoom values scrolls faster and shows less far ahead."); // 6
                    page.AddCheckBox("Stereo", false);                                                                                                                                                                                        // 7
                    if (PlatformUtils.IsDesktop)
                    {
                        page.AddMultiColumnList(new[] { new ColumnDesc("", 0.0f, ColumnType.CheckBox), new ColumnDesc("Channel", 0.4f), new ColumnDesc("Pan (% L/R)", 0.6f, ColumnType.Slider, "{0} %") }, GetDefaultChannelsGridData(), 200);     // 8
                    }
                    else
                    {
                        page.AddCheckBoxList("Channels", GetChannelNames(), GetDefaultActiveChannels());     // 8
                    }
                    page.SetColumnEnabled(8, 2, false);
                    page.SetPropertyVisible(7, PlatformUtils.IsDesktop);     // Stereo on mobile.
                    page.PropertyChanged += VideoPage_PropertyChanged;
                }
                break;

            case ExportFormat.VideoOscilloscope:
                if (AddCommonVideoProperties(page, songNames))                                                                                                           // 0-5
                {
                    page.AddNumericUpDown("Oscilloscope Columns :", 1, 1, 5);                                                                                            // 6
                    page.AddNumericUpDown("Oscilloscope Thickness :", 1, 1, 4);                                                                                          // 7
                    page.AddDropDownList("Oscilloscope Color :", OscilloscopeColorType.Names, OscilloscopeColorType.Names[OscilloscopeColorType.InstrumentsAndSamples]); // 8
                    page.AddCheckBox("Stereo", false);                                                                                                                   // 9
                    if (PlatformUtils.IsDesktop)
                    {
                        page.AddMultiColumnList(new[] { new ColumnDesc("", 0.0f, ColumnType.CheckBox), new ColumnDesc("Channel", 0.4f), new ColumnDesc("Pan (% L/R)", 0.6f, ColumnType.Slider, "{0} %") }, GetDefaultChannelsGridData(), 200);     // 10
                    }
                    else
                    {
                        page.AddCheckBoxList("Channels", GetChannelNames(), GetDefaultActiveChannels());     // 10
                    }
                    page.SetColumnEnabled(10, 2, false);
                    page.SetPropertyVisible(9, PlatformUtils.IsDesktop);     // Stereo on mobile.
                    page.PropertyChanged += VideoPage_PropertyChanged;
                }
                break;

            case ExportFormat.Nsf:
                page.AddTextBox("Name :", project.Name, 31);                                                                                // 0
                page.AddTextBox("Artist :", project.Author, 31);                                                                            // 1
                page.AddTextBox("Copyright :", project.Copyright, 31);                                                                      // 2
                page.AddDropDownList("Mode :", MachineType.Names, MachineType.Names[project.PalMode ? MachineType.PAL : MachineType.NTSC]); // 3
                page.AddCheckBoxList(PlatformUtils.IsDesktop ? null : "Songs", songNames, null);                                            // 4
#if DEBUG
                page.AddDropDownList("Engine :", FamiToneKernel.Names, FamiToneKernel.Names[FamiToneKernel.FamiStudio]);                    // 5
#endif
                page.SetPropertyEnabled(3, !project.UsesAnyExpansionAudio);
                break;

            case ExportFormat.Rom:
                page.AddDropDownList("Type :", new[] { "NES ROM", "FDS Disk" }, project.UsesFdsExpansion ? "FDS Disk" : "NES ROM"); // 0
                page.AddTextBox("Name :", project.Name.Substring(0, Math.Min(28, project.Name.Length)), 28);                        // 1
                page.AddTextBox("Artist :", project.Author.Substring(0, Math.Min(28, project.Author.Length)), 28);                  // 2
                page.AddDropDownList("Mode :", new[] { "NTSC", "PAL" }, project.PalMode ? "PAL" : "NTSC");                          // 3
                page.AddCheckBoxList(PlatformUtils.IsDesktop ? null : "Songs", songNames, null);                                    // 4
                if (project.UsesAnyExpansionAudio)
                {
                    page.AddLabel(PlatformUtils.IsDesktop ? null : "Note", "ROM export does not support audio expansions. FDS disk export only supports the FDS expansion. Any incompatible expansion channel(s) will be ignored during the export.", true);
                }
                page.SetPropertyEnabled(0, project.UsesFdsExpansion);
                page.SetPropertyEnabled(3, !project.UsesAnyExpansionAudio);
                break;

            case ExportFormat.Midi:
                page.AddDropDownList("Song :", songNames, songNames[0]);                                                                         // 0
                page.AddCheckBox("Export volume as velocity :", true);                                                                           // 1
                page.AddCheckBox("Export slide notes as pitch wheel :", true);                                                                   // 2
                page.AddNumericUpDown("Pitch wheel range :", 24, 1, 24);                                                                         // 3
                page.AddDropDownList("Instrument Mode :", MidiExportInstrumentMode.Names, MidiExportInstrumentMode.Names[0]);                    // 4
                page.AddMultiColumnList(new[] { new ColumnDesc("", 0.4f), new ColumnDesc("", 0.6f, MidiFileReader.MidiInstrumentNames) }, null); // 5
                page.PropertyChanged += Midi_PropertyChanged;
                break;

            case ExportFormat.Text:
                page.AddCheckBoxList(null, songNames, null);     // 0
                page.AddCheckBox("Delete unused data :", false); // 1
                break;

            case ExportFormat.FamiTracker:
                if (!project.UsesMultipleExpansionAudios)
                {
                    page.AddCheckBoxList(null, songNames, null);     // 0
                    canExportToFamiTracker = true;
                }
                else
                {
                    page.AddLabel(null, "The original FamiTracker does not support multiple audio expansions. Limit yourself to a single expansion to enable export.", true);
                    canExportToFamiTracker = false;
                }
                break;

            case ExportFormat.FamiTone2Music:
            case ExportFormat.FamiStudioMusic:
                if (format == ExportFormat.FamiTone2Music && project.UsesAnyExpansionAudio)
                {
                    page.AddLabel(null, "FamiTone2 does not support audio expansions.", true);
                    canExportToSoundEngine = false;
                }
                else if (format == ExportFormat.FamiStudioMusic && project.UsesMultipleExpansionAudios)
                {
                    page.AddLabel(null, "The FamiStudio Sound Engine only supports a single expansion at a time. Limit yourself to a single expansion to enable export.", true);
                    canExportToSoundEngine = false;
                }
                else
                {
                    page.AddDropDownList("Format :", AssemblyFormat.Names, AssemblyFormat.Names[0]); // 0
                    page.AddCheckBox("Separate Files :", false);                                     // 1
                    page.AddTextBox("Song Name Pattern :", "{project}_{song}");                      // 2
                    page.AddTextBox("DMC Name Pattern :", "{project}");                              // 3
                    page.AddCheckBox("Generate song list include :", false);                         // 4
                    page.AddCheckBoxList(null, songNames, null);                                     // 5
                    page.SetPropertyEnabled(2, false);
                    page.SetPropertyEnabled(3, false);
                    page.PropertyChanged  += SoundEngine_PropertyChanged;
                    canExportToSoundEngine = true;
                }
                break;

            case ExportFormat.FamiTone2Sfx:
            case ExportFormat.FamiStudioSfx:
                page.AddDropDownList("Format :", AssemblyFormat.Names, AssemblyFormat.Names[0]);                                            // 0
                page.AddDropDownList("Mode :", MachineType.Names, MachineType.Names[project.PalMode ? MachineType.PAL : MachineType.NTSC]); // 1
                page.AddCheckBox("Generate SFX list include :", false);                                                                     // 2
                page.AddCheckBoxList(null, songNames, null);                                                                                // 3
                break;

            case ExportFormat.Share:
                page.AddRadioButtonList("Sharing mode", new[] { "Copy to Storage", "Share" }, 0, "Copy the FamiStudio project to your phone's storage, or share it to another application.");
                break;
            }

            page.Build();

            return(page);
        }