Skip to main content


Eclipse Community Forums
Forum Search:

Search      Help    Register    Login    Home
Home » Archived » Visual Editor (VE) » Target VM
Target VM [message #89940] Fri, 06 May 2005 02:34 Go to next message
No real name is currently offline No real nameFriend
Messages: 19
Registered: July 2009
Junior Member
Hi,

Sorry for not asking properly.

I have a custom awt component, so far i've been succesful importing the
bean using the 'Choose Bean' on the palette. & the code is generating fine.

What i want to know is how for the Target VM (the design display) to
call a spesific method that arent generated at the source when i drop my
bean into it.

I also wondering if ClassLoader.getSystemClassLoader().getResource(".")
will return me the correct runtime path at design time, or is there any
other APIs that need to be called to get that.
Re: Target VM [message #89955 is a reply to message #89940] Fri, 06 May 2005 09:58 Go to previous messageGo to next message
Joe Winchester is currently offline Joe WinchesterFriend
Messages: 496
Registered: July 2009
Senior Member
Hi Memet,

> I have a custom awt component, so far i've been succesful importing the
> bean using the 'Choose Bean' on the palette. & the code is generating fine.
>
> What i want to know is how for the Target VM (the design display) to
> call a spesific method that arent generated at the source when i drop my
> bean into it.

You can't really do this. When the VE is opened it never actually runs
the class you're creating. Imagine the scenario where you have
something like

B extends A{
private Button b1;
private Text t1;
}
....
b1 = new Button();
b1.setColor(Color.red);
add(b1);
tx = new Text();
tx.setText("Cow");
add(t1);

etc...

When you open A what occurs is that B is instantiated, the source is
parsed and based on the coding pattern it is recognized that there is a
button and a text. These are then instantiated using the constructors
in the code they are written and methods run using reflection to build
up a prototype instance of A. Therefore what you see isn't A, it is a
guess of what A would look like were it to be compiled and run.

The reason A isn't just run is for several reasons. First - it might
not be compiled and might be riddled with compile errors, and the
purpose of the editor is to allow you to work with a file in development
mode and you might possibly want to fix up the errors so the threshold
for opening a "broken" file and also for showing target VM errors is
something the VE does. The second is that if the target VM did load A
and you then did something like modify the color or drop a new control
or delete one it'd be hard to swop this out - you'd almost have to
recompile on every key stroke and then swop out the old A and it'd just
not work.

For this reason A doesn't exist, and therefore methods created on A
can't be called and run. That doesn't mean that you can't run custom
code on the target VM however - it's just that you will have to find
another way to execute it but only with A's superclass and its modeled
controls available. If you pasted into a note a simple example of your
class and what kind of method you want to run it might help to figure
out a way to do what you want.

> I also wondering if ClassLoader.getSystemClassLoader().getResource(".")
> will return me the correct runtime path at design time, or is there any
> other APIs that need to be called to get that.

The target VM is just started with javaw.exe and the -classpath set to
include the items on the build path of the java project. It doesn't use
any special class loader (which Eclipse does becuase of how it has to
manage project class loading) so anything that works with a regular JVM
will work on the target VM.

What is the path you are looking for and why ? If you're trying to load
a resource file then the general way is to find a marker class and do a
getResourceAsStream(..) and load it relative to the marker in your
-classpath.

Best regards,

Joe Winchester
Re: Target VM [message #90149 is a reply to message #89955] Mon, 09 May 2005 04:56 Go to previous messageGo to next message
No real name is currently offline No real nameFriend
Messages: 19
Registered: July 2009
Junior Member
Hi Joe,

Thanks for the reply.

Ill explain the custom component

1. The custom component has an Image in it, in order to display the
image, some initialization code that must be executed
2. The custom component will be added inside a bigger application which
has the necessary init code to display the Image at runtime


Currently I've put my component into the palette. I've writted the
PropertyEditor for setting & getting the Image which runs the necessary
init code for VE to display the image correctly (design time), but if &
only if i change the Imagepath property in the property sheet. If i
close the VE & reopen back.. the image isnt displayed.

BTW. the ClassLoader.getSystemClassLoader().getResource(".") runs
correctly, i need that for getting the project folder.

The PropertyEditor below for editing the ImagePath property of my
Button. See doRunInit() method.. this two lines of code makes my Button
displayes the image which resides inside "Project Folder"/images/

Can u please tell me about BeanProxyAdapter, will writing it solves this
problem? Is there any reference/tutorial about it?

--

public class ButtonImagePathPropertyEditor extends PropertyEditorSupport {


/**
*
*/
public ButtonImagePathPropertyEditor() {
super();

doRunInit();

}


public void doRunInit() {
// These are the necessary code to make the Image displayed at VE
ImageLocator.setClassPath(ClassLoader.getSystemClassLoader() .getResource( ".").toString());
ImageLocator.setImagePath("images/");
}

public Object getValue() {
doRunInit();
return super.getValue();
}
public String getJavaInitializationString() {
return "\"" + super.getValue() + "\"";
}
}




Thank you,

Memet


Joe Winchester wrote:
> Hi Memet,
>
>> I have a custom awt component, so far i've been succesful importing
>> the bean using the 'Choose Bean' on the palette. & the code is
>> generating fine.
>>
>> What i want to know is how for the Target VM (the design display) to
>> call a spesific method that arent generated at the source when i drop
>> my bean into it.
>
>
> You can't really do this. When the VE is opened it never actually runs
> the class you're creating. Imagine the scenario where you have
> something like
>
> B extends A{
> private Button b1;
> private Text t1;
> }
> ...
> b1 = new Button();
> b1.setColor(Color.red);
> add(b1);
> tx = new Text();
> tx.setText("Cow");
> add(t1);
>
> etc...
>
> When you open A what occurs is that B is instantiated, the source is
> parsed and based on the coding pattern it is recognized that there is a
> button and a text. These are then instantiated using the constructors
> in the code they are written and methods run using reflection to build
> up a prototype instance of A. Therefore what you see isn't A, it is a
> guess of what A would look like were it to be compiled and run.
>
> The reason A isn't just run is for several reasons. First - it might
> not be compiled and might be riddled with compile errors, and the
> purpose of the editor is to allow you to work with a file in development
> mode and you might possibly want to fix up the errors so the threshold
> for opening a "broken" file and also for showing target VM errors is
> something the VE does. The second is that if the target VM did load A
> and you then did something like modify the color or drop a new control
> or delete one it'd be hard to swop this out - you'd almost have to
> recompile on every key stroke and then swop out the old A and it'd just
> not work.
>
> For this reason A doesn't exist, and therefore methods created on A
> can't be called and run. That doesn't mean that you can't run custom
> code on the target VM however - it's just that you will have to find
> another way to execute it but only with A's superclass and its modeled
> controls available. If you pasted into a note a simple example of your
> class and what kind of method you want to run it might help to figure
> out a way to do what you want.
>
>> I also wondering if
>> ClassLoader.getSystemClassLoader().getResource(".") will return me the
>> correct runtime path at design time, or is there any other APIs that
>> need to be called to get that.
>
>
> The target VM is just started with javaw.exe and the -classpath set to
> include the items on the build path of the java project. It doesn't use
> any special class loader (which Eclipse does becuase of how it has to
> manage project class loading) so anything that works with a regular JVM
> will work on the target VM.
>
> What is the path you are looking for and why ? If you're trying to load
> a resource file then the general way is to find a marker class and do a
> getResourceAsStream(..) and load it relative to the marker in your
> -classpath.
>
> Best regards,
>
> Joe Winchester
>
>
>
Re: Target VM [message #90164 is a reply to message #90149] Mon, 09 May 2005 08:52 Go to previous messageGo to next message
Joe Winchester is currently offline Joe WinchesterFriend
Messages: 496
Registered: July 2009
Senior Member
Hi Memet,

> if &
> only if i change the Imagepath property in the property sheet. If i
> close the VE & reopen back.. the image isnt displayed.

The property sheet instantiates the java.beans.PropertyEditor on the
targetVM and asks it for the object via the getObject() method. It also
asks for the getJavaInitializationString() which is put into the
argument of the property's set method.

The problem you are getting is almost definitely because the object
itself is being returned OK but that the initString does not represent
the archival code required to actually instantiated the bean. When you
run your class using javaw.exe (i.e. through the Run As>Java Bean or Run
As>Java Application (if you have a main{String[])) does it work ?

> Can u please tell me about BeanProxyAdapter, will writing it solves this
> problem? Is there any reference/tutorial about it?

I don't think this will help you. The BeanProxyAdapter is a mediator
between the object inside the Visual Editor's model (which is an EMF
object) and the BeanProxyAdapter is responsible for instantiating an
IBeanProxy object. The IBeanProxy is a proxy to the real JavaBean on
the target VM, and special subclasses of BeanProxyAdapter handle things
like specific rules for the target VM JavaBean creation and disposal.
However the base one is OK for all but a few cases and what occurs it at
the initializationString is read from the source, parsed into a
parseTreeAllocation and given to the target VM. The target VM then uses
reflection and runs the code required to crank up the bean.

Instead of the code for the property editor, could you please paste in
the code of the class itself that fails. I'm interested in the full
source code of a "Hello World" example that fails to show the Image when
it is loaded.

Best regards,

Joe Winchester
Re: Target VM [message #90298 is a reply to message #90164] Tue, 10 May 2005 02:59 Go to previous messageGo to next message
No real name is currently offline No real nameFriend
Messages: 19
Registered: July 2009
Junior Member
Hello Joe,

So, theres nothing that can be done to force the target VM to run those
2 lines of code... :(

How about if i run those 2 lines of code at the initialization of VE
(when VE starts loading). Is there any way that I can achieve that? Can
u show me how?

Thanks a lot,

Memet
Re: Target VM [message #90355 is a reply to message #90298] Tue, 10 May 2005 09:28 Go to previous messageGo to next message
Joe Winchester is currently offline Joe WinchesterFriend
Messages: 496
Registered: July 2009
Senior Member
Hi Memet,

> So, theres nothing that can be done to force the target VM to run those
> 2 lines of code... :(

Sorry - I think you can do what you want. I am not 100% what magic your
two lines do, but basically you have some magic your property editor
does that is needed at design time.

For this you do need a custom BeanProxyAdapter and it is exactly what
they were designed for. The first thing you should do is take a look at
the VE tutorial that shows how to build a custom widget and you will do
something like:

1 - Create a plugin project that has a .override folder and use the
appropiate extension points to make sure that it recognizes who you want
users to use your project.
2 - Create something like MyFunkyProxyAdapter as follows:

public class MyFunkyProxyAdapter extends BeanProxyAdapter{

protected void setupBeanProxy(IBeanProxy aBeanProxy){
// Assume we want to call a method called "doInit()"
IMethodProxy method =
aBeanProxy.getTypeProxy().getMethodProxy("doInit");
method.invoke(aBeanProxy);
super.setupBeanProxy(aBeanProxy);
}
}

(This is a simplification - you will need exception handling and stuff
but if you look at other BeanProxyAdapter subclasses you will get a
better feel for what to do)

Rather than the doInit() method be on the bean itself it might be on a
helper class, which it sort of is for your ButtonPathPropertyEditor. In
this case your code might be

public class MyFunkyProxyAdapter extends BeanProxyAdapter{

protected void setupBeanProxy(IBeanProxy aBeanProxy){
// Fluff up a ButtonPathPropertyEditor
IBeanProxy propEditorPxy =
aBeanProxy.getRegistry().getBeanTypeProxyFactory().getBeanTy peProxy( "com.mypackage.ButtonPathPropertyEditor").newInstance();

propEditorPxy.getMethodProxy("setValue","java.lang.Object ").invoke(propEditorPxy,aBeanProxy);
propEditorPxy.getMethodProxy("doInit").invoke(aBeanProxy);
super.setupBeanProxy(aBeanProxy);
}
}

Again this is just a pointer to the kind of code but hopefully it is
enough to get you pointed in the right direction. Look at something
like ViewPartProxyAdapter and other subclasses of BeanProxyAdapter for
more inspiration.

Best regards,

Joe
Re: Target VM [message #90471 is a reply to message #90355] Tue, 10 May 2005 14:23 Go to previous messageGo to next message
Eclipse UserFriend
Originally posted by: richkulp.us.NO_SPAM.ibm.com

Do this in your ImageLocator class and you don't need a special proxy
adapter or to put special code in your property editor.

public class ImageLocator {

static {
if (Beans.isDesignTime()) {
ImageLocator.setClassPath(ClassLoader.getSystemClassLoader() .getResource( ".").toString());
ImageLocator.setImagePath("images/");
}
}

--
Thanks,
Rich Kulp
Re: Target VM [message #90809 is a reply to message #90471] Thu, 12 May 2005 09:28 Go to previous message
No real name is currently offline No real nameFriend
Messages: 19
Registered: July 2009
Junior Member
Hi all,

Thanks to Mr Joe & Mr Rich,

I wouldn't have done the magic using without your guidance.


Thanks a lot,

Memet
Re: Target VM [message #607353 is a reply to message #89940] Fri, 06 May 2005 09:58 Go to previous message
Joe Winchester is currently offline Joe WinchesterFriend
Messages: 496
Registered: July 2009
Senior Member
Hi Memet,

> I have a custom awt component, so far i've been succesful importing the
> bean using the 'Choose Bean' on the palette. & the code is generating fine.
>
> What i want to know is how for the Target VM (the design display) to
> call a spesific method that arent generated at the source when i drop my
> bean into it.

You can't really do this. When the VE is opened it never actually runs
the class you're creating. Imagine the scenario where you have
something like

B extends A{
private Button b1;
private Text t1;
}
....
b1 = new Button();
b1.setColor(Color.red);
add(b1);
tx = new Text();
tx.setText("Cow");
add(t1);

etc...

When you open A what occurs is that B is instantiated, the source is
parsed and based on the coding pattern it is recognized that there is a
button and a text. These are then instantiated using the constructors
in the code they are written and methods run using reflection to build
up a prototype instance of A. Therefore what you see isn't A, it is a
guess of what A would look like were it to be compiled and run.

The reason A isn't just run is for several reasons. First - it might
not be compiled and might be riddled with compile errors, and the
purpose of the editor is to allow you to work with a file in development
mode and you might possibly want to fix up the errors so the threshold
for opening a "broken" file and also for showing target VM errors is
something the VE does. The second is that if the target VM did load A
and you then did something like modify the color or drop a new control
or delete one it'd be hard to swop this out - you'd almost have to
recompile on every key stroke and then swop out the old A and it'd just
not work.

For this reason A doesn't exist, and therefore methods created on A
can't be called and run. That doesn't mean that you can't run custom
code on the target VM however - it's just that you will have to find
another way to execute it but only with A's superclass and its modeled
controls available. If you pasted into a note a simple example of your
class and what kind of method you want to run it might help to figure
out a way to do what you want.

> I also wondering if ClassLoader.getSystemClassLoader().getResource(".")
> will return me the correct runtime path at design time, or is there any
> other APIs that need to be called to get that.

The target VM is just started with javaw.exe and the -classpath set to
include the items on the build path of the java project. It doesn't use
any special class loader (which Eclipse does becuase of how it has to
manage project class loading) so anything that works with a regular JVM
will work on the target VM.

What is the path you are looking for and why ? If you're trying to load
a resource file then the general way is to find a marker class and do a
getResourceAsStream(..) and load it relative to the marker in your
-classpath.

Best regards,

Joe Winchester
Re: Target VM [message #607366 is a reply to message #89955] Mon, 09 May 2005 04:56 Go to previous message
No real name is currently offline No real nameFriend
Messages: 19
Registered: July 2009
Junior Member
Hi Joe,

Thanks for the reply.

Ill explain the custom component

1. The custom component has an Image in it, in order to display the
image, some initialization code that must be executed
2. The custom component will be added inside a bigger application which
has the necessary init code to display the Image at runtime


Currently I've put my component into the palette. I've writted the
PropertyEditor for setting & getting the Image which runs the necessary
init code for VE to display the image correctly (design time), but if &
only if i change the Imagepath property in the property sheet. If i
close the VE & reopen back.. the image isnt displayed.

BTW. the ClassLoader.getSystemClassLoader().getResource(".") runs
correctly, i need that for getting the project folder.

The PropertyEditor below for editing the ImagePath property of my
Button. See doRunInit() method.. this two lines of code makes my Button
displayes the image which resides inside "Project Folder"/images/

Can u please tell me about BeanProxyAdapter, will writing it solves this
problem? Is there any reference/tutorial about it?

--

public class ButtonImagePathPropertyEditor extends PropertyEditorSupport {


/**
*
*/
public ButtonImagePathPropertyEditor() {
super();

doRunInit();

}


public void doRunInit() {
// These are the necessary code to make the Image displayed at VE
ImageLocator.setClassPath(ClassLoader.getSystemClassLoader() .getResource( ".").toString());
ImageLocator.setImagePath("images/");
}

public Object getValue() {
doRunInit();
return super.getValue();
}
public String getJavaInitializationString() {
return "\"" + super.getValue() + "\"";
}
}




Thank you,

Memet


Joe Winchester wrote:
> Hi Memet,
>
>> I have a custom awt component, so far i've been succesful importing
>> the bean using the 'Choose Bean' on the palette. & the code is
>> generating fine.
>>
>> What i want to know is how for the Target VM (the design display) to
>> call a spesific method that arent generated at the source when i drop
>> my bean into it.
>
>
> You can't really do this. When the VE is opened it never actually runs
> the class you're creating. Imagine the scenario where you have
> something like
>
> B extends A{
> private Button b1;
> private Text t1;
> }
> ...
> b1 = new Button();
> b1.setColor(Color.red);
> add(b1);
> tx = new Text();
> tx.setText("Cow");
> add(t1);
>
> etc...
>
> When you open A what occurs is that B is instantiated, the source is
> parsed and based on the coding pattern it is recognized that there is a
> button and a text. These are then instantiated using the constructors
> in the code they are written and methods run using reflection to build
> up a prototype instance of A. Therefore what you see isn't A, it is a
> guess of what A would look like were it to be compiled and run.
>
> The reason A isn't just run is for several reasons. First - it might
> not be compiled and might be riddled with compile errors, and the
> purpose of the editor is to allow you to work with a file in development
> mode and you might possibly want to fix up the errors so the threshold
> for opening a "broken" file and also for showing target VM errors is
> something the VE does. The second is that if the target VM did load A
> and you then did something like modify the color or drop a new control
> or delete one it'd be hard to swop this out - you'd almost have to
> recompile on every key stroke and then swop out the old A and it'd just
> not work.
>
> For this reason A doesn't exist, and therefore methods created on A
> can't be called and run. That doesn't mean that you can't run custom
> code on the target VM however - it's just that you will have to find
> another way to execute it but only with A's superclass and its modeled
> controls available. If you pasted into a note a simple example of your
> class and what kind of method you want to run it might help to figure
> out a way to do what you want.
>
>> I also wondering if
>> ClassLoader.getSystemClassLoader().getResource(".") will return me the
>> correct runtime path at design time, or is there any other APIs that
>> need to be called to get that.
>
>
> The target VM is just started with javaw.exe and the -classpath set to
> include the items on the build path of the java project. It doesn't use
> any special class loader (which Eclipse does becuase of how it has to
> manage project class loading) so anything that works with a regular JVM
> will work on the target VM.
>
> What is the path you are looking for and why ? If you're trying to load
> a resource file then the general way is to find a marker class and do a
> getResourceAsStream(..) and load it relative to the marker in your
> -classpath.
>
> Best regards,
>
> Joe Winchester
>
>
>
Re: Target VM [message #607367 is a reply to message #90149] Mon, 09 May 2005 08:52 Go to previous message
Joe Winchester is currently offline Joe WinchesterFriend
Messages: 496
Registered: July 2009
Senior Member
Hi Memet,

> if &
> only if i change the Imagepath property in the property sheet. If i
> close the VE & reopen back.. the image isnt displayed.

The property sheet instantiates the java.beans.PropertyEditor on the
targetVM and asks it for the object via the getObject() method. It also
asks for the getJavaInitializationString() which is put into the
argument of the property's set method.

The problem you are getting is almost definitely because the object
itself is being returned OK but that the initString does not represent
the archival code required to actually instantiated the bean. When you
run your class using javaw.exe (i.e. through the Run As>Java Bean or Run
As>Java Application (if you have a main{String[])) does it work ?

> Can u please tell me about BeanProxyAdapter, will writing it solves this
> problem? Is there any reference/tutorial about it?

I don't think this will help you. The BeanProxyAdapter is a mediator
between the object inside the Visual Editor's model (which is an EMF
object) and the BeanProxyAdapter is responsible for instantiating an
IBeanProxy object. The IBeanProxy is a proxy to the real JavaBean on
the target VM, and special subclasses of BeanProxyAdapter handle things
like specific rules for the target VM JavaBean creation and disposal.
However the base one is OK for all but a few cases and what occurs it at
the initializationString is read from the source, parsed into a
parseTreeAllocation and given to the target VM. The target VM then uses
reflection and runs the code required to crank up the bean.

Instead of the code for the property editor, could you please paste in
the code of the class itself that fails. I'm interested in the full
source code of a "Hello World" example that fails to show the Image when
it is loaded.

Best regards,

Joe Winchester
Re: Target VM [message #607376 is a reply to message #90164] Tue, 10 May 2005 02:59 Go to previous message
No real name is currently offline No real nameFriend
Messages: 19
Registered: July 2009
Junior Member
Hello Joe,

So, theres nothing that can be done to force the target VM to run those
2 lines of code... :(

How about if i run those 2 lines of code at the initialization of VE
(when VE starts loading). Is there any way that I can achieve that? Can
u show me how?

Thanks a lot,

Memet
Re: Target VM [message #607380 is a reply to message #90298] Tue, 10 May 2005 09:28 Go to previous message
Joe Winchester is currently offline Joe WinchesterFriend
Messages: 496
Registered: July 2009
Senior Member
Hi Memet,

> So, theres nothing that can be done to force the target VM to run those
> 2 lines of code... :(

Sorry - I think you can do what you want. I am not 100% what magic your
two lines do, but basically you have some magic your property editor
does that is needed at design time.

For this you do need a custom BeanProxyAdapter and it is exactly what
they were designed for. The first thing you should do is take a look at
the VE tutorial that shows how to build a custom widget and you will do
something like:

1 - Create a plugin project that has a .override folder and use the
appropiate extension points to make sure that it recognizes who you want
users to use your project.
2 - Create something like MyFunkyProxyAdapter as follows:

public class MyFunkyProxyAdapter extends BeanProxyAdapter{

protected void setupBeanProxy(IBeanProxy aBeanProxy){
// Assume we want to call a method called "doInit()"
IMethodProxy method =
aBeanProxy.getTypeProxy().getMethodProxy("doInit");
method.invoke(aBeanProxy);
super.setupBeanProxy(aBeanProxy);
}
}

(This is a simplification - you will need exception handling and stuff
but if you look at other BeanProxyAdapter subclasses you will get a
better feel for what to do)

Rather than the doInit() method be on the bean itself it might be on a
helper class, which it sort of is for your ButtonPathPropertyEditor. In
this case your code might be

public class MyFunkyProxyAdapter extends BeanProxyAdapter{

protected void setupBeanProxy(IBeanProxy aBeanProxy){
// Fluff up a ButtonPathPropertyEditor
IBeanProxy propEditorPxy =
aBeanProxy.getRegistry().getBeanTypeProxyFactory().getBeanTy peProxy( "com.mypackage.ButtonPathPropertyEditor").newInstance();

propEditorPxy.getMethodProxy("setValue","java.lang.Object ").invoke(propEditorPxy,aBeanProxy);
propEditorPxy.getMethodProxy("doInit").invoke(aBeanProxy);
super.setupBeanProxy(aBeanProxy);
}
}

Again this is just a pointer to the kind of code but hopefully it is
enough to get you pointed in the right direction. Look at something
like ViewPartProxyAdapter and other subclasses of BeanProxyAdapter for
more inspiration.

Best regards,

Joe
Re: Target VM [message #607388 is a reply to message #90355] Tue, 10 May 2005 14:23 Go to previous message
Eclipse UserFriend
Originally posted by: richkulp.us.NO_SPAM.ibm.com

Do this in your ImageLocator class and you don't need a special proxy
adapter or to put special code in your property editor.

public class ImageLocator {

static {
if (Beans.isDesignTime()) {
ImageLocator.setClassPath(ClassLoader.getSystemClassLoader() .getResource( ".").toString());
ImageLocator.setImagePath("images/");
}
}

--
Thanks,
Rich Kulp
Re: Target VM [message #607743 is a reply to message #90471] Thu, 12 May 2005 09:28 Go to previous message
No real name is currently offline No real nameFriend
Messages: 19
Registered: July 2009
Junior Member
Hi all,

Thanks to Mr Joe & Mr Rich,

I wouldn't have done the magic using without your guidance.


Thanks a lot,

Memet
Previous Topic:One question about SWT Applicaiton run in Linux FC2.
Next Topic:Undesired customizer buttons
Goto Forum:
  


Current Time: Fri Apr 26 17:43:15 GMT 2024

Powered by FUDForum. Page generated in 0.03792 seconds
.:: Contact :: Home ::.

Powered by: FUDforum 3.0.2.
Copyright ©2001-2010 FUDforum Bulletin Board Software

Back to the top