private void AddTask() { string taskname = textBox1.Text; if (taskname.Count() == 0) { MessageBox.Show("タスク名が入力されていません", "注意", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } if (!Utility.Xml.IsValidXmlName(taskname)) { MessageBox.Show("無効な文字が含まれています:\n", "注意"); return; } textBox1.Text = ""; // 登録とビューの更新 TaskInfoManager.Entry(taskname, taskname); TreeViewUpdate(); // ビューの選択を変える TreeNode[] nodes = taskTreeView_.Nodes.Find(taskname + taskTreeView_.PathSeparator, false); if (nodes.Count() > 0) { taskTreeView_.SelectedNode = nodes[0]; } }
private void finishBotton__Click(object sender, EventArgs e) { var taskinfo = FindSelectTaskInfo(); if (taskinfo == null) { return; } // 状態を遷移させる taskinfo.State = TaskStatus.completion; FullUpdate(); // 一つ下の要素があれば進行中にする // todo 別関数化 var fullpath = taskTreeView_.SelectedNode.FullPath; var nodegroup = taskTreeView_.Nodes.Find(fullpath + taskTreeView_.PathSeparator, true); if (nodegroup.Count() > 0 && nodegroup[0].NextNode != null && nodegroup[0].Parent != null) { var nextNode = nodegroup[0].NextNode; var nextInfo = TaskInfoManager.Find(nextNode.FullPath); if (nextInfo.State == TaskStatus.still) { nextInfo.State = TaskStatus.active; } TreeViewDecorationUpdate(nextNode.Parent.Nodes); taskTreeView_.SelectedNode = nextNode; } }
// 名前の変更を終了する private void taskTreeView__AfterLabelEdit(object sender, NodeLabelEditEventArgs e) { // hack: 助長な部分が多い、もう少し短くできるはず.. if (e.Label == null) { taskTreeView_.LabelEdit = false; return; } if (e.Label.Length == 0) { e.CancelEdit = true; taskTreeView_.LabelEdit = false; return; } if (!Utility.Xml.IsValidXmlName(e.Label)) { e.CancelEdit = true; MessageBox.Show("無効な文字が含まれています:\n ", "注意"); e.Node.BeginEdit(); return; } // 名前の変更を反映 var info = TaskInfoManager.Find(e.Node.FullPath); if (info != null) { info.Name = e.Label; } // 正しく終了 e.Node.EndEdit(false); taskTreeView_.LabelEdit = false; }
private TaskInfo FindSelectTaskInfo() { if (taskTreeView_.SelectedNode == null) { return(null); } return(TaskInfoManager.Find(taskTreeView_.SelectedNode.FullPath)); }
private void taskTreeView__AfterExpand(object sender, TreeViewEventArgs e) { var info = TaskInfoManager.Find(e.Node?.FullPath); if (info != null) { info.IsExpanded = true; } }
// ロード private void LoadTaskHistory() { TaskInfoManager.Load(Properties.Settings.Default.serializedTasks); if (Properties.Settings.Default.lastDay.Day != DateTime.Today.Day) { TaskInfoManager.OutputHistory(DateTime.Today.AddSeconds(-1)); Properties.Settings.Default.lastDay = DateTime.Today; Properties.Settings.Default.Save(); } FullUpdate(); }
// ツリービューの更新 private void TreeViewUpdate() { var selectedPath = taskTreeView_.SelectedNode?.FullPath; TreeNodeCollection backup = taskTreeView_.Nodes; taskTreeView_.Nodes.Clear(); TaskInfoManager.ForEach( (path, info) => { // ノードの追加 var node = Utility.Forms.PopulateTreeView(taskTreeView_, path); if (node == null) { return; } // テキストなどの状態変更 node.ForeColor = info.StatusColor; }); // 状態の維持 (ツリーが完成してからもう一度ループ) TaskInfoManager.ForEach( (path, info) => { var nodes = taskTreeView_.Nodes.Find(path + taskTreeView_.PathSeparator, true); if (nodes.Count() == 0) { return; } // 要素の展開を制御 if (info.IsExpanded) { nodes[0].Expand(); } else { nodes[0].Collapse(); } }); // ビュー更新前の選択を維持する if (selectedPath != null) { TreeNode[] nodes = taskTreeView_.Nodes.Find(selectedPath + taskTreeView_.PathSeparator, true); taskTreeView_.SelectedNode = (nodes.Count() > 0) ? nodes[0] : null; } }
// ツリービューの装飾のみ更新 private void TreeViewDecorationUpdate(TreeNodeCollection parentnodes) { if (parentnodes == null) { return; } foreach (TreeNode node in parentnodes) { TreeViewDecorationUpdate(node.Nodes); // 一致する要素を取得 var info = TaskInfoManager.Find(node.FullPath); if (info != null) { node.ForeColor = info.StatusColor; } } }
private void taskTreeView__DragDrop(object sender, DragEventArgs e) { //ドロップされたデータがTreeNodeか調べる if (e.Data.GetDataPresent(typeof(TreeNode))) { TreeView tv = (TreeView)sender; //ドロップされたデータ(TreeNode)を取得 TreeNode source = (TreeNode)e.Data.GetData(typeof(TreeNode)); //ドロップ先のTreeNodeを取得する TreeNode target = tv.GetNodeAt(tv.PointToClient(new Point(e.X, e.Y))); //マウス下のNodeがドロップ先として適切か調べる if (target != null && target != source && !Utility.Forms.IsChildNode(source, target)) { //ドロップされたNodeのコピーを作成 TreeNode cln = (TreeNode)source.Clone(); //Nodeを追加 target.Nodes.Add(cln); //ドロップ先のNodeを展開 target.Expand(); //追加されたNodeを選択 tv.SelectedNode = cln; // 要素の移動 TaskInfoManager.Move(source.FullPath, cln.FullPath); } else { e.Effect = DragDropEffects.None; } } else { e.Effect = DragDropEffects.None; } }
// 子を追加 private void addChild_ToolStripMenuItem_Click(object sender, EventArgs e) { UniDialog <WorkDescriber> .ShowDialog(this, (result) => { if (result != DialogResult.OK) { return; } // アクティブになっている要素を取得 var node = taskTreeView_.SelectedNode; if (node == null) { return; } // アクティブ中のタスクの配下に追加 TaskInfoManager.EntryRange(node.FullPath, WorkDescriber.ResultStrings); // ツリービュー更新 TreeViewUpdate(); }); }
private void EraseTask_ToolStripMenuItem_Click(object sender, EventArgs e) { TaskInfoManager.Remove(taskTreeView_.SelectedNode?.FullPath); FullUpdate(); }
// セーブ private void SaveTaskHistory() { Properties.Settings.Default.serializedTasks = TaskInfoManager.Serialize(); Properties.Settings.Default.windowSize = Size; Properties.Settings.Default.Save(); }