private void pnlWorkspace_MouseUp(object sender, MouseEventArgs e) { if (this.document.currentScene() == null) { return; } // main form FrmMainContainer mainForm = (FrmMainContainer)this.MdiParent; if (e.Button == MouseButtons.Left && MousePressed) { if (MouseDownTool == TDocument.TOOL_TEXT) { if (this.document.haveSelection() && MouseDownPart == 0) { mainForm.focusTextActorContent(); } else if (!this.document.haveSelection() || MouseDownPart == -1) { // positivation RectangleF bound = TUtil.positiveRectangle(SelectRegion); if (bound.Width > 1 && bound.Height > 1) { // item to current scene TTextActor actor = this.document.currentScene().pushText("", bound); this.document.actionManager.RecordAction(new AddActorAction(this.document, actor)); // set the document modified flag this.document.modified = true; // select new added text actor this.document.clearSelectedItems(); this.document.toggleSelectedItem(actor); // update panels mainForm.updateScenesPanel(this.document.sceneManager.currentSceneIndex); mainForm.updateOutlinePanel(); mainForm.updateHistoryPanel(); // fire mainform's selected item changed event mainForm.selectedItemChanged(); // show textbox of ribbon bar and make let user to edit content mainForm.focusTextActorContent(); // record modify action modifyActorAction = new ModifyActorAction(document, actor); } } else if (this.document.haveSelection() && modifyActorAction != null) { // this is the case when text box was resized with text tool modifyActorAction.setFinalData(this.document.selectedActor()); if (modifyActorAction.isModified()) { this.document.actionManager.RecordAction(modifyActorAction); // set the document modified flag this.document.modified = true; // ready to new modification action modifyActorAction = new ModifyActorAction(document, document.selectedActor()); // update history mainForm.updateHistoryPanel(); } // update panels this.document.sceneManager.updateThumbnail(this.document.sceneManager.currentSceneIndex); mainForm.updateScenesPanel(this.document.sceneManager.currentSceneIndex); mainForm.updateToolbarSceneSettings(); mainForm.updateOutlinePanel(); } } else if (MouseDownTool == TDocument.TOOL_AVATAR) { if (!this.document.haveSelection() || MouseDownPart == -1) { // positivation RectangleF bound = TUtil.positiveRectangle(SelectRegion); if (bound.Width > 1 && bound.Height > 1) { // item to current scene TAvatarActor actor = this.document.currentScene().pushAvatar(bound); this.document.actionManager.RecordAction(new AddActorAction(this.document, actor)); // set the document modified flag this.document.modified = true; // select new added avatar actor this.document.clearSelectedItems(); this.document.toggleSelectedItem(actor); // update panels mainForm.updateScenesPanel(this.document.sceneManager.currentSceneIndex); mainForm.updateOutlinePanel(); mainForm.updateHistoryPanel(); // fire mainform's selected item changed event mainForm.selectedItemChanged(); // record modify action modifyActorAction = new ModifyActorAction(document, actor); } } } else { if (this.document.haveSelection() && modifyActorAction != null) { // this is the case when text box was resized with text tool modifyActorAction.setFinalData(this.document.selectedActor()); if (modifyActorAction.isModified()) { this.document.actionManager.RecordAction(modifyActorAction); // set the document modified flag this.document.modified = true; // ready to new modification action modifyActorAction = new ModifyActorAction(document, document.selectedActor()); // update history mainForm.updateHistoryPanel(); } } // update panels this.document.sceneManager.updateThumbnail(this.document.sceneManager.currentSceneIndex); mainForm.updateScenesPanel(this.document.sceneManager.currentSceneIndex); mainForm.updateToolbarSceneSettings(); mainForm.updateOutlinePanel(); } foreach (TActor actor in this.document.selectedItems) { actor.deleteBackup(); } MousePressed = false; MouseDownTool = TDocument.TOOL_NONE; MouseDownPart = -1; SelectRegion = RectangleF.Empty; // reset cursor this.updateCursor(); // redraw workspace this.pnlWorkspace.Refresh(); } }
private void pnlWorkspace_MouseDown(object sender, MouseEventArgs e) { if (this.document.currentScene() == null) { return; } FrmMainContainer mainForm = (FrmMainContainer)this.MdiParent; if (e.Button == MouseButtons.Left) { // set flag that mouse is pressed and store position MousePressed = true; MouseDownPos = new PointF(e.X, e.Y); MouseDownTool = this.document.activeTool(); if (MouseDownTool == TDocument.TOOL_SELECT || MouseDownTool == TDocument.TOOL_BOUNDING || MouseDownTool == TDocument.TOOL_PUZZLE) { // if no current selection, create new selection if (!this.document.haveSelection()) { // target item TActor target = this.document.actorAtPosition(e.X, e.Y, (MouseDownTool == TDocument.TOOL_BOUNDING)); if (target != null && (MouseDownTool != TDocument.TOOL_PUZZLE || target.puzzle)) { // add target item to selection stack this.document.toggleSelectedItem(target); if (target.locked) { MousePressed = false; MouseDownTool = TDocument.TOOL_NONE; MouseDownPart = -1; SelectRegion = RectangleF.Empty; } else { // record modify action modifyActorAction = new ModifyActorAction(document, target); // calc which part of selection is mouse position MouseDownPart = 0; target.createBackup(); // when moving actor, need the original state before moving this.Cursor = Cursors.SizeAll; } } else { // this.SelectRegion = new RectangleF(e.X, e.Y, 0, 0); } } else { // calc which part of selection is mouse position int cursor; MouseDownPart = this.document.partOfSelection(e.X, e.Y, out cursor); if (MouseDownPart == -1) // if click at outside of selection bound, deselect current selection. // clear selection stack { this.document.clearSelectedItems(); // clear modify action modifyActorAction = null; // target item TActor target = this.document.actorAtPosition(e.X, e.Y, MouseDownTool == TDocument.TOOL_BOUNDING); if (target != null) { // add target item to selection stack this.document.toggleSelectedItem(target); if (target.locked) { MousePressed = false; MouseDownTool = TDocument.TOOL_NONE; MouseDownPart = -1; SelectRegion = RectangleF.Empty; } else { // record modify action modifyActorAction = new ModifyActorAction(document, target); MouseDownPart = 0; this.Cursor = Cursors.SizeAll; } } else { // this.SelectRegion = new RectangleF(e.X, e.Y, 0, 0); } } else { if (this.document.selectedActor().locked) { MousePressed = false; MouseDownTool = TDocument.TOOL_NONE; MouseDownPart = -1; SelectRegion = RectangleF.Empty; } else { if (MouseDownPart == 0) { // record modify action modifyActorAction = new ModifyActorAction(document, this.document.selectedActor()); } } } if (MouseDownPart != -1) { foreach (TActor actor in this.document.selectedItems) { actor.createBackup(); } } } // redraw workspace this.pnlWorkspace.Refresh(); // fire mainform's selected item changed event mainForm.selectedItemChanged(); } else if (MouseDownTool == TDocument.TOOL_TEXT || MouseDownTool == TDocument.TOOL_AVATAR) { // if no current selection, create new selection if (!this.document.haveSelection()) { // start selection this.SelectRegion = new RectangleF(e.X, e.Y, 0, 0); } else { // calc which part of selection is mouse position int cursor; MouseDownPart = this.document.partOfSelection(e.X, e.Y, out cursor); if (MouseDownPart == -1 || MouseDownPart == 9 || MouseDownTool == TDocument.TOOL_AVATAR) // if click at outside of selection bound, deselect current selection. // start selection { this.SelectRegion = new RectangleF(e.X, e.Y, 0, 0); MouseDownPart = -1; } } // redraw workspace this.pnlWorkspace.Refresh(); } } // for moving by space key, set focus the control in the workspace form lblFocusTarget.Focus(); }