package gui // helpGui.go implements pages to explain Seekia's features and functionality to users import "fyne.io/fyne/v2" import "fyne.io/fyne/v2/container" import "fyne.io/fyne/v2/theme" import "fyne.io/fyne/v2/widget" import "seekia/resources/geneticReferences/monogenicDiseases" //TODO: Improve many of these descriptions func setHelpPage(window fyne.Window, previousPage func()){ title := getPageTitleCentered("Help") backButton := getBackButtonCentered(previousPage) subtitle := getPageSubtitleCentered("Help") description1 := getLabelCentered("Select your desires on the Desires page.") description2 := getLabelCentered("View matches on the Matches page.") description3 := getLabelCentered("Build and broadcast your profile on the Profile page.") description4 := getLabelCentered("You can view matches without broadcasting a profile.") description5 := getBoldLabelCentered("More help pages are coming soon.") //TODO: Add buttons and navigation to view more help pages. page := container.NewVBox(title, backButton, widget.NewSeparator(), subtitle, widget.NewSeparator(), description1, description2, description3, description4, description5) setPageContent(page, window) } func setMateProfileExpirationExplainerPage(window fyne.Window, previousPage func()){ title := getPageTitleCentered("Help - Mate Profile Expiration") backButton := getBackButtonCentered(previousPage) subtitle := getPageSubtitleCentered("Mate Profile Expiration") //TODO: Retrieve the expiration time from the parameters description1 := getLabelCentered("All mate profiles expire after 3 months.") description2 := getLabelCentered("You must broadcast a new profile at least this often.") description3 := getLabelCentered("Your new profile does not need to have any changes.") description4 := getLabelCentered("The Broadcast page will tell you when your profile will expire.") description5 := getLabelCentered("This is seperate from your identity balance, which also expires.") description6 := getLabelCentered("Your identity balance must also be funded to broadcast any profiles.") page := container.NewVBox(title, backButton, widget.NewSeparator(), subtitle, widget.NewSeparator(), description1, description2, description3, description4, widget.NewSeparator(), description5, description6, widget.NewSeparator()) setPageContent(page, window) } func setGreetAndRejectExplainerPage(window fyne.Window, previousPage func()){ title := getPageTitleCentered("Help - Greet And Reject") backButton := getBackButtonCentered(previousPage) subtitle := getPageSubtitleCentered("Greet And Reject") description1 := getLabelCentered("Seekia users can send Greet and Reject messages.") description2 := getLabelCentered("Greet messages are sent to indicate interest in a user.") description3 := getLabelCentered("Reject messages are sent to tell a user they are not interested.") description4 := getLabelCentered("You can filter your matches to only show users who have greeted or contacted you.") description5 := getLabelCentered("You can also hide users who have rejected you.") description6 := getLabelCentered("You can undo a rejection by sending a greeting.") page := container.NewVBox(title, backButton, widget.NewSeparator(), subtitle, widget.NewSeparator(), description1, description2, description3, description4, description5, description6, widget.NewSeparator()) setPageContent(page, window) } func setSexExplainerPage(window fyne.Window, previousPage func()){ title := getPageTitleCentered("Help - Sex") backButton := getBackButtonCentered(previousPage) subtitle := getPageSubtitleCentered("Sex") description1 := getLabelCentered("Sex refers to a person's physical sex.") description2 := getLabelCentered("Male: XY chromosomes, born with male anatomy.") description3 := getLabelCentered("Female: XX chromosomes, born with female anatomy.") description4 := getLabelCentered("Intersex Male: Not either of the above categories, but closer to Male.") description5 := getLabelCentered("Intersex Female: Not any of the above categories, but closer to Female.") description6 := getLabelCentered("Intersex: Not any of the above categories.") page := container.NewVBox(title, backButton, widget.NewSeparator(), subtitle, widget.NewSeparator(), description1, description2, description3, description4, description5, description6) setPageContent(page, window) } func setMateProfileAttributeVisibilityExplainerPage(window fyne.Window, previousPage func()){ title := getPageTitleCentered("Help - Profile Attribute Visibility") backButton := getBackButtonCentered(previousPage) subtitle := getPageSubtitleCentered("Profile Attribute Visibility") description1 := getLabelCentered("Some Mate profile attributes can have their visibility turned on or off.") description2 := getLabelCentered("If you turn an attribute's visibility off, it will not show up in your profile.") description3 := getLabelCentered("This feature is needed to be able to calculate desires privately.") description4 := getLabelCentered("For example, if you want to calculate distance, you must provide your location.") description5 := getLabelCentered("If you don't want your profile to contain your location, you can turn off its visibility.") description6 := getLabelCentered("This way, you can still calculate distance without sharing your location publicly.") page := container.NewVBox(title, backButton, widget.NewSeparator(), subtitle, widget.NewSeparator(), description1, description2, description3, description4, description5, description6) setPageContent(page, window) } func setProfileGenomeInfoExplainerPage(window fyne.Window, previousPage func()){ title := getPageTitleCentered("Help - Profile Genome Info") backButton := getBackButtonCentered(previousPage) subtitle := getPageSubtitleCentered("Profile Genome Information") description1 := getLabelCentered("Seekia allows users to share their genome information.") description2 := getLabelCentered("Users can learn about the monogenic disease, polygenic disease, and trait information for offspring with each user.") description3 := getLabelCentered("Users can learn the probability of their offspring having a specific disease.") description4 := getLabelCentered("Users can use this information to reduce the probability of their offspring having diseases.") description5 := getLabelCentered("Users can choose their mate to influence their offspring's trait and disease risk.") description6 := getLabelCentered("Only specific locations of a user's genome are shared.") page := container.NewVBox(title, backButton, widget.NewSeparator(), subtitle, widget.NewSeparator(), description1, description2, description3, description4, description5, description6) setPageContent(page, window) } func setDesireFilterOptionsExplainerPage(window fyne.Window, previousPage func()){ title := getPageTitleCentered("Help - Desire Filter Options") backButton := getBackButtonCentered(previousPage) subtitle := getPageSubtitleCentered("Desire Filter Options") description1 := getLabelCentered("Each desire has 1 or 2 filter options to configure.") description2 := getBoldLabelCentered("Filter All") description3 := getLabelCentered("When enabled, only users who fulfill the desire will be shown in your matches.") description4 := getLabelCentered("This does not filter users who have not responded.") description5 := getBoldLabelCentered("Require Response") description6 := getLabelCentered("When enabled, only users who have responded to the attribute will be shown.") description7 := getLabelCentered("This does not filter users who responded, but do not fulfill the desire.") description8 := getLabelCentered("If you disable both options, the desire will only effect match score calculations.") page := container.NewVBox(title, backButton, widget.NewSeparator(), subtitle, widget.NewSeparator(), description1, widget.NewSeparator(), description2, description3, description4, widget.NewSeparator(), description5, description6, description7, widget.NewSeparator(), description8) setPageContent(page, window) } func setAncestryCompositionDesireRestrictiveModeExplainerPage(window fyne.Window, previousPage func()){ title := getPageTitleCentered("Help - Restrictive Mode") backButton := getBackButtonCentered(previousPage) subtitle := getPageSubtitleCentered("Ancestry Composition Desire - Restrictive Mode") description1 := getLabelCentered("The ancestry composition desire has 2 modes: Restrictive and Non-Restrictive.") description2 := getLabelCentered("In restrictive mode, all ancestral groups which you desire must be described.") description3 := getLabelCentered("For example, let's say you add 80-100% Melanesian as your only location desire.") description4 := getLabelCentered("In non-restrictive mode, anyone who is 80-100% Melanesian will fulfill the desire.") description5 := getLabelCentered("In restrictive mode, only users whom are 100% Melanesian will fulfill the desire.") description6 := getLabelCentered("This is because in restrictive mode, you must define all racial amounts you will tolerate.") description7 := getLabelCentered("In restrictive mode, if you will tolerate 0-2% for all locations, you must add 0-2% for all locations.") page := container.NewVBox(title, backButton, widget.NewSeparator(), subtitle, widget.NewSeparator(), description1, description2, description3, description4, description5, description6, description7) setPageContent(page, window) } func setOffspringAncestryCompositionExplainerPage(window fyne.Window, previousPage func()){ title := getPageTitleCentered("Help - Offspring Ancestry Composition") backButton := getBackButtonCentered(previousPage) subtitle := getPageSubtitleCentered("Offspring Ancestry Composition") description1 := getLabelCentered("Seekia is able to calculate the ancestry composition of an offspring between two users.") description2 := getLabelCentered("Any conceived offspring's ancestry composition may vary slightly from the prediction.") description3 := getLabelCentered("Offspring from the same parents will not always inherit the same genetic sections from each parent.") description4 := getLabelCentered("Consequently, siblings range between being ~40%-60% genetically identical.") description5 := getLabelCentered("However, sometimes the offspring ancestry composition prediction is ~100% accurate.") description6 := getLabelCentered("For example, if both parents are 100% Melanesian, their offspring will always be ~100% Melanesian.") description7 := getLabelCentered("This rule applies for all ancestral locations, not just Melanesian.") page := container.NewVBox(title, backButton, widget.NewSeparator(), subtitle, widget.NewSeparator(), description1, description2, description3, description4, description5, description6, description7) setPageContent(page, window) } func setGenomePhasingExplainerPage(window fyne.Window, previousPage func()){ title := getPageTitleCentered("Help - Genome Phasing") backButton := getBackButtonCentered(previousPage) subtitle := getPageSubtitleCentered("Genome Phasing") description1 := getLabelCentered("A raw genome file is either Phased or Unphased") description2 := getLabelCentered("A phased genome file describes which parent each gene was inherited from.") description3 := getLabelCentered("This allows Seekia to more accurately diagnose genetic diseases.") description4 := getLabelCentered("Only some companies provide phased genome sequencing.") page := container.NewVBox(title, backButton, widget.NewSeparator(), subtitle, widget.NewSeparator(), description1, description2, description3, description4) setPageContent(page, window) } func setGenomeSNPCountExplainerPage(window fyne.Window, previousPage func()){ title := getPageTitleCentered("Help - Genome SNP Count") backButton := getBackButtonCentered(previousPage) subtitle := getPageSubtitleCentered("Genome SNP Count") description1 := getLabelCentered("Each raw genome file has an SNP count.") description2 := getLabelCentered("This is the number of SNPs, or locations, sequenced.") description3 := getLabelCentered("The higher this number, the more information your genome file contains.") page := container.NewVBox(title, backButton, widget.NewSeparator(), subtitle, widget.NewSeparator(), description1, description2, description3) setPageContent(page, window) } func setCombinedGenomesExplainerPage(window fyne.Window, previousPage func()){ title := getPageTitleCentered("Help - Combined Genomes") backButton := getBackButtonCentered(previousPage) subtitle := getPageSubtitleCentered("Combined Genomes") description1 := getLabelCentered("Seekia combines multiple genome files into two different genomes.") description2 := getLabelCentered("Genome sequencing can be inaccurate, so multiple imported genome files will sometimes disagree.") description3 := getLabelCentered("Each genome file also contains different recorded locations.") description4 := getLabelCentered("The Only Exclude Conflicts genome will include genome locations that only 1 genome has reported.") description5 := getLabelCentered("The Only Include Shared genome only includes genome locations where at least 2 genomes agree.") description6 := getLabelCentered("The Only Include Shared genome is the most accurate, but may contain less information.") description7 := getLabelCentered("You should study all imported genomes to see what they report.") page := container.NewVBox(title, backButton, widget.NewSeparator(), subtitle, widget.NewSeparator(), description1, description2, description3, description4, description5, description6, description7) setPageContent(page, window) } func setGenomeHasMonogenicDiseaseVariantMutationExplainerPage(window fyne.Window, previousPage func()){ title := getPageTitleCentered("Help - Genome Has Mutation") backButton := getBackButtonCentered(previousPage) subtitle := getPageSubtitleCentered("Genome Has Mutation") description1 := getLabelCentered("A monogenic disease variant is a specific defect in a gene that causes the disease.") description2 := getLabelCentered("Each genome can either have 0, 1, or 2 mutations for each variant.") description3 := getLabelCentered("If a genome has a variant mutation, then either 1 or 2 mutations exist.") description4 := getLabelCentered("For a recessive monogenic disease, you need 2 mutations, one on each chromosome, to have the disease.") description5 := getLabelCentered("For a dominant monogenic disease, you only need at least 1 mutation to have the disease.") description6 := getLabelCentered("Unless your genome is phased, Seekia does not know which chromosome contains each mutation.") description7 := getLabelCentered("Seekia calculates your probabilities of having and passing the disease automatically.") page := container.NewVBox(title, backButton, widget.NewSeparator(), subtitle, widget.NewSeparator(), description1, description2, description3, description4, description5, description6, description7) setPageContent(page, window) } func setMonogenicDiseaseVariantsExplainerPage(window fyne.Window, previousPage func()){ title := getPageTitleCentered("Help - Monogenic Disease Variants") backButton := getBackButtonCentered(previousPage) subtitle := getPageSubtitleCentered("Monogenic Disease Variants") description1 := getLabelCentered("A monogenic disease variant is a specific defect in a gene that causes the disease.") description2 := getLabelCentered("Each genome can either have 0, 1, or 2 mutations for each variant.") description3 := getLabelCentered("For a recessive monogenic disease, you at least 2 mutations, one on each chromosome, to have the disease.") description4 := getLabelCentered("For a dominant monogenic disease, you only need 1 mutation to have the disease.") description5 := getLabelCentered("Unless your genome is phased, Seekia does not know which chromosome contains each mutation.") description6 := getLabelCentered("Seekia calculates your probabilities of having and passing the disease automatically.") page := container.NewVBox(title, backButton, widget.NewSeparator(), subtitle, widget.NewSeparator(), description1, description2, description3, description4, description5, description6) setPageContent(page, window) } func setVariantEffectIsMildExplainerPage(window fyne.Window, previousPage func()){ title := getPageTitleCentered("Help - Effect Is Mild") backButton := getBackButtonCentered(previousPage) subtitle := getPageSubtitleCentered("Variant Effect Is Mild") description1 := getLabelCentered("Some monogenic disease variants are known to be mild.") description2 := getLabelCentered("They are known to only cause mild disease symptoms for the affected person.") description3 := getLabelCentered("This may not be true for all cases.") description4 := getLabelCentered("A defective gene is affected by all of its variants.") description5 := getLabelCentered("If you have multiple variants, you will usually have a more severe disease.") page := container.NewVBox(title, backButton, widget.NewSeparator(), subtitle, widget.NewSeparator(), description1, description2, description3, description4, description5) setPageContent(page, window) } func setNumberOfTestedVariantsExplainerPage(window fyne.Window, previousPage func()){ title := getPageTitleCentered("Help - Tested Variants") backButton := getBackButtonCentered(previousPage) subtitle := getPageSubtitleCentered("Number of Tested Variants") description1 := getLabelCentered("Each monogenic disease has a set of variants Seekia tests for.") description2 := getLabelCentered("These variants are specific mutations that cause the monogenic disease.") description3 := getLabelCentered("The greater the number of tested variants is, the more accurate the results will be.") description4 := getLabelCentered("Seekia cannot test for variants whose location your genome file does not contain.") description5 := getLabelCentered("Seekia also does not test for many very rare disease variants.") page := container.NewVBox(title, backButton, widget.NewSeparator(), subtitle, widget.NewSeparator(), description1, description2, description3, description4, description5) setPageContent(page, window) } func setNumberOfPhasedLociExplainerPage(window fyne.Window, previousPage func()){ title := getPageTitleCentered("Help - Phased Loci") backButton := getBackButtonCentered(previousPage) subtitle := getPageSubtitleCentered("Number of Phased Loci") description1 := getLabelCentered("Each monogenic disease has a set of variants Seekia tests for.") description2 := getLabelCentered("These variants are specific mutations that cause each monogenic disease.") description3 := getLabelCentered("Each variant effects a specific locus of the genome.") description4 := getLabelCentered("Each genome file reports the values of loci.") description5 := getLabelCentered("A reported value can either be phased or unphased.") description6 := getLabelCentered("Phased values provide more information than unphased values.") description7 := getLabelCentered("The greater the number of phased loci is, the more accurate a genetic analysis will be.") description8 := getLabelCentered("Import a phased genome for the most accurate genetic analysis results.") description9 := getLabelCentered("Use a genome sequencing provider which produces phased genome files.") //TODO: Explain that phased genomes don't always increase accuracy, and the results may still be fully accurate // For example, if you have no mutations or if you only have 1 mutation on 1 locus, // a phased sequence has no impact on your disease analysis results. page := container.NewVBox(title, backButton, widget.NewSeparator(), subtitle, widget.NewSeparator(), description1, description2, description3, description4, description5, description6, description7, description8, description9) setPageContent(page, window) } func setCoupleGenomePairExplainerPage(window fyne.Window, previousPage func()){ title := getPageTitleCentered("Help - Couple Genome Pair") backButton := getBackButtonCentered(previousPage) subtitle := getPageSubtitleCentered("Couple Genome Pair") description1 := getLabelCentered("A couple analysis analyzes either 1 or 2 genome pairs.") description2 := getLabelCentered("Each genome pair contains 1 genome from each person.") description3 := getLabelCentered("The results from each genome pair may differ.") description4 := getLabelCentered("You should view which genomes were analyzed for each genome pair.") page := container.NewVBox(title, backButton, widget.NewSeparator(), subtitle, widget.NewSeparator(), description1, description2, description3, description4) setPageContent(page, window) } func setPersonProbabilityOfPassingVariantExplainerPage(window fyne.Window, previousPage func()){ title := getPageTitleCentered("Help - Probability Of Passing Variant") backButton := getBackButtonCentered(previousPage) subtitle := getPageSubtitleCentered("Probability Of Passing A Variant") description1 := getLabelCentered("This is the probability that a person will pass a monogenic disease variant to their offspring.") description2 := getLabelCentered("If the disease is recessive, both parents need to pass a variant for the offspring to have the disease.") description3 := getLabelCentered("If the disease is dominant, only one parent needs to pass a variant for the offspring to have the disease.") description4 := getLabelCentered("This probability becomes more accurate if more variants are tested.") description5 := getLabelCentered("The person's imported genome may not contain the locations for some variants.") description6 := getLabelCentered("Seekia also does not test for many rare monogenic disease variants.") page := container.NewVBox(title, backButton, widget.NewSeparator(), subtitle, widget.NewSeparator(), description1, description2, description3, description4, description5, description6) setPageContent(page, window) } func setPersonHasMonogenicDiseaseExplainerPage(window fyne.Window, previousPage func()){ title := getPageTitleCentered("Help - Person Has Monogenic Disease") backButton := getBackButtonCentered(previousPage) subtitle := getPageSubtitleCentered("Person Has Monogenic Disease") description1 := getLabelCentered("This describes if the analyzed person has this monogenic disease.") description2 := getLabelCentered("This result becomes more accurate if more variants are tested.") description3 := getLabelCentered("It also become more accurate in certain circumstances if the tested loci are phased.") description4 := getLabelCentered("The person's imported genomes may not contain locations for some variants.") description5 := getLabelCentered("Seekia also does not test for many rare disease variants.") page := container.NewVBox(title, backButton, widget.NewSeparator(), subtitle, widget.NewSeparator(), description1, description2, description3, description4, description5) setPageContent(page, window) } func setOffspringProbabilityOfHavingMonogenicDiseaseExplainerPage(window fyne.Window, previousPage func()){ title := getPageTitleCentered("Help - Offspring Monogenic Disease Probability") backButton := getBackButtonCentered(previousPage) subtitle := getPageSubtitleCentered("Offspring Probability Of Having Monogenic Disease") description1 := getLabelCentered("This is the probability that an offspring from this couple will have the disease.") description2 := getLabelCentered("This probability is more accurate if more variants are tested.") description3 := getLabelCentered("The couple's imported genomes may not contain locations for some variants.") description4 := getLabelCentered("Seekia also does not test for many rare disease variants.") page := container.NewVBox(title, backButton, widget.NewSeparator(), subtitle, widget.NewSeparator(), description1, description2, description3, description4) setPageContent(page, window) } func setOffspringProbabilityOfHavingVariantExplainerPage(window fyne.Window, previousPage func()){ title := getPageTitleCentered("Help - Offspring Variant Probability") backButton := getBackButtonCentered(previousPage) subtitle := getPageSubtitleCentered("Offspring Probability Of Having Variant") description1 := getLabelCentered("This is the probability that an offspring from this couple will have a variant for a monogenic disease.") description2 := getLabelCentered("If the disease is dominant, an offspring with any variants will have the disease.") description3 := getLabelCentered("If the disease is recessive, an offspring having a variant will not necessarily have the disease.") description4 := getLabelCentered("They could be a disease carrier who does not experience any symptoms of the disease.") description5 := getLabelCentered("Couples only need to try to avoid the offspring having the disease.") description6 := getBoldLabelCentered("This probability is only shown to satisfy curiosity.") description7 := getLabelCentered("This probability is more accurate if more variants are tested.") description8 := getLabelCentered("The couple's imported genomes may not contain locations for some variants.") description9 := getLabelCentered("Seekia also does not test for many rare disease variants.") page := container.NewVBox(title, backButton, widget.NewSeparator(), subtitle, widget.NewSeparator(), description1, description2, description3, description4, description5, description6, description7, description8, description9) setPageContent(page, window) } func setPersonGeneticAnalysisConflictExistsExplainerPage(window fyne.Window, previousPage func()){ title := getPageTitleCentered("Help - Conflict Exists") backButton := getBackButtonCentered(previousPage) subtitle := getPageSubtitleCentered("Genome Conflict Exists") description1 := getLabelCentered("If a person has multiple genome files, the contents from each file may differ.") description2 := getLabelCentered("This is because the sequencing process recorded different values.") description3 := getLabelCentered("All genomes should contain the same sequence, so one of the genomes must have an error.") description4 := getLabelCentered("These genomes may have conflicting analysis results.") description5 := getLabelCentered("If they have conflicting results, you should view the results for each genome.") description6 := getLabelCentered("Import more genomes to get more accurate results.") page := container.NewVBox(title, backButton, widget.NewSeparator(), subtitle, widget.NewSeparator(), description1, description2, description3, description4, description5, description6) setPageContent(page, window) } func setCoupleGeneticAnalysisConflictExistsExplainerPage(window fyne.Window, previousPage func()){ title := getPageTitleCentered("Help - Conflict Exists") backButton := getBackButtonCentered(previousPage) subtitle := getPageSubtitleCentered("Conflict Exists") description1 := getLabelCentered("If either person has multiple genomes, multiple genome pairs will be created.") description2 := getLabelCentered("These genome pairs may have conflicting analysis results.") description3 := getLabelCentered("These conflicts are caused by errors in the genome sequencing process.") description4 := getLabelCentered("If they have conflicting results, you should view both genome pair results.") page := container.NewVBox(title, backButton, widget.NewSeparator(), subtitle, widget.NewSeparator(), description1, description2, description3, description4) setPageContent(page, window) } func setPolygenicDiseaseAverageLifetimeRiskExplainerPage(window fyne.Window, previousPage func()){ title := getPageTitleCentered("Help - Lifetime Polygenic Disease Risk") backButton := getBackButtonCentered(previousPage) subtitle := getPageSubtitleCentered("Lifetime Polygenic Disease Risk") description1 := getLabelCentered("Each polygenic disease has a chart describing its lifetime risk.") description2 := getLabelCentered("This represents the probability that any person will have the disease.") description3 := getLabelCentered("For example, lets say the lifetime risk for a disease is 10%, if you are a Male between 50-60.") description4 := getLabelCentered("This means that Males between the ages of 50-60 have a 10% probability of suffering from the disease.") page := container.NewVBox(title, backButton, widget.NewSeparator(), subtitle, widget.NewSeparator(), description1, description2, description3, description4) setPageContent(page, window) } func setPolygenicDiseaseRiskScoreExplainerPage(window fyne.Window, previousPage func()){ title := getPageTitleCentered("Help - Polygenic Disease Risk Score") backButton := getBackButtonCentered(previousPage) subtitle := getPageSubtitleCentered("Polygenic Disease Risk Score") description1 := getLabelCentered("Person genetic analyses contain a person's risk score for each polygenic disease.") description2 := getLabelCentered("This score describes their overall risk for the disease.") description3 := getLabelCentered("0/10 = Lowest risk, 10/10 = Highest risk.") description4 := getLabelCentered("The more locations that are tested, the more accurate the score is.") page := container.NewVBox(title, backButton, widget.NewSeparator(), subtitle, widget.NewSeparator(), description1, description2, description3, description4) setPageContent(page, window) } func setOffspringPolygenicDiseaseRiskScoreExplainerPage(window fyne.Window, previousPage func()){ title := getPageTitleCentered("Help - Offspring Polygenic Disease Risk Score") backButton := getBackButtonCentered(previousPage) subtitle := getPageSubtitleCentered("Offspring Polygenic Disease Risk Score") description1 := getLabelCentered("Couple genetic analyses contain an offspring's risk score for each polygenic disease.") description2 := getLabelCentered("This score describes the average risk score for offspring produced by the couple.") description3 := getLabelCentered("0/10 = Lowest risk, 10/10 = Highest risk.") description4 := getLabelCentered("The more locations that are tested, the more accurate the score is.") page := container.NewVBox(title, backButton, widget.NewSeparator(), subtitle, widget.NewSeparator(), description1, description2, description3, description4) setPageContent(page, window) } func setPolygenicDiseaseLociExplainerPage(window fyne.Window, previousPage func()){ title := getPageTitleCentered("Help - Polygenic Disease Loci") backButton := getBackButtonCentered(previousPage) subtitle := getPageSubtitleCentered("Polygenic Disease Loci") description1 := getLabelCentered("Each polygenic disease has a set of associated genome loci.") description2 := getLabelCentered("These are locations on the genome that can be tested to determine disease risk.") description3 := getLabelCentered("The more loci that your genome sequence contains, the more accurate your disease risk score will be.") page := container.NewVBox(title, backButton, widget.NewSeparator(), subtitle, widget.NewSeparator(), description1, description2, description3) setPageContent(page, window) } func setPolygenicDiseaseNumberOfLociTestedExplainerPage(window fyne.Window, previousPage func()){ title := getPageTitleCentered("Help - Number Of Loci Tested") backButton := getBackButtonCentered(previousPage) subtitle := getPageSubtitleCentered("Polygenic Disease - Number Of Loci Tested") description1 := getLabelCentered("A person's polygenic disease risk score is calculated by testing locations on their genome.") description2 := getLabelCentered("Each location will represent either an increased risk, decreased risk, or no impact on risk.") description3 := getLabelCentered("The more locations that are tested, the more accurate the risk score will be.") description4 := getLabelCentered("Import a full genome sequence to test all locations.") page := container.NewVBox(title, backButton, widget.NewSeparator(), subtitle, widget.NewSeparator(), description1, description2, description3, description4) setPageContent(page, window) } func setOffspringPolygenicDiseaseNumberOfLociTestedExplainerPage(window fyne.Window, previousPage func()){ title := getPageTitleCentered("Help - Number Of Loci Tested") backButton := getBackButtonCentered(previousPage) subtitle := getPageSubtitleCentered("Polygenic Disease - Number Of Loci Tested") description1 := getLabelCentered("An offspring's polygenic disease risk score is calculated by testing locations on their genome.") description2 := getLabelCentered("Each location will represent either an increased risk, decreased risk, or no impact on risk.") description3 := getLabelCentered("The more locations that are tested, the more accurate the risk score will be.") description4 := getLabelCentered("A location will only be considered tested if it exists in both parent's genomes.") description5 := getLabelCentered("Seekia will test all 4 possible outcomes for each location.") description6 := getLabelCentered("Import a full genome sequence for both parents to test all locations.") page := container.NewVBox(title, backButton, widget.NewSeparator(), subtitle, widget.NewSeparator(), description1, description2, description3, description4, description5, description6) setPageContent(page, window) } func setDiscreteTraitNeuralNetworkPredictionExplainerPage(window fyne.Window, previousPage func()){ title := getPageTitleCentered("Help - Neural Network Prediction") backButton := getBackButtonCentered(previousPage) subtitle := getPageSubtitleCentered("Discrete Trait Neural Network Prediction") description1 := getLabelCentered("Person genetic analyses contain discrete trait analyses.") description2 := getLabelCentered("There are 2 discrete trait analysis methods: Neural Networks and Rules.") description3 := getLabelCentered("Each trait can be analyzed by either rules or a neural network.") description4 := getLabelCentered("Neural network prediction is calculated by inputing a genome's loci into a neural network.") description5 := getLabelCentered("Each trait has multiple outcomes, and the neural network predicts a single outcome.") description6 := getLabelCentered("The higher the quantity of tested loci, the more accurate the result is.") description7 := getLabelCentered("The probability that a neural network's prediction is accurate is called its Confidence.") page := container.NewVBox(title, backButton, widget.NewSeparator(), subtitle, widget.NewSeparator(), description1, description2, description3, description4, description5, description6, description7) setPageContent(page, window) } func setOffspringDiscreteTraitNeuralNetworkPredictionExplainerPage(window fyne.Window, previousPage func()){ title := getPageTitleCentered("Help - Neural Network Prediction") backButton := getBackButtonCentered(previousPage) subtitle := getPageSubtitleCentered("Offspring Discrete Trait Neural Network Prediction") description1 := getLabelCentered("Couple genetic analyses contain discrete trait analyses.") description2 := getLabelCentered("There are 2 discrete trait analysis methods: Neural Networks and Rules.") description3 := getLabelCentered("Each trait can be analyzed by either rules or a neural network.") description4 := getLabelCentered("Neural network prediction is calculated by inputing a genome's loci into a neural network.") description5 := getLabelCentered("Each trait has multiple outcomes, and the neural network predicts the probability of each outcome.") description6 := getLabelCentered("The higher the quantity of known loci, the more accurate the result is.") description7 := getLabelCentered("The probability that a neural network's prediction is accurate is called its Confidence.") description8 := getLabelCentered("For couples, the Confidence is the average of the confidence of 100 prospective offspring predictions.") page := container.NewVBox(title, backButton, widget.NewSeparator(), subtitle, widget.NewSeparator(), description1, description2, description3, description4, description5, description6, description7, description8) setPageContent(page, window) } func setDiscreteTraitRulesPredictionExplainerPage(window fyne.Window, previousPage func()){ title := getPageTitleCentered("Help - Rules Prediction") backButton := getBackButtonCentered(previousPage) subtitle := getPageSubtitleCentered("Discrete Trait Rules Prediction") description1 := getLabelCentered("Person genetic analyses contain discrete trait analyses.") description2 := getLabelCentered("There are 2 discrete trait analysis methods: Neural Networks and Rules.") description3 := getLabelCentered("Each trait can be analyzed by either rules or a neural network.") description4 := getLabelCentered("Rule prediction is calculated by testing many predictive rules.") description5 := getLabelCentered("Each trait has multiple outcomes, and each outcome has an associated score.") description6 := getLabelCentered("Points are added to an outcome to represent a higher probability.") description7 := getLabelCentered("Points are subtracted from an outcome to represent a lower probability.") description8 := getLabelCentered("The more rules that are tested, the higher the accuracy of the result will be.") page := container.NewVBox(title, backButton, widget.NewSeparator(), subtitle, widget.NewSeparator(), description1, description2, description3, description4, description5, description6, description7, description8) setPageContent(page, window) } func setOffspringDiscreteTraitRulesPredictionExplainerPage(window fyne.Window, previousPage func()){ title := getPageTitleCentered("Help - Rules Prediction") backButton := getBackButtonCentered(previousPage) subtitle := getPageSubtitleCentered("Offspring Discrete Trait Rules Prediction") description1 := getLabelCentered("Couple genetic analyses contain discrete trait analyses for the offspring.") description2 := getLabelCentered("There are 2 discrete trait analysis methods: Neural Networks and Rules.") description3 := getLabelCentered("Each trait can be analyzed by either rules or a neural network.") description4 := getLabelCentered("Rule prediction is calculated by testing many predictive rules.") description5 := getLabelCentered("Each trait has multiple outcomes, and each outcome has an associated score.") description6 := getLabelCentered("Points are added to an outcome to represent a higher probability.") description7 := getLabelCentered("Points are subtracted from an outcome to represent a lower probability.") description8 := getLabelCentered("The more rules that are tested, the higher the accuracy of the result will be.") page := container.NewVBox(title, backButton, widget.NewSeparator(), subtitle, widget.NewSeparator(), description1, description2, description3, description4, description5, description6, description7, description8) setPageContent(page, window) } func setDiscreteTraitRulesExplainerPage(window fyne.Window, previousPage func()){ title := getPageTitleCentered("Help - Trait Rules") backButton := getBackButtonCentered(previousPage) subtitle := getPageSubtitleCentered("Discrete Trait Rules") description1 := getLabelCentered("Person genetic analyses contain discrete trait analyses.") description2 := getLabelCentered("Discrete traits has multiple outcomes, and each outcome has an associated score.") description3 := getLabelCentered("A higher score represents a higher probability, and a lower score represents the opposite.") description4 := getLabelCentered("Each outcome's score is determined by trait rules.") description5 := getLabelCentered("A trait rule will add/subtract values to outcome(s).") description6 := getLabelCentered("If your genome passes a rule, its effects will be applied to the outcome(s).") page := container.NewVBox(title, backButton, widget.NewSeparator(), subtitle, widget.NewSeparator(), description1, description2, description3, description4, description5, description6) setPageContent(page, window) } func setOffspringDiscreteTraitRulesExplainerPage(window fyne.Window, previousPage func()){ title := getPageTitleCentered("Help - Trait Rules") backButton := getBackButtonCentered(previousPage) subtitle := getPageSubtitleCentered("Discrete Trait Rules") description1 := getLabelCentered("Offspring genetic analyses contain discrete trait analyses for a couple's offspring.") description2 := getLabelCentered("Each discrete trait has multiple outcomes, and each outcome has an associated score.") description3 := getLabelCentered("A higher score represents a higher probability, and a lower score represents the opposite.") description4 := getLabelCentered("Each outcome's score is determined by trait rules.") description5 := getLabelCentered("A trait rule will add/subtract values to outcome(s).") description6 := getLabelCentered("The probability that an offspring will pass a rule is multiplied by the rule's effects.") description7 := getLabelCentered("This effect is then applied to the outcome(s).") page := container.NewVBox(title, backButton, widget.NewSeparator(), subtitle, widget.NewSeparator(), description1, description2, description3, description4, description5, description6, description7) setPageContent(page, window) } func setDiscreteTraitQuantityOfRulesTestedExplainerPage(window fyne.Window, previousPage func()){ title := getPageTitleCentered("Help - Quantity Of Rules Tested") backButton := getBackButtonCentered(previousPage) subtitle := getPageSubtitleCentered("Quantity Of Trait Rules Tested") description1 := getLabelCentered("Person genetic analyses contain discrete trait analyses.") description2 := getLabelCentered("Each trait has multiple outcomes, and each outcome has an associated score.") description3 := getLabelCentered("A higher score represents a higher probability, and a lower score represent the opposite.") description4 := getLabelCentered("Each outcome's score is determined by trait rules.") description5 := getLabelCentered("A trait rule will add/subtract values to outcome(s).") description6 := getLabelCentered("If your genome passes a rule, its effects will be applied to the outcome(s).") description7 := getLabelCentered("The more trait rules which are tested, the more accurate the result will be.") description8 := getLabelCentered("Import a full genome sequence to test all rules.") page := container.NewVBox(title, backButton, widget.NewSeparator(), subtitle, widget.NewSeparator(), description1, description2, description3, description4, description5, description6, description7, description8) setPageContent(page, window) } func setOffspringDiscreteTraitQuantityOfRulesTestedExplainerPage(window fyne.Window, previousPage func()){ title := getPageTitleCentered("Help - Quantity Of Rules Tested") backButton := getBackButtonCentered(previousPage) subtitle := getPageSubtitleCentered("Offspring Trait Quantity Of Rules Tested") description1 := getLabelCentered("Offspring genetic analyses contain trait analyses for a couple's offspring.") description2 := getLabelCentered("Each trait has multiple outcomes, and each outcome has an associated score.") description3 := getLabelCentered("A higher score represents a higher probability, and a lower score represents the opposite.") description4 := getLabelCentered("Each outcome's score is determined by trait rules.") description5 := getLabelCentered("A trait rule will add/subtract values to outcome(s).") description6 := getLabelCentered("The probability that an offspring will pass a rule is multiplied by the rule's effects.") description7 := getLabelCentered("This effect is then applied to the outcome(s).") description8 := getLabelCentered("Both parents must have a location in their genome for the rule to be tested.") description9 := getLabelCentered("Import a full genome sequence from both parents to test all offspring rules.") page := container.NewVBox(title, backButton, widget.NewSeparator(), subtitle, widget.NewSeparator(), description1, description2, description3, description4, description5, description6, description7, description8, description9) setPageContent(page, window) } func setOffspringProbabilityOfPassingTraitRuleExplainerPage(window fyne.Window, previousPage func()){ title := getPageTitleCentered("Help - Probability Of Passing Rule") backButton := getBackButtonCentered(previousPage) subtitle := getPageSubtitleCentered("Offspring Probability Of Passing Trait Rule") description1 := getLabelCentered("Offspring genetic analyses contain discrete trait analyses for a couple's offspring.") description2 := getLabelCentered("Each discrete trait has multiple outcomes, and each outcome has an associated score.") description3 := getLabelCentered("A higher score represents a higher probability, and a lower score represents the opposite.") description4 := getLabelCentered("Each outcome's score is determined by trait rules.") description5 := getLabelCentered("A trait rule will add/subtract values to outcome(s).") description6 := getLabelCentered("There are 4 offspring outcomes for each location.") description7 := getLabelCentered("The probability that an offspring will pass a rule is multiplied by the rule's effects.") description8 := getLabelCentered("This effect is then applied to the outcome(s).") description9 := getLabelCentered("Both parents must have a location in their genome for the rule to be tested.") page := container.NewVBox(title, backButton, widget.NewSeparator(), subtitle, widget.NewSeparator(), description1, description2, description3, description4, description5, description6, description7, description8, description9) setPageContent(page, window) } func setPersonPassesDiscreteTraitRuleExplainerPage(window fyne.Window, previousPage func()){ title := getPageTitleCentered("Help - Trait Rules") backButton := getBackButtonCentered(previousPage) subtitle := getPageSubtitleCentered("Person Passes Trait Rule") description1 := getLabelCentered("Person genetic analyses contain discrete trait analyses.") description2 := getLabelCentered("Each discrete trait has multiple outcomes, and each outcome has an associated score.") description3 := getLabelCentered("A higher score represents a higher probability, and a lower score represents the opposite.") description4 := getLabelCentered("Each outcome's score is determined by trait rules.") description5 := getLabelCentered("A trait rule will add/subtract values to outcome(s).") description6 := getLabelCentered("If a person passes a rule, its effects will be applied to their outcome(s).") page := container.NewVBox(title, backButton, widget.NewSeparator(), subtitle, widget.NewSeparator(), description1, description2, description3, description4, description5, description6) setPageContent(page, window) } func setGenomePassesDiscreteTraitRuleExplainerPage(window fyne.Window, previousPage func()){ title := getPageTitleCentered("Help - Genome Passes Rule") backButton := getBackButtonCentered(previousPage) subtitle := getPageSubtitleCentered("Genome Passes Trait Rule") description1 := getLabelCentered("Person genetic analyses contain discrete trait analyses.") description2 := getLabelCentered("There are 2 discrete trait analysis methods: Rules and Neural Networks.") description3 := getLabelCentered("For rule-based analyses, each trait's outcome has an associated score.") description4 := getLabelCentered("A higher score represents a higher probability, and a lower score represents the opposite.") description5 := getLabelCentered("Each outcome's score is determined by trait rules.") description6 := getLabelCentered("A trait rule will add/subtract values to outcome(s).") description7 := getLabelCentered("If a person passes a rule, its effects will be applied to their outcome(s).") description8 := getLabelCentered("If a person has imported multiple genomes, each genome may or may not pass the rule.") description9 := getLabelCentered("If one genome passes and another does not, it means that one genome has an invalid value.") description10 := getLabelCentered("This happens because genome sequencing technology is not perfectly accurate.") page := container.NewVBox(title, backButton, widget.NewSeparator(), subtitle, widget.NewSeparator(), description1, description2, description3, description4, description5, description6, description7, description8, description9, description10) setPageContent(page, window) } func setDiscreteTraitRuleOutcomeEffectsExplainerPage(window fyne.Window, previousPage func()){ title := getPageTitleCentered("Help - Outcome Effects") backButton := getBackButtonCentered(previousPage) subtitle := getPageSubtitleCentered("Trait Rule Outcome Effects") description1 := getLabelCentered("Each trait rule has an outcome effect.") description2 := getLabelCentered("The outcome effect describes points that are added or subtracted from outcomes.") description3 := getLabelCentered("If the rule is passed, the outcome effect will be applied.") description4 := getLabelCentered("For example, let's suppose a rule has the outcome effect of Blue +2") description5 := getLabelCentered("This means that 2 points are added to the Blue outcome if the rule is passed.") page := container.NewVBox(title, backButton, widget.NewSeparator(), subtitle, widget.NewSeparator(), description1, description2, description3, description4, description5) setPageContent(page, window) } func setWealthIsLowerBoundExplainerPage(window fyne.Window, previousPage func()){ title := getPageTitleCentered("Help - Is Lower Bound") backButton := getBackButtonCentered(previousPage) subtitle := getPageSubtitleCentered("Is Lower Bound") description1 := getLabelCentered("If a wealth value is a lower bound, its true value may be higher.") description2 := getLabelCentered("Select this if you wish to represent a monetary value that is lower that your true value.") description3 := getLabelCentered("For example, if $5000 is a lower bound, then the user has at least $5000, and may have more.") description4 := getLabelCentered("This is recommended to protect your privacy.") page := container.NewVBox(title, backButton, widget.NewSeparator(), subtitle, widget.NewSeparator(), description1, description2, description3, description4) setPageContent(page, window) } func setMemoExplainerPage(window fyne.Window, previousPage func()){ title := getPageTitleCentered("Help - Memo") backButton := getBackButtonCentered(previousPage) subtitle := getPageSubtitleCentered("Memo") description1 := getLabelCentered("A Memo is a message signed with a Seekia identity key.") description2 := getLabelCentered("You can share a memo anywhere, and others can use Seekia to verify it.") description3 := getLabelCentered("You can timestamp a memo on the blockchain to verify it existed before a certain time.") description5 := getLabelCentered("You can include a cryptocurrency block hash in the memo to prove it was created after that block.") description6 := getLabelCentered("You must verify all Seekia memos using the Seekia app to verify their author's signature.") page := container.NewVBox(title, backButton, widget.NewSeparator(), subtitle, widget.NewSeparator(), description1, description2, description3, description5, description6) setPageContent(page, window) } func setAllowOtherExplainerPage(window fyne.Window, previousPage func()){ title := getPageTitleCentered("Help - Allow Other") backButton := getBackButtonCentered(previousPage) subtitle := getPageSubtitleCentered("Allow Other") description1 := getLabelCentered("When choosing your desires, you can select the Other category.") description2 := getLabelCentered("Some attributes allow users to provide a custom value.") description3 := getLabelCentered("Examples of these are Gender Identity and Language.") description4 := getLabelCentered("If you select Other, you will be allowing users who provide a custom value.") page := container.NewVBox(title, backButton, widget.NewSeparator(), subtitle, widget.NewSeparator(), description1, description2, description3, description4) setPageContent(page, window) } func setOffspringMonogenicDiseaseProbabilityDesireExplainerPage(window fyne.Window, previousPage func()){ currentPage := func(){setOffspringMonogenicDiseaseProbabilityDesireExplainerPage(window, previousPage)} title := getPageTitleCentered("Help - Monogenic Disease Probability Desire") backButton := getBackButtonCentered(previousPage) subtitle := getPageSubtitleCentered("Offspring Monogenic Disease Probability Desire") description1 := getLabelCentered("This desire allows you to filter users based on your offspring's probability of monogenic disease.") description2 := getLabelCentered("This probability is based on the monogenic diseases that you or the user have been tested for.") description3 := getLabelCentered("The more diseases and variants that have been tested for, the more accurate the result will be.") description4 := getLabelCentered("If you sequence your entire genome, Seekia will be able to test for all variants.") description5 := getLabelCentered("You can sort your matches by how many variants they have tested.") viewListOfMonogenicDiseasesButton := getWidgetCentered(widget.NewButtonWithIcon("View List Of Monogenic Diseases", theme.VisibilityIcon(), func(){ setViewMonogenicDiseasesList(window, currentPage) })) page := container.NewVBox(title, backButton, widget.NewSeparator(), subtitle, widget.NewSeparator(), description1, description2, description3, description4, description5, viewListOfMonogenicDiseasesButton) setPageContent(page, window) } func setViewMonogenicDiseasesList(window fyne.Window, previousPage func()){ title := getPageTitleCentered("View All Monogenic Diseases") backButton := getBackButtonCentered(previousPage) description := getLabelCentered("Below are all the monogenic diseases that Seekia can test for.") page := container.NewVBox(title, backButton, widget.NewSeparator(), description, widget.NewSeparator()) monogenicDiseaseNamesList, err := monogenicDiseases.GetMonogenicDiseaseNamesList() if (err != nil){ setErrorEncounteredPage(window, err, previousPage) return } for _, diseaseName := range monogenicDiseaseNamesList{ diseaseLabel := getBoldLabelCentered(translate(diseaseName)) page.Add(diseaseLabel) } setPageContent(page, window) } func setGeneticTestingExplainerPage(window fyne.Window, previousPage func()){ title := getPageTitleCentered("Help - Genetic Testing") backButton := getBackButtonCentered(previousPage) subtitle := getPageSubtitleCentered("Offspring Embryo Genetic Testing") description1 := getLabelCentered("Using embryo genetic testing, you can ensure your offspring will not have any monogenic disease.") description2 := getLabelCentered("You can always have healthy children with someone for whom your offspring has a <100% probability of monogenic disease.") description3 := getLabelCentered("You must find a company offering embryo testing.") description4 := getLabelCentered("The technology is sometimes called Preimplantation Genetic Testing, or PGT.") description5 := getLabelCentered("This technology requires the use of in-vitro fertilization.") description6 := getLabelCentered("Choosing someone for whom your offspring has a 0% probability of monogenic diseases is still valuable.") description7 := getLabelCentered("You could accidentally have children through natural conception, even if you were planning on using PGT.") page := container.NewVBox(title, backButton, widget.NewSeparator(), subtitle, widget.NewSeparator(), description1, description2, description3, description4, description5, description6, description7) setPageContent(page, window) } func setHostingHelpPage(window fyne.Window, previousPage func()){ title := getPageTitleCentered("Help - Hosting") backButton := getBackButtonCentered(previousPage) subtitle := getPageSubtitleCentered("Hosting") description1 := getLabelCentered("Be a Seekia host.") description2 := getLabelCentered("Your computer will seed content to the network.") description3 := getLabelCentered("You can choose to host as much or as little as you desire.") //TODO: Add buttons to show more help //TODO: Describe how hosting works and associated risks page := container.NewVBox(title, backButton, widget.NewSeparator(), subtitle, widget.NewSeparator(), description1, description2, description3) setPageContent(page, window) } func setMateDesireStatisticsWarningPage(window fyne.Window, previousPage func()){ title := getPageTitleCentered("Help - Desire Statistics Warning") backButton := getBackButtonCentered(previousPage) subtitle := getPageSubtitleCentered("Mate Desire Statistics Warning") description1 := getBoldLabelCentered("Your mate desire statistics may not describe the statistics of the network accurately.") description2 := getLabelCentered("In Mate mode, you will only download profiles which fulfill your download desires.") description3 := getLabelCentered("Your download desires are the desires you share with hosts.") description4 := getLabelCentered("These desires prevent you from having to download all profiles from the network.") description5 := getLabelCentered("If you are only in Mate mode, you are viewing the statistics of users who fulfill your download desires.") description6 := getLabelCentered("To view statistics of the entire network, you should disable Mate/Moderator mode and enable Host mode.") description7 := getLabelCentered("In Host mode, you will download a random portion of the network, allowing you to see accurate statistics.") description8 := getLabelCentered("Moderator mode will also skew your statistics.") description9 := getLabelCentered("In moderator mode, you will only download profiles which are written in your understood language(s).") page := container.NewVBox(title, backButton, widget.NewSeparator(), subtitle, widget.NewSeparator(), description1, description2, description3, description4, description5, widget.NewSeparator(), description6, description7, widget.NewSeparator(), description8, description9) setPageContent(page, window) } func setNetworkStatisticsInaccuracyWarningPage(window fyne.Window, previousPage func()){ title := getPageTitleCentered("Help - Network Statistics Warning") backButton := getBackButtonCentered(previousPage) //TODO: Improve this page // We need to make it clear that the statistics may still be accurate, but the numberOfUsers will not reflect the total number of network users // This will become more obvious when we eventually start to only sample a portion of stored profiles, so results are generated faster subtitle := getPageSubtitleCentered("Network Statistics Warning") description1 := getBoldLabelCentered("Viewed statistics about users may not describe the statistics of the network accurately.") description2 := getLabelCentered("To view statistics of the entire network, you should disable Mate/Moderator mode and enable Host mode.") description3 := getLabelCentered("In Host mode, you will download a random portion of the network, allowing you to see accurate statistics.") description4 := getLabelCentered("In Mate mode, you will only download profiles which fulfill your download desires.") description5 := getLabelCentered("Your download desires are the desires you share with hosts.") description6 := getLabelCentered("These desires prevent you from having to download all profiles from the network.") description7 := getLabelCentered("If you are only in Mate mode, you are viewing the statistics of users who fulfill your download desires.") description8 := getLabelCentered("Moderator mode will also skew your statistics.") description9 := getLabelCentered("In moderator mode, you will only download profiles which are written in your understood language(s).") page := container.NewVBox(title, backButton, widget.NewSeparator(), subtitle, widget.NewSeparator(), description1, description2, description3, widget.NewSeparator(), description4, description5, description6, description7, widget.NewSeparator(), description8, description9) setPageContent(page, window) } func setAttributeIsCanonicalExplainerPage(window fyne.Window, previousPage func()){ title := getPageTitleCentered("Help - Attribute Is Canonical") backButton := getBackButtonCentered(previousPage) subtitle := getPageSubtitleCentered("Attribute Is Canonical") description1 := getLabelCentered("Profile attributes are either canonical or not.") description2 := getLabelCentered("Canonical attributes are attributes that do not allow a custom value.") description3 := getLabelCentered("They only allow predefined values or numerical values.") description4 := getLabelCentered("An example is Age, which must be a number.") description5 := getLabelCentered("Canonical Mate attributes only have to be approved if they are banned by at least 1 moderator.") page := container.NewVBox(title, backButton, widget.NewSeparator(), subtitle, widget.NewSeparator(), description1, description2, description3, description4, description5) setPageContent(page, window) } func setAnyUnreviewedAttributesExistExplainerPage(window fyne.Window, previousPage func()){ title := getPageTitleCentered("Help - Unreviewed Attributes") backButton := getBackButtonCentered(previousPage) subtitle := getPageSubtitleCentered("Unreviewed Attributes Exist") description1 := getLabelCentered("Seekia will serve moderators attributes to review.") description2 := getLabelCentered("These attributes are served in order of least to most reviewed by other moderators.") description3 := getLabelCentered("Once you approve/ban/skip an attribute, it is removed from your moderator queue.") description4 := getLabelCentered("If you have banned a profile or any of its attributes, the rest of the profile's attributes do not need review.") description5 := getLabelCentered("If you have banned a user, profiles authored by them do not need review.") description6 := getLabelCentered("You can change this behavior on the Settings page (under construction).") page := container.NewVBox(title, backButton, widget.NewSeparator(), subtitle, widget.NewSeparator(), description1, description2, description3, description4, widget.NewSeparator(), description5, description6) setPageContent(page, window) }