private void RefreshDialogDetail(SHDialog dlg) { if (dlg != null) { wbDialogDetail.DocumentText = dlg.GetHTML(xmlCore); } }
/// <summary> /// 다이얼로그 데이터를 기반으로 트리노드를 생성한다. /// </summary> /// <param name="dlg">SHDialog 데이터</param> /// <returns>트리뷰의 루트 노드</returns> private TreeNode ProcessDialog(SHDialog dlg) { if (dlg != null) { TreeNode nodeRoot = CreateTreeNodeFromSel(dlg.text, dlg.exit, dlg.exitSpecified); nodeRoot.ImageIndex = 4; nodeRoot.SelectedImageIndex = 4; nodeRoot.Tag = dlg; if (dlg.Say != null) { ProcessSay(nodeRoot, dlg.Say); } tvDialogDetail.SuspendLayout(); tvDialogDetail.Nodes.Clear(); tvDialogDetail.Nodes.Add(nodeRoot); tvDialogDetail.ExpandAll(); tvDialogDetail.SelectedNode = nodeRoot; tvDialogDetail.ResumeLayout(); return(nodeRoot); } return(null); }
private void pgDialogElement_PropertyValueChanged(object s, PropertyValueChangedEventArgs e) { TreeNode node = tvDialogDetail.SelectedNode; if (node.Tag.GetType() == typeof(SHDialog)) { SHDialog dlg = (SHDialog)node.Tag; node.Text = xmlCore.GetSafeString(dlg.text); if (e.ChangedItem.Label == "(아이디)" && dlg.id != (int)e.OldValue) { m_ListViewController.SortListView(dlg); } } else if (node.Tag.GetType() == typeof(SHDialogSay)) { SHDialogSay say = (SHDialogSay)node.Tag; node.Text = xmlCore.GetSafeString(say.text); } else if (node.Tag.GetType() == typeof(SHDialogSelect)) { SHDialogSelect sel = (SHDialogSelect)node.Tag; SetTreeNodeFromSel(node, sel.text, sel.exit, sel.exitSpecified); } else if (node.Tag.GetType() == typeof(SHItemAdd) || node.Tag.GetType() == typeof(SHItemRemove) || node.Tag.GetType() == typeof(SHItemFill)) { SHItemAddRemoveBase itemBase = (SHItemAddRemoveBase)node.Tag; SetTreeNodeFromItem(node, itemBase); } Refresh_WhenPropertyValueChanged(node); }
public override void SetListText(ListViewItem lvi, SHDataObject selDataObject) { SHDialog dialog = (SHDialog)(selDataObject); if (lvi == null) { return; } if (lvi.SubItems.Count > 1) { lvi.SubItems.Clear(); } dialog.Compile(); dialog.Build(m_XmlCore); lvi.Text = dialog.id.ToString(); String strType = m_XmlCore.GetSafeString(dialog.ToString()); lvi.SubItems.AddRange(new String[] { m_XmlCore.GetSafeString(dialog.text), ((strType == null)?"":strType) }); lvi.Tag = dialog; if (!dialog.Passed) { lvi.ImageIndex = 7; } lvi.ForeColor = (dialog.Passed) ? Color.Black : Color.Red; lvi.BackColor = (dialog.Passed) ? Color.White : Color.Yellow; }
protected override int GetDataObjectID(object listViewItemTag) { if (listViewItemTag.GetType() != typeof(SHDialog)) { return(0); } SHDialog selDialog = (SHDialog)listViewItemTag; if (selDialog != null) { return(selDialog.id); } return(0); }
private void Refresh_WhenPropertyValueChanged(TreeNode node) { if (node.Tag != null) { if (lvDialogs.SelectedItems[0].Tag == tvDialogDetail.TopNode.Tag) { SHDialog dlg = (SHDialog)tvDialogDetail.Nodes[0].Tag; m_ListViewController.SetListText(lvDialogs.SelectedItems[0], dlg); } } RefreshDialogDetail(); Global._VelixianForms.FindForm("DIALOG").Touch(); }
private void RefreshDialogDetail() { if (lvDialogs.SelectedItems.Count > 0) { ListViewItem lvi = lvDialogs.SelectedItems[0]; if (lvi != null && lvi.Tag != null && lvi.Tag.GetType() == typeof(SHDialog)) { SHDialog dlg = (SHDialog)lvi.Tag; if (dlg != null) { RefreshDialogDetail(dlg); } } } }
private void subDialogAdd_Click(object sender, EventArgs e) { int nNewDlgID = m_ListViewController.MakeNewID(); SHDialog newDlg = new SHDialog(); newDlg.id = nNewDlgID; newDlg.Say = null; newDlg.exit = 1; newDlg.text = "[New String]"; xmlCore.Dialogs.Add(newDlg); m_ListViewController.AddItem(newDlg); Global._VelixianForms.FindForm("DIALOG").Touch(); }
protected override bool CheckFilter(SHDataObject dataObject, string strHead, string strFilter) { SHDialog dialog = (SHDialog)(dataObject); string strType = m_XmlCore.GetSafeString(dialog.ToString()); if (strType == null) { strType = ""; } string strText = m_XmlCore.GetSafeString(dialog.text); if (strHead.ToLower() == "id") { return(ExistFilterString(strFilter, dialog.id.ToString())); } if (strHead.ToLower() == "text" || strHead == "시작대화") { return(ExistFilterString(strFilter, strText)); } if (strHead.ToLower() == "type" || strHead == "타입") { return(ExistFilterString(strFilter, strType)); } if (ExistFilterString(strFilter, dialog.id.ToString())) { return(true); } if (ExistFilterString(strFilter, strText)) { return(true); } if (ExistFilterString(strFilter, strType)) { return(true); } return(false); }
private void lvDialogs_SelectedIndexChanged(object sender, EventArgs e) { if (lvDialogs.SelectedItems.Count > 0) { ListViewItem lvi = lvDialogs.SelectedItems[0]; if (lvi != null && lvi.Tag != null && lvi.Tag.GetType() == typeof(SHDialog)) { SHDialog dlg = (SHDialog)lvi.Tag; if (dlg != null) { RefreshDialogDetail(dlg); ProcessDialog(dlg); Global._mainForm.SetStatusLabelText(dlg.CompiledMessage); } } } m_ListViewController.OnSelectedIndexChanged(); }
private void subDialogDetailDel_Click(object sender, EventArgs e) { if (tvDialogDetail.SelectedNode == null || tvDialogDetail.SelectedNode.Tag == null) { return; } SHDialog dlg = (SHDialog)tvDialogDetail.TopNode.Tag; Type nodeType = tvDialogDetail.SelectedNode.Tag.GetType(); if (nodeType == typeof(SHDialog)) { MessageBox.Show("For safety you can not delete the conversation.", Application.ProductName); return; } if (nodeType == typeof(SHDialogSay)) { SHDialogSay say = (SHDialogSay)tvDialogDetail.SelectedNode.Tag; if ((say.dataList.Count > 0 && MessageBox.Show("All subnodes will be deleted, Are you sure you want to delete?", Application.ProductName, MessageBoxButtons.YesNo) == DialogResult.No) || (say.dataList.Count == 0 && MessageBox.Show("Are you 100% sure?", Application.ProductName, MessageBoxButtons.YesNo) == DialogResult.No)) { return; } if (tvDialogDetail.SelectedNode.Parent.Tag.GetType() == typeof(SHDialog)) { dlg.Say = null; dlg.exit = 1; TreeNode pNode = ProcessDialog(dlg); tvDialogDetail.SelectedNode = pNode; } else if (tvDialogDetail.SelectedNode.Parent.Tag.GetType() == typeof(SHDialogSelect)) { SHDialogSelect sel = (SHDialogSelect)tvDialogDetail.SelectedNode.Parent.Tag; sel.Say = null; sel.exit = 1; SetTreeNodeFromSel(tvDialogDetail.SelectedNode.Parent, sel.text, sel.exit, sel.exitSpecified); tvDialogDetail.Nodes.Remove(tvDialogDetail.SelectedNode); tvDialogDetail.SelectedNode = tvDialogDetail.SelectedNode.Parent; } } else if (nodeType == typeof(SHDialogSelect)) { SHDialogSelect sel = (SHDialogSelect)tvDialogDetail.SelectedNode.Tag; if (tvDialogDetail.SelectedNode.Parent == null || tvDialogDetail.SelectedNode.Parent.Tag.GetType() != typeof(SHDialogSay)) { return; } // Parent SHDialogSay say = (SHDialogSay)tvDialogDetail.SelectedNode.Parent.Tag; if ((sel.Say != null && MessageBox.Show("이 작업으로 하위 노드까지 전부 삭제됩니다. 계속하시겠습니까?", Application.ProductName, MessageBoxButtons.YesNo) == DialogResult.No) || (say.dataList.Count < 2 && sel.Say == null && MessageBox.Show("대화문은 DIALOG 또는 SELECT로 반드시 종료되어야 합니다.\n이 작업으로 인하여 논리적 오류가 존재하는 대화문이 생성될 수 있습니다. 계속하시겠습니까?", Application.ProductName, MessageBoxButtons.YesNo) == DialogResult.No) || (say.dataList.Count >= 2 && sel.Say == null && MessageBox.Show("정말 삭제하시겠습니까?", Application.ProductName, MessageBoxButtons.YesNo) == DialogResult.No)) { return; } tvDialogDetail.Nodes.Remove(tvDialogDetail.SelectedNode); say.dataList.Remove(sel); } else if (nodeType == typeof(SHItemAdd) || nodeType == typeof(SHItemRemove) || nodeType == typeof(SHItemFill)) { SHItemAddRemoveBase itemAdd = (SHItemAddRemoveBase)tvDialogDetail.SelectedNode.Tag; if (MessageBox.Show("정말 삭제하시겠습니까?", Application.ProductName, MessageBoxButtons.YesNo) == DialogResult.No) { return; } if (tvDialogDetail.SelectedNode.Parent.Tag.GetType() == typeof(SHDialogSelect)) { SHDialogSelect sel = (SHDialogSelect)tvDialogDetail.SelectedNode.Parent.Tag; for (int i = 0; i < sel.Item.dataList.Count; i++) { if (sel.Item.dataList[i] == tvDialogDetail.SelectedNode.Tag) { sel.Item.dataList.Remove(tvDialogDetail.SelectedNode.Tag); break; } } if (sel.Item.dataList.Count == 0) { sel.Item = null; } tvDialogDetail.Nodes.Remove(tvDialogDetail.SelectedNode); tvDialogDetail.SelectedNode = tvDialogDetail.SelectedNode.Parent; } } // Update m_ListViewController.SetListText(lvDialogs.SelectedItems[0], dlg); Global._VelixianForms.FindForm("DIALOG").Touch(); }
private void subDialogDetailAdd_Click(object sender, EventArgs e) { if (tvDialogDetail.SelectedNode == null || tvDialogDetail.SelectedNode.Tag == null) { return; } Type nodeType = tvDialogDetail.SelectedNode.Tag.GetType(); if (nodeType == typeof(SHDialog)) { SHDialog dlg = (SHDialog)tvDialogDetail.SelectedNode.Tag; if (dlg.Say == null) { SHDialogSay say = new SHDialogSay(); say.text = "[New SAY Statement]"; dlg.exit = 0; dlg.Say = say; SHDialogSelect newSel = new SHDialogSelect(); newSel.text = "[New SELECT Statement]"; newSel.exit = 1; say.Add(newSel); ProcessDialog(dlg); m_ListViewController.SetListText(lvDialogs.SelectedItems[0], dlg); } else { MessageBox.Show("Only one SAY to each dialogue.", Application.ProductName); } } else if (nodeType == typeof(SHDialogSay)) { SHDialogSay say = (SHDialogSay)tvDialogDetail.SelectedNode.Tag; SHDialogSelect newSel = new SHDialogSelect(); newSel.text = "[New SELECT Statement]"; newSel.exit = 1; say.Add(newSel); TreeNode newNode = ProcessSelect(tvDialogDetail.SelectedNode, newSel); tvDialogDetail.SelectedNode = newNode; } else if (nodeType == typeof(SHDialogSelect)) { // 항상 SELECT로 끝나야 하기 때문에 새로운 SAY문을 넣으면 하위 SELECT까지 자동으로 추가한다. SHDialogSelect sel = (SHDialogSelect)tvDialogDetail.SelectedNode.Tag; if (sel.Say == null) { SHDialogSay newSay = new SHDialogSay(); newSay.text = "[New SAY Statement]"; sel.exit = 0; SHDialogSelect newSel = new SHDialogSelect(); newSel.text = "[New SELECT Statement]"; newSel.exit = 1; newSay.Add(newSel); sel.Say = newSay; // 부모에 새로 만든 노드들을 연결시켜준다. SetTreeNodeFromSel(tvDialogDetail.SelectedNode, sel.text, sel.exit, sel.exitSpecified); TreeNode newNode = ProcessSay(tvDialogDetail.SelectedNode, newSay); newNode.Expand(); tvDialogDetail.SelectedNode = newNode; } else { MessageBox.Show("SELECT에 연결된 SAY문은 한개만 올수 있습니다.", Application.ProductName); } } Global._VelixianForms.FindForm("DIALOG").Touch(); }