// load the specified .xseq binary file void xLightsFrame::SeqLoadXlightsXSEQ(const wxString& filename) { // read xlights file wxFileName fn(filename); if (fn.GetExt() == "xseq") { ReadXlightsFile(filename); fn.SetExt("fseq"); } else { ReadFalconFile(filename); } DisplayXlightsFilename(fn.GetFullPath()); SeqBaseChannel=1; SeqChanCtrlBasic=false; SeqChanCtrlColor=false; }
void xLightsFrame::SaveAsSequence() { if (SeqData.NumFrames() == 0) { wxMessageBox("You must open a sequence first!", "Error"); return; } wxString NewFilename; wxFileDialog fd(this, "Choose filename to Save Sequence:", CurrentDir, CurrentSeqXmlFile->GetName(), strSequenceSaveAsFileTypes, wxFD_SAVE | wxFD_OVERWRITE_PROMPT); bool ok = false; do { if (fd.ShowModal() != wxID_OK) { return; } // validate inputs NewFilename=fd.GetPath(); NewFilename.Trim(); ok=true; if (NewFilename.IsEmpty()) { ok=false; wxMessageBox(_("File name cannot be empty"), _("ERROR")); } } while (!ok); wxFileName oName(NewFilename); oName.SetExt("fseq"); DisplayXlightsFilename(oName.GetFullPath()); oName.SetExt("xml"); CurrentSeqXmlFile->SetPath(oName.GetPath()); CurrentSeqXmlFile->SetFullName(oName.GetFullName()); SaveSequence(); }
void xLightsFrame::SetDir(const wxString& newdir) { static bool HasMenuSeparator=false; int idx, cnt, i; // reject change if something is playing if (play_mode == play_sched || play_mode == play_list || play_mode == play_single) { wxMessageBox(_("Cannot change directories during playback"),_("Error")); return; } // update most recently used array idx=mru.Index(newdir); if (idx != wxNOT_FOUND) mru.RemoveAt(idx); if (!CurrentDir.IsEmpty()) { idx=mru.Index(CurrentDir); if (idx != wxNOT_FOUND) mru.RemoveAt(idx); mru.Insert(CurrentDir,0); } cnt=mru.GetCount(); if (cnt > MRU_LENGTH) { mru.RemoveAt(MRU_LENGTH, cnt - MRU_LENGTH); cnt = MRU_LENGTH; } /* wxString msg=wxT("UpdateMRU:\n"); for (int i=0; i<mru.GetCount(); i++) msg+=wxT("\n") + mru[i]; wxMessageBox(msg); */ // save config bool DirExists=wxFileName::DirExists(newdir); wxString mru_name, value; wxConfig* config = new wxConfig(_(XLIGHTS_CONFIG_ID)); if (DirExists) config->Write(_("LastDir"), newdir); for (i=0; i<MRU_LENGTH; i++) { mru_name=wxString::Format(wxT("mru%d"),i); if (MenuFile->FindItem(mru_MenuItem[i]->GetItemLabel()) != wxNOT_FOUND) { MenuFile->Remove(mru_MenuItem[i]); } if (i < cnt) { value = mru[i]; } else { value = wxEmptyString; } config->Write(mru_name, value); } delete config; // append mru items to menu cnt=mru.GetCount(); if (!HasMenuSeparator && cnt > 0) { MenuFile->AppendSeparator(); HasMenuSeparator=true; } for (i=0; i<cnt; i++) { mru_MenuItem[i]->SetItemLabel(mru[i]); MenuFile->Append(mru_MenuItem[i]); } if (!DirExists) { wxString msg=_("The show directory '") + newdir + ("' no longer exists.\nPlease choose a new show directory."); wxMessageBox(msg); return; } // update UI CheckBoxLightOutput->SetValue(false); CheckBoxRunSchedule->SetValue(false); if (xout) { delete xout; xout=0; } CurrentDir=newdir; StaticTextDirName->SetLabel(CurrentDir); UnsavedChanges=false; TextCtrlLog->Clear(); while (Notebook1->GetPageCount() > FixedPages) { Notebook1->DeletePage(FixedPages); } ButtonTestLoad->Enable(true); ButtonTestSave->Enable(true); EnableNetworkChanges(); DisplayXlightsFilename(wxT("")); // load network wxXmlNode* root = new wxXmlNode( wxXML_ELEMENT_NODE, wxT("Networks") ); root->AddAttribute( wxT("computer"), wxGetHostName()); NetworkXML.SetRoot( root ); // reset xml networkFile.AssignDir( CurrentDir ); networkFile.SetFullName(_(XLIGHTS_NETWORK_FILE)); if (networkFile.FileExists()) { if (!NetworkXML.Load( networkFile.GetFullPath() )) { wxMessageBox(_("Unable to load network definition file"), _("Error")); } } // load schedule UpdateShowDates(wxDateTime::Now(),wxDateTime::Now()); ShowEvents.Clear(); scheduleFile.AssignDir( CurrentDir ); scheduleFile.SetFullName(_(XLIGHTS_SCHEDULE_FILE)); if (scheduleFile.FileExists()) { LoadScheduleFile(); } DisplaySchedule(); // load sequence effects wxWindow* w; int ColorIdx; for(i=0; i<12; i++) { w=wxWindow::FindWindowByName(wxString::Format(wxT("ID_BUTTON_Palette%d_%d"),int(i/6+1),int(i%6+1))); switch (i%6) { case 0: w->SetBackgroundColour(*wxRED); break; case 1: w->SetBackgroundColour(*wxGREEN); break; case 2: w->SetBackgroundColour(*wxBLUE); break; case 3: w->SetBackgroundColour(*wxYELLOW); break; case 4: w->SetBackgroundColour(*wxWHITE); break; case 5: w->SetBackgroundColour(*wxBLACK); break; } SetTextColor(w); } LoadEffectsFile(); PresetsSelect(); EnableSequenceControls(true); UpdateNetworkList(); Notebook1->ChangeSelection(SETUPTAB); }
void xLightsFrame::SaveSequence() { if (SeqData.NumFrames() == 0) { wxMessageBox("You must open a sequence first!", "Error"); return; } wxCommandEvent playEvent(EVT_STOP_SEQUENCE); wxPostEvent(this, playEvent); if (xlightsFilename.IsEmpty()) { int saved_text_entry_context = mTextEntryContext; mTextEntryContext = TEXT_ENTRY_DIALOG; wxString NewFilename; wxFileDialog fd(this, "Choose filename to Save Sequence:", CurrentDir, CurrentSeqXmlFile->GetName(), strSequenceSaveAsFileTypes, wxFD_SAVE | wxFD_OVERWRITE_PROMPT); bool ok = false; do { if (fd.ShowModal() != wxID_OK) { return; } // validate inputs NewFilename=fd.GetPath(); NewFilename.Trim(); ok=true; if (NewFilename.IsEmpty()) { ok=false; wxMessageBox(_("File name cannot be empty"), _("ERROR")); } } while (!ok); wxFileName oName(NewFilename); oName.SetExt("fseq"); DisplayXlightsFilename(oName.GetFullPath()); oName.SetExt("xml"); CurrentSeqXmlFile->SetPath(oName.GetPath()); CurrentSeqXmlFile->SetFullName(oName.GetFullName()); mTextEntryContext = saved_text_entry_context; } EnableSequenceControls(false); wxStopWatch sw; // start a stopwatch timer StatusBar1->SetStatusText(_("Saving ")+xlightsFilename); CurrentSeqXmlFile->Save(mSequenceElements); if (mRenderOnSave) { RenderIseqData(true); // render ISEQ layers below the Nutcracker layer RenderGridToSeqData(); RenderIseqData(false); // render ISEQ layers above the Nutcracker layer } WriteFalconPiFile(xlightsFilename); DisplayXlightsFilename(xlightsFilename); float elapsedTime = sw.Time()/1000.0; // now stop stopwatch timer and get elapsed time. change into seconds from ms wxString displayBuff = wxString::Format(_("%s Updated in %7.3f seconds"),xlightsFilename,elapsedTime); CallAfter(&xLightsFrame::SetStatusText, displayBuff); EnableSequenceControls(true); mSavedChangeCount = mSequenceElements.GetChangeCount(); }