From: <mar...@us...> - 2006-08-11 05:08:14
|
Revision: 841 Author: marisademeglio Date: 2006-08-10 22:07:59 -0700 (Thu, 10 Aug 2006) ViewCVS: http://svn.sourceforge.net/urakawa/?rev=841&view=rev Log Message: ----------- First pass at TOC clipboard features Modified Paths: -------------- trunk/urakawa/application/Obi/Obi/Events/Node/AddedSectionNodeEventArgs.cs trunk/urakawa/application/Obi/Obi/Events/Node/NodeEventArgs.cs trunk/urakawa/application/Obi/Obi/Obi.csproj trunk/urakawa/application/Obi/Obi/Project.cs trunk/urakawa/application/Obi/Obi/UserControls/ProjectPanel.cs trunk/urakawa/application/Obi/Obi/UserControls/TOCPanel.Designer.cs trunk/urakawa/application/Obi/Obi/UserControls/TOCPanel.cs Added Paths: ----------- trunk/urakawa/application/Obi/Obi/Commands/TOC/CopySection.cs trunk/urakawa/application/Obi/Obi/Commands/TOC/CutSection.cs trunk/urakawa/application/Obi/Obi/Commands/TOC/PasteSection.cs Added: trunk/urakawa/application/Obi/Obi/Commands/TOC/CopySection.cs =================================================================== --- trunk/urakawa/application/Obi/Obi/Commands/TOC/CopySection.cs (rev 0) +++ trunk/urakawa/application/Obi/Obi/Commands/TOC/CopySection.cs 2006-08-11 05:07:59 UTC (rev 841) @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Text; + +using urakawa.core; + +namespace Obi.Commands.TOC +{ + class CopySection : Command + { + private Project mProject; + private CoreNode mNode; + + public override string Label + { + get + { + return Localizer.Message("copy_section_command_label"); + } + } + + public CopySection(Project project, CoreNode node) + { + mProject = project; + mNode = node; + } + + /// <summary> + /// ReDo: uncut the node + /// </summary> + public override void Do() + { + mProject.CopyTOCNode(mProject, mNode); + } + + /// <summary> + /// Undo: restore the node and its descendants. + /// </summary> + public override void Undo() + { + mProject.UndoCopyTOCNode(mNode); + } + } +} Added: trunk/urakawa/application/Obi/Obi/Commands/TOC/CutSection.cs =================================================================== --- trunk/urakawa/application/Obi/Obi/Commands/TOC/CutSection.cs (rev 0) +++ trunk/urakawa/application/Obi/Obi/Commands/TOC/CutSection.cs 2006-08-11 05:07:59 UTC (rev 841) @@ -0,0 +1,50 @@ +using System; +using System.Collections.Generic; +using System.Text; + +using urakawa.core; + +namespace Obi.Commands.TOC +{ + class CutSection : Command + { + private Project mProject; + private CoreNode mNode; + private CoreNode mParent; + private int mIndex; + private int mPosition; + + public override string Label + { + get + { + return Localizer.Message("cut_section_command_label"); + } + } + + public CutSection(Project project, CoreNode node, CoreNode parent, int index, int position) + { + mProject = project; + mNode = node; + mParent = parent; + mIndex = index; + mPosition = position; + } + + /// <summary> + /// ReDo: uncut the node + /// </summary> + public override void Do() + { + mProject.DoCutTOCNode(mProject, mNode); + } + + /// <summary> + /// Undo: restore the node and its descendants. + /// </summary> + public override void Undo() + { + mProject.UndoCutNode(mNode, mParent, mIndex, mPosition); + } + } +} Added: trunk/urakawa/application/Obi/Obi/Commands/TOC/PasteSection.cs =================================================================== --- trunk/urakawa/application/Obi/Obi/Commands/TOC/PasteSection.cs (rev 0) +++ trunk/urakawa/application/Obi/Obi/Commands/TOC/PasteSection.cs 2006-08-11 05:07:59 UTC (rev 841) @@ -0,0 +1,41 @@ +using System; +using System.Collections.Generic; +using System.Text; + +using urakawa.core; + +namespace Obi.Commands.TOC +{ + class PasteSection : Command + { + private Project mProject; + private CoreNode mParent; + private CoreNode mNode; + + public override string Label + { + get + { + return Localizer.Message("paste_section_command_label"); + } + } + + public PasteSection(Project project, CoreNode node, CoreNode parent) + { + mProject = project; + mParent = parent; + mNode = node; + } + + + public override void Do() + { + mProject.PasteTOCNode(mProject, mParent); + } + + public override void Undo() + { + mProject.RemoveNode(mProject, mNode); + } + } +} Modified: trunk/urakawa/application/Obi/Obi/Events/Node/AddedSectionNodeEventArgs.cs =================================================================== --- trunk/urakawa/application/Obi/Obi/Events/Node/AddedSectionNodeEventArgs.cs 2006-08-10 21:56:10 UTC (rev 840) +++ trunk/urakawa/application/Obi/Obi/Events/Node/AddedSectionNodeEventArgs.cs 2006-08-11 05:07:59 UTC (rev 841) @@ -7,6 +7,8 @@ namespace Obi.Events.Node { public delegate void AddedSectionNodeHandler(object sender, AddedSectionNodeEventArgs e); + public delegate void PastedSectionNodeHandler(object sender, AddedSectionNodeEventArgs e); + /// <summary> /// A section node was added. Modified: trunk/urakawa/application/Obi/Obi/Events/Node/NodeEventArgs.cs =================================================================== --- trunk/urakawa/application/Obi/Obi/Events/Node/NodeEventArgs.cs 2006-08-10 21:56:10 UTC (rev 840) +++ trunk/urakawa/application/Obi/Obi/Events/Node/NodeEventArgs.cs 2006-08-11 05:07:59 UTC (rev 841) @@ -14,10 +14,16 @@ public delegate void RequestToMoveNodeUpHandler(object sender, NodeEventArgs e); public delegate void RequestToMoveNodeDownHandler(object sender, NodeEventArgs e); public delegate void RequestToDeleteBlockHandler(object sender, NodeEventArgs e); + public delegate void RequestToCutNodeHandler(object sender, NodeEventArgs e); + public delegate void RequestToCopyNodeHandler(object sender, NodeEventArgs e); + public delegate void RequestToPasteNodeHandler(object sender, NodeEventArgs e); public delegate void DecreasedNodeLevelHandler(object sender, NodeEventArgs e); public delegate void DeletedNodeHandler(object sender, NodeEventArgs e); public delegate void ShallowDeletedNodeHandler(object sender, NodeEventArgs e); + public delegate void CutNodeHandler(object sender, NodeEventArgs e); + public delegate void CopiedNodeHandler(object sender, NodeEventArgs e); + public delegate void UndidPasteNodeHandler(object sender, NodeEventArgs e); public delegate void ImportedAssetHandler(object sender, NodeEventArgs e); public delegate void DeletedBlockHandler(object sender, NodeEventArgs e); Modified: trunk/urakawa/application/Obi/Obi/Obi.csproj =================================================================== --- trunk/urakawa/application/Obi/Obi/Obi.csproj 2006-08-10 21:56:10 UTC (rev 840) +++ trunk/urakawa/application/Obi/Obi/Obi.csproj 2006-08-11 05:07:59 UTC (rev 841) @@ -83,11 +83,14 @@ <Compile Include="Commands\Strips\DeletePhrase.cs" /> <Compile Include="Commands\Strips\RenamePhrase.cs" /> <Compile Include="Commands\TOC\AddSection.cs" /> + <Compile Include="Commands\TOC\CopySection.cs" /> + <Compile Include="Commands\TOC\CutSection.cs" /> <Compile Include="Commands\TOC\DecreaseSectionLevel.cs" /> <Compile Include="Commands\TOC\DeleteSection.cs" /> <Compile Include="Commands\TOC\IncreaseSectionLevel.cs" /> <Compile Include="Commands\TOC\MoveSectionDown.cs" /> <Compile Include="Commands\TOC\MoveSectionUp.cs" /> + <Compile Include="Commands\TOC\PasteSection.cs" /> <Compile Include="Commands\TOC\Rename.cs" /> <Compile Include="CustomProperties.cs" /> <Compile Include="Dialogs\About.cs"> Modified: trunk/urakawa/application/Obi/Obi/Project.cs =================================================================== --- trunk/urakawa/application/Obi/Obi/Project.cs 2006-08-10 21:56:10 UTC (rev 840) +++ trunk/urakawa/application/Obi/Obi/Project.cs 2006-08-11 05:07:59 UTC (rev 841) @@ -39,6 +39,8 @@ private string mLastPath; // last path to which the project was saved (see save as) private SimpleMetadata mMetadata; // metadata for this project + private CoreNode mClipboard; //clipboard for cut-copy-paste + public static readonly string XUKVersion = "obi-xuk-001"; // version of the Obi/XUK file public static readonly string AudioChannel = "obi.audio"; // canonical name of the audio channel public static readonly string TextChannel = "obi.text"; // canonical name of the text channel @@ -59,6 +61,15 @@ public event Events.Node.DeletedNodeHandler DeletedPhraseNode; // deleted a phrase node public event Events.Node.BlockChangedTimeHandler BlockChangedTime; // a block's time has changed + //md: toc clipboard stuff + public event Events.Node.CutNodeHandler CutTOCNode; + public event Events.Node.MovedNodeHandler UndidCutTOCNode; + public event Events.Node.CopiedNodeHandler CopiedTOCNode; + public event Events.Node.CopiedNodeHandler UndidCopyTOCNode; + public event Events.Node.PastedSectionNodeHandler PastedTOCNode; + public event Events.Node.UndidPasteNodeHandler UndidPasteTOCNode; + + /// <summary> /// This flag is set to true if the project contains modifications that have not been saved. /// </summary> @@ -127,6 +138,10 @@ mAssManager = null; mUnsaved = false; mXUKPath = null; + + //md: + mClipboard = null; + // Use our own property factory so that we can create custom properties getPresentation().setPropertyFactory(new ObiPropertyFactory(getPresentation())); } @@ -984,6 +999,140 @@ RenameNode(sender, e.Node, e.Label); } + //md 20060810 + public void CutTOCNodeRequested(object sender, Events.Node.NodeEventArgs e) + { + DoCutTOCNode(sender, e.Node); + } + + //md 20060810 + public void DoCutTOCNode(object origin, CoreNode node) + { + if (node == null) return; + + CoreNode parent = (CoreNode)node.getParent(); + Visitors.SectionNodePosition visitor = new Visitors.SectionNodePosition(node); + getPresentation().getRootNode().acceptDepthFirst(visitor); + //we need to save the state of the node before it is altered + Commands.TOC.CutSection command = null; + + if (origin != this) + { + command = new Commands.TOC.CutSection + (this, node, parent, parent.indexOf(node), visitor.Position); + } + + mClipboard = node; + node.detach(); + + CutTOCNode(this, new Events.Node.NodeEventArgs(origin, node)); + + mUnsaved = true; + StateChanged(this, new Events.Project.StateChangedEventArgs(Events.Project.StateChange.Modified)); + if (command != null) CommandCreated(this, new Events.Project.CommandCreatedEventArgs(command)); + } + + //md 20060810 + public void UndoCutNode(CoreNode node, CoreNode parent, int index, int position) + { + if (node.getParent() != null) node.detach(); + parent.insert(node, index); + + UndidCutTOCNode(this, new Events.Node.MovedNodeEventArgs(this, node, parent, index, position)); + mUnsaved = true; + StateChanged(this, new Events.Project.StateChangedEventArgs(Events.Project.StateChange.Modified)); + } + + //md 20060810 + public void CopyTOCNodeRequested(object sender, Events.Node.NodeEventArgs e) + { + CopyTOCNode(sender, e.Node); + } + + //md 20060810 + public void CopyTOCNode(object origin, CoreNode node) + { + if (node == null) return; + + Commands.TOC.CopySection command = null; + + if (origin != this) + { + command = new Commands.TOC.CopySection(this, node); + } + + //the actual copy operation + mClipboard = node.copy(true); + + CopiedTOCNode(this, new Events.Node.NodeEventArgs(origin, node)); + + mUnsaved = true; + StateChanged(this, new Events.Project.StateChangedEventArgs(Events.Project.StateChange.Modified)); + if (command != null) CommandCreated(this, new Events.Project.CommandCreatedEventArgs(command)); + } + + //md 20060810 + public void UndoCopyTOCNode(CoreNode node) + { + mClipboard = null; + + UndidCopyTOCNode(this, new Events.Node.NodeEventArgs(this, node)); + + mUnsaved = true; + StateChanged(this, new Events.Project.StateChangedEventArgs(Events.Project.StateChange.Modified)); + } + + //md 20060810 + public void PasteTOCNodeRequested(object sender, Events.Node.NodeEventArgs e) + { + PasteTOCNode(sender, e.Node); + } + + //md 20060810 + //"paste" will paste the clipboard contents as the first child of the given node + public void PasteTOCNode(object origin, CoreNode parent) + { + if (parent == null) return; + + Commands.TOC.PasteSection command = null; + + CoreNode pastedSection = mClipboard; + + //don't clear the clipboard, we can use it again + + if (origin != this) + { + command = new Commands.TOC.PasteSection(this, pastedSection, parent); + } + + //the actual paste operation + parent.insert(pastedSection, 0); + + Visitors.SectionNodePosition visitor = new Visitors.SectionNodePosition(pastedSection); + getPresentation().getRootNode().acceptDepthFirst(visitor); + + PastedTOCNode(this, new Events.Node.AddedSectionNodeEventArgs + (origin, pastedSection, parent.indexOf(pastedSection), visitor.Position)); + + mUnsaved = true; + StateChanged(this, new Events.Project.StateChangedEventArgs(Events.Project.StateChange.Modified)); + if (command != null) CommandCreated(this, new Events.Project.CommandCreatedEventArgs(command)); + } + + //md 20060810 + public void UndoPasteTOCNode(CoreNode node) + { + mClipboard = node.copy(true); + + node.detach(); + + UndidPasteTOCNode(this, new Events.Node.NodeEventArgs(this, mClipboard)); + + mUnsaved = true; + StateChanged(this, new Events.Project.StateChangedEventArgs(Events.Project.StateChange.Modified)); + + } + // Find the channel and set the media object. // As this may fail, return true if the change was really made or false otherwise. // Throw an exception if the channel could not be found (JQ) Modified: trunk/urakawa/application/Obi/Obi/UserControls/ProjectPanel.cs =================================================================== --- trunk/urakawa/application/Obi/Obi/UserControls/ProjectPanel.cs 2006-08-10 21:56:10 UTC (rev 840) +++ trunk/urakawa/application/Obi/Obi/UserControls/ProjectPanel.cs 2006-08-11 05:07:59 UTC (rev 841) @@ -74,6 +74,19 @@ mStripManagerPanel.DeleteBlock -= new Events.Node.RequestToDeleteBlockHandler(mProject.DeletePhraseNodeRequested); mProject.DeletedPhraseNode -= new Events.Node.DeletedNodeHandler(mStripManagerPanel.SyncDeletedPhraseNode); + + //md: toc clipboard features + mTOCPanel.RequestToCutNode -= new Events.Node.RequestToCutNodeHandler(mProject.CutTOCNodeRequested); + mProject.CutTOCNode -= new Events.Node.CutNodeHandler(mTOCPanel.SyncCutNode); + mProject.UndidCutTOCNode -= new Events.Node.MovedNodeHandler(mTOCPanel.SyncUndidCutNode); + + mTOCPanel.RequestToCopyNode -= new Events.Node.RequestToCopyNodeHandler(mProject.CopyTOCNodeRequested); + mProject.CopiedTOCNode -= new Events.Node.CopiedNodeHandler(mTOCPanel.SyncCopiedNode); + mProject.UndidCopyTOCNode -= new Events.Node.CopiedNodeHandler(mTOCPanel.SyncUndidCopyNode); + + mTOCPanel.RequestToPasteNode -= new Events.Node.RequestToPasteNodeHandler(mProject.PasteTOCNodeRequested); + mProject.PastedTOCNode -= new Events.Node.PastedSectionNodeHandler(mTOCPanel.SyncPastedNode); + mProject.UndidPasteTOCNode -= new Events.Node.UndidPasteNodeHandler(mTOCPanel.SyncUndidPasteNode); } // Set up the handlers for the new project if (value != null) @@ -124,6 +137,20 @@ mStripManagerPanel.DeleteBlock += new Events.Node.RequestToDeleteBlockHandler(value.DeletePhraseNodeRequested); value.DeletedPhraseNode += new Events.Node.DeletedNodeHandler(mStripManagerPanel.SyncDeletedPhraseNode); + + //md: clipboard in the TOC + mTOCPanel.RequestToCutNode += new Events.Node.RequestToCutNodeHandler(value.CutTOCNodeRequested); + value.CutTOCNode += new Events.Node.CutNodeHandler(mTOCPanel.SyncCutNode); + value.UndidCutTOCNode += new Events.Node.MovedNodeHandler(mTOCPanel.SyncUndidCutNode); + + mTOCPanel.RequestToCopyNode += new Events.Node.RequestToCopyNodeHandler(value.CopyTOCNodeRequested); + value.CopiedTOCNode += new Events.Node.CopiedNodeHandler(mTOCPanel.SyncCopiedNode); + value.UndidCopyTOCNode += new Events.Node.CopiedNodeHandler(mTOCPanel.SyncUndidCopyNode); + + mTOCPanel.RequestToPasteNode += new Events.Node.RequestToPasteNodeHandler(value.PasteTOCNodeRequested); + value.PastedTOCNode += new Events.Node.PastedSectionNodeHandler(mTOCPanel.SyncPastedNode); + value.UndidPasteTOCNode += new Events.Node.UndidPasteNodeHandler(mTOCPanel.SyncUndidPasteNode); + } mProject = value; mSplitContainer.Visible = mProject != null; Modified: trunk/urakawa/application/Obi/Obi/UserControls/TOCPanel.Designer.cs =================================================================== --- trunk/urakawa/application/Obi/Obi/UserControls/TOCPanel.Designer.cs 2006-08-10 21:56:10 UTC (rev 840) +++ trunk/urakawa/application/Obi/Obi/UserControls/TOCPanel.Designer.cs 2006-08-11 05:07:59 UTC (rev 841) @@ -34,6 +34,10 @@ this.mAddSectionAtSameLevelToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.mAddSubSectionToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); + this.mCutSectionToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.mCopySectionToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.mPasteSectionToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator(); this.mDeleteSectionToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.mEditLabelToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.mMoveToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); @@ -43,6 +47,8 @@ this.mMoveOutToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator(); this.mShowInStripViewToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator4 = new System.Windows.Forms.ToolStripSeparator(); + this.tESTShallowDeleteToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.contextMenuStrip1.SuspendLayout(); this.SuspendLayout(); // @@ -71,45 +77,77 @@ this.mAddSectionAtSameLevelToolStripMenuItem, this.mAddSubSectionToolStripMenuItem, this.toolStripSeparator1, + this.mCutSectionToolStripMenuItem, + this.mCopySectionToolStripMenuItem, + this.mPasteSectionToolStripMenuItem, + this.toolStripSeparator2, this.mDeleteSectionToolStripMenuItem, this.mEditLabelToolStripMenuItem, this.mMoveToolStripMenuItem, this.toolStripSeparator3, - this.mShowInStripViewToolStripMenuItem}); + this.mShowInStripViewToolStripMenuItem, + this.toolStripSeparator4, + this.tESTShallowDeleteToolStripMenuItem}); this.contextMenuStrip1.Name = "contextMenuStrip1"; - this.contextMenuStrip1.Size = new System.Drawing.Size(161, 170); + this.contextMenuStrip1.Size = new System.Drawing.Size(170, 270); // // mAddSectionAtSameLevelToolStripMenuItem // this.mAddSectionAtSameLevelToolStripMenuItem.Name = "mAddSectionAtSameLevelToolStripMenuItem"; - this.mAddSectionAtSameLevelToolStripMenuItem.Size = new System.Drawing.Size(160, 22); + this.mAddSectionAtSameLevelToolStripMenuItem.Size = new System.Drawing.Size(169, 22); this.mAddSectionAtSameLevelToolStripMenuItem.Text = "&Add section"; this.mAddSectionAtSameLevelToolStripMenuItem.Click += new System.EventHandler(this.mAddSectionToolStripMenuItem_Click); // // mAddSubSectionToolStripMenuItem // this.mAddSubSectionToolStripMenuItem.Name = "mAddSubSectionToolStripMenuItem"; - this.mAddSubSectionToolStripMenuItem.Size = new System.Drawing.Size(160, 22); + this.mAddSubSectionToolStripMenuItem.Size = new System.Drawing.Size(169, 22); this.mAddSubSectionToolStripMenuItem.Text = "Add &sub-section"; this.mAddSubSectionToolStripMenuItem.Click += new System.EventHandler(this.mAddSubSectionToolStripMenuItem_Click); // // toolStripSeparator1 // this.toolStripSeparator1.Name = "toolStripSeparator1"; - this.toolStripSeparator1.Size = new System.Drawing.Size(157, 6); + this.toolStripSeparator1.Size = new System.Drawing.Size(166, 6); // + // mCutSectionToolStripMenuItem + // + this.mCutSectionToolStripMenuItem.Name = "mCutSectionToolStripMenuItem"; + this.mCutSectionToolStripMenuItem.Size = new System.Drawing.Size(169, 22); + this.mCutSectionToolStripMenuItem.Text = "Cu&t section"; + this.mCutSectionToolStripMenuItem.Click += new System.EventHandler(this.cutSectionToolStripMenuItem_Click); + // + // mCopySectionToolStripMenuItem + // + this.mCopySectionToolStripMenuItem.Name = "mCopySectionToolStripMenuItem"; + this.mCopySectionToolStripMenuItem.Size = new System.Drawing.Size(169, 22); + this.mCopySectionToolStripMenuItem.Text = "&Copy section"; + this.mCopySectionToolStripMenuItem.Click += new System.EventHandler(this.copySectionToolStripMenuItem_Click); + // + // mPasteSectionToolStripMenuItem + // + this.mPasteSectionToolStripMenuItem.Name = "mPasteSectionToolStripMenuItem"; + this.mPasteSectionToolStripMenuItem.Size = new System.Drawing.Size(169, 22); + this.mPasteSectionToolStripMenuItem.Text = "&Paste section"; + this.mPasteSectionToolStripMenuItem.Click += new System.EventHandler(this.mPasteSectionToolStripMenuItem_Click); + // + // toolStripSeparator2 + // + this.toolStripSeparator2.Name = "toolStripSeparator2"; + this.toolStripSeparator2.Size = new System.Drawing.Size(166, 6); + // // mDeleteSectionToolStripMenuItem // this.mDeleteSectionToolStripMenuItem.Name = "mDeleteSectionToolStripMenuItem"; - this.mDeleteSectionToolStripMenuItem.Size = new System.Drawing.Size(160, 22); + this.mDeleteSectionToolStripMenuItem.Size = new System.Drawing.Size(169, 22); this.mDeleteSectionToolStripMenuItem.Text = "&Delete section"; this.mDeleteSectionToolStripMenuItem.Click += new System.EventHandler(this.mDeleteSectionToolStripMenuItem_Click); // // mEditLabelToolStripMenuItem // this.mEditLabelToolStripMenuItem.Name = "mEditLabelToolStripMenuItem"; - this.mEditLabelToolStripMenuItem.Size = new System.Drawing.Size(160, 22); - this.mEditLabelToolStripMenuItem.Text = "Re&name"; + this.mEditLabelToolStripMenuItem.Size = new System.Drawing.Size(169, 22); + this.mEditLabelToolStripMenuItem.Text = "Re&name section"; this.mEditLabelToolStripMenuItem.Click += new System.EventHandler(this.mRenameToolStripMenuItem_Click); // // mMoveToolStripMenuItem @@ -120,49 +158,61 @@ this.mMoveInToolStripMenuItem, this.mMoveOutToolStripMenuItem}); this.mMoveToolStripMenuItem.Name = "mMoveToolStripMenuItem"; - this.mMoveToolStripMenuItem.Size = new System.Drawing.Size(160, 22); + this.mMoveToolStripMenuItem.Size = new System.Drawing.Size(169, 22); this.mMoveToolStripMenuItem.Text = "&Move section..."; // // mMoveUpToolStripMenuItem // this.mMoveUpToolStripMenuItem.Name = "mMoveUpToolStripMenuItem"; - this.mMoveUpToolStripMenuItem.Size = new System.Drawing.Size(152, 22); + this.mMoveUpToolStripMenuItem.Size = new System.Drawing.Size(101, 22); this.mMoveUpToolStripMenuItem.Text = "&Up"; this.mMoveUpToolStripMenuItem.Click += new System.EventHandler(this.mMoveUpToolStripMenuItem_Click); // // mMoveDownToolStripMenuItem // this.mMoveDownToolStripMenuItem.Name = "mMoveDownToolStripMenuItem"; - this.mMoveDownToolStripMenuItem.Size = new System.Drawing.Size(152, 22); + this.mMoveDownToolStripMenuItem.Size = new System.Drawing.Size(101, 22); this.mMoveDownToolStripMenuItem.Text = "&Down"; this.mMoveDownToolStripMenuItem.Click += new System.EventHandler(this.mMoveDownToolStripMenuItem_Click); // // mMoveInToolStripMenuItem // this.mMoveInToolStripMenuItem.Name = "mMoveInToolStripMenuItem"; - this.mMoveInToolStripMenuItem.Size = new System.Drawing.Size(152, 22); + this.mMoveInToolStripMenuItem.Size = new System.Drawing.Size(101, 22); this.mMoveInToolStripMenuItem.Text = "&In"; this.mMoveInToolStripMenuItem.Click += new System.EventHandler(this.increaseLevelToolStripMenuItem_Click); // // mMoveOutToolStripMenuItem // this.mMoveOutToolStripMenuItem.Name = "mMoveOutToolStripMenuItem"; - this.mMoveOutToolStripMenuItem.Size = new System.Drawing.Size(152, 22); + this.mMoveOutToolStripMenuItem.Size = new System.Drawing.Size(101, 22); this.mMoveOutToolStripMenuItem.Text = "&Out"; this.mMoveOutToolStripMenuItem.Click += new System.EventHandler(this.decreaseLevelToolStripMenuItem_Click); // // toolStripSeparator3 // this.toolStripSeparator3.Name = "toolStripSeparator3"; - this.toolStripSeparator3.Size = new System.Drawing.Size(157, 6); + this.toolStripSeparator3.Size = new System.Drawing.Size(166, 6); // // mShowInStripViewToolStripMenuItem // this.mShowInStripViewToolStripMenuItem.Name = "mShowInStripViewToolStripMenuItem"; - this.mShowInStripViewToolStripMenuItem.Size = new System.Drawing.Size(160, 22); + this.mShowInStripViewToolStripMenuItem.Size = new System.Drawing.Size(169, 22); this.mShowInStripViewToolStripMenuItem.Text = "Show in strip &view"; this.mShowInStripViewToolStripMenuItem.Click += new System.EventHandler(this.mShowInStripViewToolStripMenuItem_Click); // + // toolStripSeparator4 + // + this.toolStripSeparator4.Name = "toolStripSeparator4"; + this.toolStripSeparator4.Size = new System.Drawing.Size(166, 6); + // + // tESTShallowDeleteToolStripMenuItem + // + this.tESTShallowDeleteToolStripMenuItem.Name = "tESTShallowDeleteToolStripMenuItem"; + this.tESTShallowDeleteToolStripMenuItem.Size = new System.Drawing.Size(169, 22); + this.tESTShallowDeleteToolStripMenuItem.Text = "TEST shallow delete"; + this.tESTShallowDeleteToolStripMenuItem.Click += new System.EventHandler(this.tESTShallowDeleteToolStripMenuItem_Click_1); + // // TOCPanel // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); @@ -191,5 +241,11 @@ private System.Windows.Forms.ToolStripMenuItem mMoveDownToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem mMoveInToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem mMoveOutToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem mCutSectionToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem mCopySectionToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem mPasteSectionToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator2; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator4; + private System.Windows.Forms.ToolStripMenuItem tESTShallowDeleteToolStripMenuItem; } } Modified: trunk/urakawa/application/Obi/Obi/UserControls/TOCPanel.cs =================================================================== --- trunk/urakawa/application/Obi/Obi/UserControls/TOCPanel.cs 2006-08-10 21:56:10 UTC (rev 840) +++ trunk/urakawa/application/Obi/Obi/UserControls/TOCPanel.cs 2006-08-11 05:07:59 UTC (rev 841) @@ -19,6 +19,7 @@ public partial class TOCPanel : UserControl, urakawa.core.ICoreNodeVisitor { private ProjectPanel mProjectPanel; //the parent of this control + private TreeNode mClipboard; //md: the clipboard itself public event Events.Node.RequestToAddSiblingNodeHandler RequestToAddSiblingSection; public event Events.Node.RequestToAddChildNodeHandler RequestToAddChildSection; @@ -30,6 +31,11 @@ public event Events.Node.RequestToDeleteNodeHandler RequestToDeleteSection; public event Events.Node.SelectedHandler SelectedTreeNode; // raised when selection changes (JQ) + //md: clipboard events + public event Events.Node.RequestToCutNodeHandler RequestToCutNode; + public event Events.Node.RequestToCopyNodeHandler RequestToCopyNode; + public event Events.Node.RequestToPasteNodeHandler RequestToPasteNode; + #region properties /// <summary> /// Test whether a node is currently selected or not. @@ -126,6 +132,7 @@ + //md: do we still want this function? public void LimitViewToDepthOfCurrentSection() { } @@ -133,6 +140,7 @@ /// <summary> /// Show all the sections in the tree view. /// </summary> + //md: there is no end-user command which exposes this feature public void ExpandViewToShowAllSections() { mTocTree.ExpandAll(); @@ -239,11 +247,12 @@ new Events.Node.NodeEventArgs(this, GetSelectedSection())); } - private void testShallowDeleteToolStripMenuItem_Click(object sender, EventArgs e) + private void tESTShallowDeleteToolStripMenuItem_Click_1(object sender, EventArgs e) { - SyncShallowDeletedNode(this, - new Events.Node.NodeEventArgs(this, GetSelectedSection())); + SyncShallowDeletedNode(this, + new Events.Node.NodeEventArgs(this, GetSelectedSection())); } + /// <summary> /// If a node is selected, set focus on that node in the Strip view. @@ -260,8 +269,28 @@ } } + //md 20060810 + internal void cutSectionToolStripMenuItem_Click(object sender, EventArgs e) + { + RequestToCutNode(this, new Events.Node.NodeEventArgs(this, GetSelectedSection())); + } + + //md 20060810 + internal void copySectionToolStripMenuItem_Click(object sender, EventArgs e) + { + RequestToCopyNode(this, new Events.Node.NodeEventArgs(this, GetSelectedSection())); + } + + internal void mPasteSectionToolStripMenuItem_Click(object sender, EventArgs e) + { + RequestToPasteNode(this, new Events.Node.NodeEventArgs(this, GetSelectedSection())); + } + + + #endregion + #region toc tree event handlers /// <summary> /// Using this event to assure that a node is selected. /// </summary> @@ -315,6 +344,69 @@ } } + /// <summary> + /// select a node upon receiving a mouse-click (including right-clicks) + /// </summary> + /// <param name="sender"></param> + /// <param name="e"></param> + private void tocTree_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e) + { + mTocTree.SelectedNode = e.Node; + + } + + /// <summary> + /// synchronize the highlight with the strip view on double-click + /// </summary> + /// <param name="sender"></param> + /// <param name="e"></param> + /// <remarks>todo: this should override the default behavior (expand/collapse), + /// and, it's a bit weird to have the strip node rename-able upon select</remarks> + //marisa added this 4 aug 06 + private void tocTree_NodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs e) + { + this.mShowInStripViewToolStripMenuItem_Click(this, null); + } + + /// <summary> + /// synchronize the highlight with the strip view upon pressing enter + /// </summary> + /// <param name="sender"></param> + /// <param name="e"></param> + //marisa added this 4 aug 06 + private void tocTree_KeyDown(object sender, KeyEventArgs e) + { + if (e.KeyCode == Keys.Enter) + { + if (mTocTree.SelectedNode != null) + { + this.mShowInStripViewToolStripMenuItem_Click(this, null); + } + } + + } + + /// <summary> + /// A new selection is made so the context menu is updated. + /// </summary> + private void mTocTree_AfterSelect(object sender, TreeViewEventArgs e) + { + Events.Node.SelectedEventArgs _event = new Events.Node.SelectedEventArgs(true); + // should set CanMoveUp, etc. here + SelectedTreeNode(this, _event); + } + + /// <summary> + /// When leaving the TOC tree, there is no selection anymore. + /// </summary> + /// <param name="sender"></param> + /// <param name="e"></param> + private void mTocTree_Leave(object sender, EventArgs e) + { + SelectedTreeNode(this, new Events.Node.SelectedEventArgs(false)); + } + +#endregion #region Sync event handlers @@ -425,12 +517,8 @@ TreeNode parent = Project.GetNodeType(e.Parent) == NodeType.Section ? FindTreeNodeFromCoreNode(e.Parent) : null; - - if (selected == null) - { - return; - } - + if (selected == null) return; + TreeNode clone = (TreeNode)selected.Clone(); selected.Remove(); @@ -518,6 +606,100 @@ mTocTree.SelectedNode = clone; } + //md 20060810 + internal void SyncCutNode(object sender, Events.Node.NodeEventArgs e) + { + TreeNode selected = FindTreeNodeFromCoreNode(e.Node); + if (selected != null) + { + mClipboard = (TreeNode)selected.Clone(); + selected.Remove(); + } + } + + //md 20060810 + internal void SyncUndidCutNode(object sender, Events.Node.MovedNodeEventArgs e) + { + if (mClipboard == null) return; + + TreeNode parent = Project.GetNodeType(e.Parent) == NodeType.Section ? FindTreeNodeFromCoreNode(e.Parent) : null; + + TreeNodeCollection siblings = null; + if (parent == null) + { + siblings = mTocTree.Nodes; + } + else + { + siblings = parent.Nodes; + } + + TreeNode uncutNode = mClipboard; + + siblings.Insert(e.Index, uncutNode); + uncutNode.ExpandAll(); + uncutNode.EnsureVisible(); + mTocTree.SelectedNode = uncutNode; + + mClipboard = null; + } + + //md 20060810 + internal void SyncCopiedNode(object sender, Events.Node.NodeEventArgs e) + { + TreeNode selected = FindTreeNodeFromCoreNode(e.Node); + + if (selected != null) + { + mClipboard = (TreeNode)selected.Clone(); + } + } + + //md 20060810 + internal void SyncUndidCopyNode(object sender, Events.Node.NodeEventArgs e) + { + mClipboard = null; + } + + //md 20060810 + //e.Node is what was just pasted in + internal void SyncPastedNode(object sender, Events.Node.AddedSectionNodeEventArgs e) + { + if (mClipboard == null) return; + + urakawa.core.CoreNode nodeParent = (urakawa.core.CoreNode)e.Node.getParent(); + + TreeNode parent = Project.GetNodeType(nodeParent) == NodeType.Section ? FindTreeNodeFromCoreNode(nodeParent) : null; + string label = Project.GetTextMedia(e.Node).getText(); + + TreeNodeCollection siblings = null; + if (parent == null) + { + siblings = mTocTree.Nodes; + } + else + { + siblings = parent.Nodes; + } + + siblings.Insert(e.Index, mClipboard); + + //don't clear the clipboard, we can use it again + } + + internal void SyncUndidPasteNode(object sender, Events.Node.NodeEventArgs e) + { + TreeNode pastedNode = FindTreeNodeFromCoreNode(e.Node); + + if (pastedNode != null) + { + //put it back on the clipboard + mClipboard = (TreeNode)pastedNode.Clone(); + pastedNode.Remove(); + } + + } + #endregion #region helper functions @@ -619,74 +801,19 @@ mAddSubSectionToolStripMenuItem.Enabled = e.Selected; mDeleteSectionToolStripMenuItem.Enabled = e.Selected; mEditLabelToolStripMenuItem.Enabled = e.Selected; + + //md: logic for these "canMove's" needs to come from Obi.Project mMoveToolStripMenuItem.Enabled = e.CanMoveUp || e.CanMoveDown || e.CanMoveIn || e.CanMoveOut; mMoveUpToolStripMenuItem.Enabled = e.CanMoveUp; mMoveDownToolStripMenuItem.Enabled = e.CanMoveDown; mMoveInToolStripMenuItem.Enabled = e.CanMoveIn; mMoveOutToolStripMenuItem.Enabled = e.CanMoveOut; + mShowInStripViewToolStripMenuItem.Enabled = e.Selected; + mCutSectionToolStripMenuItem.Enabled = e.Selected; + mCopySectionToolStripMenuItem.Enabled = e.Selected; + mPasteSectionToolStripMenuItem.Enabled = e.Selected && (mClipboard != null); } - /// <summary> - /// select a node upon receiving a mouse-click (including right-clicks) - /// </summary> - /// <param name="sender"></param> - /// <param name="e"></param> - private void tocTree_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e) - { - mTocTree.SelectedNode = e.Node; - - } - - /// <summary> - /// synchronize the highlight with the strip view on double-click - /// </summary> - /// <param name="sender"></param> - /// <param name="e"></param> - /// <remarks>todo: this should override the default behavior (expand/collapse), - /// and, it's a bit weird to have the strip node rename-able upon select</remarks> - //marisa added this 4 aug 06 - private void tocTree_NodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs e) - { - this.mShowInStripViewToolStripMenuItem_Click(this, null); - } - - /// <summary> - /// synchronize the highlight with the strip view upon pressing enter - /// </summary> - /// <param name="sender"></param> - /// <param name="e"></param> - //marisa added this 4 aug 06 - private void tocTree_KeyDown(object sender, KeyEventArgs e) - { - if (e.KeyCode == Keys.Enter) - { - if (mTocTree.SelectedNode != null) - { - this.mShowInStripViewToolStripMenuItem_Click(this, null); - } - } - - } - - /// <summary> - /// A new selection is made so the context menu is updated. - /// </summary> - private void mTocTree_AfterSelect(object sender, TreeViewEventArgs e) - { - Events.Node.SelectedEventArgs _event = new Events.Node.SelectedEventArgs(true); - // should set CanMoveUp, etc. here - SelectedTreeNode(this, _event); - } - - /// <summary> - /// When leaving the TOC tree, there is no selection anymore. - /// </summary> - /// <param name="sender"></param> - /// <param name="e"></param> - private void mTocTree_Leave(object sender, EventArgs e) - { - SelectedTreeNode(this, new Events.Node.SelectedEventArgs(false)); - } } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |