//Method for generating the Sequence scatterview item from the element menu
        private void select_Sequence(object sender, RoutedEventArgs e)
        {
            _thisRegDS = new RegDataSheet("http://partsregistry.org/wiki/index.php?title=Part:" + this.partName.Text);

            seq           = new ScatterViewItem();
            seq.CanRotate = false;
            seq.CanScale  = false;
            TextBlock seqtext = new TextBlock();     //Creates a textblock to be inserted into the scatterview

            seqtext.Margin     = new Thickness(10);
            seq.Background     = Brushes.SteelBlue;
            seqtext.Background = Brushes.White;

            seq.Width         = 800;
            seq.MinHeight     = 600;
            seqtext.Width     = 790;
            seqtext.MinHeight = 590;


            seqtext.Text = "Parts Registry ID: " + _thisRegDS.Name + "\n" + "\n" + "Sequence:" + "\n" + "\n" + _thisRegDS.BasicInfo.Sequence;
            seq.Content  = seqtext;

            SurfaceWindow1.addData(sender, seq);
            seq.ContainerManipulationCompleted += new ContainerManipulationCompletedEventHandler(onSeqManipulationCompleted);     //Event handler that allows trashing when swiped to the right
            seq.Orientation = 0;

            //Overwrites center calculated in addData(); consider checking out later
            Point PartCenter     = this.Center;
            Point OriginalCenter = seq.Center;

            OriginalCenter.X = (PartCenter.X);
            OriginalCenter.Y = (PartCenter.Y + 370);

            seq.Center = OriginalCenter;
        }
        //Creates a new Part based on RegDataSheet and category; do not add duplicates
        private void partFromRegDS(RegDataSheet regDS, String cat)
        {
            String currentPartsList = listCurrentPartsInResults();

            if (!currentPartsList.Contains(regDS.Name))
            {
                Part p = new Part(convertType_RDSToMCP(regDS.Type));
                p.myRegDS           = regDS;
                p.partName.Text     = p.myRegDS.Name;
                p.partCategory.Text = p.myRegDS.BasicInfo.DescriptionName;
                L0_resultsSV.Items.Add(p);
                p.Center = SurfaceWindow1.SetPosition(p);
            }
        }
        //Constructor for searches unbounded by part types
        public Part(String partType)
        {
            InitializeComponent();
            Orientation = 0;
            CanScale    = false;
            CanRotate   = false;

            _sitesList = new List <Sites> {
                new Sites(), new Sites()
            };

            //if (sw1 != null)
            //{
            _type = partType;
            if (_type == "prom")
            {
                imgType.Source = SurfaceWindow1.BitmapToImageSource(Resource1.sbol_prom2);
                //Background = Brushes.Orange;
            }
            else if (_type == "rbs")
            {
                imgType.Source = SurfaceWindow1.BitmapToImageSource(Resource1.sbol_rbs2);
                //Background = Brushes.DodgerBlue;
            }
            else if (_type == "cds")
            {
                imgType.Source = SurfaceWindow1.BitmapToImageSource(Resource1.sbol_cds2);
                _sitesList.ElementAt(0).copySitesInfoFrom(new Sites("aatg"));
                //Background = Brushes.Green;
            }
            else     //type == "term"
            {
                imgType.Source = SurfaceWindow1.BitmapToImageSource(Resource1.sbol_term2);
                //Background = Brushes.Red;
            }
            //}
            //else
            //{
            //    imgType.Source = SurfaceWindow1.BitmapToImageSource(Resource1.sbol_prom);
            //    this.Background = Brushes.Orange;
            //}

            _myRegDS = new RegDataSheet();

            _progressBarWrapper         = new ProgressBarWrapper(new Action(showProgressBar), new Action(hideProgressBar));
            _myRegDS.BasicInfo.Sequence = "atgcatgctagcatccattacgatccgtcag";
        }
 //Primer Designer helper method: gets and sets data from Registry for Parts if not yet requested
 //Must be accessible to L1 modules/trans. units and L2 modules/multigene constructs
 //DOESN'T WORK: only seems to work when in above event handler; doesn't have a step where _regDS is returned, if _regDS was created at all
 public void getDataForPrimerDesigner()
 {
     if (_myRegDS.Name != "test") //Already got data from registry, so don't make new one
     {
     }
     else
     {
         _myRegDS = new RegDataSheet("http://partsregistry.org/wiki/index.php?title=Part:" + partName.Text);
         //Func<String, RegDataSheet> _getRegDataSheet =
         //delegate(String pName) { return new RegDataSheet("http://partsregistry.org/wiki/index.php?title=Part:" + pName); };
         //Action<RegDataSheet> _getRegDataSheetCallback = delegate(RegDataSheet _regDS)
         //{
         //    _myRegDS = _regDS;
         //};
         //_dataSheet = _progressBarWrapper.execute<String, RegDataSheet>(_getRegDataSheet, partName.Text, _getRegDataSheetCallback);
     }
 }
        private List<RegDataSheet> regDS; //List of all the Parts Data Sheets related to the search query

        #endregion Fields

        #region Constructors

        public Search(string query)
        {
            regDS = new List<RegDataSheet>();

            RegList r = new RegList(query);

            //goes through the links on the results page and creates a RegDataSheet from the pages
            if (r.TitleLinks.Count != 0)
            {

                if (r.TitleLinks[0] != "-1")
                {
                    for (int i = 0; i < r.TitleLinks.Count; i++)
                    {

                        RegDataSheet reg = new RegDataSheet(r.TitleLinks[i]);

                        regDS.Add(reg);
                    }
                }
            }

            if (r.TextLinks.Count != 0)
            {

                if (r.TextLinks[0] != "-1")
                {
                    for (int i = 0; i < r.TextLinks.Count; i++)
                    {

                        RegDataSheet reg = new RegDataSheet(r.TextLinks[i]);
                        regDS.Add(reg);
                        //Console.WriteLine(i + ": " + r.TextLinks[i]);
                    }
                }
            }

            ////Creates a list of PubMed source related to the query
            //PubList p = new PubList(query);
            //pubMedTitles = p.Titles;
            //pubMedLinks = p.Links;
        }
 //Copies properties from the source Part to the receiver
 public void copyPartInfoFrom(Part source)
 {
     try
     {
         partName.Text     = source.partName.Text;
         partCategory.Text = source.partCategory.Text;
         imgType.Source    = source.imgType.Source;
         //Background = source.Background;
         _type    = source._type;
         _myRegDS = source._myRegDS;
         _sitesList.Clear();
         foreach (Sites s in source._sitesList)
         {
             _sitesList.Add(new Sites(s.Sequence));
         }
         //_sitesList = source._sitesList;
         Opacity  = source.Opacity;
         mySource = source;
     }
     catch (Exception exc) { Console.WriteLine(exc); }
 }
Beispiel #7
0
        public Search(string query)
        {
            regDS = new List <RegDataSheet>();

            RegList r = new RegList(query);

            //goes through the links on the results page and creates a RegDataSheet from the pages
            if (r.TitleLinks.Count != 0)
            {
                if (r.TitleLinks[0] != "-1")
                {
                    for (int i = 0; i < r.TitleLinks.Count; i++)
                    {
                        RegDataSheet reg = new RegDataSheet(r.TitleLinks[i]);

                        regDS.Add(reg);
                    }
                }
            }

            if (r.TextLinks.Count != 0)
            {
                if (r.TextLinks[0] != "-1")
                {
                    for (int i = 0; i < r.TextLinks.Count; i++)
                    {
                        RegDataSheet reg = new RegDataSheet(r.TextLinks[i]);
                        regDS.Add(reg);
                        //Console.WriteLine(i + ": " + r.TextLinks[i]);
                    }
                }
            }

            ////Creates a list of PubMed source related to the query
            //PubList p = new PubList(query);
            //pubMedTitles = p.Titles;
            //pubMedLinks = p.Links;
        }
        private void select_DataSheet(object sender, RoutedEventArgs e)
        {
            //try
            //{
            //_thisRegDS = new RegDataSheet("http://partsregistry.org/wiki/index.php?title=Part:" + this.partName.Text);

            ds = new MenuDataSheet();
            ds.ContainerManipulationCompleted += new ContainerManipulationCompletedEventHandler(onDSManipulationCompleted);

            if (_myRegDS.Name != "test") //Already got data from registry, so just populate from it
            {
                #region Populating the data sheet's datasheet
                //Specifies the Length of the Sequence on the Sequence tab of the data sheet
                int       Length      = _myRegDS.BasicInfo.Length;
                TextBlock LengthBlock = new TextBlock();
                //ds.SeqTab.Children.Add(LengthBlock);
                LengthBlock.VerticalAlignment = VerticalAlignment.Top;
                LengthBlock.Text = "Length: " + Length.ToString();

                //This is all pulling information from the Reg Data Sheet associated with the part and inserting it in the data sheet
                ds.PopulateDataSheet(_myRegDS.Name, 0, 1, ds.DataSheet, "datasheet");
                ds.PopulateDataSheet(_myRegDS.BasicInfo.DescriptionName, 1, 1, ds.DataSheet, "datasheet");
                ds.PopulateDataSheet(_myRegDS.Type, 2, 1, ds.DataSheet, "datasheet");
                ds.PopulateDataSheet(_myRegDS.Promoter.getReg(), 3, 1, ds.DataSheet, "datasheet");
                ds.PopulateDataSheet(_myRegDS.BasicInfo.Availability, 4, 1, ds.DataSheet, "datasheet");
                ds.PopulateDataSheet(_myRegDS.BasicInfo.Usefulness, 5, 1, ds.DataSheet, "datasheet");
                ds.PopulateDataSheet(_myRegDS.Description.assembCompString(), 6, 1, ds.DataSheet, "datasheet");
                ds.PopulateDataSheet(_myRegDS.Description.chassisString(), 7, 1, ds.DataSheet, "datasheet");



                //Specific to sequence tab
                ds.PopulateDataSheet(_myRegDS.BasicInfo.Sequence, 1, 1, ds.SeqTab, "seq");
                ds.PopulateDataSheet(Length.ToString(), 0, 1, ds.SeqTab, "length");

                //Specific to AuthorInfo Tab
                ds.PopulateDataSheet(_myRegDS.Reference.Author, 0, 1, ds.AuthorInfo, "author");
                ds.PopulateDataSheet(_myRegDS.Reference.Group, 1, 1, ds.AuthorInfo, "author");
                ds.PopulateDataSheet(_myRegDS.Reference.Date, 2, 1, ds.AuthorInfo, "author");

                if (_myRegDS.Type == "rbs")
                {
                    RowDefinition rowDef1 = new RowDefinition();
                    ds.DataSheet.RowDefinitions.Add(rowDef1);
                    ds.PopulateDataSheet(_myRegDS.Rbs.FamilyName, 8, 1, ds.DataSheet);
                    TextBlock RBSFam = new TextBlock();
                    RBSFam.Text = "Family";
                    ds.DataSheet.Children.Add(RBSFam);
                    Grid.SetRow(RBSFam, 8);
                }
                else if (_myRegDS.Type == "terminator")
                {
                    RowDefinition rowDef1 = new RowDefinition();
                    RowDefinition rowDef2 = new RowDefinition();
                    RowDefinition rowDef3 = new RowDefinition();
                    RowDefinition rowDef4 = new RowDefinition();

                    ds.DataSheet.RowDefinitions.Add(rowDef1);
                    ds.DataSheet.RowDefinitions.Add(rowDef2);
                    ds.DataSheet.RowDefinitions.Add(rowDef3);
                    ds.DataSheet.RowDefinitions.Add(rowDef4);

                    TextBlock Direction = new TextBlock();
                    Direction.Text     = "Direction";
                    Direction.FontSize = 18;
                    ds.DataSheet.Children.Add(Direction);
                    Grid.SetRow(Direction, 8);

                    ds.PopulateDataSheet(_myRegDS.Terminators.Direction, 8, 1, ds.DataSheet);
                    ds.PopulateDataSheet(_myRegDS.Terminators.ForwardEff, 9, 1, ds.DataSheet);
                    ds.PopulateDataSheet(_myRegDS.Terminators.ReversedEff, 10, 1, ds.DataSheet);
                    ds.PopulateDataSheet(_myRegDS.Terminators.ReversedVers, 11, 1, ds.DataSheet);
                }

                #endregion

                #region Populating Publications
                Func <String, PubList> _GetPublications =
                    delegate(String id) { return(new PubList(id)); };
                Action <PubList> callback = delegate(PubList result)
                {
                    //_thisRegDS = new RegDataSheet("http://partsregistry.org/wiki/index.php?title=Part:" + this.partName.Text);

                    int m = 0;

                    if (result.Titles.Count == 0)
                    {
                        int Count = result.Titles.Count;
                        SurfaceListBoxItem NoResults = new SurfaceListBoxItem();
                        TextBlock          Content   = new TextBlock();
                        Content.Text      = "No Results Found";
                        NoResults.Content = Content;
                        ds.Publictions.Items.Add(NoResults);
                    }

                    if (result.Titles.Count > 0)
                    {
                        int TotalArticles = result.Titles.Count;
                        SurfaceListBoxItem ArticleCount = new SurfaceListBoxItem();
                        TextBlock          CountContent = new TextBlock();
                        CountContent.Text    = "Results Found: " + TotalArticles as string;
                        ArticleCount.Content = CountContent;
                        ds.Publictions.Items.Add(ArticleCount);
                    }

                    foreach (String Titles in result.Titles)
                    {
                        //To Test if titles are actually adding
                        SurfaceListBoxItem item      = new SurfaceListBoxItem();
                        TextBlock          PubTitles = new TextBlock();
                        item.Selected += new RoutedEventHandler(item_Selected);
                        item.Content   = Titles;
                        PubTitles.Tag  = result.Links.ElementAt(m);
                        //item.Tag = result.Authors.ElementAt(m);
                        ds.Publictions.Items.Add(item);
                        RowDefinition rowDef1 = new RowDefinition();
                        RowDefinition rowDef2 = new RowDefinition();
                        RowDefinition rowDef3 = new RowDefinition();
                        RowDefinition rowDef4 = new RowDefinition();

                        abs = new PubAbstract(PubTitles.Tag as string, result.getAuthors());

                        item.Tag = "Title:  " + item.Content as string + "\r\n" + "\r\n" + "\r\n"

                                   + "Authors:   " + result.Authors.ElementAt(m) as string + "\r\n" + "\r\n"

                                   + "Abstract:" + "\r\n" + "\r\n"

                                   + abs.getAbstract() as string;

                        m += 1;
                        Console.WriteLine(m);

                        if (m > 20)
                        {
                            break;
                        }
                    }

                    /*foreach (String Titles in result.Titles)
                     * {
                     *  TextBlock Middle = new TextBlock();
                     *  Middle.Text = Titles;
                     *  //ds.Publications.Children.Add(Middle);
                     *  Grid.SetRow(Middle, m);
                     *  m += 1;
                     #endregion
                     * //publications location maybe
                     * //Creates a list of PubMed source related to the query
                     *
                     * }*/
                };
                _Publist = _progressBarWrapper.execute <String, PubList>(_GetPublications, _myRegDS.BasicInfo.DescriptionName, callback);
                #endregion
                SurfaceWindow1.addData(sender, ds);
            }
            else
            {
                Func <String, RegDataSheet> _getRegDataSheet =
                    delegate(String pName) { return(new RegDataSheet("http://partsregistry.org/wiki/index.php?title=Part:" + pName)); };
                Action <RegDataSheet> _getRegDataSheetCallback = delegate(RegDataSheet _regDS)
                {
                    _myRegDS = _regDS;
                    #region Populating the data sheet's datasheet
                    //Specifies the Length of the Sequence on the Sequence tab of the data sheet
                    int       Length      = _myRegDS.BasicInfo.Length;
                    TextBlock LengthBlock = new TextBlock();
                    //ds.SeqTab.Children.Add(LengthBlock);
                    LengthBlock.VerticalAlignment = VerticalAlignment.Top;
                    LengthBlock.Text = "Length: " + Length.ToString();

                    //This is all pulling information from the Reg Data Sheet associated with the part and inserting it in the data sheet
                    ds.PopulateDataSheet(_myRegDS.Name, 0, 1, ds.DataSheet, "datasheet");
                    ds.PopulateDataSheet(_myRegDS.BasicInfo.DescriptionName, 1, 1, ds.DataSheet, "datasheet");
                    ds.PopulateDataSheet(_myRegDS.Type, 2, 1, ds.DataSheet, "datasheet");
                    ds.PopulateDataSheet(_myRegDS.Promoter.getReg(), 3, 1, ds.DataSheet, "datasheet");
                    ds.PopulateDataSheet(_myRegDS.BasicInfo.Availability, 4, 1, ds.DataSheet, "datasheet");
                    ds.PopulateDataSheet(_myRegDS.BasicInfo.Usefulness, 5, 1, ds.DataSheet, "datasheet");
                    ds.PopulateDataSheet(_myRegDS.Description.assembCompString(), 6, 1, ds.DataSheet, "datasheet");
                    ds.PopulateDataSheet(_myRegDS.Description.chassisString(), 7, 1, ds.DataSheet, "datasheet");

                    //Specific to sequence tab
                    ds.PopulateDataSheet(_myRegDS.BasicInfo.Sequence, 1, 1, ds.SeqTab, "seq");
                    ds.PopulateDataSheet(Length.ToString(), 0, 1, ds.SeqTab, "length");

                    //Specific to AuthorInfo Tab
                    ds.PopulateDataSheet(_myRegDS.Reference.Author, 0, 1, ds.AuthorInfo, "author");
                    ds.PopulateDataSheet(_myRegDS.Reference.Group, 1, 1, ds.AuthorInfo, "author");
                    ds.PopulateDataSheet(_myRegDS.Reference.Date, 2, 1, ds.AuthorInfo, "author");

                    if (_myRegDS.Type == "rbs")
                    {
                        RowDefinition rowDef1 = new RowDefinition();
                        ds.DataSheet.RowDefinitions.Add(rowDef1);
                        ds.PopulateDataSheet(_myRegDS.Rbs.FamilyName, 8, 1, ds.DataSheet);
                        TextBlock RBSFam = new TextBlock();
                        RBSFam.Text              = "Family";
                        RBSFam.FontSize          = 14;
                        RBSFam.FontWeight        = FontWeights.Bold;
                        RBSFam.VerticalAlignment = VerticalAlignment.Top;
                        // COME BACK TO THIS LATER

                        ds.DataSheet.Children.Add(RBSFam);
                        Grid.SetRow(RBSFam, 8);
                    }
                    else if (_myRegDS.Type == "terminator")
                    {
                        RowDefinition rowDef1 = new RowDefinition();
                        RowDefinition rowDef2 = new RowDefinition();
                        RowDefinition rowDef3 = new RowDefinition();
                        RowDefinition rowDef4 = new RowDefinition();

                        ds.DataSheet.RowDefinitions.Add(rowDef1);
                        ds.DataSheet.RowDefinitions.Add(rowDef2);
                        ds.DataSheet.RowDefinitions.Add(rowDef3);
                        ds.DataSheet.RowDefinitions.Add(rowDef4);

                        TextBlock Direction = new TextBlock();
                        Direction.Text     = "Direction";
                        Direction.FontSize = 18;
                        ds.DataSheet.Children.Add(Direction);
                        Grid.SetRow(Direction, 8);

                        ds.PopulateDataSheet(_myRegDS.Terminators.Direction, 8, 1, ds.DataSheet);
                        ds.PopulateDataSheet(_myRegDS.Terminators.ForwardEff, 9, 1, ds.DataSheet);
                        ds.PopulateDataSheet(_myRegDS.Terminators.ReversedEff, 10, 1, ds.DataSheet);
                        ds.PopulateDataSheet(_myRegDS.Terminators.ReversedVers, 11, 1, ds.DataSheet);
                    }

                    #endregion

                    #region Populating Publications
                    Func <String, PubList> _GetPublications =
                        delegate(String id) { return(new PubList(id)); };
                    Action <PubList> callback = delegate(PubList result)
                    {
                        //_thisRegDS = new RegDataSheet("http://partsregistry.org/wiki/index.php?title=Part:" + this.partName.Text);

                        int m = 0;

                        if (result.Titles.Count == 0)
                        {
                            int Count = result.Titles.Count;
                            SurfaceListBoxItem NoResults = new SurfaceListBoxItem();
                            TextBlock          Content   = new TextBlock();
                            Content.Text      = "No Results Found";
                            NoResults.Content = Content;
                            ds.Publictions.Items.Add(NoResults);
                        }

                        if (result.Titles.Count > 0)
                        {
                            int TotalArticles = result.Titles.Count;
                            SurfaceListBoxItem ArticleCount = new SurfaceListBoxItem();
                            TextBlock          CountContent = new TextBlock();
                            CountContent.Text    = "Results Found: " + TotalArticles as string;
                            ArticleCount.Content = CountContent;
                            ds.Publictions.Items.Add(ArticleCount);
                        }

                        foreach (String Titles in result.Titles)
                        {
                            //To Test if titles are actually adding
                            SurfaceListBoxItem item      = new SurfaceListBoxItem();
                            TextBlock          PubTitles = new TextBlock();
                            item.Selected += new RoutedEventHandler(item_Selected);
                            item.Content   = Titles;
                            PubTitles.Tag  = result.Links.ElementAt(m);
                            //item.Tag = result.Authors.ElementAt(m);
                            ds.Publictions.Items.Add(item);
                            RowDefinition rowDef1 = new RowDefinition();
                            RowDefinition rowDef2 = new RowDefinition();
                            RowDefinition rowDef3 = new RowDefinition();
                            RowDefinition rowDef4 = new RowDefinition();

                            abs = new PubAbstract(PubTitles.Tag as string, result.getAuthors());

                            item.Tag = "Title:  " + item.Content as string + "\r\n" + "\r\n" + "\r\n"

                                       + "Authors:   " + result.Authors.ElementAt(m) as string + "\r\n" + "\r\n"

                                       + "Abstract:" + "\r\n" + "\r\n"

                                       + abs.getAbstract() as string;

                            m += 1;
                            Console.WriteLine(m);

                            if (m > 20)
                            {
                                break;
                            }
                        }

                        /*foreach (String Titles in result.Titles)
                         * {
                         *  TextBlock Middle = new TextBlock();
                         *  Middle.Text = Titles;
                         *  //ds.Publications.Children.Add(Middle);
                         *  Grid.SetRow(Middle, m);
                         *  m += 1;
                         #endregion
                         * //publications location maybe
                         * //Creates a list of PubMed source related to the query
                         *
                         * }*/
                    };
                    _Publist = _progressBarWrapper.execute <String, PubList>(_GetPublications, _myRegDS.BasicInfo.DescriptionName, callback);
                    #endregion
                    SurfaceWindow1.addData(sender, ds);
                };
                _dataSheet = _progressBarWrapper.execute <String, RegDataSheet>(_getRegDataSheet, partName.Text, _getRegDataSheetCallback);
            }
        }
        //Constructor for searches unbounded by part types
        public Part(String partType)
        {
            InitializeComponent();
            Orientation = 0;
            CanScale = false;
            CanRotate = false;

            _sitesList = new List<Sites>{new Sites(), new Sites()};

            //if (sw1 != null)
            //{
                _type = partType;
                if (_type == "prom")
                {
                    imgType.Source = SurfaceWindow1.BitmapToImageSource(Resource1.sbol_prom2);
                    //Background = Brushes.Orange;
                }
                else if (_type == "rbs")
                {
                    imgType.Source = SurfaceWindow1.BitmapToImageSource(Resource1.sbol_rbs2);
                    //Background = Brushes.DodgerBlue;
                }
                else if (_type == "cds")
                {
                    imgType.Source = SurfaceWindow1.BitmapToImageSource(Resource1.sbol_cds2);
                    _sitesList.ElementAt(0).copySitesInfoFrom(new Sites("aatg"));
                    //Background = Brushes.Green;
                }
                else //type == "term"
                {
                    imgType.Source = SurfaceWindow1.BitmapToImageSource(Resource1.sbol_term2);
                    //Background = Brushes.Red;
                }
            //}
            //else
            //{
            //    imgType.Source = SurfaceWindow1.BitmapToImageSource(Resource1.sbol_prom);
            //    this.Background = Brushes.Orange;
            //}

            _myRegDS = new RegDataSheet();

            _progressBarWrapper = new ProgressBarWrapper(new Action(showProgressBar), new Action(hideProgressBar));
            _myRegDS.BasicInfo.Sequence = "atgcatgctagcatccattacgatccgtcag";
        }
 //Copies properties from the source Part to the receiver
 public void copyPartInfoFrom(Part source)
 {
     try
     {
         partName.Text = source.partName.Text;
         partCategory.Text = source.partCategory.Text;
         imgType.Source = source.imgType.Source;
         //Background = source.Background;
         _type = source._type;
         _myRegDS = source._myRegDS;
         _sitesList.Clear();
         foreach (Sites s in source._sitesList)
         {
             _sitesList.Add(new Sites(s.Sequence));
         }
         //_sitesList = source._sitesList;
         Opacity = source.Opacity;
         mySource = source;
     }
     catch (Exception exc) { Console.WriteLine(exc); }
 }
        private void select_DataSheet(object sender, RoutedEventArgs e)
        {
            //try
            //{
            //_thisRegDS = new RegDataSheet("http://partsregistry.org/wiki/index.php?title=Part:" + this.partName.Text);

            ds = new MenuDataSheet();
            ds.ContainerManipulationCompleted += new ContainerManipulationCompletedEventHandler(onDSManipulationCompleted);

            if (_myRegDS.Name != "test") //Already got data from registry, so just populate from it
            {
                #region Populating the data sheet's datasheet
                //Specifies the Length of the Sequence on the Sequence tab of the data sheet
                int Length = _myRegDS.BasicInfo.Length;
                TextBlock LengthBlock = new TextBlock();
                //ds.SeqTab.Children.Add(LengthBlock);
                LengthBlock.VerticalAlignment = VerticalAlignment.Top;
                LengthBlock.Text = "Length: " + Length.ToString();

                //This is all pulling information from the Reg Data Sheet associated with the part and inserting it in the data sheet
                ds.PopulateDataSheet(_myRegDS.Name, 0, 1, ds.DataSheet, "datasheet");
                ds.PopulateDataSheet(_myRegDS.BasicInfo.DescriptionName, 1, 1, ds.DataSheet, "datasheet");
                ds.PopulateDataSheet(_myRegDS.Type, 2, 1, ds.DataSheet, "datasheet");
                ds.PopulateDataSheet(_myRegDS.Promoter.getReg(), 3, 1, ds.DataSheet, "datasheet");
                ds.PopulateDataSheet(_myRegDS.BasicInfo.Availability, 4, 1, ds.DataSheet, "datasheet");
                ds.PopulateDataSheet(_myRegDS.BasicInfo.Usefulness, 5, 1, ds.DataSheet, "datasheet");
                ds.PopulateDataSheet(_myRegDS.Description.assembCompString(), 6, 1, ds.DataSheet, "datasheet");
                ds.PopulateDataSheet(_myRegDS.Description.chassisString(), 7, 1, ds.DataSheet, "datasheet");

                

                //Specific to sequence tab
                ds.PopulateDataSheet(_myRegDS.BasicInfo.Sequence, 1, 1, ds.SeqTab, "seq");
                ds.PopulateDataSheet(Length.ToString(), 0, 1, ds.SeqTab, "length");

                //Specific to AuthorInfo Tab
                ds.PopulateDataSheet(_myRegDS.Reference.Author, 0, 1, ds.AuthorInfo, "author");
                ds.PopulateDataSheet(_myRegDS.Reference.Group, 1, 1, ds.AuthorInfo, "author");
                ds.PopulateDataSheet(_myRegDS.Reference.Date, 2, 1, ds.AuthorInfo, "author");

                if (_myRegDS.Type == "rbs")
                {
                    RowDefinition rowDef1 = new RowDefinition();
                    ds.DataSheet.RowDefinitions.Add(rowDef1);
                    ds.PopulateDataSheet(_myRegDS.Rbs.FamilyName, 8, 1, ds.DataSheet);
                    TextBlock RBSFam = new TextBlock();
                    RBSFam.Text = "Family";
                    ds.DataSheet.Children.Add(RBSFam);
                    Grid.SetRow(RBSFam, 8);
                }
                else if (_myRegDS.Type == "terminator")
                {
                    RowDefinition rowDef1 = new RowDefinition();
                    RowDefinition rowDef2 = new RowDefinition();
                    RowDefinition rowDef3 = new RowDefinition();
                    RowDefinition rowDef4 = new RowDefinition();

                    ds.DataSheet.RowDefinitions.Add(rowDef1);
                    ds.DataSheet.RowDefinitions.Add(rowDef2);
                    ds.DataSheet.RowDefinitions.Add(rowDef3);
                    ds.DataSheet.RowDefinitions.Add(rowDef4);

                    TextBlock Direction = new TextBlock();
                    Direction.Text = "Direction";
                    Direction.FontSize = 18;
                    ds.DataSheet.Children.Add(Direction);
                    Grid.SetRow(Direction, 8);

                    ds.PopulateDataSheet(_myRegDS.Terminators.Direction, 8, 1, ds.DataSheet);
                    ds.PopulateDataSheet(_myRegDS.Terminators.ForwardEff, 9, 1, ds.DataSheet);
                    ds.PopulateDataSheet(_myRegDS.Terminators.ReversedEff, 10, 1, ds.DataSheet);
                    ds.PopulateDataSheet(_myRegDS.Terminators.ReversedVers, 11, 1, ds.DataSheet);
                }

                #endregion

                #region Populating Publications
                Func<String, PubList> _GetPublications =
                        delegate(String id) { return new PubList(id); };
                Action<PubList> callback = delegate(PubList result)
                {
                    //_thisRegDS = new RegDataSheet("http://partsregistry.org/wiki/index.php?title=Part:" + this.partName.Text);

                    int m = 0;

                    if (result.Titles.Count == 0)
                    {
                        int Count = result.Titles.Count;
                        SurfaceListBoxItem NoResults = new SurfaceListBoxItem();
                        TextBlock Content = new TextBlock();
                        Content.Text = "No Results Found";
                        NoResults.Content = Content;
                        ds.Publictions.Items.Add(NoResults);
                    }

                    if (result.Titles.Count > 0)
                    {
                        int TotalArticles = result.Titles.Count;
                        SurfaceListBoxItem ArticleCount = new SurfaceListBoxItem();
                        TextBlock CountContent = new TextBlock();
                        CountContent.Text = "Results Found: " + TotalArticles as string;
                        ArticleCount.Content = CountContent;
                        ds.Publictions.Items.Add(ArticleCount);
                    }

                    foreach (String Titles in result.Titles)
                    {

                        //To Test if titles are actually adding
                        SurfaceListBoxItem item = new SurfaceListBoxItem();
                        TextBlock PubTitles = new TextBlock();
                        item.Selected += new RoutedEventHandler(item_Selected);
                        item.Content = Titles;
                        PubTitles.Tag = result.Links.ElementAt(m);
                        //item.Tag = result.Authors.ElementAt(m); 
                        ds.Publictions.Items.Add(item);
                        RowDefinition rowDef1 = new RowDefinition();
                        RowDefinition rowDef2 = new RowDefinition();
                        RowDefinition rowDef3 = new RowDefinition();
                        RowDefinition rowDef4 = new RowDefinition();

                        abs = new PubAbstract(PubTitles.Tag as string, result.getAuthors());

                        item.Tag = "Title:  " + item.Content as string + "\r\n" + "\r\n" + "\r\n"

                            + "Authors:   " + result.Authors.ElementAt(m) as string + "\r\n" + "\r\n"

                            + "Abstract:" + "\r\n" + "\r\n"

                            + abs.getAbstract() as string;

                        m += 1;
                        Console.WriteLine(m);

                        if (m > 20)
                            break;
                    }

                    /*foreach (String Titles in result.Titles)
                    {
                        TextBlock Middle = new TextBlock();
                        Middle.Text = Titles;
                        //ds.Publications.Children.Add(Middle);
                        Grid.SetRow(Middle, m);
                        m += 1; 
            #endregion
            //publications location maybe
            //Creates a list of PubMed source related to the query

                    }*/
                };
                _Publist = _progressBarWrapper.execute<String, PubList>(_GetPublications, _myRegDS.BasicInfo.DescriptionName, callback);
        #endregion
                SurfaceWindow1.addData(sender, ds);
            }
            else
            {
                Func<String, RegDataSheet> _getRegDataSheet =
                delegate(String pName) { return new RegDataSheet("http://partsregistry.org/wiki/index.php?title=Part:" + pName); };
                Action<RegDataSheet> _getRegDataSheetCallback = delegate(RegDataSheet _regDS)
                {
                    _myRegDS = _regDS;
                    #region Populating the data sheet's datasheet
                    //Specifies the Length of the Sequence on the Sequence tab of the data sheet
                    int Length = _myRegDS.BasicInfo.Length;
                    TextBlock LengthBlock = new TextBlock();
                    //ds.SeqTab.Children.Add(LengthBlock);
                    LengthBlock.VerticalAlignment = VerticalAlignment.Top;
                    LengthBlock.Text = "Length: " + Length.ToString();

                    //This is all pulling information from the Reg Data Sheet associated with the part and inserting it in the data sheet
                    ds.PopulateDataSheet(_myRegDS.Name, 0, 1, ds.DataSheet, "datasheet");
                    ds.PopulateDataSheet(_myRegDS.BasicInfo.DescriptionName, 1, 1, ds.DataSheet, "datasheet");
                    ds.PopulateDataSheet(_myRegDS.Type, 2, 1, ds.DataSheet, "datasheet");
                    ds.PopulateDataSheet(_myRegDS.Promoter.getReg(), 3, 1, ds.DataSheet, "datasheet");
                    ds.PopulateDataSheet(_myRegDS.BasicInfo.Availability, 4, 1, ds.DataSheet, "datasheet");
                    ds.PopulateDataSheet(_myRegDS.BasicInfo.Usefulness, 5, 1, ds.DataSheet, "datasheet");
                    ds.PopulateDataSheet(_myRegDS.Description.assembCompString(), 6, 1, ds.DataSheet, "datasheet");
                    ds.PopulateDataSheet(_myRegDS.Description.chassisString(), 7, 1, ds.DataSheet, "datasheet");

                    //Specific to sequence tab
                    ds.PopulateDataSheet(_myRegDS.BasicInfo.Sequence, 1, 1, ds.SeqTab, "seq");
                    ds.PopulateDataSheet(Length.ToString(), 0, 1, ds.SeqTab, "length");

                    //Specific to AuthorInfo Tab
                    ds.PopulateDataSheet(_myRegDS.Reference.Author, 0, 1, ds.AuthorInfo, "author");
                    ds.PopulateDataSheet(_myRegDS.Reference.Group, 1, 1, ds.AuthorInfo, "author");
                    ds.PopulateDataSheet(_myRegDS.Reference.Date, 2, 1, ds.AuthorInfo, "author");

                    if (_myRegDS.Type == "rbs")
                    {
                        RowDefinition rowDef1 = new RowDefinition();
                        ds.DataSheet.RowDefinitions.Add(rowDef1);
                        ds.PopulateDataSheet(_myRegDS.Rbs.FamilyName, 8, 1, ds.DataSheet);
                        TextBlock RBSFam = new TextBlock();
                        RBSFam.Text = "Family";
                        RBSFam.FontSize= 14;
                        RBSFam.FontWeight = FontWeights.Bold;
                        RBSFam.VerticalAlignment = VerticalAlignment.Top;
                        // COME BACK TO THIS LATER

                        ds.DataSheet.Children.Add(RBSFam);
                        Grid.SetRow(RBSFam, 8);
                    }
                    else if (_myRegDS.Type == "terminator")
                    {
                        RowDefinition rowDef1 = new RowDefinition();
                        RowDefinition rowDef2 = new RowDefinition();
                        RowDefinition rowDef3 = new RowDefinition();
                        RowDefinition rowDef4 = new RowDefinition();

                        ds.DataSheet.RowDefinitions.Add(rowDef1);
                        ds.DataSheet.RowDefinitions.Add(rowDef2);
                        ds.DataSheet.RowDefinitions.Add(rowDef3);
                        ds.DataSheet.RowDefinitions.Add(rowDef4);

                        TextBlock Direction = new TextBlock();
                        Direction.Text = "Direction";
                        Direction.FontSize = 18;
                        ds.DataSheet.Children.Add(Direction);
                        Grid.SetRow(Direction, 8);

                        ds.PopulateDataSheet(_myRegDS.Terminators.Direction, 8, 1, ds.DataSheet);
                        ds.PopulateDataSheet(_myRegDS.Terminators.ForwardEff, 9, 1, ds.DataSheet);
                        ds.PopulateDataSheet(_myRegDS.Terminators.ReversedEff, 10, 1, ds.DataSheet);
                        ds.PopulateDataSheet(_myRegDS.Terminators.ReversedVers, 11, 1, ds.DataSheet);
                    }

                    #endregion

                    #region Populating Publications
                    Func<String, PubList> _GetPublications =
                            delegate(String id) { return new PubList(id); };
                    Action<PubList> callback = delegate(PubList result)
                    {
                        //_thisRegDS = new RegDataSheet("http://partsregistry.org/wiki/index.php?title=Part:" + this.partName.Text);

                        int m = 0;

                        if (result.Titles.Count == 0)
                        {
                            int Count = result.Titles.Count;
                            SurfaceListBoxItem NoResults = new SurfaceListBoxItem();
                            TextBlock Content = new TextBlock();
                            Content.Text = "No Results Found";
                            NoResults.Content = Content;
                            ds.Publictions.Items.Add(NoResults);
                        }

                        if (result.Titles.Count > 0)
                        {
                            int TotalArticles = result.Titles.Count;
                            SurfaceListBoxItem ArticleCount = new SurfaceListBoxItem();
                            TextBlock CountContent = new TextBlock();
                            CountContent.Text = "Results Found: " + TotalArticles as string;
                            ArticleCount.Content = CountContent;
                            ds.Publictions.Items.Add(ArticleCount);
                        }

                        foreach (String Titles in result.Titles)
                        {

                            //To Test if titles are actually adding
                            SurfaceListBoxItem item = new SurfaceListBoxItem();
                            TextBlock PubTitles = new TextBlock();
                            item.Selected += new RoutedEventHandler(item_Selected);
                            item.Content = Titles;
                            PubTitles.Tag = result.Links.ElementAt(m);
                            //item.Tag = result.Authors.ElementAt(m); 
                            ds.Publictions.Items.Add(item);
                            RowDefinition rowDef1 = new RowDefinition();
                            RowDefinition rowDef2 = new RowDefinition();
                            RowDefinition rowDef3 = new RowDefinition();
                            RowDefinition rowDef4 = new RowDefinition();

                            abs = new PubAbstract(PubTitles.Tag as string, result.getAuthors());

                            item.Tag = "Title:  " + item.Content as string + "\r\n" + "\r\n" + "\r\n"

                                + "Authors:   " + result.Authors.ElementAt(m) as string + "\r\n" + "\r\n"

                                + "Abstract:" + "\r\n" + "\r\n"

                                + abs.getAbstract() as string;

                            m += 1;
                            Console.WriteLine(m);

                            if (m > 20)
                                break;
                        }

                        /*foreach (String Titles in result.Titles)
                        {
                            TextBlock Middle = new TextBlock();
                            Middle.Text = Titles;
                            //ds.Publications.Children.Add(Middle);
                            Grid.SetRow(Middle, m);
                            m += 1; 
                #endregion
                //publications location maybe
                //Creates a list of PubMed source related to the query

                        }*/
                    };
                    _Publist = _progressBarWrapper.execute<String, PubList>(_GetPublications, _myRegDS.BasicInfo.DescriptionName, callback);
        #endregion
                    SurfaceWindow1.addData(sender, ds);
                };
                _dataSheet = _progressBarWrapper.execute<String, RegDataSheet>(_getRegDataSheet, partName.Text, _getRegDataSheetCallback);
            }
        }
 //Primer Designer helper method: gets and sets data from Registry for Parts if not yet requested
 //Must be accessible to L1 modules/trans. units and L2 modules/multigene constructs
 //DOESN'T WORK: only seems to work when in above event handler; doesn't have a step where _regDS is returned, if _regDS was created at all
 public void getDataForPrimerDesigner()
 {
     if (_myRegDS.Name != "test") //Already got data from registry, so don't make new one
     {
     }
     else
     {
         _myRegDS = new RegDataSheet("http://partsregistry.org/wiki/index.php?title=Part:" + partName.Text);
         //Func<String, RegDataSheet> _getRegDataSheet =
         //delegate(String pName) { return new RegDataSheet("http://partsregistry.org/wiki/index.php?title=Part:" + pName); };
         //Action<RegDataSheet> _getRegDataSheetCallback = delegate(RegDataSheet _regDS)
         //{
         //    _myRegDS = _regDS;
         //};
         //_dataSheet = _progressBarWrapper.execute<String, RegDataSheet>(_getRegDataSheet, partName.Text, _getRegDataSheetCallback);
     }
 }
        //Method for generating the Sequence scatterview item from the element menu
        private void select_Sequence(object sender, RoutedEventArgs e)
        {

            _thisRegDS = new RegDataSheet("http://partsregistry.org/wiki/index.php?title=Part:" + this.partName.Text);    
            
            seq = new ScatterViewItem();
                seq.CanRotate = false;
                seq.CanScale = false; 
                TextBlock seqtext = new TextBlock(); //Creates a textblock to be inserted into the scatterview
                
                seqtext.Margin = new Thickness(10); 
                seq.Background = Brushes.SteelBlue;
                seqtext.Background = Brushes.White;

                seq.Width = 800;
                seq.MinHeight = 600;
                seqtext.Width = 790;
                seqtext.MinHeight = 590;
                

                seqtext.Text = "Parts Registry ID: " + _thisRegDS.Name + "\n" + "\n" + "Sequence:" + "\n" + "\n" + _thisRegDS.BasicInfo.Sequence;
                seq.Content = seqtext;

                SurfaceWindow1.addData(sender, seq);
                seq.ContainerManipulationCompleted += new ContainerManipulationCompletedEventHandler(onSeqManipulationCompleted); //Event handler that allows trashing when swiped to the right
                seq.Orientation = 0;

                //Overwrites center calculated in addData(); consider checking out later
                Point PartCenter = this.Center;
                Point OriginalCenter = seq.Center;
                OriginalCenter.X = (PartCenter.X);
                OriginalCenter.Y = (PartCenter.Y + 370);

                seq.Center = OriginalCenter;
            }