Beispiel #1
0
        /// <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("");
        }
Beispiel #2
0
        /// <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();
                }
            }
        }
Beispiel #3
0
        /// <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();
            }
        }
Beispiel #4
0
        /// <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);
                }
            }
        }