示例#1
0
        /// <summary>
        /// Called whenever the Data stored in the Filedescriptor gets changed
        /// </summary>
        /// <param name="sender"></param>
        private void FileDescriptor_ChangedUserData(SimPe.Interfaces.Files.IPackedFileDescriptor sender)
        {
            SimPe.Packages.PackedFileDescriptor pfd = (SimPe.Packages.PackedFileDescriptor)sender;
            TD.SandDock.DockControl             doc = this.GetDocument(pfd);
            if (doc != null)
            {
                SimPe.Interfaces.Plugin.IFileWrapper wrapper = (SimPe.Interfaces.Plugin.IFileWrapper)doc.Tag;
                if (wrapper != null)
                {
                    if (wrapper.Package != null)
                    {
                        string flname = wrapper.Package.FileName;
                        if (flname == null)
                        {
                            flname = "";
                        }
                        System.Windows.Forms.DialogResult dr = System.Windows.Forms.DialogResult.Yes;
                        if (!Helper.WindowsRegistry.Silent)
                        {
                            dr = Message.Show(SimPe.Localization.GetString("reschanged").Replace("{name}", doc.Text).Replace("{filename}", flname), SimPe.Localization.GetString("changed?"), System.Windows.Forms.MessageBoxButtons.YesNo);
                        }

                        if (dr == System.Windows.Forms.DialogResult.Yes)
                        {
                            wrapper.Refresh();
                        }
                    }
                }
            }
        }
示例#2
0
        /// <summary>
        /// If the Resource was already Loaded, this Method Wil Focus it and optional Reload the Content
        /// </summary>
        /// <param name="fii"></param>
        /// <param name="reload"></param>
        /// <returns>true, if a Document was highlighted</returns>
        bool FocusResource(SimPe.Interfaces.Scenegraph.IScenegraphFileIndexItem fii, bool reload)
        {
            //already in List
            if (SelectResource(fii))
            {
                if (reload)
                {
                    TD.SandDock.DockControl doc = this.GetDocument(fii);
                    if (doc == null)
                    {
                        return(false);
                    }

                    SimPe.Interfaces.Plugin.IFileWrapper wrp = (SimPe.Interfaces.Plugin.IFileWrapper)doc.Tag;
                    if (UnloadWrapper(wrp))
                    {
                        wrp.ProcessData(fii);
                        wrp.RefreshUI();
                    }
                }
                return(true);
            }

            return(false);
        }
示例#3
0
        /// <summary>
        /// Call this if you want to unload a Wrapper
        /// </summary>
        /// <param name="doc">The document presenting the Wrapper</param>
        /// <returns>true, if the Wrapper was unloaded completley (false if User decided to answer with Cancel)</returns>
        bool UnloadWrapper(TD.SandDock.DockControl doc)
        {
            SimPe.Interfaces.Plugin.IFileWrapper wrapper = (SimPe.Interfaces.Plugin.IFileWrapper)doc.Tag;
            bool multi = wrapper.AllowMultipleInstances;
            bool res   = UnloadWrapper(wrapper);

            if (res)
            {
                //doc.Controls.Clear();
                SimPe.Interfaces.Scenegraph.IScenegraphFileIndexItem fii = this.GetResourceFromDocument(doc);
                RemoveResource(fii, wrapper);

                if (multi)
                {
                    DisposeSubControls(doc.Controls);
                    ClearControls(doc);
                }
                else
                {
                    doc.Controls.Clear();
                }

                this.UnlinkWrapper(wrapper);
            }


            return(res);
        }
示例#4
0
 /// <summary>
 /// Load the assigned Wrapper, and initiate the Resource
 /// </summary>
 /// <param name="fii"></param>
 /// <returns></returns>
 public void LoadWrapper(ref SimPe.Interfaces.Plugin.IFileWrapper wrapper, SimPe.Interfaces.Scenegraph.IScenegraphFileIndexItem fii)
 {
     if (wrapper != null)
     {
         wrapper = wrapper.Activate();
         wrapper.ProcessData(fii.Package.FindExactFile(fii.FileDescriptor), fii.Package);
     }
 }
示例#5
0
        /// <summary>
        /// Call this if you want to unload a Wrapper
        /// </summary>
        /// <param name="wrapper"></param>
        /// <returns>true, if the Wrapper was unloaded completley (false if User decided to answer with Cancel)</returns>
        /// <remarks>When there are uncommited changes, the Method will
        /// Prompt the User (if <see cref="SimPe.Helper.WindowsRegistry.Silent"/> is not set)
        /// if the changes should be commited</remarks>
        bool UnloadWrapper(SimPe.Interfaces.Plugin.IFileWrapper wrapper)
        {
            if (wrapper == null)
            {
                return(false);
            }

            if (wrapper.GetType().GetInterface("IPackedFileSaveExtension", false) == typeof(SimPe.Interfaces.Plugin.Internal.IPackedFileSaveExtension))
            {
                SimPe.Interfaces.Plugin.Internal.IPackedFileSaveExtension wrp = (SimPe.Interfaces.Plugin.Internal.IPackedFileSaveExtension)wrapper;
                if ((wrp.Changed) && (!Helper.WindowsRegistry.Silent))
                {
                    MessageBoxButtons mbb = MessageBoxButtons.YesNoCancel;
                    //Deleted wrappers are Ignored!!!
                    if (wrp.FileDescriptor != null)
                    {
                        if (wrp.FileDescriptor.MarkForDelete)
                        {
                            mbb = MessageBoxButtons.YesNo;
                        }
                    }

                    string flname = null;
                    if (wrapper != null)
                    {
                        if (wrapper.Package != null)
                        {
                            flname = wrapper.Package.FileName;
                        }
                    }

                    if (flname == null)
                    {
                        flname = SimPe.Localization.Manager.GetString("unknown");
                    }
                    DialogResult dr = SimPe.Message.Show(
                        SimPe.Localization.Manager.GetString("savewrapperchanges").Replace("{name}", wrapper.ResourceName).Replace("{filename}", flname),
                        SimPe.Localization.Manager.GetString("savechanges?"),
                        mbb);

                    if (dr == DialogResult.Yes)
                    {
                        wrp.SynchronizeUserData();
                    }
                    else if (dr == DialogResult.Cancel)
                    {
                        return(false);
                    }
                    else if (dr == DialogResult.No)
                    {
                        wrp.Changed = false;
                    }
                }
            }

            //we cannot unload the wrapper here!!!
            return(true);
        }
示例#6
0
        private void SetWrapper(SimPe.Interfaces.Plugin.IFileWrapper wrp)
        {
            SimPe.Interfaces.Plugin.IFileWrapper old = this.wrp;
            this.wrp = wrp;

            WrapperChangedEventArgs e = new WrapperChangedEventArgs(old, wrp);

            OnWrapperChanged(e);
            if (WrapperChanged != null)
            {
                WrapperChanged(this, e);
            }
        }
示例#7
0
        void UnlinkWrapper(SimPe.Interfaces.Plugin.IFileWrapper wrapper)
        {
            if (wrapper.FileDescriptor != null)
            {
                wrapper.FileDescriptor.ChangedUserData -= new SimPe.Events.PackedFileChanged(FileDescriptor_ChangedUserData);
                wrapper.FileDescriptor.Deleted         -= new EventHandler(DeletedDescriptor);
            }

            if (wrapper.AllowMultipleInstances)
            {
                wrapper.Dispose();
            }
        }
示例#8
0
 /// <summary>
 /// Returns the Document that contains a given Resource
 /// </summary>
 /// <param name="pfd">The Resource you want to select</param>
 /// <returns>the Document that contains the PluginView for the passed Resource (null if none)</returns>
 public TD.SandDock.DockControl GetDocument(SimPe.Interfaces.Files.IPackedFileDescriptor pfd)
 {
     foreach (TD.SandDock.DockControl doc in loaded.Values)
     {
         SimPe.Interfaces.Plugin.IFileWrapper wrapper = (SimPe.Interfaces.Plugin.IFileWrapper)doc.Tag;
         if (wrapper != null)
         {
             if (wrapper.FileDescriptor == pfd)
             {
                 return(doc);
             }
         }
     }
     return(null);
 }
示例#9
0
        public void RefreshUI(SimPe.Interfaces.Scenegraph.IScenegraphFileIndexItem fii)
        {
            TD.SandDock.DockControl doc = this.GetDocument(fii);
            if (doc == null)
            {
                return;
            }

            SimPe.Interfaces.Plugin.IFileWrapper wrp = (SimPe.Interfaces.Plugin.IFileWrapper)doc.Tag;
            if (UnloadWrapper(wrp))
            {
                wrp.ProcessData(fii);
                wrp.RefreshUI();
            }
        }
示例#10
0
        /// <summary>
        /// Make sure all uncommited Changes are stored
        /// </summary>
        /// <returns>true if all documents were either commited or ignored</returns>
        public bool Flush()
        {
            bool commited = true;

            foreach (SimPe.Interfaces.Scenegraph.IScenegraphFileIndexItem k in loaded.Keys)
            {
                TD.SandDock.DockControl doc = GetDocument(k);
                if (doc != null)
                {
                    SimPe.Interfaces.Plugin.IFileWrapper wrapper = (SimPe.Interfaces.Plugin.IFileWrapper)doc.Tag;
                    commited &= UnloadWrapper(wrapper);
                }
            }

            return(commited);
        }
示例#11
0
        protected void LoadMemoryResource(SDesc sim)
        {
            if (sim != null && pkg == sim.Package)
            {
                return;
            }
            if (sim != null)
            {
                pkg = sim.Package;
            }
            else
            {
                pkg = null;
            }

            ngbh = null;
            if (sim == null)
            {
                return;
            }
            if (sim.Package == null)
            {
                return;
            }
            if (!SimPe.Helper.WindowsRegistry.AllowChangeOfSecondaryAspiration)
            {
                return;
            }

            SimPe.Interfaces.Plugin.IFileWrapper wrapper =
                (SimPe.Interfaces.Plugin.IFileWrapper)FileTable.WrapperRegistry.FindHandler(SimPe.Data.MetaData.MEMORIES);

            if (wrapper == null)
            {
                return;
            }

            SimPe.Interfaces.Files.IPackedFileDescriptor[] mems = sim.Package.FindFiles(SimPe.Data.MetaData.MEMORIES);
            foreach (SimPe.Interfaces.Files.IPackedFileDescriptor pfd in mems)
            {
                ngbh = new Ngbh(SimPe.FileTable.ProviderRegistry);
                ngbh.ProcessData(pfd, pkg, false);
                return;
            }
        }
示例#12
0
        /// <summary>
        /// Load the assigned Wrapper, and initiate the Resource
        /// </summary>
        /// <param name="fii"></param>
        /// <returns></returns>
        public SimPe.Interfaces.Plugin.IFileWrapper GetWrapper(SimPe.Interfaces.Scenegraph.IScenegraphFileIndexItem fii)
        {
            if (fii == null)
            {
                return(null);
            }

            //try by Type
            SimPe.Interfaces.Plugin.IFileWrapper wrapper =
                (SimPe.Interfaces.Plugin.IFileWrapper)FileTable.WrapperRegistry.FindHandler(fii.FileDescriptor.Type);

            //try by Signature
            if (wrapper == null)
            {
                SimPe.Interfaces.Files.IPackedFile pf = pkg.Package.Read(fii.FileDescriptor);
                wrapper = FileTable.WrapperRegistry.FindHandler(pf.GetUncompressedData(0x40));
            }

            return(wrapper);
        }
示例#13
0
        /// <summary>
        /// The resource that should be added to the Container
        /// </summary>
        /// <param name="fii"></param>
        /// <param name="reload">
        /// when the Resource is already visible, and this Argument is true, the Gui
        /// will be reloaded. This means, that all unsaved changes will get lost!
        /// </param>
        /// <param name="overload">Replace the currently active Document Tab with the new one</param>
        /// <returns>true, if the Plugin was loaded</returns>
        public bool AddResource(SimPe.Interfaces.Scenegraph.IScenegraphFileIndexItem fii, bool reload, bool overload)
        {
            if (!pkg.Loaded)
            {
                return(false);
            }

            //already Loaded?
            if (FocusResource(fii, reload))
            {
                return(true);
            }

            //only one File at a Time?
            if (!Helper.WindowsRegistry.MultipleFiles)
            {
                this.Clear();
            }

            //get the Wrapper
            SimPe.Interfaces.Plugin.IFileWrapper wrapper = GetWrapper(fii);

            //unload if only one instance can be loaded
            if (!UnloadSingleInstanceWrappers(wrapper, ref overload))
            {
                return(false);
            }

            try
            {
                //load the new Data into the Wrapper
                LoadWrapper(ref wrapper, fii);

                //Present the passed Wrapper
                return(Present(fii, wrapper, overload));
            }
#if !DEBUG
            catch (Exception ex) { Helper.ExceptionMessage(ex); return(false); }
#endif
            finally { }
        }
示例#14
0
        /// <summary>
        /// this is called whenever a Document gets closed
        /// </summary>
        /// <param name="sender">a <see cref="TD.SandDock.DockControl"/> Object</param>
        /// <param name="e">the Cancel Arguments</param>
        private void CloseResourceDocument(object sender, TD.SandDock.DockControlClosingEventArgs e)
        {
            SimPe.Interfaces.Plugin.IFileWrapper wrapper = (SimPe.Interfaces.Plugin.IFileWrapper)((TD.SandDock.DockControl)sender).Tag;
            bool multi = wrapper.AllowMultipleInstances;

            e.Cancel = !UnloadWrapper(wrapper);


            if (!e.Cancel)
            {
                SimPe.Interfaces.Scenegraph.IScenegraphFileIndexItem fii = GetResourceFromDocument((TD.SandDock.DockControl)sender);
                RemoveResource(fii, wrapper);

                if (multi)
                {
                    DisposeSubControls(((TD.SandDock.DockControl)sender).Controls);
                }
                ((TD.SandDock.DockControl)sender).Controls.Clear();

                UnlinkWrapper(wrapper);
            }
        }
示例#15
0
        public static string ProcessItem(System.IO.StreamWriter sw, SimPe.Events.ResourceContainer e, bool first)
        {
            string error = "";

            if (!e.HasFileDescriptor)
            {
                return("");
            }
            if (!e.HasPackage)
            {
                return("");
            }



            try
            {
                Interfaces.Files.IPackedFileDescriptor pfd     = e.Resource.FileDescriptor;
                SimPe.Interfaces.Plugin.IFileWrapper   wrapper = (SimPe.Interfaces.Plugin.IFileWrapper)FileTable.WrapperRegistry.FindHandler(pfd.Type);
                if (wrapper != null)
                {
                    wrapper.ProcessData(e.Resource);
                }

                if (first)
                {
                    WriteHeader(sw, pfd, wrapper);
                }
                WriteItem(sw, pfd, wrapper);
            }
            catch (Exception ex)
            {
                Helper.ExceptionMessage(ex);
                error += ex.Message + Helper.lbr;
            }

            return(error);
        }
示例#16
0
        public void ExecuteEventHandler(object sender, SimPe.Events.ResourceEventArgs e)
        {
            if (!ChangeEnabledStateEventHandler(null, e))
            {
                return;
            }

            foreach (Interfaces.Files.IPackedFileDescriptor pfd in e.LoadedPackage.Package.Index)
            {
                //Do we have a registred handler?
                SimPe.Interfaces.Plugin.IFileWrapper wrapper = (SimPe.Interfaces.Plugin.IFileWrapper)FileTable.WrapperRegistry.FindHandler(pfd.Type);
                SimPe.Interfaces.Files.IPackedFile   file    = e.LoadedPackage.Package.Read(pfd);
                if (wrapper == null)
                {
                    wrapper = FileTable.WrapperRegistry.FindHandler(file.UncompressedData);
                }

                if (wrapper != null)
                {
                    wrapper.ProcessData(pfd, e.LoadedPackage.Package);
                    wrapper.Fix(FileTable.WrapperRegistry);
                }
            }
        }
示例#17
0
        /// <summary>
        /// Unload Documents handled by the Same Wrapper when the Wrapper
        /// is not able to present Multiple Resources
        /// </summary>
        /// <param name="wrapper"></param>
        /// <returns>true, if the Wrapper was unloaded or allows Multiple Instances</returns>
        bool UnloadSingleInstanceWrappers(SimPe.Interfaces.Plugin.IFileWrapper wrapper, ref bool overload)
        {
            if (wrapper == null)
            {
                return(false);
            }

            if (!wrapper.AllowMultipleInstances)
            {
                string id = wrapper.GetType().ToString();
                if (single.ContainsKey(id))
                {
                    SimPe.Interfaces.Scenegraph.IScenegraphFileIndexItem oldfii = (SimPe.Interfaces.Scenegraph.IScenegraphFileIndexItem)single[id];
                    if (!this.CloseDocument(oldfii))
                    {
                        return(false);
                    }
                    single.Remove(id);
                    overload = false;
                }
            }

            return(true);
        }
示例#18
0
 /// <summary>
 /// Is called by SimPe (through the Wrapper) when the Panel is going to be displayed, so
 /// you should updatet the Data displayed by the Panel with the Attributes stored in the
 /// passed Wrapper.
 /// </summary>
 /// <remarks>attr.Tag is used to let TextChanged event handlers know the change is being
 /// made internally rather than by the users.</remarks>
 /// <param name="wrp">The Attributes of this Wrapper have to be displayed</param>
 public void UpdateGUI(SimPe.Interfaces.Plugin.IFileWrapper wrp)
 {
     SetWrapper(wrp);
     RefreshGUI();
 }
示例#19
0
 public WrapperChangedEventArgs(SimPe.Interfaces.Plugin.IFileWrapper owrp, SimPe.Interfaces.Plugin.IFileWrapper nwrp)
 {
     this.owrp = owrp;
     this.nwrp = nwrp;
 }
示例#20
0
 public static void WriteItem(System.IO.StreamWriter sw, Interfaces.Files.IPackedFileDescriptor pfd, SimPe.Interfaces.Plugin.IFileWrapper wrapper)
 {
     sw.WriteLine(Serializer.Serialize(wrapper, pfd, true));
 }
示例#21
0
        /// <summary>
        /// Add the passed Wrapper (it's UI) as a new Document
        /// </summary>
        /// <param name="fii"></param>
        /// <param name="wrapper"></param>
        /// <param name="overload">Replace the currently active Document Tab with the new one</param>
        /// <returns>true, if the Resource was Presented succesfull</returns>
        bool Present(SimPe.Interfaces.Scenegraph.IScenegraphFileIndexItem fii, SimPe.Interfaces.Plugin.IFileWrapper wrapper, bool overload)
        {
            if (wrapper != null)
            {
                if (wrapper.FileDescriptor == null)
                {
                    return(false);
                }
                if (wrapper.Package == null)
                {
                    return(false);
                }

                //do not open Wrappers for deleted Descriptors
                if (wrapper.FileDescriptor != null)
                {
                    if (wrapper.FileDescriptor.MarkForDelete)
                    {
                        return(false);
                    }
                }

                TD.SandDock.DockControl doc = null;
                bool add = !overload;
                if (overload)
                {
                    doc = dc.SelectedPage;
                }
                if (doc == null)
                {
                    add                 = true;
                    doc                 = new TD.SandDock.TabPage();
                    doc.AllowClose      = true;
                    doc.AllowDockCenter = true;
                }
                else if (!this.UnloadWrapper(doc))
                {
                    return(false);
                }

                doc.Text = wrapper.ResourceName;
                doc.Tag  = wrapper;

                wrapper.FileDescriptor.Deleted         += new EventHandler(DeletedDescriptor);
                wrapper.FileDescriptor.ChangedUserData += new SimPe.Events.PackedFileChanged(FileDescriptor_ChangedUserData);

                doc.Text = wrapper.ResourceName;

                SimPe.Interfaces.Plugin.IPackedFileUI uiHandler = wrapper.UIHandler;
                Control pan = uiHandler == null ? null : wrapper.UIHandler.GUIHandle;
                if (pan != null)
                {
                    doc.FloatingSize    = pan.Size;
                    doc.AllowFloat      = true;
                    doc.AllowDockBottom = true;
                    doc.AllowDockLeft   = true;
                    doc.AllowDockRight  = true;
                    doc.AllowDockTop    = true;
                    doc.AllowDockCenter = true;
                    doc.AllowCollapse   = true;

                    if (add)
                    {
                        dc.TabPages.Add(doc);
                    }
                    pan.Parent  = doc;
                    pan.Left    = 0;
                    pan.Top     = 0;
                    pan.Width   = doc.ClientRectangle.Width;
                    pan.Height  = doc.ClientRectangle.Height;
                    pan.Dock    = System.Windows.Forms.DockStyle.Fill;
                    pan.Visible = true;

                    //pan.Anchor = AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Top;


                    if (add)
                    {
                        doc.Closing += new TD.SandDock.DockControlClosingEventHandler(CloseResourceDocument);
                    }
                    dc.SelectedPage = (TD.SandDock.TabPage)doc;
                    doc.Manager     = dc.Manager;
                    doc.LayoutSystem.LockControls = false;


                    loaded[fii] = doc;

                    if (!wrapper.AllowMultipleInstances)
                    {
                        single[wrapper.GetType().ToString()] = fii;
                    }
                    wrapper.LoadUI();
                }

                return(true);
            }

            return(false);
        }
示例#22
0
 /// <summary>
 /// Removes the Resource from the internal storage
 /// </summary>
 /// <param name="fii"></param>
 /// <param name="wrapper"></param>
 public void RemoveResource(SimPe.Interfaces.Scenegraph.IScenegraphFileIndexItem fii, SimPe.Interfaces.Plugin.IFileWrapper wrapper)
 {
     if (fii != null)
     {
         loaded.Remove(fii);
         if (wrapper != null)
         {
             single.Remove(wrapper.GetType().ToString());
         }
     }
 }