예제 #1
0
 private static void BuildSubThemeForMap(ThemeNode node, IMap map)
 {
     SubThemeNode newNode = new SubThemeNode(map.Name, node, new ThemeData(null, "Map Data Frame", null), null, null, null);
     node.Add(newNode);
     int count = map.LayerCount;
     for (int i = 0; i < count; i++)
         BuildSubThemeForLayer(newNode, map.Layer[i]);
 }
예제 #2
0
 public static void BuildSubThemesForMapDocument(ThemeNode node)
 {
     IMapDocument mapDoc = MapUtilities.GetMapDocumentFromFileName(node.Data.Path);
     int count = mapDoc.MapCount;
     for (int i = 0; i < count; i++)
         BuildSubThemeForMap(node, mapDoc.Map[i]);
     mapDoc.Close();
 }
예제 #3
0
 private static void BuildSubThemesForGroupLayer(ThemeNode node, ILayer layer)
 {
     // GroupLayer implements IGroupLayer and ICompositeLayer
     Debug.Assert(layer is ICompositeLayer, "BuildSubThemes must be called with a Group Layer.");
     if (!(layer is ICompositeLayer))
         return;
     var gl = (ICompositeLayer)layer;
     int count = gl.Count;
     for (int i = 0; i < count; i++)
         BuildSubThemeForLayer(node, gl.Layer[i]);
 }
예제 #4
0
        private static void BuildSubThemeForLayer(ThemeNode node, ILayer subLayer)
        {
            if (subLayer is GroupLayer)
            {
                SubThemeNode newNode = new SubThemeNode(subLayer.Name, node, new ThemeData(null, "Group Layer", null), null, null, null);
                node.Add(newNode);
                BuildSubThemesForGroupLayer(newNode, subLayer);
            }
            else
            {
                string dataType = LayerUtilities.GetLayerDescriptionFromLayer(subLayer);
                ThemeData data = new ThemeData(null, dataType, null);

                BuildThemeDataForLayer(data, subLayer);

                Metadata md = Metadata.Find(data);
                TmNode newNode = new SubThemeNode(subLayer.Name, node, data, md, null, null);
                node.Add(newNode);
            }
        }
예제 #5
0
        public static void BuildThemesForLayerFile(ThemeNode tmNode)
        {
            ILayer layer;
            try
            {
                layer = LayerUtilities.GetLayerFromLayerFile(tmNode.Data.Path);
            }
            catch (Exception ex)
            {
                Debug.Print("Unable to load layer file: " + tmNode.Data.Path + " " + ex.Message);
                tmNode.Data.Type = "Unable to load layer file (" + ex.Message + ")";
                return;
            }

            tmNode.Data.Type = LayerUtilities.GetLayerDescriptionFromLayer(layer);
            if (tmNode.Data.Type == "Group Layer")
            {
                BuildSubThemesForGroupLayer(tmNode, layer);
            }
            else
                BuildThemeDataForLayer(tmNode.Data, layer);
            LayerUtilities.CloseOpenLayerFile();
        }
예제 #6
0
        //respond to an item dropped in my treeview
        protected override void OnDragDrop(DragEventArgs e)
        {
            base.OnDragDrop(e);
            TmTreeNode destinationTreeNode = NodeAtEvent(e);
            TmNode destinationNode = null;

            if (destinationTreeNode != null)
                destinationNode = destinationTreeNode.TmNode;

            // TmNodeList drop
            if (e.Data.GetDataPresent("TmNodeList", false))
            {
                List<TmNode> nodes = e.Data.GetData("TmNodeList") as List<TmNode>;
                if (nodes != null && nodes.Count() > 0)
                {
                    foreach (TmNode node in nodes)
                    {
                        if (e.Effect == DragDropEffects.Move)
                            MoveNode(destinationNode, node);
                        if (e.Effect == DragDropEffects.Copy)
                            CopyNode(destinationNode, node);
                    }

                    if (e.Effect != DragDropEffects.None)
                    {
                        //SelectNode(destinationTreeNode);
                        destinationTreeNode.Expand();
                        return;
                    }
                }
            }

            // TmNode drop
            if (e.Data.GetDataPresent("TmNode", false))
            {
                // e.Effect == none for illeagal drops. 
                TmNode oldNode = e.Data.GetData("TmNode") as TmNode;
                Debug.Assert(oldNode != null, "Could not reserialize node from clipboard");
                if (oldNode != null)
                {
                    if (e.Effect == DragDropEffects.Move)
                        MoveNode(destinationNode, oldNode);
                    if (e.Effect == DragDropEffects.Copy)
                        CopyNode(destinationNode, oldNode);
                    if (e.Effect != DragDropEffects.None)
                    {
                        //SelectNode(destinationTreeNode);
                        destinationTreeNode.Expand();
                        return;
                    }
                }
            }

            // FileDrop
            if (e.Data.GetDataPresent(DataFormats.FileDrop))
            {
                string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
                TmTreeNode newTreeNode = null;
                foreach (string file in files)
                {
                    //FIXME - determine if this is a Theme or a ThemeList
                    //currently assuming it is a theme.
                    TmNode newNode = new ThemeNode(Path.GetFileNameWithoutExtension(file), file);
                    try
                    {
                        // May need to load to query arc objects which could throw any number of exceptions.
                        newNode.Reload();
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show("Unable to load the theme properties" + ex);
                    }

                    if (destinationNode == null)
                        newTreeNode = Add(newNode);
                    else
                        destinationNode.Add(newNode);
                }
                if (newTreeNode != null)
                    SelectNode(newTreeNode);
                else
                {
                    SelectNode(destinationTreeNode);
                    destinationTreeNode.Expand();
                }
                return;
            }

            // Text Drop
            if (e.Data.GetDataPresent(DataFormats.Text))
            {
                string txt = (string)e.Data.GetData(DataFormats.Text);

                TmNode newNode = new CategoryNode(txt);
                if (destinationNode == null)
                    SelectNode(Add(newNode));
                else
                {
                    destinationNode.Add(newNode);
                    SelectNode(destinationTreeNode);
                    destinationTreeNode.Expand();
                }
            }
        }
예제 #7
0
        private void PasteAsFiles()
        {
            TmNode currentNode = GetCurrentTmNode();
            StringCollection files = Clipboard.GetFileDropList();
            foreach (string file in files)
            {
                string basename = Path.GetFileNameWithoutExtension(file);
                //assume this file is a valid theme
                //FIXME - determine valid theme or themelist; reject otherwise.
                TmNode newNode = new ThemeNode(basename, file);
                try
                {
                    // May need to load to query arc objects which could throw any number of exceptions.
                    newNode.Reload();
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Unable to load the theme properties" + ex);
                }

                if (currentNode == null)
                    Add(newNode);
                else
                    currentNode.Add(newNode);
            }
        }
예제 #8
0
        private void LoadTreeFromXML(XElement xele, TmTreeView tv)
        {
            TmNode node;
            foreach (XElement xnode in xele.Elements(ThemeListNode.TypeString))
            {
                node = new ThemeListNode();
                node.Load(xnode, false); // Add only the first node
                tv.Add(node);
            }

            foreach (XElement xnode in xele.Elements(CategoryNode.TypeString))
            {
                node = new CategoryNode();
                node.BeginUpdate();
                node.Load(xnode, true); // Add entire branch
                node.UpdateAge();
                node.EndUpdate();
                tv.Add(node);
            }

            foreach (XElement xnode in xele.Elements(ThemeNode.TypeString))
            {
                node = new ThemeNode();
                node.BeginUpdate();
                node.Load(xnode, true); // Add entire branch
                node.UpdateAge();
                node.EndUpdate();
                tv.Add(node);
            }
            tv.TextSortInit((string)xele.Attribute("sortorder"));
        }
예제 #9
0
        private void PopulateThemePropertyPanel(PropertiesForm form, ThemeNode node)
        {
            Debug.Assert(node.Data != null, "TMNode node has no no data object");
            Debug.Assert(node.Metadata != null, "TMNode node has no metadata object");

            form.themeName.DataBindings.Clear();
            form.themeFile.DataBindings.Clear();
            form.themeMetadata.DataBindings.Clear();
            form.themeTags.DataBindings.Clear();
            form.themeSummary.DataBindings.Clear();
            form.themeDescription.DataBindings.Clear();
            form.themePubDate.DataBindings.Clear();
            form.themeDataType.DataBindings.Clear();
            form.themeDataSource.DataBindings.Clear();

            form.themeName.DataBindings.Add(new Binding("Text", node, "Name"));
            form.themeFile.DataBindings.Add(new Binding("Text", node.Data, "Path"));
            form.themeDataType.DataBindings.Add(new Binding("Text", node.Data, "Type"));
            form.themeDataSource.DataBindings.Add(new Binding("Text", node.Data, "DataSource"));
            form.themeMetadata.DataBindings.Add(new Binding("Text", node.Metadata, "Path"));
            form.themeTags.DataBindings.Add(new Binding("Text", node, "Tags"));
            form.themeSummary.DataBindings.Add(new Binding("Text", node, "Summary"));
            form.themeDescription.DataBindings.Add(new Binding("Text", node, "Description"));
            form.themePubDate.DataBindings.Add(new Binding("Value", node, "PubDate"));

            if (node is SubThemeNode)
            {
                form.themeName.Enabled = false;
                form.themeFile.Enabled = false;
                form.themeDataType.Enabled = false;
                form.reloadThemeButton.Visible = false;
                form.themeFileButton.Visible = false;
            }
            else
            {
                form.themeName.Enabled = true;
                form.themeFile.Enabled = true;
                form.themeDataType.Enabled = true;
                form.reloadThemeButton.Visible = true;
                form.themeFileButton.Visible = true;
            }
        }
예제 #10
0
        public void Load(XElement xele, bool recurse)
        {
            if (xele == null)
                throw new ArgumentNullException("xele");

            //Kind was already set when node was created.  Set all other properties
            Name = (string)xele.Attribute("name");
            XElement data = xele.Element("tags");
            Tags = data == null ? null : data.Value;
            data = xele.Element("summary");
            Summary = data == null ? null : data.Value;
            data = xele.Element("description");
            Description = data == null ? null : data.Value;
            data = xele.Element("pubdate");
            if (data != null)
            {
                DateTime temp;
                if (DateTime.TryParse(data.Value, out temp))
                    if (this is ThemeNode)
                        ((ThemeNode)this).PubDate = temp;
            }

            data = xele.Element("data");
            if (data != null)
            {
                // Ignore data elements for themelists.
                var themeNode = this as ThemeNode;
                if (themeNode != null)
                    (themeNode).Data = ThemeData.Load(data);
                var themeListNode = this as ThemeListNode;
                if (themeListNode != null)
                    (themeListNode).FilePath = data.Value;
            }

            data = xele.Element("metadata");
            if (data != null)
                Metadata = Metadata.Load(data);

            if (recurse)
            {
                TmNode childNode;

                foreach (XElement xnode in xele.Elements(CategoryNode.TypeString))
                {
                    childNode = new CategoryNode();
                    Add(childNode);
                    childNode.Load(xnode);
                }

                foreach (XElement xnode in xele.Elements(ThemeNode.TypeString))
                {
                    if (this is SubThemeNode || this is ThemeNode)
                        childNode = new SubThemeNode();
                    else
                        childNode = new ThemeNode();
                    Add(childNode);
                    childNode.Load(xnode);
                }
            }
        }