New GUI2Exe Test Version

Hi Robin & All,

Andrea Gavana wrote:

I used bsddb because it allows me to save
and load a Python class very easily, and it only requires a sync() and
close() method to work.

It's really sad that this is happening, both since PyBSDDB was once my
foster-child, but also because it is so dang powerful considering its
relative simple API. The current maintainer of the package is using it with
a distributed data storage system (IOW, spread across multiple servers that
are not sharing disks) that totals over 200 terabytes of storage and has
about 2**35 objects stored within it. So although Python is taking several
steps forward with 3.0, removing this package from the core distribution
seems like one step back to me.

I perfectly agree. I can't really get the reasoning of the developers
on python-dev, but then, I am just a little programmer with no voice
in the great Python community. In any case, should I do the switch now
or keep using bsddb anyway, even if in the future it will be a
separate download and it will not live in the standard library? What
do wxPython-users think? I am not going to use sqlite, not in a
thousand years. It is a db-disgrace, and it's a pity SQLAlchemy is not
in the standard lib. I'll probably follow Chris' suggestion a use a
simple cPickle to save data to the new-format database.

Andrea.

"Imagination Is The Only Weapon In The War Against Reality."
http://xoomer.alice.it/infinity77/

···

On Mon, Sep 15, 2008 at 11:28 PM, Robin Dunn wrote:

Hi Mike,

Mike, did you have any chance to test the new GUI2Exe test version :smiley: ?

Yes, I downloaded the new GUI2Exe about an hour before I had to leave work.
I installed it in a virtual machine and was trying to get it to work with
one of my most complicated programs. I think it was working, but I import
too many external packages, so I'll need to download the rest of them before
I can really say one way or the other.

Oh, I did notice that it didn't warn me that it couldn't find reportlab even
though I didn't have it installed. It went ahead and compiled with no
complaints until I actually tried to run it. However, when I didn't have
dateutil installed, it did complain. Not sure what the cause of that is, but
thought you might like to know. I can't recall if the original version had
the same issue or not though.

Uhm, not sure about ReportLab. If you are using py2exe, you should see
it in the list of "missing modules" generated by py2exe: you can see
this list by choosing "Options" ==> "Missing modules", which is only
available for py2exe, as the other exe-builders do not have a clear
way to access this information.

Thank you for the effort in testing the new GUI2Exe!

Andrea.

"Imagination Is The Only Weapon In The War Against Reality."
http://xoomer.alice.it/infinity77/

···

On Tue, Sep 16, 2008 at 2:52 AM, Mike Driscoll wrote:

Hi Andrea,

[…]

In any case, should I do the switch now

or keep using bsddb anyway, even if in the future it will be a

separate download and it will not live in the standard library?

I think you should continue using it. Your app depends on wxPython already, correct? This is a seperate download. You also depend on py2exe or a comparable tool, this is also a seperate download.

So how big an issue is another seperate download?
When you wrap it up in an executable, nobody will notice the difference anyways.

Regards,

–Tim

···

On Tue, Sep 16, 2008 at 12:41 PM, Andrea Gavana andrea.gavana@gmail.com wrote:

Andrea,

I have a little test application which uses sqlalchemy, I am using it to test GUI2Exe.

I tried to use the options custom code to get it to include the sqlalchemy egg. I am not sure if it works as one has to use one of the bundle options and anything else then 3 crashes if I try to run the generated exe.

If I use bundle 3 I can run it but I get an exception and sqlite is not found, added sqlite3 to packages but no change.

Then I thought lets try bbfreeze which handles eggs. I left the custom code in there (by mistake) and it went and included over 300mb, i.e. all the eggs and other stuff I have in lib/site-packages. I found this when I killed it as it looked like it was in a loop.

So, maybe the custom code should be by compiler?

Any idea why I have the sqlite issue even after defining it on the include packages list?

Is there any why not to define bundles, to easier see what is actually included in the dist folder?

Werner

I am not going to use sqlite, not in a
thousand years. It is a db-disgrace, and it's a pity SQLAlchemy is not
in the standard lib.

I'll only use sqlite in the future !! :wink:
I just use databases occasionally,
and I think BSDDB and SQLite are 2 different things.
AFAIK SQLlite was developed to fit in the tiniest device, i.e. PDA,
never heard of BSDDB, but from what I just saw it's meant for huge databases,
so totally the opposite.
I program in several lauguages and for several devices (pda / PC / server),
having one database for all,
makes moving the databases around easy and
leaves some free space for other things in my head.

cheers,
Stef

Het UMC St Radboud staat geregistreerd bij de Kamer van Koophandel in het handelsregister onder nummer 41055629.
The Radboud University Nijmegen Medical Centre is listed in the Commercial Register of the Chamber of Commerce under file number 41055629.

Hi Werner,

Andrea,

I have a little test application which uses sqlalchemy, I am using it to
test GUI2Exe.

I tried to use the options custom code to get it to include the sqlalchemy
egg. I am not sure if it works as one has to use one of the bundle options
and anything else then 3 crashes if I try to run the generated exe.

Can you show the exception your are getting? Is it a problem of py2exe
or GUI2Exe?

If I use bundle 3 I can run it but I get an exception and sqlite is not
found, added sqlite3 to packages but no change.

Uhm, this is curious... by the way, did you add it like "sqlite3" or
like "sqlite" in GUI2Exe? It should be sqlite3 if I am not mistaken.

Then I thought lets try bbfreeze which handles eggs. I left the custom code
in there (by mistake) and it went and included over 300mb, i.e. all the eggs
and other stuff I have in lib/site-packages. I found this when I killed it
as it looked like it was in a loop.

So, maybe the custom code should be by compiler?

Yes, you are perfectly right... the custom code should be by compiler
and not for the whole application. I will do the modification, thank
you for reporting this, I just overlooked the possibility.

Any idea why I have the sqlite issue even after defining it on the include
packages list?

Not at the moment, but if you could post the Setup.py file generated
by GUI2Exe I may probably see what is going on... you can do that by
choosing "File" ==> "Export Setup".

Is there any why not to define bundles, to easier see what is actually
included in the dist folder?

Uhm, sorry, I don't understand your question here. Could you re-phrase
it (my english is very poor)?

Thank you for the effort in testing GUI2Exe!

Andrea.

"Imagination Is The Only Weapon In The War Against Reality."
http://xoomer.alice.it/infinity77/

···

On Tue, Sep 16, 2008 at 12:19 PM, Werner F. Bruhin wrote:

Hi Andrea,

Andrea Gavana wrote:

Hi Werner,

Andrea,

I have a little test application which uses sqlalchemy, I am using it to
test GUI2Exe.

I tried to use the options custom code to get it to include the sqlalchemy
egg. I am not sure if it works as one has to use one of the bundle options
and anything else then 3 crashes if I try to run the generated exe.
    
Can you show the exception your are getting? Is it a problem of py2exe
or GUI2Exe?
  

I don't get an exception, i.e. it is a hard crash. I get this when running the generated exe from a command line too.

  

If I use bundle 3 I can run it but I get an exception and sqlite is not
found, added sqlite3 to packages but no change.
    
Uhm, this is curious... by the way, did you add it like "sqlite3" or
like "sqlite" in GUI2Exe? It should be sqlite3 if I am not mistaken.
  

Yeap, I added it as sqlite3 and in the dist folder I get the sqlite3.dll and the corresponding .pyd.

  

Then I thought lets try bbfreeze which handles eggs. I left the custom code
in there (by mistake) and it went and included over 300mb, i.e. all the eggs
and other stuff I have in lib/site-packages. I found this when I killed it
as it looked like it was in a loop.

So, maybe the custom code should be by compiler?
    
Yes, you are perfectly right... the custom code should be by compiler
and not for the whole application. I will do the modification, thank
you for reporting this, I just overlooked the possibility.

Any idea why I have the sqlite issue even after defining it on the include
packages list?
    
Not at the moment, but if you could post the Setup.py file generated
by GUI2Exe I may probably see what is going on... you can do that by
choosing "File" ==> "Export Setup".
  

I copy/pasted it and created a setup.py in the test folder so I could run it from within Boa, for what I wanted to do below - see the attached file..

  

Is there any why not to define bundles, to easier see what is actually
included in the dist folder?
    
Uhm, sorry, I don't understand your question here. Could you re-phrase
it (my english is very poor)?
  

Your English is as good as mine but I often don't write out things clearly enough - as is regularly pointed out to me by my wife:)

I wanted to generated an exe with the least amount of code/files within the generated exe files to see what gets included. Ignore my request, this is just for testing and I did it by running it from Boa but even commenting the bundle line option still seems to include a lot of files in the generated .exe (it is over 6mb in my case).

Thank you for the effort in testing GUI2Exe!
  

You are welcome!
Werner

setup.py (3.86 KB)

···

On Tue, Sep 16, 2008 at 12:19 PM, Werner F. Bruhin wrote:

Hi Werner,

Yeap, I added it as sqlite3 and in the dist folder I get the sqlite3.dll and
the corresponding .pyd.

Does it mean that now your exe is able to find sqlite? If not, I found
a possible reason (related to sqlalchemy) here:

http://www.mail-archive.com/sqlalchemy@googlegroups.com/msg03861.html

Basically the solution was to include this package in the packages list:

'sqlalchemy.databases.sqlite'

I don't know if this solution is still applicable, but it's strange, I
have never had any problem in my apps using SQLAlchemy...

I wanted to generated an exe with the least amount of code/files within the
generated exe files to see what gets included. Ignore my request, this is
just for testing and I did it by running it from Boa but even commenting the
bundle line option still seems to include a lot of files in the generated
.exe (it is over 6mb in my case).

If you are interested in knowing which modules are included and why,
you could use the xref option of py2exe (cross reference), which
creates an html documents showing exactly this information.

Andrea.

"Imagination Is The Only Weapon In The War Against Reality."
http://xoomer.alice.it/infinity77/

···

On Tue, Sep 16, 2008 at 1:32 PM, Werner F. Bruhin wrote:

Andrea,

Hi Robin & All,

Andrea Gavana wrote:
    

I used bsddb because it allows me to save
and load a Python class very easily, and it only requires a sync() and
close() method to work.
      

It's really sad that this is happening, both since PyBSDDB was once my
foster-child, but also because it is so dang powerful considering its
relative simple API. The current maintainer of the package is using it with
a distributed data storage system (IOW, spread across multiple servers that
are not sharing disks) that totals over 200 terabytes of storage and has
about 2**35 objects stored within it. So although Python is taking several
steps forward with 3.0, removing this package from the core distribution
seems like one step back to me.
    
I perfectly agree. I can't really get the reasoning of the developers
on python-dev, but then, I am just a little programmer with no voice
in the great Python community. In any case, should I do the switch now
or keep using bsddb anyway, even if in the future it will be a
separate download and it will not live in the standard library? What
do wxPython-users think? I am not going to use sqlite, not in a
thousand years. It is a db-disgrace, and it's a pity SQLAlchemy is not
in the standard lib. I'll probably follow Chris' suggestion a use a
simple cPickle to save data to the new-format database.

Andrea.
  
I haven't had much trouble with sqlite, but it's definitely not for multi-user environments. Since I started using SqlAlchemy, I try to use it to do all my database access so the backend doesn't matter all that much. That seems to works very well, but maybe that's me. I certainly don't care about downloading extra modules. I usually learn something new and cool that way.

···

On Mon, Sep 15, 2008 at 11:28 PM, Robin Dunn wrote:

-------------------
Mike Driscoll

Blog: http://blog.pythonlibrary.org
Python Extension Building Network: http://www.pythonlibrary.org

Andrea,

Andrea Gavana wrote:

Hi Werner,

Yeap, I added it as sqlite3 and in the dist folder I get the sqlite3.dll and
the corresponding .pyd.
    
Does it mean that now your exe is able to find sqlite? If not, I found
a possible reason (related to sqlalchemy) here:

[sqlalchemy] Re: Sqlalchemy and py2exe...

Basically the solution was to include this package in the packages list:

'sqlalchemy.databases.sqlite'

I don't know if this solution is still applicable, but it's strange, I
have never had any problem in my apps using SQLAlchemy...
  

Yes, using the above instead of 'sqlite3' does the trick.

I needed the following custom code:
import sys
baseFolder = "c:\\dev\\twcb"
# so it can find fbclient.dll etc
sys.path.append(baseFolder+'\\FBembeded')

# egg support
import pkg_resources
pkg_resources.require("setuptools") # get latest version
pkg_resources.require("sqlalchemy") # get latest version

The fbclient stuff is needed also I don't use it in this application. I have to search if there is anywhere a reference in my code to this (I do not think so, but ...).

This gives me another idea (or in other words maybe some more work for you:)), when you move the custom code to support compiler specific code maybe expand on it and have custom code which works as it does now and have some code which works after the compile is done, this could be used to clean up the dist folder (i.e. remove or add stuff).

The pkg_resources stuff seems to be all that is necessary to get the appropriate version of sqlalchemy included (seems to simple?, but it seems to do the trick).

  

I wanted to generated an exe with the least amount of code/files within the
generated exe files to see what gets included. Ignore my request, this is
just for testing and I did it by running it from Boa but even commenting the
bundle line option still seems to include a lot of files in the generated
.exe (it is over 6mb in my case).
    
If you are interested in knowing which modules are included and why,
you could use the xref option of py2exe (cross reference), which
creates an html documents showing exactly this information.
  

This is very neat!

Werner

···

On Tue, Sep 16, 2008 at 1:32 PM, Werner F. Bruhin wrote:

Andrea,

Any chance of getting an option to clean the "dist" folder before building?

Werner

HI Werner,

This gives me another idea (or in other words maybe some more work for
you:)), when you move the custom code to support compiler specific code
maybe expand on it and have custom code which works as it does now and have
some code which works after the compile is done, this could be used to clean
up the dist folder (i.e. remove or add stuff).

Yes, this is a good idea, and it seems easy to add. I'll just let the
user add some custom code to be run as post-compilation steps.

Any chance of getting an option to clean the "dist" folder before building?

Yes, this is easy too... I have never thought about it as my "dist"
folder usually contains things I don't want to be removed.

Thank you for the suggestions!

Andrea.

"Imagination Is The Only Weapon In The War Against Reality."
http://xoomer.alice.it/infinity77/

···

On Tue, Sep 16, 2008 at 2:22 PM, Werner F. Bruhin wrote:

do wxPython-users think? I am not going to use sqlite, not in a
thousand years. It is a db-disgrace, and it's a pity SQLAlchemy is not
in the standard lib.

Andrea.

Hi, Andrea. Just curious: what is it that you don't like about SQLite?
I'm very inexperienced with DBs but have been using it mainly because
it is included with Python and seems easy to use for simple databases.
It claims to be used a lot (Firefox, Skype, lots of other). But again, I
just don't know what the merits are, and would like to hear your issues
with it.

Thanks!
Che

C M wrote:

do wxPython-users think? I am not going to use sqlite, not in a
thousand years. It is a db-disgrace, and it's a pity SQLAlchemy is not
in the standard lib.

Hi, Andrea. Just curious: what is it that you don't like about SQLite?

I have the same question. SQLite is exceptionally good at what it does.

Paul

Andrea Gavana wrote:

Hi Robin & All,

Andrea Gavana wrote:

I used bsddb because it allows me to save
and load a Python class very easily, and it only requires a sync() and
close() method to work.

It's really sad that this is happening, both since PyBSDDB was once my
foster-child, but also because it is so dang powerful considering its
relative simple API. The current maintainer of the package is using it with
a distributed data storage system (IOW, spread across multiple servers that
are not sharing disks) that totals over 200 terabytes of storage and has
about 2**35 objects stored within it. So although Python is taking several
steps forward with 3.0, removing this package from the core distribution
seems like one step back to me.

I perfectly agree. I can't really get the reasoning of the developers
on python-dev, but then, I am just a little programmer with no voice
in the great Python community. In any case, should I do the switch now
or keep using bsddb anyway, even if in the future it will be a
separate download and it will not live in the standard library? What
do wxPython-users think? I am not going to use sqlite, not in a
thousand years. It is a db-disgrace, and it's a pity SQLAlchemy is not
in the standard lib. I'll probably follow Chris' suggestion a use a
simple cPickle to save data to the new-format database.

There's a proposed replacement module here: Issue 3783: dbm.sqlite proof of concept - Python tracker It implements the Shelve classes on top of the sqlite DB.

···

On Mon, Sep 15, 2008 at 11:28 PM, Robin Dunn wrote:

--
Robin Dunn
Software Craftsman
http://wxPython.org Java give you jitters? Relax with wxPython!

This is really getting OT now, but...

Stef Mientki wrote:

I am not going to use sqlite, not in a
thousand years. It is a db-disgrace, and it's a pity SQLAlchemy is not
in the standard lib.

I'll only use sqlite in the future !! :wink:
I just use databases occasionally,
and I think BSDDB and SQLite are 2 different things.
AFAIK SQLlite was developed to fit in the tiniest device, i.e. PDA,
never heard of BSDDB,

You might have heard about it under the names of Berkeley DB or Sleepycat DB. It's now owned by Oracle, who certainly know what they are doing when it comes to data storage.

but from what I just saw it's meant for huge databases,
so totally the opposite.

Not really. It was designed to be a smaller embeddable database library without the overhead of a relational SQL interpreter/engine,[1] that also supports full ACID (Atomicity, Consistency, Isolation, Durability) level of reliability, including record level locks, (sqlite locks the whole file IIRC) safe multi process read/write access, transactions, replication, etc. Yes, sqlite is smaller but it won't scale up nearly as well as bsddb does for large scale systems. If you don't need the ability to scale up, or don't need ACID level reliability, then sqlite is great. But keep in mind that most of the tiny things that you hear about using sqlite for their embedded DB these days were using bsddb up until a year or so ago, so it works well on the low end too. Projects are probably only switching to be able to get SQL or to save a few hundred K on the embedded library size.

[1] It's essentially a keyed BLOB storage mechanism, and is very flexible in what you can build on top of that.

···

--
Robin Dunn
Software Craftsman
http://wxPython.org Java give you jitters? Relax with wxPython!

Hi All,

C M wrote:

do wxPython-users think? I am not going to use sqlite, not in a
thousand years. It is a db-disgrace, and it's a pity SQLAlchemy is not
in the standard lib.

Hi, Andrea. Just curious: what is it that you don't like about SQLite?

I have the same question. SQLite is exceptionally good at what it does.

I have never said sqlite is not good or powerful. I use it myself, but
not as it is: SQLAlchemy is a very powerful bridge to it (and to many
other databases) with a clean syntax and easy to use. What I can't
stand of sqlite is its syntax. When I do with bsddb and SQLAlchemy
something like this:

project = Node() # node is some kind of Python class
database.save(node)
database.flush()

I wonder how many lines of code I have to write with sqlite to get the
same effect. The way sqlite syntax works (cursor.execute('''create
table blah blah blah")) is a *pain* to me. Anyway, Robin is right, I
am really going OT.

I was wondering... still no one could spare few moments to test
GUI2Exe on his/her Mac and see if the code for py2app works (or even
if GUI2Exe starts properly)? Sorry to bother you, it's just that it's
the only platform I have no way to test GUI2Exe on...

A big "thank you" to everyone for all the suggestions you have made.

Andrea.

"Imagination Is The Only Weapon In The War Against Reality."
http://xoomer.alice.it/infinity77/

···

On Tue, Sep 16, 2008 at 8:27 PM, Paul McNett wrote:

Hi Andrea,

Here is a quick run down of observations from a quick clicking and looking through the app

I was wondering... still no one could spare few moments to test
GUI2Exe on his/her Mac and see if the code for py2app works (or even
if GUI2Exe starts properly)? Sorry to bother you, it's just that it's
the only platform I have no way to test GUI2Exe on...

Observations (OSX 10.5, python2.5, wxpython 2.8.8.1)

To run I just downloaded the source from your site unzipped and ran GUI2EXE.py from the command line

1) When starting up I see a splash screen but it looks like a blank panel, should there be some image in there?

2) Select py2app ( main panel just says not implemented)
     - Next do nothing and select View=>Setup Script raises an exception but judging by the exception this seems expected.

Traceback (most recent call last):
   File "GUI2Exe.py", line 538, in OnViewSetup
     self.RunCompile(view=True, run=False)
   File "GUI2Exe.py", line 1005, in RunCompile
     outputs = page.PrepareForCompile()
AttributeError: 'NotImplementedOrMissingPanel' object has no attribute 'PrepareForCompile'

3) Help=>Gui2Exe Help does nothing

4) The "About" item and About Box are under the Help menu, It should be under the application menu on a Mac. Using the stock (wx.ID_ABOUT) id for the menu item will fix this.

GUI related issues / opinions:

1) There is an Options menu and a Configuration menu, they seem kind of redundant to me, combine them perhaps?

2) Configuration=>Restore original Gui option seems like it should be under View

3) The KDE icon being used for "Restore original Gui" menu item seems kind of strange to me

4) View=>Tips and Tricks seems more naturally like a Help menu option

5) In the GUI2EXE code viewer window the buttons in the bottom corner would look nicer if they were the same width

6) Putting "Test Executable" under Options doesn't seem like a logical choice or place to look for such an action

7) The selection color for the icons in the (Toolbar?) at the right of the main window is nearly exactly the same as the background so its a little difficult to see what one is selected without looking closely.

Looks interesting, I will try to take a look at the source sometime and can probably help with the py2app stuff if you need me to.

Regards,

Cody

···

On Sep 18, 2008, at 3:23 PM, Andrea Gavana wrote:

Andrea Gavana wrote:

table blah blah blah")) is a *pain* to me. Anyway, Robin is right, I
am really going OT.

well, yes, but while we are there, you might want to look at python object database solution like durus, for instance:

http://www.mems-exchange.org/software/durus/

I was wondering... still no one could spare few moments to test
GUI2Exe on his/her Mac and see if the code for py2app works (or even
if GUI2Exe starts properly)? Sorry to bother you, it's just that it's
the only platform I have no way to test GUI2Exe on...

Sorry, I've been out of the office, and that's where my Mac is. I"m glad Cody had a go.

-Chris

···

--
Christopher Barker, Ph.D.
Oceanographer

NOAA/OR&R/HAZMAT (206) 526-6959 voice
7600 Sand Point Way NE (206) 526-6329 fax
Seattle, WA 98115 (206) 526-6317 main reception

Hi Cody,

Hi Andrea,

Here is a quick run down of observations from a quick clicking and looking
through the app
To run I just downloaded the source from your site unzipped and ran
GUI2EXE.py from the command line

1) When starting up I see a splash screen but it looks like a blank panel,
should there be some image in there?

Yes, there should be... probably my AdvancedSplash class is not
working on Mac, I'll need to use a simple wx.SplashScreen :frowning:

2) Select py2app ( main panel just says not implemented)
   - Next do nothing and select View=>Setup Script raises an exception but
judging by the exception this seems expected.

Traceback (most recent call last):
File "GUI2Exe.py", line 538, in OnViewSetup
   self.RunCompile(view=True, run=False)
File "GUI2Exe.py", line 1005, in RunCompile
   outputs = page.PrepareForCompile()
AttributeError: 'NotImplementedOrMissingPanel' object has no attribute
'PrepareForCompile'

Where did you get the source code? It seems to me you downloaded them from here:

xoomer.alice.it/infinity77/main/GUI2Exe.html

But this is not the new test version... I apologize for the mess, I
had posted in my very first message of this thread the link where to
retrieve the new test version, which is here:

http://xoomer.alice.it/infinity77/__GUI2Exe__.zip

Which will have all the supported compiler and will not raise this
exception... unless something very strange is happening.

3) Help=>Gui2Exe Help does nothing

I am still writing the manual for GUI2Exe :smiley:

4) The "About" item and About Box are under the Help menu, It should be
under the application menu on a Mac. Using the stock (wx.ID_ABOUT) id for
the menu item will fix this.

Thanks... I am pretty ignorant about Mac-specific issues...

GUI related issues / opinions:

1) There is an Options menu and a Configuration menu, they seem kind of
redundant to me, combine them perhaps?

2) Configuration=>Restore original Gui option seems like it should be under
View

3) The KDE icon being used for "Restore original Gui" menu item seems kind
of strange to me

4) View=>Tips and Tricks seems more naturally like a Help menu option

5) In the GUI2EXE code viewer window the buttons in the bottom corner would
look nicer if they were the same width

6) Putting "Test Executable" under Options doesn't seem like a logical
choice or place to look for such an action

7) The selection color for the icons in the (Toolbar?) at the right of the
main window is nearly exactly the same as the background so its a little
difficult to see what one is selected without looking closely.

Looks interesting, I will try to take a look at the source sometime and can
probably help with the py2app stuff if you need me to.

Thank you very much for your opinions and suggestions Cody. If you
downloaded the old version of GUI2Exe, I would really appreciate if
you could take a look at the new one (
http://xoomer.alice.it/infinity77/__GUI2Exe__.zip ) and see if the
py2app related stuff works. I'll try to refactor the menus in a way
that looks more consistent

Thank you again.

Andrea.

"Imagination Is The Only Weapon In The War Against Reality."
http://xoomer.alice.it/infinity77/

···

On Fri, Sep 19, 2008 at 1:02 AM, Cody Precord wrote: