void CabbageProjectWindow::createNewFile (String type) { FileChooser fc ("Select file name and location", File::getSpecialLocation (File::SpecialLocationType::userHomeDirectory), "", CabbageUtilities::shouldUseNativeBrowser()); if (fc.browseForFileToSave (false)) { String csdText; if (type == "newCsound") csdText = CabbageStrings::getNewCsoundFileText(); else if (type == "newEffect") csdText = CabbageStrings::getNewCabbageEffectFileText(); else csdText = CabbageStrings::getNewCabbageInstrumentFileText(); if (fc.getResult().existsAsFile()) { CabbageIDELookAndFeel lookAndFeel; const int result = CabbageUtilities::showYesNoMessage ("Do you wish to overwrite\nexiting file?", &lookAndFeel); if (result == 1) { writeNewFile (fc.getResult().withFileExtension (".csd"), csdText); } } else { writeNewFile (fc.getResult().withFileExtension (".csd"), csdText); } } }
void HostFilterComponent::handleSaveCommand(bool saveToExistingFileAndDontPrompt) { File tmp = currentSessionFile; bool userConfirmed = true; if (!saveToExistingFileAndDontPrompt || !tmp.exists()) { FileChooser myChooser (T("Save Session..."), currentSessionFile.exists() ? tmp : Config::getInstance ()->lastSessionDirectory, JOST_SESSION_WILDCARD, JOST_USE_NATIVE_FILE_CHOOSER); if (myChooser.browseForFileToSave (true)) tmp = myChooser.getResult().withFileExtension (JOST_SESSION_EXTENSION); else userConfirmed = false; } if (userConfirmed && (tmp != File::nonexistent)) { MemoryBlock fileData; getFilter ()->getStateInformation (fileData); if (tmp.replaceWithData (fileData.getData (), fileData.getSize())) { Config::getInstance()->addRecentSession (tmp); setCurrentSessionFile(tmp); Config::getInstance()->lastSessionFile = tmp; } } }
void PresetPanel::buttonClicked(Button *btn) { // load setlist manually using file dialog // TODO: drop-n-drag for setlist? if(btn == &loadSetlistBtn) { FileChooser myChooser ("Please choose a setlist to load:", File::getSpecialLocation(File::userDesktopDirectory), "*.xml"); // popup dialog to open setlist if(myChooser.browseForFileToOpen()) { // if sucessful, try load this setlist File newSetlist = myChooser.getResult(); processor->loadXmlSetlist(newSetlist); } } else if(btn == &saveSetlistBtn) { FileChooser myChooser ("Save this setlist:", File::getSpecialLocation(File::userDesktopDirectory), "*.xml"); // popup dialog to open setlist if(myChooser.browseForFileToSave(true)) { // if sucessful, try save this setlist File newSetlist = myChooser.getResult(); processor->saveXmlSetlist(newSetlist); } } }
void VstPluginWindow::savePreset () { File lastPresetDirectory = File (plugin->getValue (PROP_PLUGPRESETDIR, String::empty)); if (! lastPresetDirectory.exists()) lastPresetDirectory = Config::getInstance ()->lastPresetDirectory; FileChooser myChooser (T("Save a preset file..."), lastPresetDirectory, JOST_PRESET_WILDCARD, JOST_USE_NATIVE_FILE_CHOOSER); if (myChooser.browseForFileToSave (true)) { File fileToSave = myChooser.getResult().withFileExtension (JOST_PRESET_EXTENSION); XmlElement xml (JOST_PRESET_PRESETTAG); plugin->savePresetToXml (&xml); if (fileToSave.replaceWithText (xml.createDocument (String::empty))) { Config::getInstance()->addRecentPreset (fileToSave); plugin->setValue (PROP_PLUGPRESETDIR, fileToSave.getParentDirectory().getFullPathName()); } } }
void DexedAudioProcessorEditor::saveCart() { File startFileName = processor->activeFileCartridge.exists() ? processor->activeFileCartridge : processor->dexedCartDir; FileChooser fc ("Export DX sysex...", processor->dexedCartDir, "*.syx", 1); if ( fc.browseForFileToSave(true) ) { if ( ! processor->currentCart.saveVoice(fc.getResults().getReference(0)) ) { AlertWindow::showMessageBoxAsync (AlertWindow::WarningIcon, "Error", "Unable to write: " + fc.getResults().getReference(0).getFullPathName()); } } }
FileBasedDocument::SaveResult FileBasedDocument::saveAsInteractive (const bool warnAboutOverwritingExistingFiles) { File f; if (documentFile.existsAsFile()) f = documentFile; else f = getLastDocumentOpened(); String legalFilename (File::createLegalFileName (getDocumentTitle())); if (legalFilename.isEmpty()) legalFilename = "unnamed"; if (f.existsAsFile() || f.getParentDirectory().isDirectory()) f = f.getSiblingFile (legalFilename); else f = File::getSpecialLocation (File::userDocumentsDirectory).getChildFile (legalFilename); f = getSuggestedSaveAsFile (f); FileChooser fc (saveFileDialogTitle, f, fileWildcard); if (fc.browseForFileToSave (warnAboutOverwritingExistingFiles)) { File chosen (fc.getResult()); if (chosen.getFileExtension().isEmpty()) { chosen = chosen.withFileExtension (fileExtension); if (chosen.exists()) { if (! AlertWindow::showOkCancelBox (AlertWindow::WarningIcon, TRANS("File already exists"), TRANS("There's already a file called:") + "\n\n" + chosen.getFullPathName() + "\n\n" + TRANS("Are you sure you want to overwrite it?"), TRANS("overwrite"), TRANS("cancel"))) { return userCancelledSave; } } } setLastDocumentOpened (chosen); return saveAs (chosen, false, false, true); } return userCancelledSave; }
File NewFileWizard::Type::askUserToChooseNewFile (const String& suggestedFilename, const String& wildcard, const Project::Item& projectGroupToAddTo) { FileChooser fc ("Select File to Create", projectGroupToAddTo.determineGroupFolder() .getChildFile (suggestedFilename) .getNonexistentSibling(), wildcard); if (fc.browseForFileToSave (true)) return fc.getResult(); return File::nonexistent; }
void saveScheme() { FileChooser fc ("Select a file in which to save this colour-scheme...", getAppSettings().appearance.getSchemesFolder() .getNonexistentChildFile ("Scheme", AppearanceSettings::getSchemeFileSuffix()), AppearanceSettings::getSchemeFileWildCard()); if (fc.browseForFileToSave (true)) { File file (fc.getResult().withFileExtension (AppearanceSettings::getSchemeFileSuffix())); getAppSettings().appearance.writeToFile (file); getAppSettings().appearance.refreshPresetSchemeList(); } }
void FilenameComponent::buttonClicked (Button*) { #if JUCE_MODAL_LOOPS_PERMITTED FileChooser fc (isDir ? TRANS ("Choose a new directory") : TRANS ("Choose a new file"), getLocationToBrowse(), wildcard); if (isDir ? fc.browseForDirectory() : (isSaving ? fc.browseForFileToSave (false) : fc.browseForFileToOpen())) { setCurrentFile (fc.getResult(), true); } #else jassertfalse; // needs rewriting to deal with non-modal environments #endif }
void CtrlrEditor::performKeyGenerator() { CtrlrKeyGenerator generator; generator.runThread (); if (generator.waitForThreadToExit (60 * 1000)) { FileChooser fc ("RSA Key file name", File::getSpecialLocation (File::userHomeDirectory), "*.*", true); if (fc.browseForFileToSave(true)) { File privateKeyFile = fc.getResult().withFileExtension("private"); File publicKeyFile = fc.getResult().withFileExtension("public"); if (privateKeyFile.hasWriteAccess() && publicKeyFile.hasWriteAccess()) { privateKeyFile.replaceWithText (generator.privateKey.toString()); publicKeyFile.replaceWithText (generator.publicKey.toString()); } } } }
void DexedAudioProcessorEditor::saveCart() { File startFileName = processor->activeFileCartridge.exists() ? processor->activeFileCartridge : processor->dexedCartDir; FileChooser fc ("Export DX sysex...", processor->dexedCartDir, "*.syx", 1); if ( fc.browseForFileToSave(true) ) { String f = fc.getResults().getReference(0).getFullPathName(); char syx_data[4104]; exportSysexCart((char *) syx_data, (char *) &processor->sysex, 0); ofstream fp_out(f.toRawUTF8(), ios::binary); fp_out.write((char *)syx_data, 4104); fp_out.close(); if (fp_out.fail()) { AlertWindow::showMessageBoxAsync (AlertWindow::WarningIcon, "Error", "Unable to write: " + f); } } }
bool TextBuffer::saveFileAs(File defaultfile) { if (defaultfile==File::nonexistent) if (file.existsAsFile()) defaultfile=file.getParentDirectory(); else defaultfile=File::getCurrentWorkingDirectory(); FileChooser choose (T("Save File As"), defaultfile, T("*.*"), true); if (choose.browseForFileToSave(true)) { File sav=choose.getResult(); sav.replaceWithText(getText()); file=sav; clearFlag(EditFlags::NeedsSave); updateWindowTitle(); Preferences::getInstance()->recentlyOpened.addFile(sav); return true; } else return false; }
//============================================================================== void StandaloneFilterWindow::saveState() { PropertySet* const globalSettings = getGlobalSettings(); FileChooser fc (TRANS("Save current state"), globalSettings != 0 ? File (globalSettings->getValue (T("lastStateFile"))) : File::nonexistent); if (fc.browseForFileToSave (true)) { JUCE_NAMESPACE::MemoryBlock data; filter->getStateInformation (data); if (! fc.getResult().replaceWithData (data.getData(), data.getSize())) { AlertWindow::showMessageBox (AlertWindow::WarningIcon, TRANS("Error whilst saving"), TRANS("Couldn't write to the specified file!")); } } }
FileBasedDocument::SaveResult FileBasedDocument::saveAsInteractive (const bool warnAboutOverwritingExistingFiles) { File f; if (documentFile.existsAsFile()) f = documentFile; else f = getLastDocumentOpened(); String legalFilename (File::createLegalFileName (getDocumentTitle())); if (legalFilename.isEmpty()) legalFilename = "unnamed"; if (f.existsAsFile() || f.getParentDirectory().isDirectory()) f = f.getSiblingFile (legalFilename); else f = File::getSpecialLocation (File::userDocumentsDirectory).getChildFile (legalFilename); f = getSuggestedSaveAsFile (f); FileChooser fc (saveFileDialogTitle, f, fileWildcard); if (fc.browseForFileToSave (warnAboutOverwritingExistingFiles)) { File chosen (fc.getResult()); if (chosen.getFileExtension().isEmpty()) { chosen = chosen.withFileExtension (fileExtension); if (chosen.exists() && ! askToOverwriteFile (chosen)) return userCancelledSave; } setLastDocumentOpened (chosen); return saveAs (chosen, false, false, true); } return userCancelledSave; }
void showWindow (Component& button, DialogType type) { if (type >= plainAlertWindow && type <= questionAlertWindow) { AlertWindow::AlertIconType icon = AlertWindow::NoIcon; switch (type) { case warningAlertWindow: icon = AlertWindow::WarningIcon; break; case infoAlertWindow: icon = AlertWindow::InfoIcon; break; case questionAlertWindow: icon = AlertWindow::QuestionIcon; break; default: break; } AlertWindow::showMessageBoxAsync (icon, "This is an AlertWindow", "And this is the AlertWindow's message. Blah blah blah blah blah blah blah blah blah blah blah blah blah.", "ok"); } else if (type == okCancelAlertWindow) { AlertWindow::showOkCancelBox (AlertWindow::QuestionIcon, "This is an ok/cancel AlertWindow", "And this is the AlertWindow's message. Blah blah blah blah blah blah blah blah blah blah blah blah blah.", String::empty, String::empty, 0, ModalCallbackFunction::forComponent (alertBoxResultChosen, this)); } else if (type == calloutBoxWindow) { ColourSelector* colourSelector = new ColourSelector(); colourSelector->setName ("background"); colourSelector->setCurrentColour (findColour (TextButton::buttonColourId)); colourSelector->setColour (ColourSelector::backgroundColourId, Colours::transparentBlack); colourSelector->setSize (300, 400); CallOutBox::launchAsynchronously (colourSelector, button.getScreenBounds(), nullptr); } else if (type == extraComponentsAlertWindow) { #if JUCE_MODAL_LOOPS_PERMITTED AlertWindow w ("AlertWindow demo..", "This AlertWindow has a couple of extra components added to show how to add drop-down lists and text entry boxes.", AlertWindow::QuestionIcon); w.addTextEditor ("text", "enter some text here", "text field:"); const char* options[] = { "option 1", "option 2", "option 3", "option 4", nullptr }; w.addComboBox ("option", StringArray (options), "some options"); w.addButton ("ok", 1, KeyPress (KeyPress::returnKey, 0, 0)); w.addButton ("cancel", 0, KeyPress (KeyPress::escapeKey, 0, 0)); if (w.runModalLoop() != 0) // is they picked 'ok' { // this is the item they chose in the drop-down list.. const int optionIndexChosen = w.getComboBoxComponent ("option")->getSelectedItemIndex(); (void) optionIndexChosen; // (just avoids a compiler warning about unused variables) // this is the text they entered.. String text = w.getTextEditorContents ("text"); } #endif } else if (type == progressWindow) { // This will launch our ThreadWithProgressWindow in a modal state. (Our subclass // will take care of deleting the object when the task has finished) (new DemoBackgroundThread())->launchThread(); } else if (type >= loadChooser && type <= saveChooser) { #if JUCE_MODAL_LOOPS_PERMITTED const bool useNativeVersion = nativeButton.getToggleState(); if (type == loadChooser) { FileChooser fc ("Choose a file to open...", File::getCurrentWorkingDirectory(), "*", useNativeVersion); if (fc.browseForMultipleFilesToOpen()) { String chosen; for (int i = 0; i < fc.getResults().size(); ++i) chosen << fc.getResults().getReference(i).getFullPathName() << "\n"; AlertWindow::showMessageBoxAsync (AlertWindow::InfoIcon, "File Chooser...", "You picked: " + chosen); } } else if (type == loadWithPreviewChooser) { ImagePreviewComponent imagePreview; imagePreview.setSize (200, 200); FileChooser fc ("Choose an image to open...", File::getSpecialLocation (File::userPicturesDirectory), "*.jpg;*.jpeg;*.png;*.gif", useNativeVersion); if (fc.browseForMultipleFilesToOpen (&imagePreview)) { String chosen; for (int i = 0; i < fc.getResults().size(); ++i) chosen << fc.getResults().getReference (i).getFullPathName() << "\n"; AlertWindow::showMessageBoxAsync (AlertWindow::InfoIcon, "File Chooser...", "You picked: " + chosen); } } else if (type == saveChooser) { FileChooser fc ("Choose a file to save...", File::getCurrentWorkingDirectory(), "*", useNativeVersion); if (fc.browseForFileToSave (true)) { File chosenFile = fc.getResult(); AlertWindow::showMessageBoxAsync (AlertWindow::InfoIcon, "File Chooser...", "You picked: " + chosenFile.getFullPathName()); } } else if (type == directoryChooser) { FileChooser fc ("Choose a directory...", File::getCurrentWorkingDirectory(), "*", useNativeVersion); if (fc.browseForDirectory()) { File chosenDirectory = fc.getResult(); AlertWindow::showMessageBoxAsync (AlertWindow::InfoIcon, "File Chooser...", "You picked: " + chosenDirectory.getFullPathName()); } } #endif } }
void MainComponent::buttonClicked (Button* buttonThatWasClicked) { //[UserbuttonClicked_Pre] //[/UserbuttonClicked_Pre] if (buttonThatWasClicked == inputFileBrowse) { //[UserButtonCode_inputFileBrowse] -- add your button handler code here.. FileChooser myChooser ("Choose a file to encode", File::getSpecialLocation (File::userDesktopDirectory), "*.*"); if (myChooser.browseForFileToOpen()) { inputFile = myChooser.getResult(); inputFilePath->setText (inputFile.getFullPathName(), false); if (outputFilePath->getText().isEmpty()) { outputFile = inputFile.withFileExtension(T("b64")); outputFilePath->setText (inputFile.withFileExtension(T("b64")).getFullPathName(), false); } } //[/UserButtonCode_inputFileBrowse] } else if (buttonThatWasClicked == encodeStart) { //[UserButtonCode_encodeStart] -- add your button handler code here.. encoderOutput->clear(); encoderThread = new EncoderThread (inputFile, writeToFileBtn->getToggleState(), outputFile, true, outputAsXmlBtn->getToggleState(), xmlElementName->getText()); encoderThread->addChangeListener (this); encoderThread->runThread(); //[/UserButtonCode_encodeStart] } else if (buttonThatWasClicked == writeToFileBtn) { //[UserButtonCode_writeToFileBtn] -- add your button handler code here.. //[/UserButtonCode_writeToFileBtn] } else if (buttonThatWasClicked == outputFileBrowse) { //[UserButtonCode_outputFileBrowse] -- add your button handler code here.. FileChooser myChooser ("Choose an output file", File::getSpecialLocation (File::userDesktopDirectory), "*.*"); if (myChooser.browseForFileToSave (true)) { outputFile = myChooser.getResult(); outputFilePath->setText (outputFile.getFullPathName(), false); } //[/UserButtonCode_outputFileBrowse] } else if (buttonThatWasClicked == outputAsXmlBtn) { //[UserButtonCode_outputAsXmlBtn] -- add your button handler code here.. if (outputAsXmlBtn->getToggleState()) { xmlElementName->setEnabled (true); } else { xmlElementName->setEnabled (false); } //[/UserButtonCode_outputAsXmlBtn] } //[UserbuttonClicked_Post] //[/UserbuttonClicked_Post] }
//=============================================================================== void CabbageFileButton::buttonClicked (Button* button) { if (mode == "file") { const String lastKnownDirectory = owner->getLastOpenedDirectory(); FileChooser fc ("Choose File", lastKnownDirectory.isEmpty() ? File (getCsdFile()).getParentDirectory() : File (lastKnownDirectory), "", CabbageUtilities::shouldUseNativeBrowser()); if (fc.browseForFileToOpen()) { owner->sendChannelStringDataToCsound (getChannel(), returnValidPath (fc.getResult())); CabbageWidgetData::setStringProp (widgetData, CabbageIdentifierIds::file, returnValidPath (fc.getResult())); //owner->refreshComboBoxContents(); } owner->setLastOpenedDirectory (fc.getResult().getParentDirectory().getFullPathName()); } else if (mode == "save") { const String lastKnownDirectory = owner->getLastOpenedDirectory(); FileChooser fc ("Choose File", lastKnownDirectory.isEmpty() ? File (getCsdFile()).getParentDirectory() : File (lastKnownDirectory), "", CabbageUtilities::shouldUseNativeBrowser()); if (fc.browseForFileToSave(true)) { owner->sendChannelStringDataToCsound (getChannel(), returnValidPath (fc.getResult())); CabbageWidgetData::setStringProp (widgetData, CabbageIdentifierIds::file, returnValidPath (fc.getResult())); //owner->refreshComboBoxContents(); } owner->setLastOpenedDirectory (fc.getResult().getParentDirectory().getFullPathName()); owner->refreshComboListBoxContents(); startTimer(500); } else if (mode == "directory") { const String lastKnownDirectory = owner->getLastOpenedDirectory(); FileChooser fc ("Open Directory", lastKnownDirectory.isEmpty() ? File (getCsdFile()).getChildFile (getFilename()) : File (lastKnownDirectory), "", CabbageUtilities::shouldUseNativeBrowser()); if (fc.browseForDirectory()) { owner->sendChannelStringDataToCsound (getChannel(), returnValidPath (fc.getResult())); CabbageWidgetData::setStringProp (widgetData, CabbageIdentifierIds::file, returnValidPath (fc.getResult())); } owner->setLastOpenedDirectory (fc.getResult().getParentDirectory().getFullPathName()); } else if (mode == "snapshot") { String newFileName; if (owner->isAudioUnit()) newFileName = File(getCsdFile()).withFileExtension(".snaps").getFullPathName(); else newFileName = owner->createNewGenericNameForPresetFile(); owner->sendChannelStringDataToCsound (getChannel(), newFileName); owner->savePluginStateToFile (File (newFileName)); owner->refreshComboListBoxContents(); } else if (mode == "named snapshot") { String newFileName; if (owner->isAudioUnit()) newFileName = File(getCsdFile()).withFileExtension(".snaps").getFullPathName(); else newFileName = owner->createNewGenericNameForPresetFile(); #if JUCE_MODAL_LOOPS_PERMITTED String presetname; AlertWindow w ("Preset", "Set preset name (warning, will overwrite previous preset of same name)", AlertWindow::NoIcon); w.setLookAndFeel(&getLookAndFeel()); w.setSize(100, 100); w.addTextEditor ("text", "enter name here", ""); w.addButton ("OK", 1, KeyPress (KeyPress::returnKey, 0, 0)); w.addButton ("Cancel", 0, KeyPress (KeyPress::escapeKey, 0, 0)); if (w.runModalLoop() != 0) // is they picked 'ok' { presetname = w.getTextEditorContents ("text"); } #endif owner->sendChannelStringDataToCsound (getChannel(), newFileName); owner->savePluginStateToFile (File (newFileName), presetname); owner->refreshComboListBoxContents(); } owner->getProcessor().updateHostDisplay(); }
void MLPluginController::doPresetMenu(int result) { switch(result) { // do another menu command case (0): // dismiss break; case (1): // save as version in current dir if(getProcessor()->saveStateAsVersion() != MLProc::OK) { AlertWindow::showMessageBox (AlertWindow::NoIcon, String::empty, "", "OK"); } break; case (2): // save over previous if(getProcessor()->saveStateOverPrevious() != MLProc::OK) { AlertWindow::showMessageBox (AlertWindow::NoIcon, String::empty, "", "OK"); } break; case (3): // save as ... { String errStr; File userPresetsFolder = getDefaultFileLocation(kPresetFiles); if (userPresetsFolder != File::nonexistent) { bool nativeChooserUI = true; FileChooser fc ("Save preset as...", userPresetsFolder, String::empty, nativeChooserUI); if (fc.browseForFileToSave (true)) { File saveFile = fc.getResult(); std::string fullSavePath(saveFile.getFullPathName().toUTF8()); getProcessor()->saveStateToLongFileName(fullSavePath); } } else { errStr = ("Error: user presets folder did not exist and could not be created."); AlertWindow::showMessageBox (AlertWindow::NoIcon, String::empty, errStr, "OK"); } } break; case (4): // revert getProcessor()->returnToLatestStateLoaded(); break; case (5): // copy SystemClipboard::copyTextToClipboard (getProcessor()->getStateAsText()); break; case (6): // paste getProcessor()->setPatchStateFromText (SystemClipboard::getTextFromClipboard()); break; #if SHOW_CONVERT_PRESETS #if ML_MAC case (7): // show convert alert box convertPresets(); getProcessor()->scanAllFilesImmediate(); break; #endif #endif default: // load preset loadPresetByMenuIndex(result); break; } }
void BigClockEditor::buttonStateChanged (Button* buttonThatWasClicked) { if (buttonThatWasClicked->isDown()) { ModifierKeys mousebutton = ModifierKeys::getCurrentModifiers(); if (mousebutton.isPopupMenu()) { bool samplemode = getFilter()->getParameter(kSamples)>=0.5f; PopupMenu m, sub1,sub2,sub3,sub4,clockmode; sub1.addCustomItem (-1, colourSelector, 300, 300, false); m.addSubMenu (L"Color", sub1); m.addSeparator(); clockmode.addItem(100,"Host Timeline",true,getFilter()->mode == HostTimeMode); clockmode.addItem(101,"Recording Time",true,getFilter()->mode == RecTimeMode); clockmode.addItem(102,"Stopwatch",true,getFilter()->mode == StopwatchMode); clockmode.addItem(103,"Plugin Time",true,getFilter()->mode == PluginTimeMode); clockmode.addItem(104,"Actual Time",true,getFilter()->mode == ActualTimeMode); m.addSubMenu("Clock Mode",clockmode); m.addItem(120,"Reset",getFilter()->mode != HostTimeMode && getFilter()->mode != ActualTimeMode); m.addSeparator(); sub4.addItem(998,L"Show Cues",true,showtextbox); sub4.addItem(996,L"Import..."); sub4.addItem(997,L"Export...",getFilter()->cues.size()>0); sub4.addItem(999,L"Clear",getFilter()->cues.size()>0); for (int i=0;i<getFilter()->cues.size();i++) { sub4.addItem(1000+i, getFilter()->ppqToString(getFilter()->cues[i]->ppq, getFilter()->lastPosInfo.timeSigNumerator, getFilter()->lastPosInfo.timeSigDenominator, getFilter()->lastPosInfo.bpm,barsbeats) + " - " + getFilter()->cues[i]->text,true,getFilter()->cues[i]->enabled); } m.addSubMenu (L"Cues", sub4, getFilter()->mode==HostTimeMode); m.addSeparator(); m.addItem (3, L"Bars|Beats|Ticks", true, barsbeats && !samplemode); float ppqn = getFilter()->getParameter(kTicks); sub2.addItem(30,L"hide ticks",true,ppqn==1.0); sub2.addItem(31,L"4",true,ppqn<1.0 && ppqn>=0.9); sub2.addItem(32,L"16",true,ppqn<0.9 && ppqn>=0.8); sub2.addItem(33,L"48",true,ppqn<0.8 && ppqn>=0.7); sub2.addItem(34,L"96",true,ppqn<0.7 && ppqn>=0.65); sub2.addItem(35,L"100",true,ppqn<0.65 && ppqn>=0.6); sub2.addItem(36,L"120",true,ppqn<0.6 && ppqn>=0.5); sub2.addItem(37,L"192",true,ppqn<0.5 && ppqn>=0.4); sub2.addItem(38,L"240",true,ppqn<0.4 && ppqn>=0.3); sub2.addItem(39,L"384",true,ppqn<0.3 && ppqn>=0.2); sub2.addItem(40,L"480",true,ppqn<0.2 && ppqn>=0.1); sub2.addItem(41,L"768",true,ppqn<0.1 && ppqn>0.0); sub2.addItem(42,L"960",true,ppqn==0.0); m.addSubMenu (L"Ticks per beat", sub2,barsbeats && !samplemode); m.addSeparator(); m.addItem (4, L"Hour:Min:Sec", true, !barsbeats && !samplemode); float fps = getFilter()->getParameter(kFrames); sub3.addItem(50,L"ms (1000)",true,fps==0.0); sub3.addItem(51,L"120",true,fps==1.0); sub3.addItem(52,L"100",true,fps<1.0 && fps>=0.9); sub3.addItem(53,L"75",true,fps<0.9 && fps>=0.8); sub3.addItem(54,L"60",true,fps<0.8 && fps>=0.7); sub3.addItem(55,L"50",true,fps<0.7 && fps>=0.6); sub3.addItem(56,L"30",true,fps<0.6 && fps>=0.5); sub3.addItem(61,L"29.97 drop",true,fps<0.5 && fps>=0.4); sub3.addItem(57,L"25",true,fps<0.4 && fps>=0.3); sub3.addItem(58,L"24",true,fps<0.3 && fps>=0.2); sub3.addItem(59,L"15",true,fps<0.2 && fps>=0.1); sub3.addItem(60,L"10",true,fps<0.1 && fps>0.0); m.addSubMenu (L"Frames per second", sub3, !barsbeats && !samplemode); m.addItem (1, L"Show ms/frames", !barsbeats && !samplemode, getFilter()->getParameter(kShowms)>=0.5); m.addItem (6, L"Show subframes", !barsbeats && !samplemode && getFilter()->getParameter(kShowms)>=0.5, getFilter()->getParameter(kShowsubfr)>=0.5); m.addItem (2, L"Show hours", !barsbeats && !samplemode, getFilter()->getParameter(kShowhrs)>=0.5); m.addSeparator(); m.addItem (5, L"Samples", true, samplemode); int result = m.show(); if (result > 0) { if (result==1) { if (getFilter()->getParameter(kShowms)>=0.5) getFilter()->setParameter(kShowms,0.0); else getFilter()->setParameter(kShowms,1.0); } else if (result==2) { if (getFilter()->getParameter(kShowhrs)>=0.5f) getFilter()->setParameter(kShowhrs,0.0f); else getFilter()->setParameter(kShowhrs,1.0f); } else if (result==3) { if (barsbeats && !samplemode) { } else { getFilter()->setParameter(kBarsBeats,1.0f); getFilter()->setParameter(kSamples,0.0f); } } else if (result>=30 && result<50) { if (result==30) getFilter()->setParameter(kTicks,1.0f); else if (result==31) getFilter()->setParameter(kTicks,0.91f); else if (result==32) getFilter()->setParameter(kTicks,0.81f); else if (result==33) getFilter()->setParameter(kTicks,0.71f); else if (result==34) getFilter()->setParameter(kTicks,0.65f); else if (result==35) getFilter()->setParameter(kTicks,0.61f); else if (result==36) getFilter()->setParameter(kTicks,0.51f); else if (result==37) getFilter()->setParameter(kTicks,0.41f); else if (result==38) getFilter()->setParameter(kTicks,0.31f); else if (result==39) getFilter()->setParameter(kTicks,0.21f); else if (result==40) getFilter()->setParameter(kTicks,0.11f); else if (result==41) getFilter()->setParameter(kTicks,0.051f); else if (result==42) getFilter()->setParameter(kTicks,0.0f); } else if (result==4) { if (!barsbeats && !samplemode) { } else { getFilter()->setParameter(kBarsBeats,0.0f); getFilter()->setParameter(kSamples,0.0f); } } else if (result>=50 && result<70) { if (result==50) getFilter()->setParameter(kFrames,0.0f); else if (result==51) getFilter()->setParameter(kFrames,1.0f); else if (result==52) getFilter()->setParameter(kFrames,0.9f); else if (result==53) getFilter()->setParameter(kFrames,0.8f); else if (result==54) getFilter()->setParameter(kFrames,0.7f); else if (result==55) getFilter()->setParameter(kFrames,0.6f); else if (result==56) getFilter()->setParameter(kFrames,0.5f); else if (result==61) getFilter()->setParameter(kFrames,0.4f); else if (result==57) getFilter()->setParameter(kFrames,0.3f); else if (result==58) getFilter()->setParameter(kFrames,0.2f); else if (result==59) getFilter()->setParameter(kFrames,0.1f); else if (result==60) getFilter()->setParameter(kFrames,0.05f); } else if (result==5) { if (!samplemode) getFilter()->setParameter(kSamples,1.0f); } else if (result==6) { getFilter()->setParameter(kShowsubfr,getFilter()->getParameter(kShowsubfr)>=0.5f?0.0f:1.0f); } else if (result==100) { getFilter()->setParameter(kClockMode,0.f); } else if (result==101) { getFilter()->setParameter(kClockMode,1.f/(float)(numModes-1)); } else if (result==102) { getFilter()->setParameter(kClockMode,2.f/(float)(numModes-1)); } else if (result==103) { getFilter()->setParameter(kClockMode,3.f/(float)(numModes-1)); } else if (result==104) { getFilter()->setParameter(kClockMode,4.f/(float)(numModes-1)); } else if (result==120) { if (getFilter()->mode==StopwatchMode) getFilter()->setParameter(kClearWatch,1.f); else if (getFilter()->mode==RecTimeMode) getFilter()->rectime=0; else if (getFilter()->mode==PluginTimeMode) getFilter()->plugintime=Time::getMillisecondCounter(); } else if (result==998) { getFilter()->showcues=!showtextbox; updateParametersFromFilter(); resized(); repaint(); } else if (result==996) { FileChooser myChooser ("Import cue file...", File(getFilter()->getCurrentPath()), "*.xml"); if (myChooser.browseForFileToOpen()) { File file (myChooser.getResult()); getFilter()->loadCues(file); } } else if (result==997) { FileChooser myChooser ("Export cue file...", File(getFilter()->getCurrentPath() + File::separatorString + "cues.xml")); if (myChooser.browseForFileToSave(true)) { File cuefile (myChooser.getResult()); if (!cuefile.hasFileExtension("xml")) cuefile = cuefile.withFileExtension("xml"); getFilter()->saveCues(cuefile); } } else if (result==999) { getFilter()->cues.clear(); cueLabel->setText(String::empty,false); } else if (result>=1000) { getFilter()->setCueEnabled(result-1000,!(getFilter()->cues[result-1000]->enabled)); updateParametersFromFilter(); } } } } }