Beispiel #1
0
        //attempts to guess groupings for ans
        public void GuessGroup(ShAnswer ans)
        {
            string anstxt = System.Text.RegularExpressions.Regex.Replace(ans.Text, "\\W", "").ToLower();

            foreach (ShGroup grp in ans.Group.Question.Groups)
            {
                if (grp == ans.Group)
                {
                    continue;
                }

                if (System.Text.RegularExpressions.Regex.Replace(grp.Text, "\\W", "").ToLower() == anstxt)
                {
                    ans.ChangeGroup(grp);
                    return;
                }
            }
            //didn't find any but let's try individual answers
            foreach (ShGroup grp in ans.Group.Question.Groups)
            {
                if (grp == ans.Group)
                {
                    continue;
                }

                foreach (ShAnswer ans2 in grp.Answers)
                {
                    if (System.Text.RegularExpressions.Regex.Replace(ans2.Text, "\\W", "").ToLower() == anstxt)
                    {
                        ans.ChangeGroup(grp);
                        return;
                    }
                }
            }
        }
Beispiel #2
0
        //right click menu - create a new group with this answer
        private void RCM_move_to_new_group_Click(object sender, EventArgs e)
        {
            TreeNode clicked_node = RCM_answer.Tag as TreeNode;

            if (clicked_node == null)
            {
                return;
            }
            ShAnswer ans = clicked_node.Tag as ShAnswer;

            if (ans == null)
            {
                return;
            }

            ShGroup newGroup = ans.Group.Question.StartNewGroup(ans.Text);

            ans.ChangeGroup(newGroup);

            TreeNode prevParent = clicked_node.Parent;
            TreeNode newParent  = treeView1.Nodes.Add("b");

            newParent.Tag = newGroup;
            prevParent.Nodes.Remove(clicked_node);
            newParent.Nodes.Add(clicked_node);
            newParent.Expand();

            //if prevParent is empty, delete it
            if (prevParent.Nodes.Count == 0)
            {
                prevParent.Remove();
            }

            sheep_modified = true;
            SetTextForAllTreenodes();
        }
Beispiel #3
0
        //main drag/drop function
        private void treeView1_DragDrop(object sender, DragEventArgs e)
        {
            //stop sorting while dragging
            treeView1.TreeViewNodeSorter = null;

            Point    cp       = treeView1.PointToClient(new Point(e.X, e.Y));
            TreeNode destNode = treeView1.GetNodeAt(cp);

            //don't continue if not a valid node
            if (!e.Data.GetDataPresent(typeof(TreeNode)))
            {
                return;
            }

            //   treeView1.BeginUpdate();

            TreeNode movingNode = (TreeNode)e.Data.GetData(typeof(TreeNode));
            TreeNode prevParent, newParent;

            ShQuestion curQuestion = sg.Questions[cur_q_index];

            //different code depending on what type of thing we're dragging/dragging to

            if (movingNode.Tag.GetType() == typeof(ShAnswer) &&
                destNode.Tag.GetType() == typeof(ShAnswer))
            {
                //moving an answer to another answer
                ShAnswer ansToMove  = (ShAnswer)movingNode.Tag;
                ShAnswer destAnswer = (ShAnswer)destNode.Tag;
                ansToMove.ChangeGroup(destAnswer.Group);

                prevParent = movingNode.Parent;
                newParent  = destNode.Parent;
                prevParent.Nodes.Remove(movingNode);
                newParent.Nodes.Add(movingNode);
            }
            else if (movingNode.Tag.GetType() == typeof(ShAnswer) &&
                     destNode.Tag.GetType() == typeof(ShGroup))
            {
                //moving an answer to another group
                ShAnswer ansToMove = (ShAnswer)movingNode.Tag;
                ShGroup  destGroup = (ShGroup)destNode.Tag;
                ansToMove.ChangeGroup(destGroup);

                prevParent = movingNode.Parent;
                newParent  = destNode;
                prevParent.Nodes.Remove(movingNode);
                newParent.Nodes.Add(movingNode);
            }
            else if (movingNode.Tag.GetType() == typeof(ShGroup) &&
                     destNode.Tag.GetType() == typeof(ShAnswer))
            {
                //moving a group to an answer
                ShGroup  grpToMove  = (ShGroup)movingNode.Tag;
                ShAnswer destAnswer = (ShAnswer)destNode.Tag;
                grpToMove.MergeToGroup(destAnswer.Group);

                prevParent = movingNode;
                newParent  = destNode.Parent;

                List <TreeNode> ansNodes = new List <TreeNode>(prevParent.Nodes.Cast <TreeNode>());
                foreach (TreeNode nod in ansNodes)
                {
                    prevParent.Nodes.Remove(nod);
                    newParent.Nodes.Add(nod);
                }
            }
            else if (movingNode.Tag.GetType() == typeof(ShGroup) &&
                     destNode.Tag.GetType() == typeof(ShGroup))
            {
                //moving a group to a group
                ShGroup grpToMove = (ShGroup)movingNode.Tag;
                ShGroup destGroup = (ShGroup)destNode.Tag;
                grpToMove.MergeToGroup(destGroup);

                prevParent = movingNode;
                newParent  = destNode;

                List <TreeNode> ansNodes = new List <TreeNode>(prevParent.Nodes.Cast <TreeNode>());
                foreach (TreeNode nod in ansNodes)
                {
                    prevParent.Nodes.Remove(nod);
                    newParent.Nodes.Add(nod);
                }
            }
            else
            {
                treeView1.EndUpdate(); return;
            }

            //if prevParent is empty, delete it
            if (prevParent.Nodes.Count == 0)
            {
                prevParent.Remove();
            }

            SetTextForAllTreenodes();
            sheep_modified = true;

            treeView1.EndUpdate();
        }