/// <summary> /// Easyエディターツールによって挿入コードを生成します。 /// </summary> private string getCodeEasyTool(TreeNode node) { var nodeTag = node.Tag?.ToString(); switch (nodeTag) { case TagEasyComment: //コメント行 var DlgComment = new Dialog.Common.dlgInputTextValue("コメント文を入力して下さい。", "", null); if (DlgComment.ShowDialog() != DialogResult.OK) { return(""); } return("//" + DlgComment.ResultText); case TagEasyEmptyLine: //空行 return("\t"); //空白だと挿入されないので意図的にTabを一文字分入れる case TagEasyRawCode: //生コード行 var Dlg = new Dialog.Text.Script.dlgInsertCommand( this, "直接編集モード:挿入", "入力欄はスクリプト表記になっています。\r\nタイプミスには十分注意して下さい。", "", "" ); if (Dlg.ShowDialog() != DialogResult.OK) { return(""); } return(Dlg.Result); } return(""); }
/// <summary> /// 対象行を直接編集する /// </summary> private void ctmEdit_Click(object sender, EventArgs e) { if (this.CurrentIndex == this.lstEditor.Items.Count - 1) { //末尾の項目は削除対象にできないので挿入モードにする this.ctmInsert_Click(sender, e); return; } //特殊なコードは専門のダイアログで編集できるようにする var code = this.GetLineRawCode(this.CurrentIndex); CtrlComponent.Text.ctlOneTextEditor.FoundCommandNodeEventArgs argData; string newCode; if (code.IndexOf(Resources.SQ_EVMessage.Substring(0, Resources.SQ_EVMessage.IndexOf("("))) != -1) { //メッセージ表示のコマンド argData = new CtrlComponent.Text.ctlOneTextEditor.FoundCommandNodeEventArgs(CtrlComponent.Text.ctlCommandTree.TagToolMessage, code); newCode = Common.EditCommandByTool(this.comTree.dbCtl.DBList, argData); if (!string.IsNullOrEmpty(newCode)) { this.ReplaceLine(this.CurrentIndex, newCode); } } else if (code.IndexOf(Resources.SQ_ChangeMap.Substring(0, Resources.SQ_ChangeMap.IndexOf("("))) != -1) { //場所移動のコマンド argData = new CtrlComponent.Text.ctlOneTextEditor.FoundCommandNodeEventArgs(CtrlComponent.Text.ctlCommandTree.TagToolChangeMap, code); newCode = Common.EditCommandByTool(this.comTree.dbCtl.DBList, argData); if (!string.IsNullOrEmpty(newCode)) { this.ReplaceLine(this.CurrentIndex, newCode); } } else { //選択先頭行を直接入力で編集する var dlg = new Dialog.Text.Script.dlgInsertCommand( this.comTree, "直接編集モード:置換", "タイプミスには十分注意して下さい。\r\n入力欄はスクリプト表記になっています。", "", code); if (dlg.ShowDialog() == DialogResult.OK) { this.ReplaceLine(this.CurrentIndex, dlg.Result); this.RefreshIndentAll(); } } }
/// <summary> /// 対象行に挿入する /// </summary> private void ctmInsert_Click(object sender, EventArgs e) { //選択先頭行で挿入する var dlg = new Dialog.Text.Script.dlgInsertCommand( this.comTree, "直接編集モード:挿入", "タイプミスには十分注意して下さい。\r\n入力欄はスクリプト表記になっています。", "", ""); if (dlg.ShowDialog() == DialogResult.OK) { this.InsertLine(this.CurrentIndex, dlg.Result, true, true); this.RefreshIndentAll(); } }
/// <summary> /// 一般的な方法によって挿入コードを生成します。 /// </summary> private string getCodeObject(TreeNode node) { if (node.Tag == null) { //挿入に対応していないノード return(""); } else if ((node.Tag as SQObject) == null) { //直接入力方式のタグ return(node.Tag?.ToString()); } //それ以外は、詳細情報を持つコマンド var obj = node.Tag as SQObject; var head = ""; //Shiftキーが押されている場合: そのまま挿入 if ((Form.ModifierKeys & Keys.Shift) == Keys.Shift) { return(obj.Name); } //グローバル変数の中のノード: 起点の変数からのフルパスにする if (node.FullPath.IndexOf(this.trvTree.Nodes[NodeNameCppObject].Nodes[NodeNameCppObjValue].FullPath) == 0) { head = ""; var subnode = node.Parent; while ((subnode.Tag as SQObject) != null) { var subobj = (subnode.Tag as SQObject); head = subobj.Name + "." + head; subnode = subnode.Parent; } } //イベントハンドラーとして分類されたスクリプトの関数: 定義形式で挿入する if (obj.NodeID == GenerateGlueCode.GenerateCPPDocument.ObjectType.SQEventHandler) { var buf = Resources.SQ_Function + obj.Name + "("; for (var i = 0; i < obj.ArgumentList.Count; i++) { buf += obj.ArgumentList[i]; if (i < obj.ArgumentList.Count - 1) { buf += ", "; } } buf += ") {}"; return(buf); } if (obj.SubType == GenerateGlueCode.GenerateCPPDocument.ObjectSubType.SQEnum || obj.SubType == GenerateGlueCode.GenerateCPPDocument.ObjectSubType.Enum) { //列挙体: 末尾に [.] を付加して挿入する return(head + obj.Name + "."); } else if (obj.SubType == GenerateGlueCode.GenerateCPPDocument.ObjectSubType.MemberProperty && string.IsNullOrEmpty(obj.ReturnType) == false && obj.ReturnType.Substring(0, 1) == "C") { //組み込み型でないプロパティ: 末尾に [.] を付加して挿入する return(head + obj.Name + "."); } else if (!obj.IsFunc) { //それ以外の関数でないオブジェクトはそのまま挿入 return(head + obj.Name); } else if ((string.IsNullOrEmpty(obj.ReturnType) || obj.ReturnType == "void") && obj.ArgumentList.Count == 0) { //戻り値も引数もない関数: セミコロンを付けて直接挿入 return(head + obj.Name + "();"); } else { //それ以外はダイアログを挟む var DlgInsert = new Dialog.Text.Script.dlgInsertCommand(this, obj); if (DlgInsert.ShowDialog() != DialogResult.OK) { return(""); } //戻り値がない場合はセミコロンを付けて挿入する if (string.IsNullOrEmpty(obj.ReturnType) || obj.ReturnType == "void") { return(head + DlgInsert.Result + ";"); } else { return(head + DlgInsert.Result); } } }