6669
/* ValueList Editor */
6670
static CharPtr combine_strings (CharPtr s, CharPtr add)
6673
if (StringHasNoText (add))
6677
if (StringHasNoText (s))
6680
s = StringSave (add);
6684
total = (CharPtr) MemNew (sizeof (Char) * (StringLen (s) + StringLen (add) + 2));
6685
sprintf (total, "%s;%s", s, add);
6694
typedef struct simpletextvalueedit {
6695
DIALOG_MESSAGE_BLOCK
6696
TaglistCallback change_notify;
6697
Pointer change_userdata;
6699
} SimpleTextValueEditData, PNTR SimpleTextValueEditPtr;
6701
static void SimpleTextValueEditChange (TexT t)
6703
SimpleTextValueEditPtr dlg;
6704
dlg = (SimpleTextValueEditPtr) GetObjectExtra (t);
6705
if (dlg != NULL && dlg->change_notify != NULL)
6707
(dlg->change_notify) (dlg->change_userdata);
6711
static void StringToSimpleTextValueEditDialog (DialoG d, Pointer data)
6713
SimpleTextValueEditPtr dlg;
6714
dlg = (SimpleTextValueEditPtr) GetObjectExtra (d);
6718
SetTitle (dlg->text, (CharPtr) data);
6719
if (dlg->change_notify != NULL)
6721
(dlg->change_notify) (dlg->change_userdata);
6727
static Pointer SimpleTextValueEditDialogToString (DialoG d)
6729
SimpleTextValueEditPtr dlg;
6730
dlg = (SimpleTextValueEditPtr) GetObjectExtra (d);
6734
return SaveStringFromText (dlg->text);
6742
static DialoG SimpleTextValueEditDialog (GrouP h, Int2 width, ValueListParentPtr parent, TaglistCallback change_notify, Pointer change_userdata)
6744
SimpleTextValueEditPtr dlg;
6747
p = HiddenGroup (h, -1, 0, NULL);
6748
SetGroupSpacing (p, 10, 10);
6749
dlg = (SimpleTextValueEditPtr) MemNew (sizeof(SimpleTextValueEditData));
6751
SetObjectExtra (p, dlg, StdCleanupExtraProc);
6752
dlg->dialog = (DialoG) p;
6753
dlg->todialog = StringToSimpleTextValueEditDialog;
6754
dlg->fromdialog = SimpleTextValueEditDialogToString;
6755
dlg->testdialog = NULL;
6756
dlg->dialogmessage = NULL;
6757
dlg->change_notify = change_notify;
6758
dlg->change_userdata = change_userdata;
6760
dlg->text = DialogText (p, "", width, SimpleTextValueEditChange);
6761
SetObjectExtra (dlg->text, dlg, NULL);
6765
#define STRUCTURED_VALUE_EDIT_FIELDS \
6766
DIALOG_MESSAGE_BLOCK \
6767
TaglistCallback change_notify; \
6768
Pointer change_userdata; \
6771
ValueListParentPtr parent; \
6775
typedef struct structuredvalueeditdlg {
6776
STRUCTURED_VALUE_EDIT_FIELDS
6777
} StructuredValueEditDlgData, PNTR StructuredValueEditDlgPtr;
6780
static void CopyUnparsableToNote (ButtoN b)
6782
StructuredValueEditDlgPtr dlg;
6783
CharPtr old_note, new_note;
6785
dlg = (StructuredValueEditDlgPtr) GetObjectExtra (b);
6787
if (dlg != NULL && dlg->parent != NULL && dlg->parent->note != NULL)
6789
old_note = SaveStringFromText (dlg->parent->note);
6790
new_note = SaveStringFromText (dlg->text);
6791
old_note = combine_strings (old_note, new_note);
6792
SetTitle (dlg->parent->note, old_note);
6793
new_note = MemFree (new_note);
6794
old_note = MemFree (old_note);
6795
SetTitle (dlg->text, "");
6796
Hide (dlg->unparsable);
6797
if (dlg != NULL && dlg->change_notify != NULL)
6799
(dlg->change_notify) (dlg->change_userdata);
6805
static void EraseUnparsable (ButtoN b)
6807
StructuredValueEditDlgPtr dlg;
6809
dlg = (StructuredValueEditDlgPtr) GetObjectExtra (b);
6813
SetTitle (dlg->text, "");
6814
Hide (dlg->unparsable);
6815
if (dlg != NULL && dlg->change_notify != NULL)
6817
(dlg->change_notify) (dlg->change_userdata);
6823
static void StringToStructuredValueEditDialog (DialoG d, Pointer data)
6825
StructuredValueEditDlgPtr dlg;
6828
dlg = (StructuredValueEditDlgPtr) GetObjectExtra (d);
6830
txt = (CharPtr) data;
6834
if (StringHasNoText (txt) || (dlg->parse_func != NULL && (dlg->parse_func) (txt)))
6836
PointerToDialog (dlg->dlg, txt);
6837
SetTitle (dlg->text, "");
6838
Hide (dlg->unparsable);
6842
SetTitle (dlg->text, (CharPtr) data);
6843
Show (dlg->unparsable);
6845
if (dlg->change_notify != NULL)
6847
(dlg->change_notify) (dlg->change_userdata);
6853
static Pointer StructuredValueEditDialogToString (DialoG d)
6855
StructuredValueEditDlgPtr dlg;
6856
CharPtr txt = NULL, tmp;
6858
dlg = (StructuredValueEditDlgPtr) GetObjectExtra (d);
6862
if (dlg->dlg == NULL)
6864
txt = StringSave ("");
6868
txt = DialogToPointer (dlg->dlg);
6871
if (!TextHasNoText (dlg->text))
6873
tmp = SaveStringFromText (dlg->text);
6874
txt = combine_strings (txt, tmp);
6875
tmp = MemFree (tmp);
6883
static void StructuredValueEditChange (TexT t)
6885
StructuredValueEditDlgPtr dlg;
6888
dlg = (StructuredValueEditDlgPtr) GetObjectExtra (t);
6890
if (TextHasNoText (dlg->text))
6892
Hide (dlg->unparsable);
6894
else if (dlg->dlg != NULL)
6896
txt = SaveStringFromText(dlg->text);
6897
tmp = DialogToPointer (dlg->dlg);
6898
if (StringHasNoText (tmp) && dlg->parse_func != NULL && (dlg->parse_func)(txt))
6900
PointerToDialog (dlg->dlg, txt);
6901
SetTitle (dlg->text, "");
6902
Hide (dlg->unparsable);
6904
txt = MemFree (txt);
6905
tmp = MemFree (tmp);
6908
if (dlg != NULL && dlg->change_notify != NULL)
6910
(dlg->change_notify) (dlg->change_userdata);
6916
typedef struct truefalsevalueedit {
6917
STRUCTURED_VALUE_EDIT_FIELDS
6918
} TrueFalseValueEditData, PNTR TrueFalseValueEditPtr;
6920
static DialoG TrueFalseValueEditDialog (GrouP h, Int2 width, ValueListParentPtr parent, TaglistCallback change_notify, Pointer change_userdata)
6922
TrueFalseValueEditPtr dlg;
6926
p = HiddenGroup (h, 2, 0, NULL);
6927
SetGroupSpacing (p, 10, 10);
6928
dlg = (TrueFalseValueEditPtr) MemNew (sizeof(TrueFalseValueEditData));
6930
SetObjectExtra (p, dlg, StdCleanupExtraProc);
6931
dlg->dialog = (DialoG) p;
6932
dlg->todialog = StringToStructuredValueEditDialog;
6933
dlg->fromdialog = StructuredValueEditDialogToString;
6934
dlg->testdialog = NULL;
6935
dlg->dialogmessage = NULL;
6936
dlg->change_notify = change_notify;
6937
dlg->change_userdata = change_userdata;
6938
dlg->parent = parent;
6940
StaticPrompt (p, "TRUE", 0, 0, programFont, 'c');
6942
dlg->unparsable = HiddenGroup (p, 3, 0, NULL);
6943
SetGroupSpacing (dlg->unparsable, 10, 10);
6944
dlg->text = DialogText (dlg->unparsable, "", width - 15, StructuredValueEditChange);
6945
SetObjectExtra (dlg->text, dlg, NULL);
6947
b = PushButton (dlg->unparsable, "Copy to Note", CopyUnparsableToNote);
6948
SetObjectExtra (b, dlg, NULL);
6950
b = PushButton (dlg->unparsable, "Erase", EraseUnparsable);
6951
SetObjectExtra (b, dlg, NULL);
6953
Hide (dlg->unparsable);
6959
typedef struct latlondlg {
6960
DIALOG_MESSAGE_BLOCK
6967
TaglistCallback change_notify;
6968
Pointer change_userdata;
6970
} LatLonDlgData, PNTR LatLonDlgPtr;
6973
static void ResetLatLonDlg (LatLonDlgPtr dlg)
6975
if (dlg == NULL) return;
6977
SetTitle (dlg->deg_ns, "");
6978
SetValue (dlg->dir_ns, 1);
6979
SetTitle (dlg->deg_ew, "");
6980
SetValue (dlg->dir_ew, 1);
6984
static void StringToLatLonDlg (DialoG d, Pointer data)
6987
CharPtr str, ns, ew, tmp;
6990
dlg = (LatLonDlgPtr) GetObjectExtra (d);
6991
if (dlg == NULL) return;
6993
str = (CharPtr) data;
6996
ResetLatLonDlg (dlg);
7000
ew = str + StringLen (str) - 1;
7001
if (*ew != 'E' && *ew != 'W')
7003
ResetLatLonDlg (dlg);
7007
ns = StringChr (str, 'N');
7010
ns = StringChr (str, 'S');
7014
ResetLatLonDlg (dlg);
7019
tmp = (CharPtr) MemNew (sizeof (Char) * len);
7020
StringNCpy (tmp, str, len - 1);
7022
SetTitle (dlg->deg_ns, tmp);
7023
tmp = MemFree (tmp);
7024
SetValue (dlg->dir_ns, *ns == 'N' ? 1 : 2);
7027
tmp = (CharPtr) MemNew (sizeof (Char) * len);
7028
StringNCpy (tmp, ns + 1, len - 1);
7030
SetTitle (dlg->deg_ew, tmp);
7031
tmp = MemFree (tmp);
7032
SetValue (dlg->dir_ew, *ew == 'E' ? 1 : 2);
7037
static Pointer LatLonDlgToString (DialoG d)
7040
CharPtr str, ns, ew;
7043
dlg = (LatLonDlgPtr) GetObjectExtra (d);
7044
if (dlg == NULL) return NULL;
7046
if (TextHasNoText (dlg->deg_ns) && TextHasNoText (dlg->deg_ew))
7051
ns = SaveStringFromText (dlg->deg_ns);
7052
ew = SaveStringFromText (dlg->deg_ew);
7053
len = StringLen (ns) + StringLen (ew) + 6;
7054
str = (CharPtr) MemNew (sizeof(Char) * len);
7055
sprintf (str, "%s %c %s %c",
7056
ns == NULL ? "" : ns,
7057
GetValue (dlg->dir_ns) == 1 ? 'N' : 'S',
7058
ew == NULL ? "" : ew,
7059
GetValue (dlg->dir_ew) == 1 ? 'E' : 'W');
7065
static void LatLonTextChange (TexT t)
7069
dlg = (LatLonDlgPtr) GetObjectExtra (t);
7070
if (dlg == NULL) return;
7073
if (dlg->change_notify != NULL)
7075
(dlg->change_notify) (dlg->change_userdata);
7080
static void LatLonPopupChange (PopuP p)
7084
dlg = (LatLonDlgPtr) GetObjectExtra (p);
7085
if (dlg == NULL) return;
7088
if (dlg->change_notify != NULL)
7090
(dlg->change_notify) (dlg->change_userdata);
7095
static DialoG LatLonDialog (GrouP h, TaglistCallback change_notify, Pointer change_userdata)
7100
p = HiddenGroup (h, 4, 0, NULL);
7101
SetGroupSpacing (p, 10, 10);
7102
dlg = (LatLonDlgPtr) MemNew (sizeof(LatLonDlgData));
7104
SetObjectExtra (p, dlg, StdCleanupExtraProc);
7105
dlg->dialog = (DialoG) p;
7106
dlg->todialog = StringToLatLonDlg;
7107
dlg->fromdialog = LatLonDlgToString;
7108
dlg->testdialog = NULL;
7109
dlg->dialogmessage = NULL;
7110
dlg->change_notify = change_notify;
7111
dlg->change_userdata = change_userdata;
7113
dlg->deg_ns = DialogText (p, "", 3, LatLonTextChange);
7114
SetObjectExtra (dlg->deg_ns, dlg, NULL);
7115
dlg->dir_ns = PopupList (p, TRUE, LatLonPopupChange);
7116
SetObjectExtra (dlg->dir_ns, dlg, NULL);
7117
PopupItem (dlg->dir_ns, "N");
7118
PopupItem (dlg->dir_ns, "S");
7119
SetValue (dlg->dir_ns, 1);
7121
dlg->deg_ew = DialogText (p, "", 3, LatLonTextChange);
7122
SetObjectExtra (dlg->deg_ew, dlg, NULL);
7123
dlg->dir_ew = PopupList (p, TRUE, LatLonPopupChange);
7124
SetObjectExtra (dlg->dir_ew, dlg, NULL);
7125
PopupItem (dlg->dir_ew, "E");
7126
PopupItem (dlg->dir_ew, "W");
7128
SetValue (dlg->dir_ew, 1);
7134
static Boolean ParseLatLonOk (CharPtr str)
7136
Boolean rval = FALSE;
7139
if (StringHasNoText (str))
7143
ew = str + StringLen (str) - 1;
7144
if (*ew != 'E' && *ew != 'W')
7149
while (ns < ew && !isalpha (*ns))
7153
if (*ns != 'N' && *ns != 'S')
7171
static DialoG ValueListLatLonDialog (GrouP h, Int2 width, ValueListParentPtr parent, TaglistCallback change_notify, Pointer change_userdata)
7173
StructuredValueEditDlgPtr dlg;
7178
p = HiddenGroup (h, 2, 0, NULL);
7179
SetGroupSpacing (p, 10, 10);
7180
dlg = (StructuredValueEditDlgPtr) MemNew (sizeof(StructuredValueEditDlgData));
7182
SetObjectExtra (p, dlg, StdCleanupExtraProc);
7183
dlg->dialog = (DialoG) p;
7184
dlg->todialog = StringToStructuredValueEditDialog;
7185
dlg->fromdialog = StructuredValueEditDialogToString;
7186
dlg->testdialog = NULL;
7187
dlg->dialogmessage = NULL;
7188
dlg->change_notify = change_notify;
7189
dlg->change_userdata = change_userdata;
7190
dlg->parent = parent;
7192
dlg->dlg = LatLonDialog (p, change_notify, change_userdata);
7193
dlg->parse_func = ParseLatLonOk;
7195
dlg->unparsable = HiddenGroup (p, 3, 0, NULL);
7196
SetGroupSpacing (dlg->unparsable, 10, 10);
7197
dlg->text = DialogText (dlg->unparsable, "", width - 15, StructuredValueEditChange);
7198
SetObjectExtra (dlg->text, dlg, NULL);
7200
b = PushButton (dlg->unparsable, "Copy to Note", CopyUnparsableToNote);
7201
SetObjectExtra (b, dlg, NULL);
7203
b = PushButton (dlg->unparsable, "Erase", EraseUnparsable);
7204
SetObjectExtra (b, dlg, NULL);
7206
Hide (dlg->unparsable);
7212
typedef struct specimenvoucherdlg {
7213
DIALOG_MESSAGE_BLOCK
7215
TexT institution_code;
7216
TexT collection_code;
7219
TaglistCallback change_notify;
7220
Pointer change_userdata;
7222
} SpecimenVoucherDlgData, PNTR SpecimenVoucherDlgPtr;
7225
static void ResetSpecimenVoucherDlg (SpecimenVoucherDlgPtr dlg)
7227
if (dlg == NULL) return;
7229
SetTitle (dlg->institution_code, "");
7230
SetTitle (dlg->collection_code, "");
7231
SetTitle (dlg->free_text, "");
7235
static void StringToSpecimenVoucherDlg (DialoG d, Pointer data)
7237
SpecimenVoucherDlgPtr dlg;
7238
CharPtr str, ptr, cp;
7240
dlg = (SpecimenVoucherDlgPtr) GetObjectExtra (d);
7241
if (dlg == NULL) return;
7243
str = (CharPtr) data;
7246
ResetSpecimenVoucherDlg (dlg);
7250
/* make copy so we don't worry about changing data */
7251
str = StringSave (str);
7253
cp = StringChr (str, ':');
7256
SetTitle (dlg->free_text, str);
7261
SetTitle (dlg->institution_code, str);
7263
cp = StringChr (ptr, ':');
7266
SetTitle (dlg->free_text, ptr);
7271
SetTitle (dlg->collection_code, ptr);
7272
SetTitle (dlg->free_text, cp + 1);
7275
str = MemFree (str);
7279
static Pointer SpecimenVoucherDlgToString (DialoG d)
7281
SpecimenVoucherDlgPtr dlg;
7284
CharPtr inst, coll, free_text;
7286
dlg = (SpecimenVoucherDlgPtr) GetObjectExtra (d);
7287
if (dlg == NULL) return NULL;
7289
if (TextHasNoText (dlg->institution_code) && TextHasNoText (dlg->collection_code) && TextHasNoText (dlg->free_text))
7294
inst = SaveStringFromText (dlg->institution_code);
7295
coll = SaveStringFromText (dlg->collection_code);
7296
free_text = SaveStringFromText (dlg->free_text);
7298
len = StringLen (inst) + StringLen (coll) + StringLen (free_text) + 3;
7299
str = (CharPtr) MemNew (sizeof(Char) * len);
7300
if (StringHasNoText (inst) && StringHasNoText (coll))
7302
sprintf (str, "%s", free_text);
7304
else if (StringHasNoText (coll))
7306
sprintf (str, "%s:%s", inst, free_text == NULL ? "" : free_text);
7310
sprintf (str, "%s:%s:%s", inst == NULL ? "" : inst,
7311
coll == NULL ? "" : coll,
7312
free_text == NULL ? "" : free_text);
7314
inst = MemFree (inst);
7315
coll = MemFree (coll);
7316
free_text = MemFree (free_text);
7320
static void SpecimenVoucherTextChange (TexT t)
7322
SpecimenVoucherDlgPtr dlg;
7324
dlg = (SpecimenVoucherDlgPtr) GetObjectExtra (t);
7325
if (dlg == NULL) return;
7328
if (dlg->change_notify != NULL)
7330
(dlg->change_notify) (dlg->change_userdata);
7335
static DialoG SpecimenVoucherDialog (GrouP h, Int2 width, ValueListParentPtr parent, TaglistCallback change_notify, Pointer change_userdata)
7337
SpecimenVoucherDlgPtr dlg;
7340
p = HiddenGroup (h, 6, 0, NULL);
7341
SetGroupSpacing (p, 10, 10);
7342
dlg = (SpecimenVoucherDlgPtr) MemNew (sizeof(SpecimenVoucherDlgData));
7344
SetObjectExtra (p, dlg, StdCleanupExtraProc);
7345
dlg->dialog = (DialoG) p;
7346
dlg->todialog = StringToSpecimenVoucherDlg;
7347
dlg->fromdialog = SpecimenVoucherDlgToString;
7348
dlg->testdialog = NULL;
7349
dlg->dialogmessage = NULL;
7350
dlg->change_notify = change_notify;
7351
dlg->change_userdata = change_userdata;
7353
StaticPrompt (p, "Inst", 0, 0, programFont, 'r');
7354
dlg->institution_code = DialogText (p, "", 4, SpecimenVoucherTextChange);
7355
SetObjectExtra (dlg->institution_code, dlg, NULL);
7356
StaticPrompt (p, "Coll", 0, 0, programFont, 'r');
7357
dlg->collection_code = DialogText (p, "", 4, SpecimenVoucherTextChange);
7358
SetObjectExtra (dlg->collection_code, dlg, NULL);
7360
StaticPrompt (p, "SpecID/Text", 0, 0, programFont, 'r');
7361
dlg->free_text = DialogText (p, "", width - 8, SpecimenVoucherTextChange);
7362
SetObjectExtra (dlg->free_text, dlg, NULL);
7368
static Boolean ParseSpecimenVoucherOk (CharPtr str)
7374
typedef DialoG (*MakeValueEditDialogFunc) PROTO ((GrouP, Int2, ValueListParentPtr, TaglistCallback, Pointer));
7376
static MakeValueEditDialogFunc value_edit_dialog_list[] = {
7377
SimpleTextValueEditDialog,
7378
TrueFalseValueEditDialog,
7379
ValueListLatLonDialog,
7380
SpecimenVoucherDialog
7384
extern NameValuePairPtr NameValuePairFree (NameValuePairPtr nvp)
7388
nvp->name_vnp = ValNodeFreeData (nvp->name_vnp);
7389
nvp->value = MemFree (nvp->value);
7390
nvp = MemFree (nvp);
7396
extern NameValuePairPtr NameValuePairCopy (NameValuePairPtr nvp)
7398
NameValuePairPtr cpy = NULL;
7402
cpy = (NameValuePairPtr) MemNew (sizeof (NameValuePairData));
7403
if (nvp->name_vnp != NULL)
7405
cpy->name_vnp = ValNodeNew (NULL);
7406
cpy->name_vnp->choice = nvp->name_vnp->choice;
7407
cpy->name_vnp->data.ptrvalue = StringSave (nvp->name_vnp->data.ptrvalue);
7409
cpy->value = StringSave (nvp->value);
7415
extern ValNodePtr NameValuePairListFree (ValNodePtr vnp)
7417
ValNodePtr vnp_next;
7421
vnp->data.ptrvalue = NameValuePairFree (vnp->data.ptrvalue);
7422
vnp_next = vnp->next;
7424
vnp = ValNodeFree (vnp);
7431
typedef struct valuelistrowdialog {
7432
DIALOG_MESSAGE_BLOCK
7434
TaglistCallback change_notify;
7435
Pointer change_userdata;
7438
DialoG editors[eNumValueEditors];
7439
Int4 current_editor;
7440
} ValueListRowDialogData, PNTR ValueListRowDialogPtr;
7443
static void ChangeValueListRowName (Pointer data)
7445
ValueListRowDialogPtr dlg;
7448
CharPtr value = NULL;
7450
dlg = (ValueListRowDialogPtr) data;
7451
if (dlg == NULL) return;
7453
if (dlg->current_editor > -1)
7455
value = (CharPtr) DialogToPointer (dlg->editors[dlg->current_editor]);
7457
for (i = 0; i < eNumValueEditors; i++)
7459
Hide (dlg->editors[i]);
7461
vnp = (ValNodePtr) DialogToPointer (dlg->name_dlg);
7462
if (vnp != NULL && vnp->choice > 0)
7464
dlg->current_editor = vnp->choice - 1;
7465
Show (dlg->editors[dlg->current_editor]);
7466
PointerToDialog (dlg->editors[dlg->current_editor], value);
7467
vnp = ValNodeFree (vnp);
7469
dlg->current_editor = -1;
7471
value = MemFree (value);
7473
if (dlg->change_notify != NULL)
7475
(dlg->change_notify) (dlg->change_userdata);
7480
static void NameValuePairToDialog (DialoG d, Pointer data)
7482
ValueListRowDialogPtr dlg;
7483
NameValuePairPtr nvp;
7487
dlg = (ValueListRowDialogPtr) GetObjectExtra (d);
7488
nvp = (NameValuePairPtr) data;
7490
if (dlg == NULL) return;
7495
vn.data.ptrvalue = " ";
7496
PointerToDialog (dlg->name_dlg, &vn);
7497
for (i = 0; i < eNumValueEditors; i++)
7499
PointerToDialog (dlg->editors[i], NULL);
7501
ChangeValueListRowName (dlg);
7505
PointerToDialog (dlg->name_dlg, nvp->name_vnp);
7506
ChangeValueListRowName (dlg);
7507
if (dlg->current_editor > -1)
7509
PointerToDialog (dlg->editors[dlg->current_editor], nvp->value);
7510
if (dlg->change_notify != NULL)
7512
(dlg->change_notify) (dlg->change_userdata);
7519
static Pointer DialogToNameValuePair (DialoG d)
7521
ValueListRowDialogPtr dlg;
7522
NameValuePairPtr nvp;
7523
ValNodePtr name_vnp;
7525
dlg = (ValueListRowDialogPtr) GetObjectExtra (d);
7526
if (dlg == NULL || dlg->current_editor < 0) return NULL;
7528
name_vnp = DialogToPointer (dlg->name_dlg);
7529
if (name_vnp == NULL) return NULL;
7531
nvp = (NameValuePairPtr) MemNew (sizeof (NameValuePairData));
7532
nvp->name_vnp = name_vnp;
7533
nvp->value = DialogToPointer (dlg->editors[dlg->current_editor]);
7538
static ValNodePtr CopyChoiceList (ValNodePtr orig)
7540
ValNodePtr vnp, cpy = NULL, prev = NULL;
7542
while (orig != NULL)
7544
vnp = ValNodeNew (NULL);
7545
vnp->choice = orig->choice;
7546
vnp->data.ptrvalue = StringSave (orig->data.ptrvalue);
7561
static ValNodePtr TestValueListRowDialog (DialoG d)
7563
ValueListRowDialogPtr dlg;
7564
ValNodePtr name_vnp, err_list = NULL;
7565
CharPtr val, err_str;
7566
CharPtr err_fmt = "No modifier type selected for data %s";
7568
dlg = (ValueListRowDialogPtr) GetObjectExtra (d);
7569
if (dlg == NULL || dlg->current_editor < 0) return NULL;
7571
val = DialogToPointer (dlg->editors[dlg->current_editor]);
7572
if (!StringHasNoText (val))
7574
name_vnp = DialogToPointer (dlg->name_dlg);
7575
if (name_vnp == NULL || name_vnp->choice == 0)
7577
err_str = (CharPtr) MemNew (sizeof (Char) * (StringLen (err_fmt) + StringLen (val)));
7578
sprintf (err_str, err_fmt, val);
7579
err_list = ValNodeNew(NULL);
7580
err_list->choice = 0;
7581
err_list->data.ptrvalue = err_str;
7583
name_vnp = ValNodeFree (name_vnp);
7585
val = MemFree (val);
7590
static void ClearValueListRow (ButtoN b)
7592
ValueListRowDialogPtr dlg;
7594
dlg = (ValueListRowDialogPtr) GetObjectExtra (b);
7598
PointerToDialog (dlg->dialog, NULL);
7599
if (dlg->change_notify != NULL)
7601
(dlg->change_notify) (dlg->change_userdata);
7603
SendMessageToDialog (dlg->parent_dlg, VIB_MSG_REDRAW);
7608
static DialoG ValueListRowDialog (GrouP h, Int2 width, ValNodePtr choice_list, ValueListParentPtr parent,
7609
TaglistCallback change_notify, Pointer change_userdata, DialoG parent_dlg)
7611
ValueListRowDialogPtr dlg;
7617
p = HiddenGroup (h, 3, 0, NULL);
7618
SetGroupSpacing (p, 2, 2);
7619
dlg = (ValueListRowDialogPtr) MemNew (sizeof(ValueListRowDialogData));
7621
SetObjectExtra (p, dlg, StdCleanupExtraProc);
7622
dlg->dialog = (DialoG) p;
7623
dlg->todialog = NameValuePairToDialog;
7624
dlg->fromdialog = DialogToNameValuePair;
7625
dlg->testdialog = TestValueListRowDialog;
7626
dlg->dialogmessage = NULL;
7627
dlg->change_notify = change_notify;
7628
dlg->change_userdata = change_userdata;
7629
dlg->parent_dlg = parent_dlg;
7631
dlg->name_dlg = ValNodeSelectionDialog (p, CopyChoiceList(choice_list), 1,
7633
ValNodeSimpleDataFree, ValNodeStringCopy,
7634
ValNodeStringMatch, NULL,
7635
ChangeValueListRowName, dlg, FALSE);
7638
vn.data.ptrvalue = " ";
7639
PointerToDialog (dlg->name_dlg, &vn);
7641
g = HiddenGroup (p, 0, 0, NULL);
7642
for (i = 0; i < eNumValueEditors; i++)
7644
dlg->editors[i] = (value_edit_dialog_list[i]) (g, width, parent, change_notify, change_userdata);
7647
b = PushButton (p, "X", ClearValueListRow);
7648
SetObjectExtra (b, dlg, NULL);
7650
ChangeValueListRowName (dlg);
7655
typedef struct valuelistdialog {
7656
DIALOG_MESSAGE_BLOCK
7657
TaglistCallback change_notify;
7658
Pointer change_userdata;
7663
ValNodePtr choice_list;
7664
ValNodePtr value_list;
7666
Boolean suppress_notify;
7667
} ValueListDialogData, PNTR ValueListDialogPtr;
7670
static void CleanupValueListDialog (GraphiC g, VoidPtr data)
7673
ValueListDialogPtr dlg;
7675
dlg = (ValueListDialogPtr) data;
7678
dlg->rows = MemFree (dlg->rows);
7681
StdCleanupExtraProc (g, data);
7685
static NameValuePairPtr GetNthNameValuePair (Int4 n, ValNodePtr list)
7687
while (n > 0 && list != NULL)
7698
return (NameValuePairPtr) list->data.ptrvalue;
7702
static void PopulateValueListRows (ValueListDialogPtr dlg)
7707
n = dlg->scroll_pos;
7708
vnp = dlg->value_list;
7710
dlg->suppress_notify = TRUE;
7712
while (n > 0 && vnp != NULL)
7717
for (n = 0; n < dlg->num_rows; n++)
7721
PointerToDialog (dlg->rows[n], NULL);
7725
PointerToDialog (dlg->rows[n], vnp->data.ptrvalue);
7729
dlg->suppress_notify = FALSE;
7733
static Boolean IsNameValuePairEmpty (NameValuePairPtr nvp)
7739
else if ((nvp->name_vnp == NULL || nvp->name_vnp->choice == 0 || StringHasNoText (nvp->name_vnp->data.ptrvalue)) /* no choice */
7740
&& StringHasNoText (nvp->value)) /* no value */
7750
/* Only trim blanks from the end of the list */
7751
static void RemoveBlanks (ValNodePtr PNTR pvnp)
7753
ValNodePtr vnp, last_non_blank = NULL;
7755
if (pvnp == NULL) return;
7760
if (!IsNameValuePairEmpty ((NameValuePairPtr) vnp->data.ptrvalue))
7762
last_non_blank = vnp;
7766
if (last_non_blank != NULL) {
7767
last_non_blank->next = NameValuePairListFree (last_non_blank->next);
7771
static void ValueListPairToDialog (DialoG d, Pointer data)
7773
ValueListDialogPtr dlg;
7776
dlg = (ValueListDialogPtr) GetObjectExtra (d);
7777
if (dlg == NULL) return;
7779
dlg->value_list = NameValuePairListFree (dlg->value_list);
7780
dlg->value_list = (ValNodePtr) data;
7781
RemoveBlanks (&(dlg->value_list));
7783
num_vals = ValNodeLen (dlg->value_list);
7784
if (num_vals >= dlg->num_rows)
7786
SetBarMax (dlg->left_bar, num_vals + 1 - dlg->num_rows);
7787
SetBarMax (dlg->right_bar, num_vals + 1 - dlg->num_rows);
7791
SetBarMax (dlg->left_bar, 0);
7792
SetBarMax (dlg->right_bar, 0);
7794
if (GetValue (dlg->left_bar) > GetBarMax (dlg->left_bar))
7796
CorrectBarValue (dlg->left_bar, 0);
7797
CorrectBarValue (dlg->right_bar, 0);
7799
PopulateValueListRows (dlg);
7803
static void ScrollValueListProc (BaR b, GraphiC g, Int2 _new, Int2 _old)
7805
ValueListDialogPtr dlg;
7807
dlg = (ValueListDialogPtr) GetObjectExtra (b);
7808
if (dlg == NULL) return;
7810
/* synchronize left and right scroll bars */
7811
if (b == dlg->right_bar && dlg->left_bar != NULL)
7813
CorrectBarValue (dlg->left_bar, GetBarValue (dlg->right_bar));
7815
else if (b == dlg->left_bar && dlg->right_bar != NULL)
7817
CorrectBarValue (dlg->right_bar, GetBarValue (dlg->left_bar));
7820
dlg->scroll_pos = _new;
7821
PopulateValueListRows (dlg);
7825
static void ValueListDialogMessage (DialoG d, Int2 mssg)
7828
ValNodePtr new_value_list;
7831
case VIB_MSG_REDRAW :
7832
new_value_list = DialogToPointer (d);
7833
PointerToDialog (d, new_value_list);
7841
static void ChangeValueRow (Pointer data)
7843
ValueListDialogPtr dlg;
7844
NameValuePairPtr nvp;
7848
dlg = (ValueListDialogPtr) data;
7850
if (dlg == NULL) return;
7852
if (dlg->suppress_notify) return;
7854
/* copy values into list */
7855
/* first, skip over rows scrolled past */
7856
vnp = dlg->value_list;
7858
while (i < dlg->scroll_pos)
7862
vnp = ValNodeAddPointer (&dlg->value_list, 0, NULL);
7868
/* now copy in rows we can see */
7869
for (i = 0; i < dlg->num_rows; i++)
7873
vnp = ValNodeAddPointer (&dlg->value_list, 0, DialogToPointer (dlg->rows[i]));
7877
vnp->data.ptrvalue = NameValuePairFree (vnp->data.ptrvalue);
7878
vnp->data.ptrvalue = DialogToPointer (dlg->rows[i]);
7884
/* if editing last row, extend scrollbar for new row */
7885
max = GetBarMax (dlg->left_bar);
7886
if (dlg->scroll_pos == max)
7888
nvp = DialogToPointer (dlg->rows[dlg->num_rows - 1]);
7889
if (!IsNameValuePairEmpty (nvp))
7891
SetBarMax (dlg->left_bar, max + 1);
7892
SetBarMax (dlg->right_bar, max + 1);
7894
nvp = NameValuePairFree(nvp);
7897
if (dlg->change_notify != NULL)
7899
(dlg->change_notify)(dlg->change_userdata);
7904
static Pointer DialogToNameValuePairList (DialoG d)
7906
ValueListDialogPtr dlg;
7907
ValNodePtr value_list = NULL, vnp;
7909
dlg = (ValueListDialogPtr) GetObjectExtra (d);
7910
if (dlg == NULL) return NULL;
7912
for (vnp = dlg->value_list; vnp != NULL; vnp = vnp->next)
7914
if (vnp->data.ptrvalue != NULL)
7916
ValNodeAddPointer (&value_list, 0, NameValuePairCopy (vnp->data.ptrvalue));
7919
return (Pointer) value_list;
7923
static ValNodePtr TestValueListDialog (DialoG d)
7925
ValNodePtr err_list = NULL, value_list = NULL, vnp;
7926
NameValuePairPtr nvp;
7927
CharPtr err_fmt = "No modifier type selected for data %s";
7930
value_list = DialogToPointer (d);
7932
for (vnp = value_list; vnp != NULL; vnp = vnp->next)
7934
nvp = (NameValuePairPtr) vnp->data.ptrvalue;
7936
&& !StringHasNoText (nvp->value)
7937
&& (nvp->name_vnp == NULL || StringHasNoText (nvp->name_vnp->data.ptrvalue)))
7939
err_str = (CharPtr) MemNew (sizeof (Char) * (StringLen (err_fmt) + StringLen (nvp->value)));
7940
sprintf (err_str, err_fmt, nvp->value);
7941
ValNodeAddPointer (&err_list, 0, err_str);
7944
value_list = NameValuePairListFree (value_list);
7948
extern DialoG ValueListDialog (GrouP h, Uint2 num_rows, Int2 width, ValNodePtr choice_list, ValueListParentPtr parent, TaglistCallback change_notify, Pointer change_userdata)
7950
ValueListDialogPtr dlg;
7954
p = HiddenGroup (h, 3, 0, NULL);
7955
SetGroupSpacing (p, 2, 2);
7956
dlg = (ValueListDialogPtr) MemNew (sizeof(ValueListDialogData));
7958
SetObjectExtra (p, dlg, CleanupValueListDialog);
7959
dlg->dialog = (DialoG) p;
7960
dlg->todialog = ValueListPairToDialog;
7961
dlg->fromdialog = DialogToNameValuePairList;
7962
dlg->testdialog = TestValueListDialog;
7963
dlg->dialogmessage = ValueListDialogMessage;
7964
dlg->change_notify = change_notify;
7965
dlg->change_userdata = change_userdata;
7967
dlg->num_rows = num_rows;
7969
/* navigation bar on left */
7970
dlg->left_bar = ScrollBar (p, 0, dlg->num_rows, ScrollValueListProc);
7971
SetObjectExtra (dlg->left_bar, dlg, NULL);
7972
CorrectBarPage (dlg->left_bar, dlg->num_rows - 1, dlg->num_rows - 1);
7974
g = HiddenGroup (p, 1, 0, NULL);
7975
dlg->rows = (DialoG *) MemNew (num_rows * sizeof (DialoG));
7976
for (i = 0; i < dlg->num_rows; i++)
7978
dlg->rows[i] = ValueListRowDialog (g, width, choice_list, parent, ChangeValueRow, dlg, (DialoG) p);
7982
/* navigation bar on right */
7983
dlg->right_bar = ScrollBar (p, 0, dlg->num_rows, ScrollValueListProc);
7984
SetObjectExtra (dlg->right_bar, dlg, NULL);
7985
CorrectBarPage (dlg->right_bar, dlg->num_rows - 1, dlg->num_rows - 1);
7987
AlignObjects (ALIGN_LOWER, (HANDLE) g, (HANDLE) dlg->left_bar, (HANDLE) dlg->right_bar, NULL);
7994
typedef struct modifierlistdlg {
7995
VALUE_LIST_PARENT_FIELDS
8001
EnumFieldAssocPtr al;
8002
} ModifierListDlgData, PNTR ModifierListDlgPtr;
8005
static ValNodePtr TestModifierListDlg (DialoG d)
8007
ModifierListDlgPtr dlg = (ModifierListDlgPtr) GetObjectExtra (d);
8008
if (dlg == NULL) return NULL;
8009
return TestDialog (dlg->dlg);
8014
static ValNodePtr SubSourceListToNameValueList (SubSourcePtr ssp)
8016
ValNodePtr val_list = NULL;
8017
NameValuePairPtr nvp;
8021
if (ssp->subtype != SUBSRC_other)
8023
nvp = (NameValuePairPtr) MemNew (sizeof (NameValuePairData));
8024
nvp->name_vnp = ValNodeNew(NULL);
8025
nvp->name_vnp->choice = 1;
8026
nvp->name_vnp->data.ptrvalue = StringSave (GetSubsourceQualName (ssp->subtype));
8027
nvp->value = StringSave (ssp->name);
8028
ValNodeAddPointer (&val_list, 0, nvp);
8037
static void SubSourceListToDialog (DialoG d, Pointer data)
8039
ModifierListDlgPtr dlg;
8042
CharPtr note_txt = NULL;
8044
dlg = (ModifierListDlgPtr) GetObjectExtra (d);
8046
if (dlg == NULL) return;
8048
ssp = (SubSourcePtr) data;
8050
vnp = SubSourceListToNameValueList (ssp);
8051
PointerToDialog (dlg->dlg, vnp);
8055
if (ssp->subtype == SUBSRC_other)
8057
note_txt = combine_strings (note_txt, ssp->name);
8061
SetTitle (dlg->note, note_txt);
8066
static Pointer DialogToSubSourceList (DialoG d)
8068
ModifierListDlgPtr dlg;
8069
ValNodePtr val_list, vnp;
8070
NameValuePairPtr nvp;
8071
SubSourcePtr ssp_list = NULL, ssp_prev = NULL, ssp_new;
8073
CharPtr comment_str;
8075
dlg = (ModifierListDlgPtr) GetObjectExtra (d);
8077
if (dlg == NULL) return NULL;
8079
val_list = (ValNodePtr) DialogToPointer (dlg->dlg);
8080
for (vnp = val_list; vnp != NULL; vnp = vnp->next)
8082
if (vnp->data.ptrvalue != NULL)
8084
nvp = (NameValuePairPtr) vnp->data.ptrvalue;
8085
if (nvp != NULL && nvp->name_vnp != NULL)
8087
subtype = EquivalentSubSourceEx (nvp->name_vnp->data.ptrvalue, TRUE);
8090
ssp_new = SubSourceNew ();
8091
ssp_new->subtype = subtype;
8092
ssp_new->name = StringSave (nvp->value == NULL ? "" : nvp->value);
8093
if (ssp_prev == NULL)
8099
ssp_prev->next = ssp_new;
8106
val_list = NameValuePairListFree (val_list);
8109
comment_str = SaveStringFromText (dlg->note);
8110
if (!StringHasNoText (comment_str))
8112
ssp_new = SubSourceNew();
8113
ssp_new->subtype = SUBSRC_other;
8114
ssp_new->name = StringSave (comment_str);
8115
if (ssp_prev == NULL)
8121
ssp_prev->next = ssp_new;
8130
static ValNodePtr GetSubSourceChoicesForValueList (EnumFieldAssocPtr al)
8132
ValNodePtr choice_list = NULL;
8133
EnumFieldAssocPtr efap;
8136
while (efap->name != NULL)
8138
if (StringHasNoText (efap->name))
8140
ValNodeAddStr (&choice_list, eValueEditSimpleText + 1, StringSave (efap->name));
8142
else if (efap->value == SUBSRC_lat_lon)
8144
ValNodeAddStr (&choice_list, eValueEditLatLon + 1, StringSave (efap->name));
8146
else if (IsNonTextModifier (efap->name))
8148
ValNodeAddStr (&choice_list, eValueEditTrueFalse + 1, StringSave (efap->name));
8152
ValNodeAddStr (&choice_list, eValueEditSimpleText + 1, StringSave (efap->name));
8160
static CharPtr subsource_extra_prompts [] = {
8161
"Additional", "Source", "Information", NULL
8164
extern DialoG CreateSubSourceDialog (GrouP h, EnumFieldAssocPtr al)
8166
ModifierListDlgPtr dlg;
8168
ValNodePtr choice_list;
8172
p = HiddenGroup (h, -1, 0, NULL);
8173
SetGroupSpacing (p, 10, 10);
8174
dlg = (ModifierListDlgPtr) MemNew (sizeof(ModifierListDlgData));
8176
SetObjectExtra (p, dlg, StdCleanupExtraProc);
8177
dlg->dialog = (DialoG) p;
8178
dlg->todialog = SubSourceListToDialog;
8179
dlg->fromdialog = DialogToSubSourceList;
8180
dlg->testdialog = TestModifierListDlg;
8181
dlg->dialogmessage = NULL;
8183
choice_list = GetSubSourceChoicesForValueList (al);
8184
dlg->dlg = ValueListDialog (p, 3, 23, choice_list, (ValueListParentPtr) dlg, NULL, NULL);
8185
choice_list = ValNodeFreeData (choice_list);
8187
g = HiddenGroup (p, 2, 0, NULL);
8188
SelectFont (programFont);
8189
max = MaxStringWidths (subsource_extra_prompts) + 2;
8190
x = MultiLinePrompt (g, "Additional Source Information", max, programFont);
8191
dlg->note = ScrollText (g, 20, 3, programFont, TRUE, NULL);
8192
AlignObjects (ALIGN_MIDDLE, (HANDLE) x, (HANDLE) dlg->note, NULL);
8194
AlignObjects (ALIGN_CENTER, (HANDLE) dlg->dlg, (HANDLE) g, NULL);
8200
static ValNodePtr OrgModListToNameValueList (OrgModPtr mod)
8202
ValNodePtr val_list = NULL;
8203
NameValuePairPtr nvp;
8207
if (mod->subtype != ORGMOD_gb_acronym
8208
&& mod->subtype != ORGMOD_gb_anamorph
8209
&& mod->subtype != ORGMOD_gb_synonym
8210
&& mod->subtype != ORGMOD_other)
8212
nvp = (NameValuePairPtr) MemNew (sizeof (NameValuePairData));
8213
nvp->name_vnp = ValNodeNew(NULL);
8214
nvp->name_vnp->choice = 1;
8215
nvp->name_vnp->data.ptrvalue = StringSave (GetOrgModQualName (mod->subtype));
8216
nvp->value = StringSave (mod->subname);
8217
ValNodeAddPointer (&val_list, 0, nvp);
8226
static void OrgModListToDialog (DialoG d, Pointer data)
8228
ModifierListDlgPtr dlg;
8231
CharPtr note_txt = NULL;
8233
dlg = (ModifierListDlgPtr) GetObjectExtra (d);
8235
if (dlg == NULL) return;
8237
mod = (OrgModPtr) data;
8239
vnp = OrgModListToNameValueList (mod);
8240
PointerToDialog (dlg->dlg, vnp);
8244
if (mod->subtype == ORGMOD_other)
8246
note_txt = combine_strings (note_txt, mod->subname);
8250
SetTitle (dlg->note, note_txt);
8255
static Pointer DialogToOrgModList (DialoG d)
8257
ModifierListDlgPtr dlg;
8258
ValNodePtr val_list, vnp;
8259
NameValuePairPtr nvp;
8260
OrgModPtr mod_list = NULL, mod_prev = NULL, mod_new;
8262
CharPtr comment_str;
8264
dlg = (ModifierListDlgPtr) GetObjectExtra (d);
8266
if (dlg == NULL) return NULL;
8268
val_list = (ValNodePtr) DialogToPointer (dlg->dlg);
8269
for (vnp = val_list; vnp != NULL; vnp = vnp->next)
8271
if (vnp->data.ptrvalue != NULL)
8273
nvp = (NameValuePairPtr) vnp->data.ptrvalue;
8274
if (nvp != NULL && nvp->name_vnp != NULL)
8276
subtype = EquivalentOrgModEx (nvp->name_vnp->data.ptrvalue, TRUE);
8279
mod_new = OrgModNew ();
8280
mod_new->subtype = subtype;
8281
mod_new->subname = StringSave (nvp->value == NULL ? "" : nvp->value);
8282
if (mod_prev == NULL)
8288
mod_prev->next = mod_new;
8295
val_list = NameValuePairListFree (val_list);
8298
comment_str = SaveStringFromText (dlg->note);
8299
if (!StringHasNoText (comment_str))
8301
mod_new = OrgModNew();
8302
mod_new->subtype = ORGMOD_other;
8303
mod_new->subname = StringSave (comment_str);
8304
if (mod_prev == NULL)
8310
mod_prev->next = mod_new;
8319
extern Boolean IsNonTextModifier (CharPtr mod_name)
8321
if (StringICmp (mod_name, "transgenic") == 0
8322
|| StringICmp (mod_name, "germline") == 0
8323
|| StringICmp (mod_name, "metagenomic") == 0
8324
|| StringICmp (mod_name, "environmental-sample") ==0
8325
|| StringICmp (mod_name, "rearranged") == 0)
8336
static ValNodePtr GetOrgModChoicesForValueList (EnumFieldAssocPtr al)
8338
ValNodePtr choice_list = NULL;
8339
EnumFieldAssocPtr efap;
8342
while (efap->name != NULL)
8344
if (StringHasNoText (efap->name))
8346
ValNodeAddStr (&choice_list, eValueEditSimpleText + 1, StringSave (efap->name));
8348
else if (IsNonTextModifier (efap->name))
8350
ValNodeAddStr (&choice_list, eValueEditTrueFalse + 1, StringSave (efap->name));
8352
else if (efap->value == ORGMOD_specimen_voucher || efap->value == ORGMOD_culture_collection || efap->value == ORGMOD_bio_material)
8354
ValNodeAddStr (&choice_list, eValueEditSpecimenVoucher + 1, StringSave (efap->name));
8358
ValNodeAddStr (&choice_list, eValueEditSimpleText + 1, StringSave (efap->name));
8366
static CharPtr orgmod_extra_prompts [] = {
8367
"Additional", "Organism", "Information", NULL
8370
static void ChangeOrgmodComment (TexT t)
8372
ModifierListDlgPtr dlg;
8375
dlg = (ModifierListDlgPtr) GetObjectExtra (t);
8376
if (dlg == NULL) return;
8378
str = SaveStringFromText (t);
8379
if ( StringStr (str, "type strain of ")) {
8380
Disable (dlg->type_strain);
8386
static void AddTypeStrainProc (ButtoN b)
8388
ModifierListDlgPtr dlg;
8389
CharPtr old_orgcomment;
8390
Int4 old_orgcomment_len;
8393
const CharPtr ts = "type strain of ";
8394
const CharPtr sep = "; ";
8395
CharPtr new_orgcomment;
8397
dlg = (ModifierListDlgPtr) GetObjectExtra (b);
8398
if (dlg == NULL) return;
8400
old_orgcomment_len = TextLength (dlg->note) + 1;
8401
old_orgcomment = MemNew (old_orgcomment_len + 1);
8402
if (old_orgcomment == NULL) return;
8403
org_name_len = TextLength (dlg->taxname) + 1;
8404
org_name = MemNew (org_name_len + 1);
8405
if (org_name == NULL)
8407
MemFree (old_orgcomment);
8410
new_orgcomment = MemNew (old_orgcomment_len
8415
if (new_orgcomment == NULL)
8417
MemFree (old_orgcomment);
8421
GetTitle (dlg->note, old_orgcomment, old_orgcomment_len);
8422
TrimSpacesAroundString (old_orgcomment);
8423
GetTitle (dlg->taxname, org_name, org_name_len);
8424
TrimSpacesAroundString (org_name);
8425
if (old_orgcomment[0] != 0)
8427
StringCpy(new_orgcomment, old_orgcomment);
8428
StringCat(new_orgcomment, sep);
8432
new_orgcomment[0] = 0;
8435
StringCat (new_orgcomment, ts);
8436
StringCat (new_orgcomment, org_name);
8437
SetTitle (dlg->note, new_orgcomment);
8439
MemFree (old_orgcomment);
8440
MemFree (new_orgcomment);
8445
extern DialoG CreateOrgModDialog (GrouP h, EnumFieldAssocPtr al, TexT taxname)
8447
ModifierListDlgPtr dlg;
8449
ValNodePtr choice_list;
8453
p = HiddenGroup (h, -1, 0, NULL);
8454
SetGroupSpacing (p, 10, 10);
8455
dlg = (ModifierListDlgPtr) MemNew (sizeof(ModifierListDlgData));
8457
SetObjectExtra (p, dlg, StdCleanupExtraProc);
8458
dlg->dialog = (DialoG) p;
8459
dlg->todialog = OrgModListToDialog;
8460
dlg->fromdialog = DialogToOrgModList;
8461
dlg->testdialog = TestModifierListDlg;
8462
dlg->dialogmessage = NULL;
8464
choice_list = GetOrgModChoicesForValueList (al);
8465
dlg->dlg = ValueListDialog (p, 3, 23, choice_list, (ValueListParentPtr) dlg, NULL, NULL);
8466
choice_list = ValNodeFreeData (choice_list);
8468
g = HiddenGroup (p, 2, 0, NULL);
8469
SelectFont (programFont);
8470
max = MaxStringWidths (orgmod_extra_prompts) + 2;
8471
x = MultiLinePrompt (g, "Additional Organism Information", max, programFont);
8472
dlg->note = ScrollText (g, 20, 3, programFont, TRUE, ChangeOrgmodComment);
8473
SetObjectExtra (dlg->note, dlg, NULL);
8474
AlignObjects (ALIGN_MIDDLE, (HANDLE) x, (HANDLE) dlg->note, NULL);
8476
dlg->taxname = taxname;
8477
if (dlg->taxname != NULL)
8479
dlg->type_strain = PushButton (p, "Add type strain to comment", AddTypeStrainProc);
8480
SetObjectExtra (dlg->type_strain, dlg, NULL);
8484
dlg->type_strain = NULL;
8487
AlignObjects (ALIGN_CENTER, (HANDLE) dlg->dlg, (HANDLE) g, (HANDLE) dlg->type_strain, NULL);
8493
extern void CreateStandardEditMenu (WindoW w)
8499
m = PulldownMenu (w, "Edit");
8500
i = CommandItem (m, "Cut", StdCutTextProc);
8501
i = CommandItem (m, "Copy", StdCopyTextProc);
8502
i = CommandItem (m, "Paste", StdPasteTextProc);
8503
i = CommandItem (m, "Clear", StdDeleteTextProc);