From: <ju...@us...> - 2006-07-20 00:33:34
|
Revision: 618 Author: julienq Date: 2006-07-19 17:33:09 -0700 (Wed, 19 Jul 2006) ViewCVS: http://svn.sourceforge.net/urakawa/?rev=618&view=rev Log Message: ----------- Renaming section is now an event Modified Paths: -------------- trunk/urakawa/application/Obi/Obi/Obi.csproj trunk/urakawa/application/Obi/Obi/Project.cs trunk/urakawa/application/Obi/Obi/UserControls/ICoreTreeView.cs trunk/urakawa/application/Obi/Obi/UserControls/ProjectPanel.cs trunk/urakawa/application/Obi/Obi/UserControls/TOCPanel.cs Added Paths: ----------- trunk/urakawa/application/Obi/Obi/Events/Node/RenameSectionEventArgs.cs trunk/urakawa/application/Obi/Obi/Events/Sync/RenamedNodeEventArgs.cs Removed Paths: ------------- trunk/urakawa/application/Obi/Obi/Events/Sync/RenamedNode.cs Added: trunk/urakawa/application/Obi/Obi/Events/Node/RenameSectionEventArgs.cs =================================================================== --- trunk/urakawa/application/Obi/Obi/Events/Node/RenameSectionEventArgs.cs (rev 0) +++ trunk/urakawa/application/Obi/Obi/Events/Node/RenameSectionEventArgs.cs 2006-07-20 00:33:09 UTC (rev 618) @@ -0,0 +1,41 @@ +using System; +using System.Collections.Generic; +using System.Text; + +using urakawa.core; + +namespace Obi.Events.Node +{ + public delegate void RenameSectionHandler(object sender, RenameSectionEventArgs e); + + /// <summary> + /// This event is fired when a view wants to rename a section. + /// </summary> + public class RenameSectionEventArgs : EventArgs + { + private CoreNode mNode; // the node to rename + private string mLabel; // the new text label of the node + + public CoreNode Node + { + get + { + return mNode; + } + } + + public string Label + { + get + { + return mLabel; + } + } + + public RenameSectionEventArgs(CoreNode node, string label) + { + mNode = node; + mLabel = label; + } + } +} Property changes on: trunk/urakawa/application/Obi/Obi/Events/Node/RenameSectionEventArgs.cs ___________________________________________________________________ Name: svn:executable + * Deleted: trunk/urakawa/application/Obi/Obi/Events/Sync/RenamedNode.cs =================================================================== --- trunk/urakawa/application/Obi/Obi/Events/Sync/RenamedNode.cs 2006-07-20 00:20:16 UTC (rev 617) +++ trunk/urakawa/application/Obi/Obi/Events/Sync/RenamedNode.cs 2006-07-20 00:33:09 UTC (rev 618) @@ -1,41 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Text; - -using urakawa.core; - -namespace Obi.Events.Sync -{ - public delegate void RenamedNodeHandler(object sender, RenamedNodeEventArgs e); - - /// <summary> - /// This event is fired when a node has been renamed. - /// </summary> - public class RenamedNodeEventArgs : EventArgs - { - private CoreNode mNode; // the renamed node - private string mLabel; // its new label (easier to find this way :)) - - public CoreNode Node - { - get - { - return mNode; - } - } - - public string Label - { - get - { - return mLabel; - } - } - - public RenamedNodeEventArgs(CoreNode node, string label) - { - mNode = node; - mLabel = label; - } - } -} Copied: trunk/urakawa/application/Obi/Obi/Events/Sync/RenamedNodeEventArgs.cs (from rev 617, trunk/urakawa/application/Obi/Obi/Events/Sync/RenamedNode.cs) =================================================================== --- trunk/urakawa/application/Obi/Obi/Events/Sync/RenamedNodeEventArgs.cs (rev 0) +++ trunk/urakawa/application/Obi/Obi/Events/Sync/RenamedNodeEventArgs.cs 2006-07-20 00:33:09 UTC (rev 618) @@ -0,0 +1,51 @@ +using System; +using System.Collections.Generic; +using System.Text; + +using urakawa.core; + +namespace Obi.Events.Sync +{ + public delegate void RenamedNodeHandler(object sender, RenamedNodeEventArgs e); + + /// <summary> + /// This event is fired when a node has been renamed. + /// </summary> + public class RenamedNodeEventArgs : EventArgs + { + private object mOrigin; // the originator of the request + private CoreNode mNode; // the renamed node + private string mLabel; // its new label (easier to find this way :)) + + public object Origin + { + get + { + return mOrigin; + } + } + + public CoreNode Node + { + get + { + return mNode; + } + } + + public string Label + { + get + { + return mLabel; + } + } + + public RenamedNodeEventArgs(object origin, CoreNode node, string label) + { + mOrigin = origin; + mNode = node; + mLabel = label; + } + } +} Modified: trunk/urakawa/application/Obi/Obi/Obi.csproj =================================================================== --- trunk/urakawa/application/Obi/Obi/Obi.csproj 2006-07-20 00:20:16 UTC (rev 617) +++ trunk/urakawa/application/Obi/Obi/Obi.csproj 2006-07-20 00:33:09 UTC (rev 618) @@ -103,10 +103,12 @@ <Compile Include="Events\Node\LimitViewToSectionDepthEventArgs.cs" /> <Compile Include="Events\Node\MoveSectionDownEventArgs.cs" /> <Compile Include="Events\Node\MoveSectionUpEventArgs.cs" /> + <Compile Include="Events\Node\RenameSectionEventArgs.cs" /> <Compile Include="Events\Project\StateChangedEventArgs.cs" /> <Compile Include="Events\Sync\AddedChildNodeEventArgs.cs" /> <Compile Include="Events\Sync\AddedSiblingNodeEventArgs.cs" /> <Compile Include="Events\Sync\DeletedNodeEventArgs.cs" /> + <Compile Include="Events\Sync\RenamedNodeEventArgs.cs" /> <Compile Include="Localizer.cs" /> <Compile Include="messages.Designer.cs"> <AutoGen>True</AutoGen> Modified: trunk/urakawa/application/Obi/Obi/Project.cs =================================================================== --- trunk/urakawa/application/Obi/Obi/Project.cs 2006-07-20 00:20:16 UTC (rev 617) +++ trunk/urakawa/application/Obi/Obi/Project.cs 2006-07-20 00:33:09 UTC (rev 618) @@ -1,4 +1,5 @@ using System; +using System.Collections; using System.Collections.Generic; using System.Text; @@ -31,6 +32,7 @@ public event Events.Sync.AddedChildNodeHandler AddedChildNode; public event Events.Sync.AddedSiblingNodeHandler AddedSiblingNode; public event Events.Sync.DeletedNodeHandler DeletedNode; + public event Events.Sync.RenamedNodeHandler RenamedNode; /// <summary> /// This flag is set to true if the project contains modifications that have not been saved. @@ -328,6 +330,46 @@ //mUnsaved = true; } + /// <summary> + /// Change the text label of a node. + /// </summary> + public void RenameNode(object sender, Events.Node.RenameSectionEventArgs e) + { + GetTextMedia(e.Node).setText(e.Label); + RenamedNode(this, new Events.Sync.RenamedNodeEventArgs(sender, e.Node, e.Label)); + mUnsaved = true; + } + #endregion + + /// <summary> + /// Get the text media of a core node. The result can then be used to get or set the text of a node. + /// Original comments: A helper function to get the text from the given <see cref="CoreNode"/>. + /// The text channel which contains the desired text will be named so that we know + /// what its purpose is (ie, "DefaultText" or "PrimaryText") + /// @todo + /// Otherwise we should use the default, only, or randomly first text channel found. + /// </summary> + /// <remarks>This replaces get/setCoreNodeText. E.g. getCoreNodeText(node) = GetTextMedia(node).getText()</remarks> + /// <remarks>This is taken from TOCPanel, and should probably be a node method; + /// we would subclass CoreNode fort his.</remarks> + /// <param name="node">The node which text media we are interested in.</param> + /// <returns>The text media found, or null if none.</returns> + public static TextMedia GetTextMedia(CoreNode node) + { + ChannelsProperty channelsProp = (ChannelsProperty)node.getProperty(typeof(ChannelsProperty)); + Channel textChannel; + IList channelsList = channelsProp.getListOfUsedChannels(); + for (int i = 0; i < channelsList.Count; i++) + { + string channelName = ((IChannel)channelsList[i]).getName(); + if (channelName == Project.TEXT_CHANNEL) + { + textChannel = (Channel)channelsList[i]; + return (TextMedia)channelsProp.getMedia(textChannel); + } + } + return null; + } } } \ No newline at end of file Modified: trunk/urakawa/application/Obi/Obi/UserControls/ICoreTreeView.cs =================================================================== --- trunk/urakawa/application/Obi/Obi/UserControls/ICoreTreeView.cs 2006-07-20 00:20:16 UTC (rev 617) +++ trunk/urakawa/application/Obi/Obi/UserControls/ICoreTreeView.cs 2006-07-20 00:33:09 UTC (rev 618) @@ -27,14 +27,14 @@ /// </summary> /// <param name="newNode">The newly created node.</param> /// <param name="relNode">Its preceding sibling node.</param> - void AddNewSiblingSection(CoreNode newNode, CoreNode relNode); + //void AddNewSiblingSection(CoreNode newNode, CoreNode relNode); /// <summary> /// Add a new heading as a child of the relative node. /// </summary> /// <param name="newNode">The new heading to add to the tree</param> /// <param name="relNode">The parent node for the new heading</param> - void AddNewChildSection(CoreNode newNode, CoreNode relNode); + //void AddNewChildSection(CoreNode newNode, CoreNode relNode); void MoveCurrentSectionUp(); @@ -47,6 +47,6 @@ /// <summary> /// Edit the label of the currently selected heading. /// </summary> - void BeginEditingNodeLabel(CoreNode node); + //void BeginEditingNodeLabel(CoreNode node); } } Modified: trunk/urakawa/application/Obi/Obi/UserControls/ProjectPanel.cs =================================================================== --- trunk/urakawa/application/Obi/Obi/UserControls/ProjectPanel.cs 2006-07-20 00:20:16 UTC (rev 617) +++ trunk/urakawa/application/Obi/Obi/UserControls/ProjectPanel.cs 2006-07-20 00:33:09 UTC (rev 618) @@ -36,6 +36,8 @@ mProject.AddedSiblingNode += new Events.Sync.AddedSiblingNodeHandler(mTOCPanel.SyncAddedSiblingNode); mTOCPanel.MoveSectionUp += new Events.Node.MoveSectionUpHandler(mProject.MoveNodeUp); mTOCPanel.DeleteSection += new Events.Node.DeleteSectionHandler(mProject.RemoveNode); + mTOCPanel.RenameSection += new Events.Node.RenameSectionHandler(mProject.RenameNode); + mProject.RenamedNode += new Events.Sync.RenamedNodeHandler(mTOCPanel.SyncRenamedNode); } } } Modified: trunk/urakawa/application/Obi/Obi/UserControls/TOCPanel.cs =================================================================== --- trunk/urakawa/application/Obi/Obi/UserControls/TOCPanel.cs 2006-07-20 00:20:16 UTC (rev 617) +++ trunk/urakawa/application/Obi/Obi/UserControls/TOCPanel.cs 2006-07-20 00:33:09 UTC (rev 618) @@ -28,6 +28,7 @@ public event Events.Node.LimitViewToSectionDepthHandler LimitDepthOfView; public event Events.Node.MoveSectionDownHandler MoveSectionDown; public event Events.Node.MoveSectionUpHandler MoveSectionUp; + public event Events.Node.RenameSectionHandler RenameSection; /// <summary> /// Test whether a node is currently selected or not. @@ -79,7 +80,7 @@ { if (node.getParent() != null) { - string label = GetTextMedia((CoreNode)node).getText(); + string label = Project.GetTextMedia((CoreNode)node).getText(); System.Windows.Forms.TreeNode newTreeNode; if (node.getParent().getParent() != null) { @@ -128,7 +129,7 @@ /// </summary> /// <param name="newNode">The new heading to add to the tree</param> /// <param name="relNode">The relative sibling node</param> - public void AddNewSiblingSection(CoreNode newNode, CoreNode relNode) + /*public void AddNewSiblingSection(CoreNode newNode, CoreNode relNode) { System.Windows.Forms.TreeNode relTreeNode = findTreeNodeFromCoreNode(relNode); string label = GetTextMedia(newNode).getText(); @@ -149,7 +150,7 @@ newTreeNode.ExpandAll(); newTreeNode.EnsureVisible(); tocTree.SelectedNode = newTreeNode; - } + }*/ /// <summary> /// Add a new heading as a child of the relative node. @@ -164,7 +165,7 @@ /// </summary> /// <param name="newNode">The new heading to add to the tree</param> /// <param name="relNode">The parent node for the new heading</param> - public void AddNewChildSection(CoreNode newNode, CoreNode relNode) + /*public void AddNewChildSection(CoreNode newNode, CoreNode relNode) { System.Windows.Forms.TreeNode newTreeNode; string label = GetTextMedia(newNode).getText(); @@ -181,7 +182,7 @@ newTreeNode.ExpandAll(); newTreeNode.EnsureVisible(); tocTree.SelectedNode = newTreeNode; - } + }*/ /// <summary> /// Delete a section from the table contents. The core node was removed from the core tree. @@ -200,12 +201,12 @@ /// Begin editing the label (activate the edit cursor) for the currently /// selected section heading node. /// </summary> - public void BeginEditingNodeLabel(CoreNode node) + /*public void BeginEditingNodeLabel(CoreNode node) { System.Windows.Forms.TreeNode treeNode = findTreeNodeFromCoreNode(node); treeNode.EnsureVisible(); treeNode.BeginEdit(); - } + }*/ /* * you might move left if you go up and down @@ -438,29 +439,32 @@ new Events.Node.DecreaseSectionLevelEventArgs(GetSelectedSection())); } + /// <summary> + /// The user has edited a label in the tree, so an event is raised to rename the node. + /// </summary> private void tocTree_AfterLabelEdit(object sender, NodeLabelEditEventArgs e) { - // this will likely be replaced with the raising of an event - // to signal that the label has changed - // if a change has actually occurred, the label is not null. if (e.Label != null) { - CoreNode node = (CoreNode)e.Node.Tag; if (e.Label == "") { + // Normally, the toolkit would cause an exception for an empty string; + // but it's easier to catch it here and cancel the event. + // In any case I am not sure that the behavior of the toolkit is good + // in this situation. e.CancelEdit = true; MessageBox.Show(Localizer.Message("empty_label_warning_text"), Localizer.Message("empty_label_warning_caption"), - MessageBoxButtons.OK, MessageBoxIcon.Information); + MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } - else + else if (e.Label != Project.GetTextMedia((CoreNode)e.Node.Tag).getText()) { - GetTextMedia(node).setText(e.Label); + RenameSection(this, new Events.Node.RenameSectionEventArgs((CoreNode)e.Node.Tag, e.Label)); } } } - /// <summary> + /// <summary> /// helper function to get a channel based on its name /// </summary> /// <param name="node">the node (points to its own presentation)</param> @@ -508,7 +512,7 @@ for (int i = 0; i < treeNodes.GetLength(0); i++) { //check the tag field and the text label - if (treeNodes[i].Tag == node && treeNodes[i].Text == GetTextMedia(node).getText()) + if (treeNodes[i].Tag == node && treeNodes[i].Text == Project.GetTextMedia(node).getText()) { foundNode = treeNodes[i]; break; @@ -518,7 +522,7 @@ if (foundNode == null) { throw new Exception(String.Format("Could not find tree node matching core node #{0} with label \"{1}\".", - node.GetHashCode(), GetTextMedia(node).getText())); + node.GetHashCode(), Project.GetTextMedia(node).getText())); } return foundNode; } @@ -538,34 +542,6 @@ } - /// <summary> - /// Get the text media of a core node. The result can then be used to get or set the text of a node. - /// Original comments: A helper function to get the text from the given <see cref="CoreNode"/>. - /// The text channel which contains the desired text will be named so that we know - /// what its purpose is (ie, "DefaultText" or "PrimaryText") - /// @todo - /// Otherwise we should use the default, only, or randomly first text channel found. - /// </summary> - /// <remarks>This replaces get/setCoreNodeText. E.g. getCoreNodeText(node) = GetTextMedia(node).getText()</remarks> - /// <param name="node">The node which text media we are interested in.</param> - /// <returns>The text media found, or null if none.</returns> - private static TextMedia GetTextMedia(CoreNode node) - { - ChannelsProperty channelsProp = (ChannelsProperty)node.getProperty(typeof(ChannelsProperty)); - Channel textChannel; - IList channelsList = channelsProp.getListOfUsedChannels(); - for (int i = 0; i < channelsList.Count; i++) - { - string channelName = ((IChannel)channelsList[i]).getName(); - if (channelName == Project.TEXT_CHANNEL) - { - textChannel = (Channel)channelsList[i]; - return (TextMedia)channelsProp.getMedia(textChannel); - } - } - return null; - } - #region Sync event handlers /// <summary> @@ -575,7 +551,7 @@ internal void SyncAddedChildNode(object sender, Events.Sync.AddedChildNodeEventArgs e) { System.Windows.Forms.TreeNode newTreeNode; - string label = GetTextMedia(e.Node).getText(); + string label = Project.GetTextMedia(e.Node).getText(); if (e.Node.getParent().getParent() != null) { System.Windows.Forms.TreeNode relTreeNode = findTreeNodeFromCoreNode((CoreNode)e.Node.getParent()); @@ -595,7 +571,7 @@ internal void SyncAddedSiblingNode(object sender, Events.Sync.AddedSiblingNodeEventArgs e) { System.Windows.Forms.TreeNode relTreeNode = findTreeNodeFromCoreNode(e.ContextNode); - string label = GetTextMedia(e.Node).getText(); + string label = Project.GetTextMedia(e.Node).getText(); //add as a sibling System.Windows.Forms.TreeNodeCollection siblingCollection = null; if (relTreeNode.Parent != null) @@ -616,6 +592,15 @@ newTreeNode.BeginEdit(); } + internal void SyncRenamedNode(object sender, Events.Sync.RenamedNodeEventArgs e) + { + if (e.Origin != this) + { + System.Windows.Forms.TreeNode treeNode = findTreeNodeFromCoreNode(e.Node); + treeNode.Text = e.Label; + } + } + #endregion } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |