[OpenLayers-Dev] ButtonBase code review
Cameron Shorter
cameron.shorter at gmail.com
Sun Feb 25 15:29:51 EST 2007
Olivier,
I have spent an hour or so reviewing your code in
http://trac.openlayers.org/log/sandbox/oterral/ButtonBar/vector/lib/OpenLayers/.
Overall, you have done a pretty good job. Ideally I'd like to spend
more, so they are sure to be things I've missed.
Chris, I hope you will add comments too, especially about names of
classes. Eg, What should we call the base Button/Tool class? I'm
inclined to call it Button.js.
---
Minor: You have a few tab chars. Change them to spaces.
---
You have created tools in the directories:
lib/OpenLayers/MouseListener/ and
lib/OpenLayers/MouseListener/EditingListener
I think the classes and directory structure should be renamed to
emphasize the fact that you are creating Button Tools. Rename
MouseListener to Tool or Button, probably Button.
---
DragPan currently inherits from MouseListener, but MouseListener doesn't
contain empty parameters for id, imageOn, imageOff, etc.
We should have a base Button class that all the Buttons/Tools inherit
from. We have 2 options:
1. MouseListener has child Button which has children DragPan, ZoomIn, etc.
2. MouseListener is renamed to Button, Button has children DragPan,
ZoomIn, ...
I prefer option 2. There will be Tools which don't have an icon and are
always on (Eg, mouseTrack tool). I suggest we create a type "NoButton"
type which can only be turned on/off from the program, not via operator
interaction. They will default to on.
Button will need null parameters for id, imageOn, imageOff, etc.
---
Button should also contain a param for cursorIconType. Ie, when the tool
is selected, the cursor type can change from an arrow, to a box, to
something else. You should be able to find examples in the Mapbuilder
code. I think it is in the MouseHander.js code.
---
Buttonbar.js (version 2281):
Why is X and Y initialised above the "inherit" braces? To be consistent
they should be initialised with the rest of the variables.
---
Buttonbar.js:
Please add jsdoc comments to all functions. It makes it much easier to
review. :)
Don't worry if your English has a French flavour to it. Us mono-language
speakers are generally very forgiving. So long as your writing is
understandable, then that is good. Someone else will clean up the
comments later if there is a problem.
---
Buttonbar.addTools line 54:
Minor comment: When looping over an array with length>=0, I suggest
using "for" instead of "while". This should be cleaner than the
"if,while" statements you have starting at line 54.
for(var i=0;i<tools.length;i++){...}
---
Buttonbar.addTools line 78:
Minor: This block loops through all the current this.tools. I suggest
that it only loop through the recently added tools. Ie, loop through
tools. Why not move the code into the block above (ie from line 54).
---
Buttonbar._addButton:
The properties of btn should be moved into the base Button class,
currently called MouseListener.
This means that the majority of _addButton will disappear.
---
Buttonbar._addButton:
I expected to see logic to ensure that one of the radio buttons is
always selected.
By default, the first radioButton added should be selected.
---
Buttonbar._addButton:
Why register for mouseup event on the button? It is not used. You can
also remove buttonUp() function.
---
Buttonbar.setTool:
You only seem to be catering for radioButton and button types. What
about a twoState button?
I suggest code like:
switch(tool.type)
case "radioButton":
..
break;
default:
tool.doSelect();
---
Buttonbar._swapButtonImg:
The logic for rendering a button should be moved into the base button
object, at the moment this is MouseListener.js.
An object should be responsible for drawing itself.
--
Cameron Shorter
Systems Architect, http://lisasoft.com.au
Tel: +61 (0)2 8570 5011
Mob: +61 (0)419 142 254
More information about the Dev
mailing list