{"x", 6, 1}, {"y", 6, 1}, {"z", 6, 1}, {"charge", 6, 1}, {NULL}
};
static ColumnInfoRecord sBondColumns[] = {
-{"atoms", 9, 0}, {"names", 9, 0}, {"type", 9, 0}, {"length", 8, 0}, {"r0", 8, 0}, {"force", 8, 0}, {NULL}
+ {"atoms", 9, 0}, {"names", 9, 0}, {"type", 9, 0}, {"length", 8, 0}, {"par type", 8, 0}, {"r0", 8, 0}, {"force", 8, 0}, {NULL}
};
static ColumnInfoRecord sAngleColumns[] = {
-{"atoms", 12, 0}, {"names", 12, 0}, {"type", 12, 0}, {"angle", 8, 0}, {"a0", 8, 0}, {"force", 8, 0}, {NULL}
+{"atoms", 12, 0}, {"names", 12, 0}, {"type", 12, 0}, {"angle", 8, 0}, {"par type", 8, 0}, {"a0", 8, 0}, {"force", 8, 0}, {NULL}
};
static ColumnInfoRecord sDihedralColumns[] = {
-{"atoms", 15, 0}, {"names", 15, 0}, {"type", 15, 0}, {"dihedral", 8, 0}, {"force", 8, 0}, {"period", 4, 0}, {"phi0", 8, 0}, {NULL}
+{"atoms", 15, 0}, {"names", 15, 0}, {"type", 15, 0}, {"dihedral", 8, 0}, {"par type", 8, 0}, {"force", 8, 0}, {"period", 4, 0}, {"phi0", 8, 0}, {NULL}
};
static ColumnInfoRecord sImproperColumns[] = {
-{"atoms", 15, 0}, {"names", 15, 0}, {"type", 15, 0}, {"improper", 8, 0}, {"force", 8, 0}, {"period", 4, 0}, {"phi0", 8, 0}, {NULL}
+{"atoms", 15, 0}, {"names", 15, 0}, {"type", 15, 0}, {"improper", 8, 0}, {"par type", 8, 0}, {"force", 8, 0}, {"period", 4, 0}, {"phi0", 8, 0}, {NULL}
};
static ColumnInfoRecord sParameterColumns[] = {
{"class", 5, 0}, {"type", 9, 0}, {"", 6, 0}, {"", 6, 0}, {"", 6, 0}, {"", 6, 0}, {"", 6, 0}, {"", 6, 0}, {"src", 8, 0}, {"comment", 25, 0}, {NULL}
snprintf(buf, bufsize, "%.3f", MoleculeMeasureBond(mview->mol, &(ap[0]->r), &(ap[1]->r)));
break;
case 4:
- case 5: {
+ case 5:
+ case 6: {
BondPar *bp = (BondPar *)sParameterOfTypeAtIndex(mol, kBondParType, idx);
if (bp == NULL)
buf[0] = 0;
- else snprintf(buf, bufsize, "%.3f", (column == 4 ? bp->r0 : bp->k * INTERNAL2KCAL));
+ else {
+ if (column == 4)
+ snprintf(buf, bufsize, "%.6s-%.6s", AtomTypeDecodeToString(bp->type1, typebuf[0]), AtomTypeDecodeToString(bp->type2, typebuf[1]));
+ else
+ snprintf(buf, bufsize, "%.3f", (column == 5 ? bp->r0 : bp->k * INTERNAL2KCAL));
+ }
break;
}
default: buf[0] = 0; break;
snprintf(buf, bufsize, "%.3f", MoleculeMeasureAngle(mview->mol, &(ap[0]->r), &(ap[1]->r), &(ap[2]->r)));
break;
case 4:
- case 5: {
+ case 5:
+ case 6: {
AnglePar *anp = (AnglePar *)sParameterOfTypeAtIndex(mol, kAngleParType, idx);
if (anp == NULL)
buf[0] = 0;
- else snprintf(buf, bufsize, "%.3f", (column == 4 ? anp->a0 * kRad2Deg : anp->k * INTERNAL2KCAL));
+ else {
+ if (column == 4)
+ snprintf(buf, bufsize, "%.6s-%.6s-%.6s", AtomTypeDecodeToString(anp->type1, typebuf[0]), AtomTypeDecodeToString(anp->type2, typebuf[1]), AtomTypeDecodeToString(anp->type3, typebuf[2]));
+ else
+ snprintf(buf, bufsize, "%.3f", (column == 5 ? anp->a0 * kRad2Deg : anp->k * INTERNAL2KCAL));
+ }
break;
}
default: buf[0] = 0; break;
break;
case 4:
case 5:
- case 6: {
+ case 6:
+ case 7: {
TorsionPar *tp = (TorsionPar *)sParameterOfTypeAtIndex(mol, (f ? kDihedralParType : kImproperParType), idx);
if (tp == NULL)
buf[0] = 0;
- else if (column == 5)
+ else if (column == 4)
+ snprintf(buf, bufsize, "%.6s-%.6s-%.6s-%.6s", AtomTypeDecodeToString(tp->type1, typebuf[0]), AtomTypeDecodeToString(tp->type2, typebuf[1]), AtomTypeDecodeToString(tp->type3, typebuf[2]), AtomTypeDecodeToString(tp->type4, typebuf[3]));
+ else if (column == 6)
snprintf(buf, bufsize, "%d", tp->period[0]);
- else snprintf(buf, bufsize, "%.3f", (column == 4 ? tp->k[0] * INTERNAL2KCAL : tp->phi0[0] * kRad2Deg));
+ else snprintf(buf, bufsize, "%.3f", (column == 5 ? tp->k[0] * INTERNAL2KCAL : tp->phi0[0] * kRad2Deg));
break;
}
default: buf[0] = 0; break;
}
static void
-sMolActionUpdateSelectionAndParameterNumbering(Molecule *mol, const IntGroup *ig, int is_insert)
+s_UpdateSelection(Molecule *mol, const IntGroup *ig, int is_insert)
{
- int i, j, n, old_natoms;
+ int n, old_natoms;
IntGroup *sel, *orig_atoms, *ig3;
- UnionPar *up;
MolAction *act;
if (ig == NULL || (n = IntGroupGetCount(ig)) == 0)
IntGroupRelease(sel);
}
- /* Update parameters */
- /*
- if (mol->par != NULL) {
- Int *ip = (Int *)malloc(sizeof(Int) * old_natoms);
- if (is_insert) {
- for (i = 0; i < old_natoms; i++)
- ip[i] = IntGroupGetNthPoint(orig_atoms, i);
- } else {
- for (i = 0; i < old_natoms; i++)
- ip[i] = IntGroupLookupPoint(orig_atoms, i);
- }
- for (i = kFirstParType; i <= kLastParType; i++) {
- UnionPar usave;
- UnionPar *upary = NULL;
- Int count_upary = 0;
- if (!is_insert)
- ig3 = IntGroupNew();
- for (j = 0; (up = ParameterGetUnionParFromTypeAndIndex(mol->par, i, j)) != NULL; j++) {
- ParameterCopyOneWithType(&usave, up, i); // Don't say usave = *up
- if (ParameterRenumberAtoms(i, up, old_natoms, ip) && !is_insert) {
- IntGroupAdd(ig3, j, 1); // This parameter is to be restored on undo
- AssignArray(&upary, &count_upary, sizeof(UnionPar), count_upary, &usave);
- }
- }
- if (count_upary > 0) {
- // Register undo for modifying parameters
- act = MolActionNew(gMolActionAddParameters, i, ig3, count_upary, upary);
- MolActionCallback_registerUndo(mol, act);
- MolActionRelease(act);
- act = MolActionNew(gMolActionDeleteParameters, i, ig3);
- MolActionCallback_registerUndo(mol, act);
- MolActionRelease(act);
- free(upary);
- }
- if (!is_insert)
- IntGroupRelease(ig3);
- }
- free(ip);
- }
- */
-
IntGroupRelease(orig_atoms);
}
if (n1 < 0)
return -1;
ig = IntGroupNewWithPoints(n1, 1, -1);
- sMolActionUpdateSelectionAndParameterNumbering(mol, ig, 1);
+ s_UpdateSelection(mol, ig, 1);
IntGroupRelease(ig);
*actp = MolActionNew(gMolActionDeleteAnAtom, n1);
return 0;
if ((result = MoleculeMerge(mol, mol2, ig, n1)) != 0)
return result;
- sMolActionUpdateSelectionAndParameterNumbering(mol, ig, 1);
+ s_UpdateSelection(mol, ig, 1);
*actp = MolActionNew(gMolActionUnmergeMolecule, ig2);
IntGroupRelease(ig2);
s_MolActionDeleteAtoms(Molecule *mol, MolAction *action, MolAction **actp)
{
Int n1, result, *ip;
- IntGroup *bg, *ig;
+ IntGroup *bg, *ig, *pg;
+ UnionPar *up;
Molecule *mol2;
if (strcmp(action->name, gMolActionDeleteAnAtom) == 0) {
ig = IntGroupNew();
}
IntGroupRelease(bg);
}
+ /* Search parameters that may disappear after unmerging */
+ pg = NULL;
+ up = NULL;
+ if (mol->par != NULL) {
+ Int i, j, n;
+ IntGroup *rg = IntGroupNewWithPoints(0, mol->natoms, -1);
+ IntGroupRemoveIntGroup(rg, ig); /* Remaining atoms */
+ pg = IntGroupNew();
+ for (j = kFirstParType; j <= kLastParType; j++) {
+ n = ParameterGetCountForType(mol->par, j);
+ for (i = 0; i < n; i++) {
+ UnionPar *up1 = ParameterGetUnionParFromTypeAndIndex(mol->par, j, i);
+ if (!ParameterIsRelevantToAtomGroup(j, up1, mol->atoms, ig) && !ParameterIsRelevantToAtomGroup(j, up1, mol->atoms, rg)) {
+ IntGroupAdd(pg, i + (j - kFirstParType) * kParameterIndexOffset, 1);
+ }
+ }
+ }
+ n = IntGroupGetCount(pg);
+ if (n > 0) {
+ up = (UnionPar *)calloc(sizeof(UnionPar), n);
+ ParameterCopy(mol->par, kFirstParType, up, pg);
+ } else {
+ IntGroupRelease(pg);
+ pg = NULL;
+ }
+ }
/* Unmerge molecule */
if ((result = MoleculeUnmerge(mol, &mol2, ig, 0)) != 0) {
if (ip != NULL)
return result;
}
- sMolActionUpdateSelectionAndParameterNumbering(mol, ig, 0);
+ s_UpdateSelection(mol, ig, 0);
if (mol2 == NULL)
*actp = NULL;
else {
+ MolAction *act2;
/* If there exist bonds crossing the molecule border, then register
- an action to restore them */
+ an undo action to restore them */
if (ip != NULL) {
- MolAction *act2 = MolActionNew(gMolActionAddBonds, n1 * 2, ip);
+ act2 = MolActionNew(gMolActionAddBonds, n1 * 2, ip);
MolActionCallback_registerUndo(mol, act2);
MolActionRelease(act2);
free(ip);
}
+ /* Register an undo action to restore the disappearing parameters */
+ if (up != NULL) {
+ act2 = MolActionNew(gMolActionAddParameters, kFirstParType, pg, IntGroupGetCount(pg), up);
+ MolActionCallback_registerUndo(mol, act2);
+ MolActionRelease(act2);
+ IntGroupRelease(pg);
+ free(up);
+ }
*actp = MolActionNew(gMolActionMergeMolecule, mol2, ig);
MoleculeRelease(mol2);
}
}
/* Renumber the parameter records remaining in the src */
- for (n1 = kFirstParType; n1 <= kLastParType; n1++) {
- n2 = ParameterGetCountForType(src->par, n1);
- for (i = 0; i < n2; i++) {
- up = ParameterGetUnionParFromTypeAndIndex(src->par, n1, i);
- ParameterRenumberAtoms(n1, up, nsrc, old2new);
+ if (moveFlag) {
+ for (n1 = kFirstParType; n1 <= kLastParType; n1++) {
+ n2 = ParameterGetCountForType(src->par, n1);
+ for (i = 0; i < n2; i++) {
+ up = ParameterGetUnionParFromTypeAndIndex(src->par, n1, i);
+ ParameterRenumberAtoms(n1, up, nsrc, old2new);
+ }
}
}
for (j = 0, ip = ap->connects; j < ap->nconnects; j++, ip++)
*ip = old2new[*ip];
}
+ if (mp->par != NULL) {
+ /* Renumber the parameters */
+ int n;
+ for (j = kFirstParType; j <= kLastParType; j++) {
+ n = ParameterGetCountForType(mp->par, j);
+ for (i = 0; i < n; i++) {
+ UnionPar *up = ParameterGetUnionParFromTypeAndIndex(mp->par, j, i);
+ if (up != NULL)
+ ParameterRenumberAtoms(j, up, mp->natoms, old2new);
+ }
+ }
+ }
/* Renumber the atoms */
for (i = 0; i < mp->natoms; i++)
if (pref->mol == NULL)
return;
up = ParameterRefGetPar(pref);
- up->bond.src = 0; /* Becomes automatically molecule-local */
+ if (key != s_SourceSym)
+ up->bond.src = 0; /* Becomes automatically molecule-local */
if (MolActionCallback_isUndoRegistrationEnabled(pref->mol)) {
/* Register undo */
MolAction *act;
return val;
}
+/* Only false (undefined) and nil (local) can be set */
+static VALUE s_ParameterRef_SetSource(VALUE self, VALUE val) {
+ UnionPar *up;
+ Int tp, oldsrc;
+ VALUE oldval;
+ up = s_UnionParFromValue(self, &tp, 1);
+ if (val != Qfalse && val != Qnil)
+ rb_raise(rb_eMolbyError, "set source: only false (undefined parameter) or nil (local parameter) is allowed");
+ oldval = s_ParameterRef_GetSource(self);
+ oldsrc = up->bond.src;
+ if (oldsrc != 0 && oldsrc != -1)
+ rb_raise(rb_eMolbyError, "source information of global parameter cannot be modified");
+ up->bond.src = (val == Qfalse ? -1 : 0);
+ s_RegisterUndoForParameterAttrChange(self, s_SourceSym, val, oldval, oldsrc);
+ return val;
+}
+
static struct s_ParameterAttrDef {
char *name;
VALUE *symref; /* Address of s_IndexSymbol etc. */
{"atomic_number",&s_AtomicNumberSym, 0, s_ParameterRef_GetAtomicNumber, s_ParameterRef_SetAtomicNumber},
{"name", &s_NameSym, 0, s_ParameterRef_GetName, s_ParameterRef_SetName},
{"weight", &s_WeightSym, 0, s_ParameterRef_GetWeight, s_ParameterRef_SetWeight},
- {"fullname", &s_FullNameSym, 0, s_ParameterRef_GetFullName, s_ParameterRef_SetFullName},
+ {"fullname", &s_FullNameSym, 0, s_ParameterRef_GetFullName, s_ParameterRef_SetFullName},
{"comment", &s_CommentSym, 0, s_ParameterRef_GetComment, s_ParameterRef_SetComment},
- {"source", &s_SourceSym, 0, s_ParameterRef_GetSource, NULL},
+ {"source", &s_SourceSym, 0, s_ParameterRef_GetSource, s_ParameterRef_SetSource},
{NULL} /* Sentinel */
};
new2old[i] = s_Molecule_AtomIndexFromValue(mol, valp[i]);
new2old[i] = kInvalidIndex;
i = MolActionCreateAndPerform(mol, gMolActionRenumberAtoms, i, new2old);
-/* i = MoleculeRenumberAtoms(mol, new2old, n); */
if (i == 1)
rb_raise(rb_eMolbyError, "Atom index out of range");
else if (i == 2)
}
end
- def cmd_edit_local_parameter_in_mainview(ptype, names, types, value, params)
+ def cmd_edit_local_parameter_in_mainview(ptype, indices, names, types, value, partypes, params)
# The parameters are given as space separated strings
# e.g. "1.862 200.000"
case ptype
p = params.split
hash = Dialog.run("Edit local parameter") {
layout(1,
- item(:text, :title=>"Edit #{ptype} parameter for #{names} (#{types})"),
+ item(:text, :title=>"Edit #{ptype} parameter for #{indices} (#{names}, #{types})"),
item(:text, :title=>"(Current value = #{value})"),
layout(4,
[item(:text, :title=>"types"), {:align=>:center}],
[item(:text, :title=>k[1]), {:align=>:center}],
(k[2] ? [item(:text, :title=>k[2]), {:align=>:center}] : -1),
- item(:textfield, :width=>100, :value=>types, :tag=>"types"),
+ item(:textfield, :width=>100, :value=>partypes, :tag=>"types"),
item(:textfield, :width=>100, :value=>p[0], :tag=>k[0]),
item(:textfield, :width=>100, :value=>p[1], :tag=>k[1]),
(k[2] ? item(:textfield, :width=>100, :value=>p[2], :tag=>k[2]) : -1)
listctrl->OnLeftDClick(event);
if (mview->tableIndex >= kMainViewBondTableIndex && mview->tableIndex <= kMainViewImproperTableIndex && mview->mol->par != NULL) {
int row, col, i;
- char names[64], types[64], value[20], params[3][20];
+ char indices[64], names[64], types[64], value[20], partypes[64], params[3][20];
char *ptype, *parstr;
wxPoint pos = event.GetPosition();
if (!listctrl->FindItemAtPosition(pos, &row, &col) || col < 4)
return;
/* Start editing the local parameter; open a separate dialog */
+ MainView_valueForTable(mview, 0, row, indices, sizeof indices);
MainView_valueForTable(mview, 1, row, names, sizeof names);
MainView_valueForTable(mview, 2, row, types, sizeof types);
MainView_valueForTable(mview, 3, row, value, sizeof value);
+ MainView_valueForTable(mview, 4, row, partypes, sizeof partypes);
for (i = 0; i < 3; i++) {
- MainView_valueForTable(mview, 4 + i, row, params[i], sizeof(params[0]));
+ MainView_valueForTable(mview, 5 + i, row, params[i], sizeof(params[0]));
}
switch (mview->tableIndex) {
case kMainViewBondTableIndex: ptype = "bond"; break;
default: return;
}
asprintf(&parstr, "%s %s %s", params[0], params[1], params[2]);
- MolActionCreateAndPerform(mview->mol, SCRIPT_ACTION("sssss"), "cmd_edit_local_parameter_in_mainview", ptype, names, types, value, parstr);
+ MolActionCreateAndPerform(mview->mol, SCRIPT_ACTION("sssssss"), "cmd_edit_local_parameter_in_mainview", ptype, indices, names, types, value, partypes, parstr);
}
}
E4299DA60F2A191600780B44 /* ruby_types.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ruby_types.c; sourceTree = "<group>"; };
E42D8AEF1030193F00C20247 /* MDGraphite.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = MDGraphite.c; sourceTree = "<group>"; };
E42D8AF01030193F00C20247 /* MDGraphite.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MDGraphite.h; sourceTree = "<group>"; };
- E42D8AF11030193F00C20247 /* MDCore.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = MDCore.c; sourceTree = "<group>"; };
+ E42D8AF11030193F00C20247 /* MDCore.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = MDCore.c; sourceTree = "<group>"; wrapsLines = 1; };
E42D8AF21030193F00C20247 /* MDCore.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MDCore.h; sourceTree = "<group>"; };
E42D8AF31030193F00C20247 /* MDForce.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = MDForce.c; sourceTree = "<group>"; wrapsLines = 1; };
E42D8AF41030193F00C20247 /* MDForce.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MDForce.h; sourceTree = "<group>"; };
E433CE780EC7099B00675985 /* ruby_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ruby_dialog.h; path = ../MolLib/Ruby_bind/ruby_dialog.h; sourceTree = SOURCE_ROOT; };
E433CE7C0EC709BD00675985 /* IntGroup.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = IntGroup.c; path = ../MolLib/IntGroup.c; sourceTree = SOURCE_ROOT; };
E433CE7D0EC709BD00675985 /* IntGroup.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IntGroup.h; path = ../MolLib/IntGroup.h; sourceTree = SOURCE_ROOT; };
- E433CE7E0EC709BD00675985 /* MainView.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = MainView.c; path = ../MolLib/MainView.c; sourceTree = SOURCE_ROOT; };
+ E433CE7E0EC709BD00675985 /* MainView.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = MainView.c; path = ../MolLib/MainView.c; sourceTree = SOURCE_ROOT; wrapsLines = 1; };
E433CE7F0EC709BD00675985 /* MainView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MainView.h; path = ../MolLib/MainView.h; sourceTree = SOURCE_ROOT; };
E433CE800EC709BD00675985 /* Missing.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Missing.c; path = ../MolLib/Missing.c; sourceTree = SOURCE_ROOT; };
E433CE810EC709BD00675985 /* Missing.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Missing.h; path = ../MolLib/Missing.h; sourceTree = SOURCE_ROOT; };
E433CE8E0EC709BD00675985 /* Types.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Types.h; path = ../MolLib/Types.h; sourceTree = SOURCE_ROOT; };
E433CE990EC709D300675985 /* ConsoleFrame.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ConsoleFrame.cpp; path = ../wxSources/ConsoleFrame.cpp; sourceTree = SOURCE_ROOT; };
E433CE9A0EC709D300675985 /* ConsoleFrame.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ConsoleFrame.h; path = ../wxSources/ConsoleFrame.h; sourceTree = SOURCE_ROOT; };
- E433CE9B0EC709D300675985 /* MoleculeView.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = MoleculeView.cpp; path = ../wxSources/MoleculeView.cpp; sourceTree = SOURCE_ROOT; };
+ E433CE9B0EC709D300675985 /* MoleculeView.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = MoleculeView.cpp; path = ../wxSources/MoleculeView.cpp; sourceTree = SOURCE_ROOT; wrapsLines = 1; };
E433CE9C0EC709D300675985 /* MoleculeView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MoleculeView.h; path = ../wxSources/MoleculeView.h; sourceTree = SOURCE_ROOT; };
E433CE9D0EC709D300675985 /* MyApp.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = MyApp.cpp; path = ../wxSources/MyApp.cpp; sourceTree = SOURCE_ROOT; };
E433CE9E0EC709D300675985 /* MyApp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MyApp.h; path = ../wxSources/MyApp.h; sourceTree = SOURCE_ROOT; };