1496
1515
return (DialoG) p;
1519
typedef struct rnatranscriptiddlg {
1520
DIALOG_MESSAGE_BLOCK
1522
Boolean usePopupForProduct;
1525
Nlm_ChangeNotifyProc change_notify;
1526
Pointer change_userdata;
1527
} RnaTranscriptIDDlgData, PNTR RnaTranscriptIdDlgPtr;
1529
static void ChangeTranscriptIDSequenceSelection (Pointer userdata)
1531
RnaTranscriptIdDlgPtr dlg;
1534
dlg = (RnaTranscriptIdDlgPtr) userdata;
1535
if (dlg == NULL) return;
1537
if (dlg->far_id_grp != NULL)
1539
vnp = DialogToPointer (dlg->product);
1540
if (vnp == NULL || vnp->data.ptrvalue == NULL)
1542
Enable (dlg->far_id_grp);
1546
Disable (dlg->far_id_grp);
1548
vnp = ValNodeFree (vnp);
1551
if (dlg->change_notify != NULL)
1553
(dlg->change_notify) (dlg->change_userdata);
1557
static void ChangeTranscriptIDText (TexT t)
1559
RnaTranscriptIdDlgPtr dlg;
1561
dlg = (RnaTranscriptIdDlgPtr) GetObjectExtra (t);
1562
if (dlg == NULL) return;
1564
if (dlg->change_notify != NULL)
1566
(dlg->change_notify) (dlg->change_userdata);
1571
static void LocToTranscriptIDDialog (DialoG d, Pointer data)
1573
RnaTranscriptIdDlgPtr dlg;
1580
dlg = (RnaTranscriptIdDlgPtr) GetObjectExtra (d);
1581
if (dlg == NULL) return;
1582
slp = (SeqLocPtr) data;
1586
PointerToDialog (dlg->product, NULL);
1587
SafeSetTitle (dlg->far_id, "");
1591
sip = SeqLocId (slp);
1592
bsp = BioseqFind (sip);
1595
PointerToDialog (dlg->product, NULL);
1596
SeqIdWrite (sip, str, PRINTID_FASTA_LONG, sizeof (str));
1597
SafeSetTitle (dlg->far_id, str);
1602
vn.data.ptrvalue = sip;
1604
PointerToDialog (dlg->product, &vn);
1605
SafeSetTitle (dlg->far_id, "");
1611
static Pointer TranscriptIDDialogToLoc (DialoG d)
1613
RnaTranscriptIdDlgPtr dlg;
1614
SeqLocPtr slp = NULL;
1616
SeqIdPtr sip = NULL;
1619
dlg = (RnaTranscriptIdDlgPtr) GetObjectExtra (d);
1620
if (dlg == NULL) return NULL;
1622
vnp = DialogToPointer (dlg->product);
1623
if (vnp == NULL || vnp->data.ptrvalue == NULL)
1625
if (!TextHasNoText (dlg->far_id))
1627
str = SaveStringFromText (dlg->far_id);
1628
sip = MakeSeqID (str);
1629
str = MemFree (str);
1634
sip = SeqIdDup (vnp->data.ptrvalue);
1636
vnp = ValNodeFree (vnp);
1640
slp = ValNodeNew (NULL);
1641
slp->choice = SEQLOC_WHOLE;
1642
slp->data.ptrvalue = SeqIdStripLocus (sip);
1649
static DialoG CreateRNATranscriptIDDialog (GrouP h, Uint2 entityID, Boolean allow_far_id, Nlm_ChangeNotifyProc change_notify, Pointer change_userdata)
1652
RnaTranscriptIdDlgPtr dlg;
1653
ValNodePtr bsp_list = NULL;
1655
p = HiddenGroup (h, 3, 0, NULL);
1656
SetGroupSpacing (p, 10, 10);
1658
dlg = (RnaTranscriptIdDlgPtr) MemNew (sizeof (RnaTranscriptIDDlgData));
1659
if (dlg == NULL) return NULL;
1661
SetObjectExtra (p, dlg, StdCleanupExtraProc);
1662
dlg->dialog = (DialoG) p;
1663
dlg->todialog = LocToTranscriptIDDialog;
1664
dlg->fromdialog = TranscriptIDDialogToLoc;
1666
dlg->change_notify = change_notify;
1667
dlg->change_userdata = change_userdata;
1669
StaticPrompt (p, "Transcript Sequence ID", 0, popupMenuHeight, programFont, 'l');
1670
dlg->product = SequenceSelectionDialogEx (p, ChangeTranscriptIDSequenceSelection, dlg, FALSE, TRUE, TRUE, FALSE, entityID, SHORT_SELECTION_LIST);
1673
dlg->far_id_grp = HiddenGroup (p, 2, 0, NULL);
1674
StaticPrompt (dlg->far_id_grp, "Far ID", 0, dialogTextHeight, programFont, 'l');
1675
dlg->far_id = DialogText (dlg->far_id_grp, "", 5, ChangeTranscriptIDText);
1676
SetObjectExtra (dlg->far_id, dlg, NULL);
1499
1683
extern SeqLocPtr PredictCodingRegion (BioseqPtr nuc, BioseqPtr prot, Int2 genCode)
2430
static CharPtr GetProteinString (CdRgnFormPtr cfp, SeqLocPtr location)
2434
CharPtr prot = NULL;
2436
if (cfp == NULL || location == NULL) return NULL;
2437
sfp = SeqFeatNew ();
2438
if (sfp == NULL) return NULL;
2440
sfp->data.choice = SEQFEAT_CDREGION;
2441
sfp->data.value.ptrvalue = DialogToPointer (cfp->data);
2442
sfp->location = location;
2443
bs = ProteinFromCdRegionEx (sfp, TRUE, FALSE);
2445
prot = BSMerge (bs, NULL);
2448
/* IMPORTANT - do not free the location that was passed in */
2449
sfp->location = NULL;
2455
extern SeqLocPtr TruncateLocation (SeqLocPtr head, Int4 len)
2457
SeqLocPtr slp = NULL;
2459
Int4 from = 0, to = 0;
2460
Boolean changed = FALSE;
2464
ValNodePtr del_slp_list = NULL, vnp;
2467
if (head == NULL || len < 1)
2470
slp = SeqLocFindNext (head, slp);
2475
del_slp = AsnIoMemCopy(slp,
2476
(AsnReadFunc) SeqLocAsnRead, (AsnWriteFunc) SeqLocAsnWrite);
2477
ValNodeAddPointer (&del_slp_list, 0, del_slp);
2481
sip = SeqLocId(slp);
2482
from = SeqLocStart(slp);
2483
to = SeqLocStop(slp);
2484
loc_len = (to - from + 1);
2488
strand = SeqLocStrand (slp);
2489
/* remove part of this location */
2490
if (strand == Seq_strand_minus)
2492
to = cum_len - len + from - 1;
2496
from = to - (cum_len - len) + 1;
2498
del_slp = SeqLocIntNew (from, to, strand, sip);
2499
ValNodeAddPointer (&del_slp_list, 0, del_slp);
2502
slp = SeqLocFindNext (head, slp);
2505
for (vnp = del_slp_list; vnp != NULL; vnp = vnp->next)
2507
slp = (SeqLocPtr) vnp->data.ptrvalue;
2508
if (slp == NULL) continue;
2509
sip = SeqLocId(slp);
2510
from = SeqLocStart(slp);
2511
to = SeqLocStop(slp);
2512
head = SeqLocDelete(head, sip, from, to, FALSE, &changed);
2519
static Boolean LengthenLocation (SeqLocPtr head, Int4 len)
2521
SeqLocPtr slp = NULL, last_slp = NULL;
2524
Int4 orig_len, len_diff;
2525
Boolean rval = FALSE;
2528
if (head == NULL || len < 1)
2531
orig_len = SeqLocLen (head);
2532
len_diff = len - orig_len;
2533
if (len_diff <= 0) return FALSE;
2535
slp = SeqLocFindNext (head, slp);
2539
slp = SeqLocFindNext (head, slp);
2542
if (last_slp->choice == SEQLOC_INT) {
2543
sintp = (SeqIntPtr) last_slp->data.ptrvalue;
2544
if (sintp->strand == Seq_strand_minus) {
2545
if (sintp->from - len_diff >= 0) {
2546
sintp->from -= len_diff;
2550
bsp = BioseqFind (sintp->id);
2551
if (bsp != NULL && sintp->to + len_diff < bsp->length) {
2552
sintp->to += len_diff;
2556
} else if (last_slp->choice == SEQLOC_PNT) {
2557
spp = (SeqPntPtr) last_slp->data.ptrvalue;
2559
if (spp->strand == Seq_strand_minus) {
2560
if (spp->point - len_diff < 0) {
2564
bsp = BioseqFind (spp->id);
2565
if (bsp == NULL || spp->point + len_diff >= bsp->length) {
2570
sintp = SeqIntNew ();
2571
sintp->id = SeqIdDup (spp->id);
2572
sintp->strand = spp->strand;
2573
sintp->if_from = AsnIoMemCopy (spp->fuzz, (AsnReadFunc) IntFuzzAsnRead, (AsnWriteFunc) IntFuzzAsnWrite);
2574
sintp->if_from = AsnIoMemCopy (spp->fuzz, (AsnReadFunc) IntFuzzAsnRead, (AsnWriteFunc) IntFuzzAsnWrite);
2575
if (sintp->strand == Seq_strand_minus) {
2576
sintp->from = spp->point - len_diff;
2577
sintp->to = spp->point;
2579
sintp->from = spp->point;
2580
sintp->to = spp->point + len_diff;
2582
spp = SeqPntFree (spp);
2583
last_slp->data.ptrvalue = sintp;
2584
last_slp->choice = SEQLOC_INT;
2592
static void AdjustForStopCodon (ButtoN b)
2598
Boolean partial5, partial3;
2601
Int4 desired_cds_len, loc_len, max_len;
2605
cfp = (CdRgnFormPtr) GetObjectExtra (b);
2610
orig_slp = DialogToPointer (cfp->location);
2611
if (orig_slp == NULL) {
2612
Message (MSG_ERROR, "No location to adjust!");
2616
CheckSeqLocForPartial (orig_slp, &partial5, &partial3);
2618
nucBsp = GetBioseqGivenSeqLoc (orig_slp, cfp->input_entityID);
2619
if (nucBsp == NULL) {
2620
Message (MSG_ERROR, "Unable to find Bioseq for coding region location");
2621
orig_slp = SeqLocFree (orig_slp);
2625
crp = DialogToPointer (cfp->data);
2631
crp = CdRegionFree (crp);
2634
prot = GetProteinString (cfp, orig_slp);
2635
if (StringHasNoText (prot)) {
2636
Message (MSG_ERROR, "Translation failed");
2637
prot = MemFree (prot);
2638
orig_slp = SeqLocFree (orig_slp);
2642
cp = StringChr (prot, '*');
2645
/* lengthen coding region, look for stop codon */
2646
strand = SeqLocStrand (orig_slp);
2647
loc_len = SeqLocLen (orig_slp);
2648
if (strand == Seq_strand_minus) {
2649
max_len = loc_len + SeqLocStart (orig_slp);
2651
max_len = loc_len + nucBsp->length - SeqLocStop (orig_slp) - 1;
2654
if (LengthenLocation (orig_slp, max_len)) {
2655
prot = MemFree (prot);
2656
prot = GetProteinString (cfp, orig_slp);
2657
cp = StringChr (prot, '*');
2659
if (ANS_YES == Message (MSG_YN, "No stop codon found - extend to full length of sequence (and make partial)?")) {
2660
SetSeqLocPartial (orig_slp, partial5, TRUE);
2661
PointerToDialog (cfp->location, orig_slp);
2662
DoTranslateProtein (cfp);
2664
prot = MemFree (prot);
2665
orig_slp = SeqLocFree (orig_slp);
2669
Message (MSG_ERROR, "Unable to lengthen location!");
2670
prot = MemFree (prot);
2671
orig_slp = SeqLocFree (orig_slp);
2676
desired_cds_len = ((cp - prot) + 1) * 3;
2678
desired_cds_len += frame;
2681
loc_len = SeqLocLen (orig_slp);
2682
if (desired_cds_len < loc_len) {
2683
/* truncate to correct length */
2684
orig_slp = TruncateLocation (orig_slp, desired_cds_len);
2685
PointerToDialog (cfp->location, orig_slp);
2686
DoTranslateProtein (cfp);
2688
prot = MemFree (prot);
2689
orig_slp = SeqLocFree (orig_slp);
2693
static SeqEntryPtr GetSeqEntryForLocation (SeqLocPtr slp, Uint2 entityID)
2699
return GetTopSeqEntryForEntityID (entityID);
2702
bsp = BioseqFindFromSeqLoc (slp);
2705
return GetTopSeqEntryForEntityID (entityID);
2708
return GetBestTopParentForData (entityID, bsp);
2712
static void SetCdRegionPageGeneticCode (DialoG d)
2718
cpp = (CdRgnPagePtr) GetObjectExtra (d);
2720
slp = DialogToPointer (cpp->cfp->location);
2721
genCode = SeqEntryToGeneticCode (GetSeqEntryForLocation (slp, cpp->cfp->input_entityID), NULL, NULL, 0);
2722
slp = SeqLocFree (slp);
2723
SetValue (cpp->geneticCode, gcIdToIndex [genCode]);
2246
2728
static DialoG CreateCdRgnDialog (GrouP h, CharPtr title, Int2 genCode,
2247
2729
SeqFeatPtr sfp, CdRgnFormPtr cfp)
5706
6477
return (Pointer) rrp;
6481
static GBQualPtr FindOrAddQual (SeqFeatPtr sfp, CharPtr qual_name)
6485
if (sfp == NULL) return NULL;
6487
while (gbq != NULL && StringCmp (gbq->qual, qual_name) != 0) {
6492
gbq->qual = StringSave (qual_name);
6493
gbq->next = sfp->qual;
6500
static void RemoveQualByName (SeqFeatPtr sfp, CharPtr qual_name)
6502
GBQualPtr gbq, gbq_next, gbq_prev = NULL;
6504
if (sfp == NULL || StringHasNoText (qual_name))
6511
gbq_next = gbq->next;
6512
if (StringCmp (gbq->qual, qual_name) == 0)
6514
if (gbq_prev == NULL)
6516
sfp->qual = gbq->next;
6520
gbq_prev->next = gbq->next;
6523
gbq = GBQualFree (gbq);
6533
static void SetRNAMiscNameForType (SeqFeatPtr sfp, UIEnum val)
6537
if (sfp == NULL || sfp->data.choice != SEQFEAT_RNA) return;
6538
rrp = (RnaRefPtr) sfp->data.value.ptrvalue;
6542
sfp->data.value.ptrvalue = rrp;
6546
rrp->ext.value.ptrvalue = MemFree (rrp->ext.value.ptrvalue);
6547
rrp->ext.value.ptrvalue = StringSave ("ncRNA");
6548
rrp->ext.choice = 1;
6549
} else if (val == 9) {
6550
rrp->ext.value.ptrvalue = MemFree (rrp->ext.value.ptrvalue);
6551
rrp->ext.value.ptrvalue = StringSave ("tmRNA");
6552
rrp->ext.choice = 1;
6553
} else if (val == 255) {
6554
rrp->ext.value.ptrvalue = MemFree (rrp->ext.value.ptrvalue);
6555
rrp->ext.value.ptrvalue = StringSave ("misc_RNA");
6556
rrp->ext.choice = 1;
6562
extern void ConvertProductQualToRnaRefName (SeqFeatPtr sfp)
6565
GBQualPtr gbq, gbq_prev = NULL;
6567
if (sfp == NULL || sfp->data.choice != SEQFEAT_RNA || sfp->data.value.ptrvalue == NULL) return;
6568
rrp = (RnaRefPtr) sfp->data.value.ptrvalue;
6571
while (gbq != NULL && StringCmp (gbq->qual, "product") != 0) {
6576
rrp->ext.value.ptrvalue = MemFree (rrp->ext.value.ptrvalue);
6577
rrp->ext.choice = 1;
6578
rrp->ext.value.ptrvalue = gbq->val;
6580
if (gbq_prev == NULL) {
6581
sfp->qual = gbq->next;
6583
gbq_prev->next = gbq->next;
6586
gbq = GBQualFree (gbq);
6591
static void ConvertRnaRefNameToProductQual (SeqFeatPtr sfp)
6594
GBQualPtr gbq, gbq_prev = NULL;
6596
if (sfp == NULL || sfp->data.choice != SEQFEAT_RNA || sfp->data.value.ptrvalue == NULL) return;
6597
rrp = (RnaRefPtr) sfp->data.value.ptrvalue;
6598
if (rrp->ext.choice != 1) return;
6601
gbq->next = sfp->qual;
6603
gbq->qual = StringSave ("product");
6604
gbq->val = StringSave (rrp->ext.value.ptrvalue);
6608
static void AddRnaSpecificQualsForType (SeqFeatPtr sfp, RnaPagePtr rpp, UIEnum val)
6614
if (rpp == NULL || sfp == NULL || sfp->data.choice != SEQFEAT_RNA) return;
6615
rrp = (RnaRefPtr) sfp->data.value.ptrvalue;
6618
str = DialogToPointer (rpp->ncrnaClass);
6619
if (StringHasNoText (str)) {
6620
str = MemFree (str);
6621
RemoveQualByName (sfp, "ncRNA_class");
6623
gbq = FindOrAddQual (sfp, "ncRNA_class");
6624
gbq->val = MemFree (gbq->val);
6627
if (TextHasNoText (rpp->ncrnaProduct)) {
6628
RemoveQualByName (sfp, "product");
6630
gbq = FindOrAddQual (sfp, "product");
6631
gbq->val = MemFree (gbq->val);
6632
gbq->val = SaveStringFromText (rpp->ncrnaProduct);
6634
} else if (val == 9) {
6635
str = DialogToPointer (rpp->tmrnaTagPeptide);
6636
if (StringHasNoText (str)) {
6637
str = MemFree (str);
6638
RemoveQualByName (sfp, "tag_peptide");
6640
gbq = FindOrAddQual (sfp, "tag_peptide");
6641
gbq->val = MemFree (gbq->val);
6644
if (TextHasNoText (rpp->tmrnaProduct)) {
6645
RemoveQualByName (sfp, "product");
6647
gbq = FindOrAddQual (sfp, "product");
6648
gbq->val = MemFree (gbq->val);
6649
gbq->val = SaveStringFromText (rpp->tmrnaProduct);
6651
} else if (val == 255) {
6652
if (TextHasNoText (rpp->name)) {
6653
RemoveQualByName (sfp, "product");
6655
str = SaveStringFromText (rpp->name);
6656
if (StringCmp (str, "misc_RNA") == 0) {
6657
str = MemFree (str);
6659
gbq = FindOrAddQual (sfp, "product");
6660
gbq->val = MemFree (gbq->val);
6668
extern void AddRnaSpecificQuals (SeqFeatPtr sfp, DialoG d)
6673
rpp = (RnaPagePtr) GetObjectExtra (d);
6674
if (rpp == NULL || sfp == NULL) return;
6676
if (GetEnumPopup (rpp->type, rna_type_alist, &val)) {
6677
AddRnaSpecificQualsForType (sfp, rpp, val);
6678
SetRNAMiscNameForType (sfp, val);
6680
RemoveQualByName (sfp, "ncRNA_class");
6682
if (val != 8 && val != 9 && val != 255) {
6683
ConvertProductQualToRnaRefName (sfp);
6689
extern void SetRnaSpecificQuals (SeqFeatPtr sfp, DialoG d)
6695
rpp = (RnaPagePtr) GetObjectExtra (d);
6696
if (rpp == NULL || sfp == NULL || sfp->data.choice != SEQFEAT_RNA || sfp->data.value.ptrvalue == NULL) return;
6698
rrp = (RnaRefPtr) sfp->data.value.ptrvalue;
6699
if ((rrp->type == 5 || rrp->type == 6 || rrp->type == 7)
6700
&& rrp->ext.choice == 1
6701
&& StringCmp (rrp->ext.value.ptrvalue, "ncRNA") != 0) {
6702
SetTitle (rpp->ncrnaProduct, rrp->ext.value.ptrvalue);
6704
else if (rrp->type != 255 || rrp->ext.choice != 1) return;
6706
if (StringCmp (rrp->ext.value.ptrvalue, "ncRNA") == 0) {
6708
while (gbq != NULL) {
6709
if (StringCmp (gbq->qual, "ncRNA_class") == 0) {
6710
PointerToDialog (rpp->ncrnaClass, gbq->val);
6711
} else if (StringCmp (gbq->qual, "product") == 0) {
6712
SetTitle (rpp->ncrnaProduct, gbq->val);
6716
} else if (StringCmp (rrp->ext.value.ptrvalue, "tmRNA") == 0) {
6718
while (gbq != NULL) {
6719
if (StringCmp (gbq->qual, "tag_peptide") == 0) {
6720
PointerToDialog (rpp->tmrnaTagPeptide, gbq->val);
6721
} else if (StringCmp (gbq->qual, "product") == 0) {
6722
SetTitle (rpp->tmrnaProduct, gbq->val);
6726
} else if (IsStringInNcRNAClassList (rrp->ext.value.ptrvalue)) {
6728
while (gbq != NULL) {
6729
if (StringCmp (gbq->qual, "product") == 0) {
6730
SetTitle (rpp->ncrnaProduct, gbq->val);
6734
} else if (StringCmp (rrp->ext.value.ptrvalue, "misc_RNA") == 0) {
6736
while (gbq != NULL) {
6737
if (StringCmp (gbq->qual, "product") == 0) {
6738
SetTitle (rpp->name, gbq->val);
6746
extern void ConvertToOldRNAFormat (SeqFeatPtr sfp)
6749
GBQualPtr gbq, gbq_prod = NULL, gbq_class = NULL, gbq_prev = NULL, gbq_next;
6750
Boolean do_convert = TRUE;
6752
if (sfp == NULL || sfp->data.choice != SEQFEAT_RNA)
6757
rrp = (RnaRefPtr) sfp->data.value.ptrvalue;
6758
if (rrp == NULL || rrp->type != 255 || rrp->ext.choice != 1
6759
|| StringCmp (rrp->ext.value.ptrvalue, "ncRNA") != 0)
6763
for (gbq = sfp->qual; gbq != NULL && (gbq_prod == NULL || gbq_class == NULL); gbq = gbq->next)
6765
if (StringCmp (gbq->qual, "ncRNA_class") == 0)
6769
else if (StringCmp (gbq->qual, "product") == 0)
6775
if (gbq_class == NULL)
6779
else if (StringCmp (gbq_class->val, "snRNA") == 0)
6783
else if (StringCmp (gbq_class->val, "scRNA") == 0)
6787
else if (StringCmp (gbq_class->val, "snoRNA") == 0)
6791
else if (IsStringInNcRNAClassList (gbq_class->val))
6794
rrp->ext.value.ptrvalue = MemFree (rrp->ext.value.ptrvalue);
6795
rrp->ext.value.ptrvalue = StringSave (gbq_class->val);
6796
RemoveQualByName (sfp, "ncRNA_class");
6804
if (gbq_prod == NULL)
6806
rrp->ext.choice = 0;
6807
rrp->ext.value.ptrvalue = MemFree (rrp->ext.value.ptrvalue);
6811
rrp->ext.value.ptrvalue = MemFree (rrp->ext.value.ptrvalue);
6812
rrp->ext.value.ptrvalue = gbq_prod->val;
6813
gbq_prod->val = NULL;
6818
gbq_next = gbq->next;
6819
if (StringCmp (gbq->qual, "ncRNA_class") == 0
6820
|| StringCmp (gbq->qual, "product") == 0)
6822
if (gbq_prev == NULL)
6824
sfp->qual = gbq->next;
6828
gbq_prev->next = gbq->next;
6831
gbq = GBQualFree (gbq);
5709
6843
static void SetRnaImportExportItems (RnaFormPtr rfp)
5753
static void ChangeRnaProc (PopuP p)
6887
static void SetRnaType (RnaPagePtr rpp, Uint2 subtype)
5756
6890
RnaFormPtr rfp;
6891
RnaRefPtr rrp = NULL;
5760
rpp = (RnaPagePtr) GetObjectExtra (p);
6893
if (rpp != NULL && rpp->rfp != NULL) {
5762
6894
rfp = rpp->rfp;
5763
if (GetEnumPopup (rpp->type, rna_type_alist, &val)) {
5766
SafeHide (rpp->nameGrp);
5767
SafeHide (rpp->rrnaPrompt);
5768
SafeHide (rpp->ornaPrompt);
5769
SafeHide (rpp->trnaGrp);
5770
SafeHide (rfp->product);
5771
SafeHide (rfp->usrobjext);
5774
SafeHide (rpp->trnaGrp);
5775
SafeHide (rpp->rrnaPrompt);
5776
SafeHide (rpp->ornaPrompt);
5777
SafeShow (rpp->nameGrp);
5778
SafeShow (rfp->product);
5779
SafeShow (rfp->usrobjext);
5782
SafeHide (rpp->nameGrp);
5783
SafeHide (rpp->rrnaPrompt);
5784
SafeHide (rpp->ornaPrompt);
5785
SafeShow (rpp->trnaGrp);
5786
SafeShow (rfp->product);
5787
SafeHide (rfp->usrobjext);
5790
SafeHide (rpp->trnaGrp);
5791
SafeHide (rpp->ornaPrompt);
5792
SafeShow (rpp->rrnaPrompt);
5793
SafeShow (rpp->nameGrp);
5794
SafeShow (rfp->product);
5795
SafeHide (rfp->usrobjext);
5798
SafeHide (rpp->trnaGrp);
5799
SafeHide (rpp->rrnaPrompt);
5800
SafeHide (rpp->ornaPrompt);
5801
SafeShow (rpp->nameGrp);
5802
SafeShow (rfp->product);
5803
SafeHide (rfp->usrobjext);
5806
SafeHide (rpp->trnaGrp);
5807
SafeHide (rpp->rrnaPrompt);
5808
SafeHide (rpp->ornaPrompt);
5809
SafeShow (rpp->nameGrp);
5810
SafeShow (rfp->product);
5811
SafeHide (rfp->usrobjext);
5814
SafeHide (rpp->trnaGrp);
5815
SafeHide (rpp->rrnaPrompt);
5816
SafeHide (rpp->ornaPrompt);
5817
SafeShow (rpp->nameGrp);
5818
SafeShow (rfp->product);
5819
SafeHide (rfp->usrobjext);
5822
SafeHide (rpp->trnaGrp);
5823
SafeHide (rpp->rrnaPrompt);
5824
SafeShow (rpp->ornaPrompt);
5825
SafeShow (rpp->nameGrp);
5826
SafeShow (rfp->product);
5827
SafeHide (rfp->usrobjext);
5830
SafeHide (rpp->trnaGrp);
5831
SafeHide (rpp->rrnaPrompt);
5832
SafeHide (rpp->ornaPrompt);
5833
SafeShow (rpp->nameGrp);
5834
SafeHide (rfp->product);
5835
SafeHide (rfp->usrobjext);
6897
SafeHide (rpp->nameGrp);
6898
SafeHide (rpp->rrnaPrompt);
6899
SafeHide (rpp->ornaPrompt);
6900
SafeHide (rpp->trnaGrp);
6901
SafeHide (rfp->product);
6902
SafeHide (rfp->usrobjext);
6903
SafeHide (rpp->ncrnaGrp);
6904
SafeHide (rpp->tmrnaGrp);
6907
SafeHide (rpp->trnaGrp);
6908
SafeHide (rpp->rrnaPrompt);
6909
SafeHide (rpp->ornaPrompt);
6910
SafeShow (rpp->nameGrp);
6911
SafeShow (rfp->product);
6912
SafeShow (rfp->usrobjext);
6913
SafeHide (rpp->ncrnaGrp);
6914
SafeHide (rpp->tmrnaGrp);
6916
case FEATDEF_preRNA :
6917
SafeHide (rpp->trnaGrp);
6918
SafeHide (rpp->rrnaPrompt);
6919
SafeHide (rpp->ornaPrompt);
6920
SafeShow (rpp->nameGrp);
6921
SafeShow (rfp->product);
6922
SafeShow (rfp->usrobjext);
6923
SafeHide (rpp->ncrnaGrp);
6924
SafeHide (rpp->tmrnaGrp);
6927
SafeHide (rpp->nameGrp);
6928
SafeHide (rpp->rrnaPrompt);
6929
SafeHide (rpp->ornaPrompt);
6930
SafeShow (rpp->trnaGrp);
6931
SafeShow (rfp->product);
6932
SafeHide (rfp->usrobjext);
6933
SafeHide (rpp->ncrnaGrp);
6934
SafeHide (rpp->tmrnaGrp);
6937
SafeHide (rpp->trnaGrp);
6938
SafeHide (rpp->ornaPrompt);
6939
SafeShow (rpp->rrnaPrompt);
6940
SafeShow (rpp->nameGrp);
6941
SafeShow (rfp->product);
6942
SafeHide (rfp->usrobjext);
6943
SafeHide (rpp->ncrnaGrp);
6944
SafeHide (rpp->tmrnaGrp);
6946
case FEATDEF_snRNA :
6947
case FEATDEF_scRNA :
6948
case FEATDEF_snoRNA :
6949
SafeHide (rpp->trnaGrp);
6950
SafeHide (rpp->rrnaPrompt);
6951
SafeHide (rpp->ornaPrompt);
6952
SafeHide (rpp->nameGrp);
6953
SafeShow (rfp->product);
6954
SafeHide (rfp->usrobjext);
6955
SafeShow (rpp->ncrnaGrp);
6956
SafeHide (rpp->tmrnaGrp);
6957
if (subtype == FEATDEF_snRNA) {
6958
PointerToDialog (rpp->ncrnaClass, "snRNA");
6960
} else if (subtype == FEATDEF_scRNA) {
6961
PointerToDialog (rpp->ncrnaClass, "scRNA");
6962
} else if (subtype == FEATDEF_snoRNA) {
6963
PointerToDialog (rpp->ncrnaClass, "snoRNA");
6964
} else if (subtype == FEATDEF_snoRNA) {
6965
PointerToDialog (rpp->ncrnaClass, "miscRNA");
6969
case FEATDEF_ncRNA :
6970
SafeHide (rpp->trnaGrp);
6971
SafeHide (rpp->rrnaPrompt);
6972
SafeHide (rpp->ornaPrompt);
6973
SafeHide (rpp->nameGrp);
6974
SafeShow (rfp->product);
6975
SafeHide (rfp->usrobjext);
6976
SafeShow (rpp->ncrnaGrp);
6977
SafeHide (rpp->tmrnaGrp);
6979
case FEATDEF_tmRNA :
6980
SafeHide (rpp->trnaGrp);
6981
SafeHide (rpp->rrnaPrompt);
6982
SafeHide (rpp->ornaPrompt);
6983
SafeHide (rpp->nameGrp);
6984
SafeShow (rfp->product);
6985
SafeHide (rfp->usrobjext);
6986
SafeHide (rpp->ncrnaGrp);
6987
SafeShow (rpp->tmrnaGrp);
6989
case FEATDEF_otherRNA :
6990
SafeHide (rpp->trnaGrp);
6991
SafeHide (rpp->rrnaPrompt);
6992
SafeShow (rpp->ornaPrompt);
6993
SafeShow (rpp->nameGrp);
6994
SafeShow (rfp->product);
6995
SafeHide (rfp->usrobjext);
6998
SafeHide (rpp->trnaGrp);
6999
SafeHide (rpp->rrnaPrompt);
7000
SafeHide (rpp->ornaPrompt);
7001
SafeShow (rpp->nameGrp);
7002
SafeHide (rfp->product);
7003
SafeHide (rfp->usrobjext);
7004
SafeHide (rpp->ncrnaGrp);
7005
SafeHide (rpp->tmrnaGrp);
5839
7008
SetRnaImportExportItems (rpp->rfp);
5892
7061
"Amino Acid", "Codons", "Anticodon", NULL
7065
static Uint1 RnaTypeFromFeatdef (Uint2 featdef)
7069
case FEATDEF_preRNA:
7087
case FEATDEF_snoRNA:
7096
case FEATDEF_otherRNA:
7104
static void ChangeRNAType (PopuP p)
7110
HelpMessageFunc helpfunc;
7125
rfp = (RnaFormPtr) GetObjectExtra (p);
7126
if (rfp == NULL) return;
7127
rpp = (RnaPagePtr) GetObjectExtra (rfp->data);
7128
if (rpp == NULL) return;
7129
sfp = SeqFeatNew ();
7131
if (GetEnumPopup (rpp->type, rna_type_alist, &val)) {
7133
sfp->data.choice = SEQFEAT_RNA;
7134
sfp->data.value.ptrvalue = DialogToPointer (rfp->data);
7135
sfp->comment = SaveStringFromText (rfp->comment);
7139
while (ch != '\0') {
7140
if (ch < ' ' || ch > '~') {
7147
expev = GetValue (rfp->evidence);
7148
if (expev > 0 && expev <= 3) {
7149
sfp->exp_ev = expev - 1;
7153
sfp->partial = GetStatus (rfp->partial);
7154
sfp->excpt = GetStatus (rfp->exception);
7156
sfp->product = DialogToPointer (rfp->product);
7157
sfp->location = DialogToPointer (rfp->location);
7158
sfp->cit = DialogToPointer (rfp->featcits);
7159
sfp->dbxref = DialogToPointer (rfp->dbxrefs);
7160
sfp->qual = DialogToPointer (rfp->gbquals);
7161
CleanupEvidenceGBQuals (&(sfp->qual));
7162
VisStringDialogToGbquals (sfp, rfp->experiment, "experiment");
7163
InferenceDialogToGBQuals (rfp->inference, sfp, TRUE);
7164
AddRnaSpecificQualsForType (sfp, rpp, rpp->prev_rna_type < 0 ? val : rpp->prev_rna_type);
7165
if (rpp->prev_rna_type == 8 && val != 8) {
7166
RemoveQualByName (sfp, "ncRNA_class");
7168
if (rpp->prev_rna_type == 8 || rpp->prev_rna_type == 9 || rpp->prev_rna_type == 255) {
7169
if (val != 8 && val != 9 && val != 255) {
7170
ConvertProductQualToRnaRefName (sfp);
7172
} else if (val == 8 || val == 9 || val == 255) {
7173
if (rpp->name != NULL && !TextHasNoText (rpp->name)) {
7174
gbq = FindOrAddQual (sfp, "product");
7175
gbq->val = SaveStringFromText (rpp->name);
7179
SetRNAMiscNameForType (sfp, val);
7180
rpp->prev_rna_type = val;
7182
geneval = GetValue (rfp->gene);
7183
sep = GetTopSeqEntryForEntityID (rfp->input_entityID);
7184
StringCpy (title, "RNA");
7185
if (sfp != NULL && sfp->data.value.ptrvalue != NULL) {
7186
rrp = (RnaRefPtr) sfp->data.value.ptrvalue;
7187
/* set title based on type of RNA feature */
7189
/* need to set subtype to correctly calculate which quals should be suppressed */
7190
sfp->idx.subtype = RnaFeatDefFromRnaRef ((RnaRefPtr)sfp->data.value.ptrvalue);
7191
w = (WindoW) CreateRnaForm (-50, -33, title, sfp, sep, RnaFeatDefFromRnaRef (rrp),
7192
StdFeatFormActnProc);
7193
newrfp = (RnaFormPtr) GetObjectExtra (w);
7194
if (newrfp != NULL) {
7195
newrfp->input_entityID = rfp->input_entityID;
7196
newrfp->input_itemID = rfp->input_itemID;
7197
newrfp->input_itemtype = rfp->input_itemtype;
7198
newrfp->this_itemtype = rfp->this_itemtype;
7199
newrfp->this_subtype = rfp->this_subtype;
7203
omtp = ObjMgrTypeFind (omp, OBJ_SEQFEAT, NULL, NULL);
7204
if (omtp != NULL && omtp->subtypefunc != NULL) {
7205
newrfp->this_subtype = (*(omtp->subtypefunc)) (sfp);
7209
SendMessageToForm (newrfp->form, VIB_MSG_INIT);
7210
SetValue (newrfp->gene, geneval);
7212
PointerToForm (newrfp->form, (Pointer) sfp);
7218
helpfunc = (HelpMessageFunc) GetAppProperty ("HelpMessageProc");
7219
if (helpfunc != NULL) {
7220
helpfunc ("Features", title);
5895
7231
static DialoG CreateRnaDialog (GrouP h, CharPtr title,
5896
7232
Uint2 subtype, SeqEntryPtr sep,
5897
7233
SeqFeatPtr sfp, RnaFormPtr rfp)
6004
7338
(HANDLE) rpp->trnaPages [2], NULL);
6005
7339
AlignObjects (ALIGN_CENTER, (HANDLE) f, (HANDLE) rpp->nameGrp,
6006
7340
(HANDLE) rpp->trnaGrp, (HANDLE) rpp->pseudo,NULL);
6010
SafeHide (rpp->nameGrp);
6011
SafeHide (rpp->rrnaPrompt);
6012
SafeHide (rpp->ornaPrompt);
6013
SafeHide (rpp->trnaGrp);
6014
SafeHide (rfp->product);
6015
SafeHide (rfp->usrobjext);
6018
SafeHide (rpp->trnaGrp);
6019
SafeHide (rpp->rrnaPrompt);
6020
SafeHide (rpp->ornaPrompt);
6021
SafeShow (rpp->nameGrp);
6022
SafeShow (rfp->product);
6023
SafeShow (rfp->usrobjext);
6026
SafeHide (rpp->nameGrp);
6027
SafeHide (rpp->rrnaPrompt);
6028
SafeHide (rpp->ornaPrompt);
6029
SafeShow (rpp->trnaGrp);
6030
SafeShow (rfp->product);
6031
SafeHide (rfp->usrobjext);
6034
SafeHide (rpp->trnaGrp);
6035
SafeHide (rpp->ornaPrompt);
6036
SafeShow (rpp->rrnaPrompt);
6037
SafeShow (rpp->nameGrp);
6038
SafeShow (rfp->product);
6039
SafeHide (rfp->usrobjext);
6041
case FEATDEF_snRNA :
6042
SafeHide (rpp->trnaGrp);
6043
SafeHide (rpp->ornaPrompt);
6044
SafeHide (rpp->rrnaPrompt);
6045
SafeShow (rpp->nameGrp);
6046
SafeShow (rfp->product);
6047
SafeHide (rfp->usrobjext);
6049
case FEATDEF_scRNA :
6050
SafeHide (rpp->trnaGrp);
6051
SafeHide (rpp->ornaPrompt);
6052
SafeHide (rpp->rrnaPrompt);
6053
SafeShow (rpp->nameGrp);
6054
SafeShow (rfp->product);
6055
SafeHide (rfp->usrobjext);
6057
case FEATDEF_snoRNA :
6058
SafeHide (rpp->trnaGrp);
6059
SafeHide (rpp->ornaPrompt);
6060
SafeHide (rpp->rrnaPrompt);
6061
SafeShow (rpp->nameGrp);
6062
SafeShow (rfp->product);
6063
SafeHide (rfp->usrobjext);
6065
case FEATDEF_otherRNA :
6066
SafeHide (rpp->trnaGrp);
6067
SafeHide (rpp->rrnaPrompt);
6068
SafeShow (rpp->ornaPrompt);
6069
SafeShow (rpp->nameGrp);
6070
SafeShow (rfp->product);
6071
SafeHide (rfp->usrobjext);
6074
SafeHide (rpp->trnaGrp);
6075
SafeHide (rpp->ornaPrompt);
6076
SafeHide (rpp->rrnaPrompt);
6077
SafeShow (rpp->nameGrp);
6078
SafeHide (rfp->product);
6079
SafeHide (rfp->usrobjext);
7341
Hide (rpp->ncrnaGrp);
7343
rpp->ncrnaGrp = HiddenGroup (g, 2, 0, NULL);
7344
SetGroupSpacing (rpp->ncrnaGrp, 10, 10);
7345
StaticPrompt (rpp->ncrnaGrp, "Class", 0, popupMenuHeight, programFont, 'l');
7346
rpp->ncrnaClass = CreatencRNAClassDialog (rpp->ncrnaGrp, FALSE, NULL, NULL);
7347
StaticPrompt (rpp->ncrnaGrp, "Product", 0, dialogTextHeight, programFont, 'l');
7348
rpp->ncrnaProduct = DialogText (rpp->ncrnaGrp, "", 10, NULL);
7349
Hide (rpp->ncrnaGrp);
7351
rpp->tmrnaGrp = HiddenGroup (g, 2, 0, NULL);
7352
SetGroupSpacing (rpp->tmrnaGrp, 10, 10);
7353
StaticPrompt (rpp->tmrnaGrp, "Tag Peptide", 0, dialogTextHeight, programFont, 'l');
7354
rpp->tmrnaTagPeptide = CreateRptUnitRangeDialog (rpp->tmrnaGrp, NULL, NULL, NULL, NULL);
7355
StaticPrompt (rpp->tmrnaGrp, "Product", 0, dialogTextHeight, programFont, 'l');
7356
rpp->tmrnaProduct = DialogText (rpp->tmrnaGrp, "", 10, NULL);
7357
Hide (rpp->tmrnaGrp);
7359
if (sfp != NULL && sfp->data.choice == SEQFEAT_RNA && sfp->data.value.ptrvalue != NULL) {
7360
rna_type = RnaSubtypeFromRnaRef ((RnaRefPtr)sfp->data.value.ptrvalue);
7362
rna_type = RnaTypeFromFeatdef (subtype);
7364
SetEnumPopup (rpp->type, rna_type_alist, (UIEnum) rna_type);
7365
rpp->prev_rna_type = rna_type;
7367
if ((sfp != NULL && sfp->product != NULL) || indexerVersion) {
7368
entityID = SeqMgrGetEntityIDForSeqEntry(sep);
7369
rfp->product = CreateRNATranscriptIDDialog (m, entityID, TRUE, NULL, NULL);
7372
SetRnaType (rpp, subtype);
6084
7375
return (DialoG) p;
6613
7881
return OM_MSG_RET_DONE;
7885
typedef struct ncrnaclassdlg {
7886
DIALOG_MESSAGE_BLOCK
7889
Nlm_ChangeNotifyProc change_notify;
7890
Pointer change_userdata;
7891
Boolean is_constraint;
7893
} NcrnaClassDlgData, PNTR NcrnaClassDlgPtr;
7895
static void ChangeNcrnaClass (PopuP p)
7897
NcrnaClassDlgPtr dlg;
7899
dlg = (NcrnaClassDlgPtr) GetObjectExtra (p);
7900
if (dlg == NULL) return;
7902
if (GetValue (dlg->ncrnaclass) == NcrnaOTHER) {
7903
Show (dlg->otherclass);
7905
Hide (dlg->otherclass);
7908
if (dlg->change_notify != NULL) {
7909
(dlg->change_notify) (dlg->change_userdata);
7914
static void ChangeNcrnaOtherClass (TexT t)
7916
NcrnaClassDlgPtr dlg;
7918
dlg = (NcrnaClassDlgPtr) GetObjectExtra (t);
7919
if (dlg == NULL) return;
7920
if (dlg->change_notify != NULL) {
7921
(dlg->change_notify) (dlg->change_userdata);
7926
static void PointerToNcrnaClassDialog (DialoG d, Pointer data)
7928
NcrnaClassDlgPtr dlg;
7930
Int4 pos = NcrnaOTHER;
7932
dlg = (NcrnaClassDlgPtr) GetObjectExtra (d);
7933
if (dlg == NULL) return;
7936
if (dlg->is_constraint) {
7937
pos = NcrnaOTHER + 1;
7941
for (cpp = ncrnaClassList, pos = 1;
7942
*cpp != NULL && pos < NcrnaOTHER;
7944
if (StringCmp (*cpp, (CharPtr) data) == 0) {
7951
SetValue (dlg->ncrnaclass, pos);
7952
if (pos == NcrnaOTHER) {
7953
SetTitle (dlg->otherclass, (CharPtr) data);
7954
Show (dlg->otherclass);
7956
Hide (dlg->otherclass);
7961
static Pointer NcrnaClassDialogToPointer (DialoG d)
7963
NcrnaClassDlgPtr dlg;
7966
dlg = (NcrnaClassDlgPtr) GetObjectExtra (d);
7967
if (dlg == NULL) return NULL;
7968
pos = GetValue (dlg->ncrnaclass);
7969
if (pos > 0 && pos < NcrnaOTHER) {
7970
return StringSave (ncrnaClassList[pos - 1]);
7971
} else if (pos == NcrnaOTHER && !TextHasNoText (dlg->otherclass)) {
7972
return SaveStringFromText (dlg->otherclass);
7979
static ValNodePtr TestNcrnaClassDialog (DialoG d)
7981
ValNodePtr err_list = NULL;
7983
NcrnaClassDlgPtr dlg;
7986
dlg = (NcrnaClassDlgPtr) GetObjectExtra (d);
7987
if (dlg == NULL) return NULL;
7988
pos = GetValue (dlg->ncrnaclass);
7990
if (pos < 1 && !dlg->is_constraint) {
7991
ValNodeAddPointer (&err_list, 0, "No ncRNA class");
7992
} else if (pos == NcrnaOTHER) {
7993
if (TextHasNoText (dlg->otherclass)) {
7994
ValNodeAddPointer (&err_list, 0, "No ncRNA class");
7996
} else if (!dlg->is_constraint && pos > NcrnaOTHER) {
7997
ValNodeAddPointer (&err_list, 0, "No ncRNA class");
8003
extern DialoG CreatencRNAClassDialog (GrouP h, Boolean is_constraint, Nlm_ChangeNotifyProc change_notify, Pointer change_userdata)
8005
NcrnaClassDlgPtr dlg;
8009
p = HiddenGroup (h, 2, 0, NULL);
8010
dlg = (NcrnaClassDlgPtr) MemNew (sizeof (NcrnaClassDlgData));
8011
SetObjectExtra (p, dlg, StdCleanupExtraProc);
8013
dlg->dialog = (DialoG) p;
8014
dlg->todialog = PointerToNcrnaClassDialog;
8015
dlg->fromdialog = NcrnaClassDialogToPointer;
8016
dlg->testdialog = TestNcrnaClassDialog;
8017
dlg->change_notify = change_notify;
8018
dlg->change_userdata = change_userdata;
8019
dlg->is_constraint = is_constraint;
8021
dlg->ncrnaclass = PopupList (p, TRUE, ChangeNcrnaClass);
8022
SetObjectExtra (dlg->ncrnaclass, dlg, NULL);
8023
for (cpp = ncrnaClassList; *cpp != NULL; cpp++) {
8024
PopupItem (dlg->ncrnaclass, *cpp);
8026
if (is_constraint) {
8027
PopupItem (dlg->ncrnaclass, "Any");
8028
SetValue (dlg->ncrnaclass, NcrnaOTHER + 1);
8030
SetValue (dlg->ncrnaclass, NcrnaOTHER);
8032
dlg->otherclass = DialogText (p, "", 10, ChangeNcrnaOtherClass);
8033
SetObjectExtra (dlg->otherclass, dlg, NULL);
8039
extern RnaTypePtr RnaTypeFree (RnaTypePtr rtp)
8043
rtp->ncrna_class = MemFree (rtp->ncrna_class);
8044
rtp = MemFree (rtp);
8050
extern Boolean MatchesRnaType (SeqFeatPtr sfp, RnaTypePtr rtp)
8055
Boolean matches = TRUE;
8057
if (sfp == NULL || sfp->data.choice != SEQFEAT_RNA) return FALSE;
8058
if (rtp == NULL || rtp->rna_featdef == FEATDEF_ANY) return TRUE;
8060
rrp = (RnaRefPtr) sfp->data.value.ptrvalue;
8061
if (rrp == NULL) return FALSE;
8063
featdef = RnaFeatDefFromRnaRef (rrp);
8064
if (featdef != rtp->rna_featdef) return FALSE;
8066
if (featdef == FEATDEF_ncRNA)
8068
if (rtp->ncrna_class == NULL) {
8072
while (gbq != NULL && StringCmp (gbq->qual, "ncRNA_class") != 0)
8078
if (rrp->ext.choice == 1 && StringCmp (rrp->ext.value.ptrvalue, rtp->ncrna_class) == 0)
8082
else if (StringDoesHaveText (rtp->ncrna_class))
8087
else if (StringCmp (gbq->val, rtp->ncrna_class) != 0)
8097
static void ClearRNAProduct (RnaRefPtr rrp)
8101
if (rrp == NULL || rrp->ext.choice == 0)
8105
if (rrp->ext.choice == 2)
8107
trna = (tRNAPtr)(rrp->ext.value.ptrvalue);
8109
trna->anticodon = SeqLocFree(trna->anticodon);
8113
rrp->ext.value.ptrvalue = MemFree (rrp->ext.value.ptrvalue);
8114
rrp->ext.choice = 0;
8118
static void MoveRnaProductToQual (SeqFeatPtr sfp)
8121
CharPtr product = NULL;
8124
if (sfp == NULL || sfp->data.choice != SEQFEAT_RNA || sfp->data.value.ptrvalue == NULL)
8129
rrp = (RnaRefPtr) sfp->data.value.ptrvalue;
8130
if (rrp->ext.choice == 1)
8132
product = rrp->ext.value.ptrvalue;
8133
rrp->ext.value.ptrvalue = NULL;
8135
ClearRNAProduct (rrp);
8136
rrp->ext.choice = 1;
8137
rrp->ext.value.ptrvalue = StringSave ("ncRNA");
8138
if (product != NULL)
8140
gbq = FindOrAddQual (sfp, "product");
8146
extern void ApplyRnaTypeToSeqFeat (SeqFeatPtr sfp, RnaTypePtr rtp)
8151
if (sfp == NULL || sfp->data.choice != SEQFEAT_RNA)
8156
rrp = (RnaRefPtr) sfp->data.value.ptrvalue;
8160
sfp->data.value.ptrvalue = rrp;
8163
if (rtp == NULL || rtp->rna_featdef == FEATDEF_ANY)
8168
switch (rtp->rna_featdef)
8170
case FEATDEF_preRNA:
8184
MoveRnaProductToQual (sfp);
8185
gbq = FindOrAddQual (sfp, "ncRNA_class");
8186
gbq->val = MemFree (gbq->val);
8187
gbq->val = StringSave ("scRNA");
8191
MoveRnaProductToQual (sfp);
8192
gbq = FindOrAddQual (sfp, "ncRNA_class");
8193
gbq->val = MemFree (gbq->val);
8194
gbq->val = StringSave ("snRNA");
8196
case FEATDEF_snoRNA:
8198
MoveRnaProductToQual (sfp);
8199
gbq = FindOrAddQual (sfp, "ncRNA_class");
8200
gbq->val = MemFree (gbq->val);
8201
gbq->val = StringSave ("snoRNA");
8205
MoveRnaProductToQual (sfp);
8206
gbq = FindOrAddQual (sfp, "ncRNA_class");
8207
gbq->val = MemFree (gbq->val);
8208
gbq->val = StringSave (rtp->ncrna_class);
8212
MoveRnaProductToQual (sfp);
8213
rrp->ext.value.ptrvalue = MemFree (rrp->ext.value.ptrvalue);
8214
rrp->ext.value.ptrvalue = StringSave ("tmRNA");
8215
rrp->ext.choice = 1;
8217
case FEATDEF_otherRNA:
8219
if (rrp->ext.choice == 1 && IsStringInNcRNAClassList (rrp->ext.value.ptrvalue))
8221
gbq = FindOrAddQual (sfp, "ncRNA_class");
8222
gbq->val = MemFree (gbq->val);
8223
gbq->val = rrp->ext.value.ptrvalue;
8224
rrp->ext.value.ptrvalue = StringSave ("ncRNA");
8232
extern void AddToComment (SeqFeatPtr sfp, CharPtr comment)
8236
if (sfp == NULL || StringHasNoText (comment)) return;
8238
if (StringHasNoText (sfp->comment))
8240
sfp->comment = MemFree (sfp->comment);
8241
sfp->comment = StringSave (comment);
8245
tmp = (CharPtr) MemNew (sizeof (Char) * (StringLen (sfp->comment) + StringLen (comment) + 3));
8246
sprintf (tmp, "%s; %s", sfp->comment, comment);
8247
sfp->comment = MemFree (sfp->comment);
8253
extern void ApplyProductToRNA (SeqFeatPtr sfp, CharPtr product)
8259
Boolean justTrnaText = FALSE;
8263
if (sfp == NULL || sfp->data.choice != SEQFEAT_RNA
8264
|| sfp->data.value.ptrvalue == NULL)
8269
rrp = (RnaRefPtr) sfp->data.value.ptrvalue;
8272
ClearRNAProduct (rrp);
8274
aa = ParseTRnaString (product, &justTrnaText, (Uint1Ptr) codon, TRUE);
8277
trp = (tRNAPtr) MemNew (sizeof (tRNA));
8281
for (j = 0; j < 6; j++)
8283
trp->codon [j] = 255;
8287
for (j = 0; j < 6; j++)
8289
trp->codon [j] = codon [j];
8293
rrp->ext.choice = 2;
8294
rrp->ext.value.ptrvalue = (Pointer) trp;
8297
if (aa == 0 || !justTrnaText)
8299
AddToComment (sfp, product);
8302
else if (rrp->type == 255
8303
&& rrp->ext.choice == 1
8304
&& (StringCmp (rrp->ext.value.ptrvalue, "ncRNA") == 0
8305
|| StringCmp (rrp->ext.value.ptrvalue, "tmRNA") == 0
8306
|| StringCmp (rrp->ext.value.ptrvalue, "misc_RNA") == 0))
8308
gbq = FindOrAddQual (sfp, "product");
8309
gbq->val = MemFree (gbq->val);
8310
gbq->val = StringSave (product);
8314
ClearRNAProduct (rrp);
8315
rrp->ext.choice = 1;
8316
rrp->ext.value.ptrvalue = StringSave (product);
8322
typedef struct rnatypedlg {
8323
DIALOG_MESSAGE_BLOCK
8326
Nlm_ChangeNotifyProc change_notify;
8327
Pointer change_userdata;
8328
Boolean is_constraint;
8330
} RnaTypeDlgData, PNTR RnaTypeDlgPtr;
8333
static void ChangeRnaTypeDlg (PopuP p)
8338
dlg = (RnaTypeDlgPtr) GetObjectExtra (p);
8341
if (GetEnumPopup (dlg->rna_type, rna_type_alist, &val) && val == 8)
8343
Enable (dlg->ncrna_class);
8347
Disable (dlg->ncrna_class);
8349
if (dlg->change_notify != NULL)
8351
(dlg->change_notify) (dlg->change_userdata);
8357
static void PointerToRnaTypeDialog (DialoG d, Pointer data)
8360
RnaTypePtr rtp = NULL;
8362
dlg = (RnaTypeDlgPtr) GetObjectExtra (d);
8363
if (dlg == NULL) return;
8365
rtp = (RnaTypePtr) data;
8366
if (rtp == NULL || rtp->rna_featdef == FEATDEF_ANY)
8368
SetEnumPopup (dlg->rna_type, rna_type_alist, (UIEnum) 0);
8369
PointerToDialog (dlg->ncrna_class, NULL);
8373
switch (rtp->rna_featdef)
8375
case FEATDEF_preRNA:
8376
SetEnumPopup (dlg->rna_type, rna_type_alist, (UIEnum) 1);
8377
PointerToDialog (dlg->ncrna_class, NULL);
8380
SetEnumPopup (dlg->rna_type, rna_type_alist, (UIEnum) 2);
8381
PointerToDialog (dlg->ncrna_class, NULL);
8384
SetEnumPopup (dlg->rna_type, rna_type_alist, (UIEnum) 3);
8385
PointerToDialog (dlg->ncrna_class, NULL);
8388
SetEnumPopup (dlg->rna_type, rna_type_alist, (UIEnum) 4);
8389
PointerToDialog (dlg->ncrna_class, NULL);
8392
SetEnumPopup (dlg->rna_type, rna_type_alist, (UIEnum) 8);
8393
PointerToDialog (dlg->ncrna_class, "scRNA");
8396
SetEnumPopup (dlg->rna_type, rna_type_alist, (UIEnum) 8);
8397
PointerToDialog (dlg->ncrna_class, "snRNA");
8399
case FEATDEF_snoRNA:
8400
SetEnumPopup (dlg->rna_type, rna_type_alist, (UIEnum) 8);
8401
PointerToDialog (dlg->ncrna_class, "snoRNA");
8404
SetEnumPopup (dlg->rna_type, rna_type_alist, (UIEnum) 8);
8405
PointerToDialog (dlg->ncrna_class, rtp->ncrna_class);
8408
SetEnumPopup (dlg->rna_type, rna_type_alist, (UIEnum) 9);
8409
PointerToDialog (dlg->ncrna_class, NULL);
8411
case FEATDEF_otherRNA:
8412
SetEnumPopup (dlg->rna_type, rna_type_alist, (UIEnum) 255);
8413
PointerToDialog (dlg->ncrna_class, NULL);
8416
SetEnumPopup (dlg->rna_type, rna_type_alist, (UIEnum) 0);
8417
PointerToDialog (dlg->ncrna_class, NULL);
8421
ChangeRnaTypeDlg (dlg->rna_type);
8425
static Pointer RnaTypeDialogToPointer (DialoG d)
8428
RnaTypePtr rtp = NULL;
8431
dlg = (RnaTypeDlgPtr) GetObjectExtra (d);
8432
if (dlg == NULL) return NULL;
8434
if (GetEnumPopup (dlg->rna_type, rna_type_alist, &val))
8436
rtp = (RnaTypePtr) MemNew (sizeof (RnaTypeData));
8437
rtp->rna_featdef = FEATDEF_ANY;
8438
rtp->ncrna_class = NULL;
8442
rtp->rna_featdef = FEATDEF_ANY;
8445
rtp->rna_featdef = FEATDEF_preRNA;
8448
rtp->rna_featdef = FEATDEF_mRNA;
8451
rtp->rna_featdef = FEATDEF_tRNA;
8454
rtp->rna_featdef = FEATDEF_rRNA;
8457
rtp->rna_featdef = FEATDEF_ncRNA;
8458
rtp->ncrna_class = DialogToPointer (dlg->ncrna_class);
8461
rtp->rna_featdef = FEATDEF_tmRNA;
8464
rtp->rna_featdef = FEATDEF_otherRNA;
8472
static ValNodePtr TestRnaTypeDialog (DialoG d)
8475
ValNodePtr err_list = NULL;
8478
dlg = (RnaTypeDlgPtr) GetObjectExtra (d);
8479
if (dlg == NULL) return NULL;
8480
if (GetEnumPopup (dlg->rna_type, rna_type_alist, &val)) {
8482
err_list = TestDialog (dlg->ncrna_class);
8485
ValNodeAddPointer (&err_list, 0, "RNA type");
8490
extern DialoG RnaTypeDialog (GrouP h, Boolean is_constraint, Nlm_ChangeNotifyProc change_notify, Pointer change_userdata)
8496
if (is_constraint) {
8497
title = "RNA Type of Feature to be Edited";
8502
p = NormalGroup (h, -1, 0, title, programFont, NULL);
8503
dlg = (RnaTypeDlgPtr) MemNew (sizeof (RnaTypeDlgData));
8504
SetObjectExtra (p, dlg, StdCleanupExtraProc);
8506
dlg->dialog = (DialoG) p;
8507
dlg->todialog = PointerToRnaTypeDialog;
8508
dlg->fromdialog = RnaTypeDialogToPointer;
8509
dlg->testdialog = TestRnaTypeDialog;
8510
dlg->change_notify = change_notify;
8511
dlg->change_userdata = change_userdata;
8512
dlg->is_constraint = is_constraint;
8514
dlg->rna_type = PopupList (p, TRUE, ChangeRnaTypeDlg);
8515
SetObjectExtra (dlg->rna_type, dlg, NULL);
8516
InitEnumPopup (dlg->rna_type, rna_type_alist, NULL);
8517
SetEnumPopup (dlg->rna_type, rna_type_alist, (UIEnum) 0);
8519
dlg->ncrna_class = CreatencRNAClassDialog (p, is_constraint, change_notify, change_userdata);
8521
AlignObjects (ALIGN_CENTER, (HANDLE) dlg->rna_type, (HANDLE) dlg->ncrna_class, NULL);