Ejemplo n.º 1
0
        public TreeChartBox()
        {
            SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.UserPaint | ControlStyles.OptimizedDoubleBuffer | ControlStyles.ResizeRedraw, true);
            UpdateStyles();

            BorderStyle    = BorderStyle.Fixed3D;
            DoubleBuffered = true;
            TabStop        = true;
            BackColor      = Color.White;

            fModel         = new TreeChartModel();
            fRenderer      = null;
            fSelected      = null;
            fToolTip       = new ToolTip();
            fTraceSelected = true;

            fTreeControls = new TreeControlsList <ITreeControl>();
            fTreeControls.Add(new TCScaleControl(this));
            fTreeControls.Add(new TCGenerationsControl(this, TreeChartKind.ckDescendants));
            //fPersonControl = new PersonControl(this);

            InitTimer();
            fTween = new TweenLibrary();

            SetLayout(new NativeTreeLayout());
        }
Ejemplo n.º 2
0
 public void RequestInfo(TreeChartPerson person)
 {
     if (person != null)
     {
         BaseController.ViewRecordInfo(fBase, person.Rec);
     }
 }
Ejemplo n.º 3
0
        public void GenChart(GEDCOMIndividualRecord iRec, TreeChartKind kind, bool rootCenter)
        {
            if (iRec == null)
            {
                return;
            }

            try
            {
                fSelected = null;

                fModel.GenChart(iRec, kind, rootCenter);

                RecalcChart();

                if (rootCenter)
                {
                    CenterPerson(fModel.Root, false);
                }

                NavAdd(iRec);
                DoRootChanged(fModel.Root);
            }
            catch (Exception ex)
            {
                Logger.LogWrite("TreeChartBox.GenChart(): " + ex.Message);
            }
        }
Ejemplo n.º 4
0
        public void SelectByRec(GEDCOMIndividualRecord iRec)
        {
            if (iRec == null)
            {
                return;
            }

            int num = fModel.Persons.Count;

            for (int i = 0; i < num; i++)
            {
                TreeChartPerson p = fModel.Persons[i];
                if (p.Rec == iRec)
                {
                    SetSelected(p);

                    if (fTraceSelected)
                    {
                        CenterPerson(p);
                    }

                    return;
                }
            }

            SetSelected(null);
        }
Ejemplo n.º 5
0
        private void CenterPerson(TreeChartPerson person, bool animation = true)
        {
            if (person == null)
            {
                return;
            }

            Rectangle viewport  = this.Viewport;
            int       widthMax  = fModel.ImageWidth - viewport.Width;
            int       heightMax = fModel.ImageHeight - viewport.Height;

            int oldX = viewport.Left;
            int oldY = viewport.Top;
            int newX = Math.Min(Math.Max(0, ((person.PtX) - (viewport.Width / 2))), widthMax);
            int newY = Math.Min(Math.Max(0, ((person.PtY + (person.Height / 2)) - (viewport.Height / 2))), heightMax);

            if ((oldX == newX) && (oldY == newY))
            {
                return;
            }

            if (animation)
            {
                fTween.StartTween(SetScroll, oldX, oldY, newX, newY, TweenAnimation.EaseInOutQuad, 20);
            }
            else
            {
                fTween.StopTween();
                UpdateScrollPosition(newX, newY);
            }
        }
Ejemplo n.º 6
0
        public bool ParentIsRequired(GDMSex needSex)
        {
            TreeChartPerson p = fView.TreeBox.Selected;

            if (p == null || p.Rec == null)
            {
                return(false);
            }

            bool familyExist = p.Rec.GetParentsFamily() != null;

            if (!familyExist)
            {
                return(true);
            }

            GDMIndividualRecord mother, father;
            GDMFamilyRecord     fam = p.Rec.GetParentsFamily();

            if (fam == null)
            {
                father = null;
                mother = null;
            }
            else
            {
                father = fam.Husband.Individual;
                mother = fam.Wife.Individual;
            }

            bool needParent = (father == null && needSex == GDMSex.svMale) ||
                              (mother == null && needSex == GDMSex.svFemale);

            return(needParent);
        }
Ejemplo n.º 7
0
 private void ImageTree_InfoRequest(object sender, TreeChartPerson person)
 {
     if (person != null && person.Rec != null)
     {
         fController.RequestInfo(person);
     }
 }
Ejemplo n.º 8
0
        private bool ParentIsRequired(GEDCOMSex needSex)
        {
            TreeChartPerson p = fTreeBox.Selected;

            if (p == null || p.Rec == null)
            {
                return(false);
            }

            bool familyExist = p.Rec.GetParentsFamily() != null;

            if (!familyExist)
            {
                return(true);
            }

            GEDCOMIndividualRecord mother, father;
            GEDCOMFamilyRecord     fam = p.Rec.GetParentsFamily();

            if (fam == null)
            {
                father = null;
                mother = null;
            }
            else
            {
                father = fam.GetHusband();
                mother = fam.GetWife();
            }

            bool needParent = (father == null && needSex == GEDCOMSex.svMale) ||
                              (mother == null && needSex == GEDCOMSex.svFemale);

            return(needParent);
        }
Ejemplo n.º 9
0
        public bool ParentIsRequired(GDMSex needSex)
        {
            TreeChartPerson p = fView.TreeBox.Selected;

            if (p == null || p.Rec == null)
            {
                return(false);
            }

            bool familyExist = fBase.Context.Tree.GetParentsFamily(p.Rec) != null;

            if (!familyExist)
            {
                return(true);
            }

            GDMIndividualRecord father, mother;

            fBase.Context.Tree.GetParents(p.Rec, out father, out mother);

            bool needParent = (father == null && needSex == GDMSex.svMale) ||
                              (mother == null && needSex == GDMSex.svFemale);

            return(needParent);
        }
Ejemplo n.º 10
0
        protected override void OnDoubleClick(EventArgs e)
        {
            TreeChartPerson p = fSelected;

            DoPersonModify(new PersonModifyEventArgs(p));

            base.OnDoubleClick(e);
        }
Ejemplo n.º 11
0
 private void ImageTree_RootChanged(object sender, TreeChartPerson person)
 {
     if (person != null && person.Rec != null)
     {
         fPerson = person.Rec;
         UpdateControls();
     }
 }
Ejemplo n.º 12
0
        private MouseAction GetMouseAction(MouseEventArgs e, MouseEvent mouseEvent, out TreeChartPerson person)
        {
            var result = MouseAction.maNone;

            person = null;

            Point mpt = GetImageRelativeLocation(e.Location);
            int   aX  = mpt.X;
            int   aY  = mpt.Y;

            int num = fModel.Persons.Count;

            for (int i = 0; i < num; i++)
            {
                TreeChartPerson p      = fModel.Persons[i];
                ExtRect         persRt = p.Rect;

                if (persRt.Contains(aX, aY))
                {
                    person = p;

                    if (e.Buttons == MouseButtons.Primary && mouseEvent == MouseEvent.meDown)
                    {
                        result = MouseAction.maSelect;
                        break;
                    }
                    else if (e.Buttons == MouseButtons.Alternate && mouseEvent == MouseEvent.meUp)
                    {
                        result = MouseAction.maProperties;
                        break;
                    }
                    else if (mouseEvent == MouseEvent.meMove)
                    {
                        result = MouseAction.maHighlight;
                        break;
                    }
                }

                ExtRect expRt = TreeChartModel.GetExpanderRect(persRt);
                if ((e.Buttons == MouseButtons.Primary && mouseEvent == MouseEvent.meUp) && expRt.Contains(aX, aY))
                {
                    person = p;
                    result = MouseAction.maExpand;
                    break;
                }
            }

            if (result == MouseAction.maNone && person == null)
            {
                if (e.Buttons == MouseButtons.Alternate && mouseEvent == MouseEvent.meDown)
                {
                    result = MouseAction.maDrag;
                }
            }

            return(result);
        }
Ejemplo n.º 13
0
        protected override void OnMouseDoubleClick(MouseEventArgs e)
        {
            TreeChartPerson p = fSelected;

            DoPersonModify(new PersonModifyEventArgs(p));

            e.Handled = true;
            base.OnMouseDoubleClick(e);
        }
Ejemplo n.º 14
0
        private void DoInfoRequest(TreeChartPerson person)
        {
            var eventHandler = (InfoRequestEventHandler)InfoRequest;

            if (eventHandler != null)
            {
                eventHandler(this, person);
            }
        }
Ejemplo n.º 15
0
        private void DoRootChanged(TreeChartPerson person)
        {
            var eventHandler = (RootChangedEventHandler)Events[EventRootChanged];

            if (eventHandler != null)
            {
                eventHandler(this, person);
            }
        }
Ejemplo n.º 16
0
        private MouseActionRet GetMouseAction(MouseEventArgs e, MouseEvent mouseEvent)
        {
            MouseAction     action = MouseAction.maNone;
            TreeChartPerson person = null;

            ExtPoint offsets = fModel.GetOffsets();
            int      aX      = e.X - offsets.X;
            int      aY      = e.Y - offsets.Y;

            int num = fModel.Persons.Count;

            for (int i = 0; i < num; i++)
            {
                TreeChartPerson p      = fModel.Persons[i];
                ExtRect         persRt = p.Rect;

                if (persRt.Contains(aX, aY))
                {
                    person = p;

                    if (e.Button == MouseButtons.Left && mouseEvent == MouseEvent.meDown)
                    {
                        action = MouseAction.maSelect;
                        break;
                    }
                    else if (e.Button == MouseButtons.Right && mouseEvent == MouseEvent.meUp)
                    {
                        action = MouseAction.maProperties;
                        break;
                    }
                    else if (mouseEvent == MouseEvent.meMove)
                    {
                        action = MouseAction.maHighlight;
                        break;
                    }
                }

                ExtRect expRt = TreeChartModel.GetExpanderRect(persRt);
                if ((e.Button == MouseButtons.Left && mouseEvent == MouseEvent.meUp) && expRt.Contains(aX, aY))
                {
                    person = p;
                    action = MouseAction.maExpand;
                    break;
                }
            }

            if (action == MouseAction.maNone && person == null)
            {
                if (e.Button == MouseButtons.Right && mouseEvent == MouseEvent.meDown)
                {
                    action = MouseAction.maDrag;
                }
            }

            return(new MouseActionRet(action, person));
        }
Ejemplo n.º 17
0
        private void miDelete_Click(object sender, EventArgs e)
        {
            TreeChartPerson p = fTreeBox.Selected;

            if (p == null || p.Rec == null || p == fTreeBox.Model.Root)
            {
                return;
            }

            BaseController.DeleteRecord(fBase, p.Rec, true);
            GenChart();
        }
Ejemplo n.º 18
0
        private void ImageTree_RootChanged(object sender, TreeChartPerson person)
        {
            if (person == null || person.Rec == null)
            {
                return;
            }

            fPerson = person.Rec;

            AppHost.Instance.UpdateControls(false);
            UpdateNavControls();
        }
Ejemplo n.º 19
0
        public void SelectColor()
        {
            TreeChartPerson p = fView.TreeBox.Selected;

            if (p == null || p.Rec == null)
            {
                return;
            }

            p.UserColor = AppHost.StdDialogs.SelectColor(p.UserColor);
            fView.TreeBox.Invalidate();
        }
Ejemplo n.º 20
0
        public void GoToRecord()
        {
            TreeChartPerson p = fView.TreeBox.Selected;

            if (p == null || p.Rec == null)
            {
                return;
            }

            fBase.SelectRecordByXRef(p.Rec.XRef, false);
            fBase.Activate();
        }
Ejemplo n.º 21
0
        public void Delete()
        {
            TreeChartPerson p = fView.TreeBox.Selected;

            if (p == null || p.Rec == null || p == fView.TreeBox.Model.Root)
            {
                return;
            }

            BaseController.DeleteRecord(fBase, p.Rec, true);
            UpdateChart();
        }
Ejemplo n.º 22
0
        private void SetSelected(TreeChartPerson value)
        {
            if (fSelected != null)
            {
                fSelected.Selected = false;
            }
            fSelected = value;
            if (fSelected != null)
            {
                fSelected.Selected = true;
            }

            Invalidate();
        }
Ejemplo n.º 23
0
        private void miRebuildTree_Click(object sender, EventArgs e)
        {
            try {
                TreeChartPerson p = fTreeBox.Selected;
                if (p == null || p.Rec == null)
                {
                    return;
                }

                fPerson = p.Rec;
                GenChart();
            } catch (Exception ex) {
                Logger.LogWrite("TreeChartWin.miRebuildTree_Click(): " + ex.Message);
            }
        }
Ejemplo n.º 24
0
        public void ToggleCollapse(TreeChartPerson person)
        {
            try {
                if (person != null)
                {
                    fModel.ToggleCollapse(person);

                    SaveSelection();
                    RecalcChart(false);
                    RestoreSelection();
                }
            } catch (Exception ex) {
                Logger.LogWrite("TreeChartBox.ToggleCollapse(): " + ex.Message);
            }
        }
Ejemplo n.º 25
0
        private void ParentAdd(GDMSex needSex)
        {
            TreeChartPerson p = fView.TreeBox.Selected;

            if (p == null || p.Rec == null)
            {
                return;
            }

            bool needParent  = false;
            bool familyExist = p.Rec.GetParentsFamily() != null;

            if (familyExist)
            {
                GDMIndividualRecord mother, father;
                GDMFamilyRecord     fam = p.Rec.GetParentsFamily();
                if (fam == null)
                {
                    father = null;
                    mother = null;
                }
                else
                {
                    father = fam.Husband.Individual;
                    mother = fam.Wife.Individual;
                }

                needParent = (father == null && needSex == GDMSex.svMale) ||
                             (mother == null && needSex == GDMSex.svFemale);
            }

            if (!familyExist || needParent)
            {
                GDMIndividualRecord child  = p.Rec;
                GDMFamilyRecord     fam    = (familyExist) ? p.Rec.GetParentsFamily() : fBase.Context.Tree.CreateFamily();
                GDMIndividualRecord parent = fBase.Context.SelectPerson(null, TargetMode.tmParent, needSex);
                if (parent != null)
                {
                    fam.AddSpouse(parent);
                    if (!familyExist)
                    {
                        fam.AddChild(child);
                    }

                    UpdateChart();
                }
            }
        }
Ejemplo n.º 26
0
        private void SelectBy(TreeChartPerson person, bool needCenter)
        {
            if (person == null)
            {
                return;
            }

            SetSelected(person);

            //if (fTraceKinships && fOptions.Kinship) RebuildKinships(true);

            if (needCenter && fTraceSelected)
            {
                CenterPerson(person);
            }
        }
Ejemplo n.º 27
0
        private void miEdit_Click(object sender, EventArgs e)
        {
            TreeChartPerson p = fTreeBox.Selected;

            if (p == null || p.Rec == null)
            {
                return;
            }

            GEDCOMIndividualRecord iRec = p.Rec;

            if (BaseController.ModifyIndividual(fBase, ref iRec, null, TargetMode.tmNone, GEDCOMSex.svNone))
            {
                UpdateChart();
            }
        }
Ejemplo n.º 28
0
        public void Edit()
        {
            TreeChartPerson p = fView.TreeBox.Selected;

            if (p == null || p.Rec == null)
            {
                return;
            }

            GDMIndividualRecord iRec = p.Rec;

            if (BaseController.ModifyIndividual(fBase, ref iRec, null, TargetMode.tmNone, GDMSex.svUnknown))
            {
                UpdateChart();
            }
        }
Ejemplo n.º 29
0
        public TreeChartBox() : base()
        {
            BackgroundColor = Colors.White;

            fModel         = new TreeChartModel();
            fRenderer      = null;
            fSelected      = null;
            fTraceSelected = true;

            fTreeControls = new TreeControlsList <ITreeControl>();
            fTreeControls.Add(new TCScaleControl(this));
            fTreeControls.Add(new TCGenerationsControl(this));
            //fPersonControl = new PersonControl(this);

            InitTimer();
            fTween = new TweenLibrary();
        }
Ejemplo n.º 30
0
        public void RequestInfo(TreeChartPerson person)
        {
            if (person == null)
            {
                return;
            }

            if (person.Rec != null)
            {
                GDMIndividualRecord iRec = person.Rec;

                using (var dlg = AppHost.ResolveDialog <IRecordInfoDlg>(fBase)) {
                    dlg.Record = iRec;
                    AppHost.Instance.ShowModalX(dlg, false);
                }
            }
        }