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]); }
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(); }
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]); }
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); } }
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(); }
//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(); } } }
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); } }
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")); }
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; } }
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); } } }