Home » Modeling » GMF (Graphical Modeling Framework) » mapping a semantic element with two graphical elements
mapping a semantic element with two graphical elements [message #71975] |
Tue, 31 October 2006 08:16  |
Eclipse User |
|
|
|
Hi all
in my model I have a class A that is a specialization of B and C. In the
gfmmap class B is mapped as a node and class C is mapped as a
connection. My aim is to map class A with two graphical elements
attached each other. So in the gmfmap I mapped the class A as a link
connection; when I draw it the
??CanonicalEditPolicy.refreshSemanticChildren() of the root element
determines that there is a semantic children that don't have a
corresponding view and creates a node view for class A: I suppose that
this happens due to the class hierarchy. So I have two graphical element
for a single semantic one.
This behavior could be fine for me but if I close and reopen the diagram
after create the connection the node is redraw at the 0,0 position! but
if I execute some other operation in the diagram before closing when I
reopen the node position is right. I think there are some problems with
transient and persistent children but I'm not sure...any suggestions?
A second problem is creating the attachment between connection and node:
I'm able to create a note attachment between them but when I execute an
undo the attachment remains in the diagram and the node is modified as a
rectangle. I tried to create the attachment in the same command of the
node creation using DeferredCreateConnectionViewCommand but this doesn't
work because the edit part for the node is not in the diagram yet! How
can handle this situation?
Thanks
Michele
|
|
|
Re: mapping a semantic element with two graphical elements [message #72216 is a reply to message #71975] |
Tue, 31 October 2006 10:28   |
Eclipse User |
|
|
|
Michele Puccio wrote:
Hi Michele ;
Canonical edit policies create transient views by default; which means
as soon as you close your diagram the view will be thrown away and next
time you open your diagram it will be recreated. As a result the
transient views do not really remember their locations and when you
reopen your diagram it will be up to the layout to put them in the
correct place.
When you change any property on a transient view the view will be
persisted, so it will not lose it location info from now on, this
explains the behavior you see.
If you want your canonical views to be created as persisted views by
default instead of transient, you can do that by overriding the
getViewDescriptor method in your canonical edit policy:
protected CreateViewRequest.ViewDescriptor getViewDescriptor(
IAdaptable elementAdapter,
Class viewKind,
String hint,
int index)
and return
return new CreateViewRequest.ViewDescriptor(
elementAdapter,
viewKind,
hint,
index,
true,
host().getDiagramPreferencesHint());
instead of
return new CreateViewRequest.ViewDescriptor(
elementAdapter,
viewKind,
hint,
index,
false,
host().getDiagramPreferencesHint());
But keep in mind creating persisted views will mark the resource as
modified, which the canonical edit policies try to avoid as much as they
can.
Regarding the second question, i think you might be missing a refresh,
Try to put a break point in the refresh method in your edit part to see
if it will refresh the source and target connections correctly.
> Hi all
> in my model I have a class A that is a specialization of B and C. In the
> gfmmap class B is mapped as a node and class C is mapped as a
> connection. My aim is to map class A with two graphical elements
> attached each other. So in the gmfmap I mapped the class A as a link
> connection; when I draw it the
> ??CanonicalEditPolicy.refreshSemanticChildren() of the root element
> determines that there is a semantic children that don't have a
> corresponding view and creates a node view for class A: I suppose that
> this happens due to the class hierarchy. So I have two graphical element
> for a single semantic one.
> This behavior could be fine for me but if I close and reopen the diagram
> after create the connection the node is redraw at the 0,0 position! but
> if I execute some other operation in the diagram before closing when I
> reopen the node position is right. I think there are some problems with
> transient and persistent children but I'm not sure...any suggestions?
>
> A second problem is creating the attachment between connection and node:
> I'm able to create a note attachment between them but when I execute an
> undo the attachment remains in the diagram and the node is modified as a
> rectangle. I tried to create the attachment in the same command of the
> node creation using DeferredCreateConnectionViewCommand but this doesn't
> work because the edit part for the node is not in the diagram yet! How
> can handle this situation?
> Thanks
>
> Michele
|
|
|
Re: mapping a semantic element with two graphical elements [message #72283 is a reply to message #72216] |
Tue, 31 October 2006 11:53   |
Eclipse User |
|
|
|
Hi Mohammed
thanks for your suggestions: I solved my first problem.
Regarding the second one maybe I was not clear: actually I create the
attachment after create the node. So the situation is that the
connection edit part is created by the tool creation, the node edit part
is created by the canonical policy and the attachment between this two
edit part is also created in the Canonical Policy but whit a different
command executed after the execution of the command that create the node
edit part.
When I press CTRL+z the connection disappears, but the node and the
attachment remain in the diagram. I tried to put break point in the
refresh method of both editPart (node and connection) but it is never
called pressing CTRL+z...
thank you in advance
Michele
Mohammed Mostafa ha scritto:
> Michele Puccio wrote:
> Hi Michele ;
> Canonical edit policies create transient views by default; which
> means as soon as you close your diagram the view will be thrown away and
> next time you open your diagram it will be recreated. As a result the
> transient views do not really remember their locations and when you
> reopen your diagram it will be up to the layout to put them in the
> correct place.
> When you change any property on a transient view the view will be
> persisted, so it will not lose it location info from now on, this
> explains the behavior you see.
> If you want your canonical views to be created as persisted views by
> default instead of transient, you can do that by overriding the
>
> getViewDescriptor method in your canonical edit policy:
>
> protected CreateViewRequest.ViewDescriptor getViewDescriptor(
> IAdaptable elementAdapter,
> Class viewKind,
> String hint,
> int index)
>
> and return
> return new CreateViewRequest.ViewDescriptor(
> elementAdapter,
> viewKind,
> hint,
> index,
> true,
> host().getDiagramPreferencesHint());
> instead of
>
> return new CreateViewRequest.ViewDescriptor(
> elementAdapter,
> viewKind,
> hint,
> index,
> false,
> host().getDiagramPreferencesHint());
>
> But keep in mind creating persisted views will mark the resource as
> modified, which the canonical edit policies try to avoid as much as they
> can.
>
> Regarding the second question, i think you might be missing a
> refresh, Try to put a break point in the refresh method in your edit
> part to see if it will refresh the source and target connections correctly.
>
>
>> Hi all
>> in my model I have a class A that is a specialization of B and C. In
>> the gfmmap class B is mapped as a node and class C is mapped as a
>> connection. My aim is to map class A with two graphical elements
>> attached each other. So in the gmfmap I mapped the class A as a link
>> connection; when I draw it the
>> ??CanonicalEditPolicy.refreshSemanticChildren() of the root element
>> determines that there is a semantic children that don't have a
>> corresponding view and creates a node view for class A: I suppose that
>> this happens due to the class hierarchy. So I have two graphical
>> element for a single semantic one.
>> This behavior could be fine for me but if I close and reopen the
>> diagram after create the connection the node is redraw at the 0,0
>> position! but if I execute some other operation in the diagram before
>> closing when I reopen the node position is right. I think there are
>> some problems with transient and persistent children but I'm not
>> sure...any suggestions?
>>
>> A second problem is creating the attachment between connection and
>> node: I'm able to create a note attachment between them but when I
>> execute an undo the attachment remains in the diagram and the node is
>> modified as a rectangle. I tried to create the attachment in the same
>> command of the node creation using DeferredCreateConnectionViewCommand
>> but this doesn't work because the edit part for the node is not in the
>> diagram yet! How can handle this situation?
>> Thanks
>>
>> Michele
|
|
|
Re: mapping a semantic element with two graphical elements [message #72301 is a reply to message #72283] |
Tue, 31 October 2006 12:00   |
Eclipse User |
|
|
|
if you refresh your diagram does it fix the problem, for example after
you undo and save; close and reopen the diagram, does it fix the
problem? or even if after you undo, drop another shape on the diagram,
do you still see the connection and the shape or not ?
if any of these suggestion fix the problem, then it is a refresh issue
on the diagram with respect to canonical edit policies, we have a bug in
2.0 about it.
Michele Puccio wrote:
> Hi Mohammed
> thanks for your suggestions: I solved my first problem.
> Regarding the second one maybe I was not clear: actually I create the
> attachment after create the node. So the situation is that the
> connection edit part is created by the tool creation, the node edit part
> is created by the canonical policy and the attachment between this two
> edit part is also created in the Canonical Policy but whit a different
> command executed after the execution of the command that create the node
> edit part.
> When I press CTRL+z the connection disappears, but the node and the
> attachment remain in the diagram. I tried to put break point in the
> refresh method of both editPart (node and connection) but it is never
> called pressing CTRL+z...
> thank you in advance
> Michele
>
> Mohammed Mostafa ha scritto:
>> Michele Puccio wrote:
>> Hi Michele ;
>> Canonical edit policies create transient views by default; which
>> means as soon as you close your diagram the view will be thrown away
>> and next time you open your diagram it will be recreated. As a result
>> the transient views do not really remember their locations and when
>> you reopen your diagram it will be up to the layout to put them in the
>> correct place.
>> When you change any property on a transient view the view will be
>> persisted, so it will not lose it location info from now on, this
>> explains the behavior you see.
>> If you want your canonical views to be created as persisted views
>> by default instead of transient, you can do that by overriding the
>>
>> getViewDescriptor method in your canonical edit policy:
>>
>> protected CreateViewRequest.ViewDescriptor getViewDescriptor(
>> IAdaptable elementAdapter,
>> Class viewKind,
>> String hint,
>> int index)
>>
>> and return
>> return new CreateViewRequest.ViewDescriptor(
>> elementAdapter,
>> viewKind,
>> hint,
>> index,
>> true,
>> host().getDiagramPreferencesHint());
>> instead of
>>
>> return new CreateViewRequest.ViewDescriptor(
>> elementAdapter,
>> viewKind,
>> hint,
>> index,
>> false,
>> host().getDiagramPreferencesHint());
>>
>> But keep in mind creating persisted views will mark the resource
>> as modified, which the canonical edit policies try to avoid as much as
>> they can.
>>
>> Regarding the second question, i think you might be missing a
>> refresh, Try to put a break point in the refresh method in your edit
>> part to see if it will refresh the source and target connections
>> correctly.
>>
>>
>>> Hi all
>>> in my model I have a class A that is a specialization of B and C. In
>>> the gfmmap class B is mapped as a node and class C is mapped as a
>>> connection. My aim is to map class A with two graphical elements
>>> attached each other. So in the gmfmap I mapped the class A as a link
>>> connection; when I draw it the
>>> ??CanonicalEditPolicy.refreshSemanticChildren() of the root element
>>> determines that there is a semantic children that don't have a
>>> corresponding view and creates a node view for class A: I suppose
>>> that this happens due to the class hierarchy. So I have two graphical
>>> element for a single semantic one.
>>> This behavior could be fine for me but if I close and reopen the
>>> diagram after create the connection the node is redraw at the 0,0
>>> position! but if I execute some other operation in the diagram before
>>> closing when I reopen the node position is right. I think there are
>>> some problems with transient and persistent children but I'm not
>>> sure...any suggestions?
>>>
>>> A second problem is creating the attachment between connection and
>>> node: I'm able to create a note attachment between them but when I
>>> execute an undo the attachment remains in the diagram and the node is
>>> modified as a rectangle. I tried to create the attachment in the same
>>> command of the node creation using
>>> DeferredCreateConnectionViewCommand but this doesn't work because the
>>> edit part for the node is not in the diagram yet! How can handle this
>>> situation?
>>> Thanks
>>>
>>> Michele
|
|
|
Re: mapping a semantic element with two graphical elements [message #72337 is a reply to message #72301] |
Tue, 31 October 2006 12:08  |
Eclipse User |
|
|
|
if I close the diagram after an undo I can' t reopen it due to the
following exception. Maybe it is not a refresh problem.
Any idea?
Thanks
Michele
java.lang.NullPointerException
at
org.eclipse.emf.transaction.util.TransactionUtil.getEditingD omain(TransactionUtil.java:50)
at
org.eclipse.gmf.runtime.diagram.ui.resources.editor.document .DiagramModificationListener. <init>(DiagramModificationListener.java:52)
at
org.eclipse.gmf.runtime.diagram.ui.resources.editor.ide.docu ment.FileDiagramModificationListener. <init>(FileDiagramModificationListener.java:53)
at
it.eng.rspa.uml.diagram.classDiagram.part.UMLDocumentProvide r$CustomModificationListener. <init>(UMLDocumentProvider.java:151)
at
it.eng.rspa.uml.diagram.classDiagram.part.UMLDocumentProvide r.createFileInfo(UMLDocumentProvider.java:102)
at
org.eclipse.gmf.runtime.diagram.ui.resources.editor.ide.docu ment.FileDocumentProvider.createElementInfo(FileDocumentProv ider.java:486)
at
org.eclipse.gmf.runtime.diagram.ui.resources.editor.document .AbstractDocumentProvider.connect(AbstractDocumentProvider.j ava:387)
at
org.eclipse.gmf.runtime.diagram.ui.resources.editor.parts.Di agramDocumentEditor.doSetInput(DiagramDocumentEditor.java:42 1)
at
org.eclipse.gmf.runtime.diagram.ui.resources.editor.parts.Di agramDocumentEditor.setInput(DiagramDocumentEditor.java:384)
at org.eclipse.gef.ui.parts.GraphicalEditor.init(GraphicalEdito r.java:318)
at
org.eclipse.gmf.runtime.diagram.ui.parts.DiagramEditor.init( DiagramEditor.java:644)
at
org.eclipse.gmf.runtime.diagram.ui.resources.editor.parts.Di agramDocumentEditor.init(DiagramDocumentEditor.java:116)
at org.eclipse.ui.internal.EditorManager.createSite(EditorManag er.java:839)
at
org.eclipse.ui.internal.EditorReference.createPartHelper(Edi torReference.java:583)
at
org.eclipse.ui.internal.EditorReference.createPart(EditorRef erence.java:372)
at
org.eclipse.ui.internal.WorkbenchPartReference.getPart(Workb enchPartReference.java:566)
at org.eclipse.ui.internal.PartPane.setVisible(PartPane.java:29 0)
at
org.eclipse.ui.internal.presentations.PresentablePart.setVis ible(PresentablePart.java:140)
at
org.eclipse.ui.internal.presentations.util.PresentablePartFo lder.select(PresentablePartFolder.java:268)
at
org.eclipse.ui.internal.presentations.util.LeftToRightTabOrd er.select(LeftToRightTabOrder.java:65)
at
org.eclipse.ui.internal.presentations.util.TabbedStackPresen tation.selectPart(TabbedStackPresentation.java:394)
at
org.eclipse.ui.internal.PartStack.refreshPresentationSelecti on(PartStack.java:1144)
at org.eclipse.ui.internal.PartStack.setSelection(PartStack.jav a:1097)
at org.eclipse.ui.internal.PartStack.showPart(PartStack.java:13 11)
at org.eclipse.ui.internal.PartStack.add(PartStack.java:455)
at org.eclipse.ui.internal.EditorStack.add(EditorStack.java:102 )
at org.eclipse.ui.internal.PartStack.add(PartStack.java:441)
at org.eclipse.ui.internal.EditorStack.add(EditorStack.java:111 )
at
org.eclipse.ui.internal.EditorSashContainer.addEditor(Editor SashContainer.java:60)
at
org.eclipse.ui.internal.EditorAreaHelper.addToLayout(EditorA reaHelper.java:217)
at
org.eclipse.ui.internal.EditorAreaHelper.addEditor(EditorAre aHelper.java:207)
at
org.eclipse.ui.internal.EditorManager.createEditorTab(Editor Manager.java:819)
at
org.eclipse.ui.internal.EditorManager.openEditorFromDescript or(EditorManager.java:718)
at org.eclipse.ui.internal.EditorManager.openEditor(EditorManag er.java:679)
at
org.eclipse.ui.internal.WorkbenchPage.busyOpenEditorBatched( WorkbenchPage.java:2586)
at
org.eclipse.ui.internal.WorkbenchPage.busyOpenEditor(Workben chPage.java:2521)
at org.eclipse.ui.internal.WorkbenchPage.access$10(WorkbenchPag e.java:2513)
at org.eclipse.ui.internal.WorkbenchPage$9.run(WorkbenchPage.ja va:2498)
at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator .java:67)
at
org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPa ge.java:2493)
at
org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPa ge.java:2478)
at org.eclipse.ui.ide.IDE.openEditor(IDE.java:388)
at org.eclipse.ui.ide.IDE.openEditor(IDE.java:350)
at
org.eclipse.jdt.internal.ui.javaeditor.EditorUtility.openInE ditor(EditorUtility.java:275)
at
org.eclipse.jdt.internal.ui.javaeditor.EditorUtility.openInE ditor(EditorUtility.java:139)
at
org.eclipse.jdt.internal.ui.actions.OpenActionUtil.open(Open ActionUtil.java:49)
at org.eclipse.jdt.ui.actions.OpenAction.run(OpenAction.java:19 0)
at org.eclipse.jdt.ui.actions.OpenAction.run(OpenAction.java:17 4)
at
org.eclipse.jdt.ui.actions.SelectionDispatchAction.dispatchR un(SelectionDispatchAction.java:267)
at
org.eclipse.jdt.ui.actions.SelectionDispatchAction.run(Selec tionDispatchAction.java:243)
at
org.eclipse.jdt.internal.ui.packageview.PackageExplorerActio nGroup.handleOpen(PackageExplorerActionGroup.java:306)
at
org.eclipse.jdt.internal.ui.packageview.PackageExplorerPart$ 4.open(PackageExplorerPart.java:651)
at
org.eclipse.jface.viewers.StructuredViewer$2.run(StructuredV iewer.java:817)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:37)
at org.eclipse.core.runtime.Platform.run(Platform.java:843)
at org.eclipse.ui.internal.JFaceUtil$1.run(JFaceUtil.java:44)
at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:14 9)
at
org.eclipse.jface.viewers.StructuredViewer.fireOpen(Structur edViewer.java:815)
at
org.eclipse.jface.viewers.StructuredViewer.handleOpen(Struct uredViewer.java:1069)
at
org.eclipse.jface.viewers.StructuredViewer$6.handleOpen(Stru cturedViewer.java:1168)
at org.eclipse.jface.util.OpenStrategy.fireOpenEvent(OpenStrate gy.java:249)
at org.eclipse.jface.util.OpenStrategy.access$2(OpenStrategy.ja va:243)
at org.eclipse.jface.util.OpenStrategy$1.handleEvent(OpenStrate gy.java:283)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java :66)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:928)
at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.ja va:3348)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java :2968)
at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.jav a:1914)
at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:1878)
at
org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Work bench.java:419)
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.j ava:149)
at org.eclipse.ui.internal.ide.IDEApplication.run(IDEApplicatio n.java:95)
at
org.eclipse.core.internal.runtime.PlatformActivator$1.run(Pl atformActivator.java:78)
at
org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher .runApplication(EclipseAppLauncher.java:92)
at
org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher .start(EclipseAppLauncher.java:68)
at
org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseS tarter.java:400)
at
org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseS tarter.java:177)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAcce ssorImpl.java:39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMe thodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.eclipse.core.launcher.Main.invokeFramework(Main.java:336 )
at org.eclipse.core.launcher.Main.basicRun(Main.java:280)
at org.eclipse.core.launcher.Main.run(Main.java:977)
at org.eclipse.core.launcher.Main.main(Main.java:952)
Mohammed Mostafa ha scritto:
> if you refresh your diagram does it fix the problem, for example after
> you undo and save; close and reopen the diagram, does it fix the
> problem? or even if after you undo, drop another shape on the diagram,
> do you still see the connection and the shape or not ?
>
> if any of these suggestion fix the problem, then it is a refresh issue
> on the diagram with respect to canonical edit policies, we have a bug in
> 2.0 about it.
>
> Michele Puccio wrote:
>
>> Hi Mohammed
>> thanks for your suggestions: I solved my first problem.
>> Regarding the second one maybe I was not clear: actually I create the
>> attachment after create the node. So the situation is that the
>> connection edit part is created by the tool creation, the node edit
>> part is created by the canonical policy and the attachment between
>> this two edit part is also created in the Canonical Policy but whit a
>> different command executed after the execution of the command that
>> create the node edit part.
>> When I press CTRL+z the connection disappears, but the node and the
>> attachment remain in the diagram. I tried to put break point in the
>> refresh method of both editPart (node and connection) but it is never
>> called pressing CTRL+z...
>> thank you in advance
>> Michele
>>
>> Mohammed Mostafa ha scritto:
>>> Michele Puccio wrote:
>>> Hi Michele ;
>>> Canonical edit policies create transient views by default; which
>>> means as soon as you close your diagram the view will be thrown away
>>> and next time you open your diagram it will be recreated. As a result
>>> the transient views do not really remember their locations and when
>>> you reopen your diagram it will be up to the layout to put them in
>>> the correct place.
>>> When you change any property on a transient view the view will be
>>> persisted, so it will not lose it location info from now on, this
>>> explains the behavior you see.
>>> If you want your canonical views to be created as persisted views
>>> by default instead of transient, you can do that by overriding the
>>>
>>> getViewDescriptor method in your canonical edit policy:
>>>
>>> protected CreateViewRequest.ViewDescriptor getViewDescriptor(
>>> IAdaptable elementAdapter,
>>> Class viewKind,
>>> String hint,
>>> int index)
>>>
>>> and return
>>> return new CreateViewRequest.ViewDescriptor(
>>> elementAdapter,
>>> viewKind,
>>> hint,
>>> index,
>>> true,
>>> host().getDiagramPreferencesHint());
>>> instead of
>>>
>>> return new CreateViewRequest.ViewDescriptor(
>>> elementAdapter,
>>> viewKind,
>>> hint,
>>> index,
>>> false,
>>> host().getDiagramPreferencesHint());
>>>
>>> But keep in mind creating persisted views will mark the resource
>>> as modified, which the canonical edit policies try to avoid as much
>>> as they can.
>>>
>>> Regarding the second question, i think you might be missing a
>>> refresh, Try to put a break point in the refresh method in your edit
>>> part to see if it will refresh the source and target connections
>>> correctly.
>>>
>>>
>>>> Hi all
>>>> in my model I have a class A that is a specialization of B and C. In
>>>> the gfmmap class B is mapped as a node and class C is mapped as a
>>>> connection. My aim is to map class A with two graphical elements
>>>> attached each other. So in the gmfmap I mapped the class A as a link
>>>> connection; when I draw it the
>>>> ??CanonicalEditPolicy.refreshSemanticChildren() of the root element
>>>> determines that there is a semantic children that don't have a
>>>> corresponding view and creates a node view for class A: I suppose
>>>> that this happens due to the class hierarchy. So I have two
>>>> graphical element for a single semantic one.
>>>> This behavior could be fine for me but if I close and reopen the
>>>> diagram after create the connection the node is redraw at the 0,0
>>>> position! but if I execute some other operation in the diagram
>>>> before closing when I reopen the node position is right. I think
>>>> there are some problems with transient and persistent children but
>>>> I'm not sure...any suggestions?
>>>>
>>>> A second problem is creating the attachment between connection and
>>>> node: I'm able to create a note attachment between them but when I
>>>> execute an undo the attachment remains in the diagram and the node
>>>> is modified as a rectangle. I tried to create the attachment in the
>>>> same command of the node creation using
>>>> DeferredCreateConnectionViewCommand but this doesn't work because
>>>> the edit part for the node is not in the diagram yet! How can handle
>>>> this situation?
>>>> Thanks
>>>>
>>>> Michele
|
|
|
Goto Forum:
Current Time: Tue Jul 22 03:28:56 EDT 2025
Powered by FUDForum. Page generated in 0.30737 seconds
|