/// <summary> /// ラベル範囲指定をセットする /// </summary> /// <param name="document">ドキュメント</param> /// <param name="kagLabelItem">ラベルリスト</param> private List <FoldMarker> getLabelFoldMarker(IDocument document, KagLabelItem[] list) { List <FoldMarker> markerList = new List <FoldMarker>(); KagLabelItem startLabel = null; foreach (KagLabelItem item in list) { if (startLabel != null) { if (startLabel.LineNumber < item.LineNumber) { markerList.Add(getLabelFoldMarkerFormLine(document, startLabel.Label, startLabel.LineNumber, item.LineNumber)); } } startLabel = item; } //最後のラベルを処理する if (startLabel != null) { int endLine = document.TotalNumberOfLines - 1; if (startLabel.LineNumber < endLine - 1) //一番下の位置の時はやらない { markerList.Add(getLabelFoldMarkerFormLine(document, startLabel.Label, startLabel.LineNumber, endLine)); } } return(markerList); }
/// <summary> /// 指定したラベル位置へエディタを開き遷移する /// </summary> /// <param name="label"></param> private void jumpLbel(TreeNode node) { KagLabelItem label = getLabelItem(node); if (label == null) { return; //取得できなかった } GlobalStatus.EditorManager.LoadFile(label.FilePath, label.LineNumber); }
/// <summary> /// 現在選択しているラベルのアイテムを返す /// 選択しているのがラベルではないときはnullを返す /// 指定したファイルのラベルではないときはnullを返す /// </summary> /// <param name="filePath">取得したいラベルの所属しているファイルパス</param> /// <returns>ラベルのアイテム</returns> private KagLabelItem getSelectedLabelItem(string filePath) { KagLabelItem selectedItem = getLabelItem(labelTreeView.SelectedNode); if (selectedItem != null) { if (selectedItem.FilePath == filePath) { //指定したファイルのラベルを選択していたときそのラベルを返す return(selectedItem); } } //選択しているのはラベルではないまたは指定したファイルのラベルではないとき return(null); }
/// <summary> /// ファイルツリーを初期化する /// </summary> /// <param name="filePath">ファイルパス</param> /// <param name="itemList">追加するラベルリスト</param> private void initTreeFileItem(string filePath, KagLabelItem[] itemList) { TreeNode fileNode = getFileTreeNode(filePath); if (fileNode.IsExpanded == false) { return; } //選択アイテムを保存しておく KagLabelItem selectedItem = getSelectedLabelItem(filePath); List <TreeNode> treeNodeList = new List <TreeNode>(); TreeNode selectNode = null; if (itemList != null) { foreach (KagLabelItem item in itemList) { TreeNode labelNode = new TreeNode(item.Label, IMAGE_INDEX_KAG_LABEL, IMAGE_INDEX_KAG_LABEL); labelNode.Tag = item; treeNodeList.Add(labelNode); if (selectedItem != null && selectedItem.LabelName == item.LabelName) { selectNode = labelNode; //選択ノードを覚えておく } } } //ファイルノードを取得する if (haveLabelNode(fileNode) == true && fileNode.Nodes.Count == treeNodeList.Count) { //ノードの変化がないときは変更があったところだけセットする for (int i = 0; i < treeNodeList.Count; i++) { if (((KagLabelItem)fileNode.Nodes[i].Tag).LineNumber != ((KagLabelItem)treeNodeList[i].Tag).LineNumber) { fileNode.Nodes[i].Tag = treeNodeList[i].Tag; } if (((KagLabelItem)fileNode.Nodes[i].Tag).Label != ((KagLabelItem)treeNodeList[i].Tag).Label) { fileNode.Nodes[i].Text = treeNodeList[i].Text; } } } else { //ノード数が変化したときは位置から作り直す fileNode.Nodes.Clear(); if (treeNodeList.Count == 0) { fileNode.Nodes.Add(new TreeNode(NOT_LABEL_TEXT, IMAGE_INDEX_KAG_LABEL, IMAGE_INDEX_KAG_LABEL)); } else { fileNode.Nodes.AddRange(treeNodeList.ToArray()); } } if (selectNode != null) { labelTreeView.SelectedNode = selectNode; } }