public static void ExecutePetriNet(string fileName) { var document = new PnmlDocument(); document.Load(File.ReadAllText(fileName)); var petriNet = new PnmlPersister().Import(document); var runtimeHost = new EmbeddedRuntimeHost(typeof(PetrifierRuntime)); var handle = runtimeHost.ExecutePetriNetModule(new PetriNetModule(petriNet)); runtimeHost.WaitForEnd(handle); }
private void btnExportEditorContentToPnml_Click(object sender, EventArgs e) { if (dlgSavePnml.ShowDialog() != DialogResult.OK) { return; } string fileName = dlgSavePnml.FileName; var petriNet = petriNetEditor.ExportToPetriNet(); var pnml = new PnmlPersister().Export(petriNet); File.WriteAllText(fileName, pnml.GetContent()); }
private void btnImportPnmlIntoEditor_Click(object sender, EventArgs e) { if (dlgOpenPnml.ShowDialog() != DialogResult.OK) { return; } string fileName = dlgOpenPnml.FileName; var document = new PnmlDocument(); document.Load(File.ReadAllText(fileName)); var petriNet = new PnmlPersister().Import(document); petriNetEditor.LoadPetriNet(petriNet); }
/// <summary> /// Save the contents of the textbox into the specified file. If doing the save on the same file, we need to /// suspend notifications for file changes during the save operation. /// </summary> /// <param name="pszFilename">Pointer to the file name. If the pszFilename parameter is a null reference /// we need to save using the current file /// </param> /// <param name="remember">Boolean value that indicates whether the pszFileName parameter is to be used /// as the current working file. /// If remember != 0, pszFileName needs to be made the current file and the dirty flag needs to be cleared after the save. /// Also, file notifications need to be enabled for the new file and disabled for the old file /// If remember == 0, this save operation is a Save a Copy As operation. In this case, /// the current file is unchanged and dirty flag is not cleared /// </param> /// <param name="nFormatIndex">Zero based index into the list of formats that indicates the format in which /// the file will be saved</param> /// <returns>S_OK if the method succeeds</returns> int IPersistFileFormat.Save(string pszFilename, int fRemember, uint nFormatIndex) { int hr = VSConstants.S_OK; bool doingSaveOnSameFile = false; // If file is null or same --> SAVE if (pszFilename == null || pszFilename == fileName) { fRemember = 1; doingSaveOnSameFile = true; } //Suspend file change notifications for only Save since we don't have notifications setup //for SaveAs and SaveCopyAs (as they are different files) if (doingSaveOnSameFile) this.SuspendFileChangeNotification(pszFilename, 1); try { if (pszFilename != null) { PnmlPersister persister = new PnmlPersister(); PersistentDocument document = persister.Export(editorControl.Editor.ExportToPetriNet()); File.WriteAllText(pszFilename, document.GetContent()); } } catch (ArgumentException) { hr = VSConstants.E_FAIL; } catch (IOException) { hr = VSConstants.E_FAIL; } finally { //restore the file change notifications if (doingSaveOnSameFile) this.SuspendFileChangeNotification(pszFilename, 0); } if (VSConstants.E_FAIL == hr) return hr; //Save and Save as if (fRemember != 0) { //Save as if (null != pszFilename && !fileName.Equals(pszFilename)) { SetFileChangeNotification(fileName, false); //remove notification from old file SetFileChangeNotification(pszFilename, true); //add notification for new file fileName = pszFilename; //cache the new file name } isDirty = false; SetReadOnly(false); //set read only to false since you were successfully able //to save to the new file } ITrackSelection track = TrackSelection; if (null != track) { hr = track.OnSelectChange((ISelectionContainer)selContainer); } // Since all changes are now saved properly to disk, there's no need for a backup. backupObsolete = false; return hr; }
/// <summary> /// Loads the file content into the textbox /// </summary> /// <param name="pszFilename">Pointer to the full path name of the file to load</param> /// <param name="grfMode">file format mode</param> /// <param name="fReadOnly">determines if teh file should be opened as read only</param> /// <returns>S_OK if the method succeeds</returns> int IPersistFileFormat.Load(string pszFilename, uint grfMode, int fReadOnly) { if (pszFilename == null) { return VSConstants.E_INVALIDARG; } loading = true; int hr = VSConstants.S_OK; try { // Show the wait cursor while loading the file IVsUIShell VsUiShell = (IVsUIShell)GetService(typeof(SVsUIShell)); if (VsUiShell != null) { // Note: we don't want to throw or exit if this call fails, so // don't check the return code. hr = VsUiShell.SetWaitCursor(); } string content = File.ReadAllText(pszFilename); PnmlDocument document = new PnmlDocument(); document.Load(content); PnmlPersister persister = new PnmlPersister(); PetriNet petriNet = persister.Import(document); editorControl.Editor.LoadPetriNet(petriNet); isDirty = false; //Determine if the file is read only on the file system FileAttributes fileAttrs = File.GetAttributes(pszFilename); int isReadOnly = (int)fileAttrs & (int)FileAttributes.ReadOnly; //Set readonly if either the file is readonly for the user or on the file system if (0 == isReadOnly && 0 == fReadOnly) SetReadOnly(false); else SetReadOnly(true); // Notify to the property window that some of the selected objects are changed ITrackSelection track = TrackSelection; if (null != track) { hr = track.OnSelectChange((ISelectionContainer)selContainer); if (ErrorHandler.Failed(hr)) return hr; } // Hook up to file change notifications if (String.IsNullOrEmpty(fileName) || 0 != String.Compare(fileName, pszFilename, true, CultureInfo.CurrentCulture)) { fileName = pszFilename; SetFileChangeNotification(pszFilename, true); // Notify the load or reload NotifyDocChanged(); } } finally { loading = false; } return VSConstants.S_OK; }