I’m going to make this a regular series, along with the other Tips and Tricks, so if you have any suggestions – please pass them along to me at email@example.com.
I say “developed and maintained”, but not in a strict formal sense. Like most of us, Terry has a “day job”, and maintaining PBLPeeper ain’t it…
There’s no schedule of releases or bug patches, and no support hotline. But the good news is, the price is RIGHT. Terry calls it “charityware” – meaning that if you feel your project saved money by using the tool, please make a donation in Terry’s (and Sequel’s) name to a charity of your choosing.
PBLPeeper is, first and foremost, a great PB object browser. It does things that PB itself can’t do, like allow you to navigate up and down the ancestry chain of a class with a single click. You can browse an object without the hassle of a checkout or opening it in its painter. It allows you to see all the goodness that the PB IDE hides from you, like the Forward Declarations, and the overridden/extended script indicator.
Figure 1 shows the main Browse panel from PBLPeeper.
I’ve selected a typical PFC-based application target, and I’m browsing the Multitable update service object. The left hand side of the screen is a Treeview (much like the PB System Tree), and the left side is the code browser panel. Note the little blue arrow in the bottom right-hand corner, next to the word “Overridden”… That tells me, in a single glance, whether the event script in the code pane is an override or extension. Clicking the blue arrow takes me to the corresponding event/function script in the immediate ancestor. I don’t even need to know which PBL the ancestor is located in!
Here’s another neat trick. Let’s say I want to look at the code of a PB object in the IDE, but the PBL containing that object isn’t in my library list. I have to add that PBL to my target’s library list, as well as all the PBLs containing the entire ancestry chain of that object. In other words, the object has to be regenerated in the IDE just for me to look at the code of a single method. PBLPeeper does not have that restriction. In the PBLs tab, I can add any PBL to my “browser list” and browse any object inside it, regardless of whether or not that object’s ancestors are present. Obviously, I can’t navigate to the ancestor class if that PBL isn’t loaded, but this is a really handy way to browse, say, older versions of object scripts to visually compare them.
In coming posts, I’ll cover additional features of PBLPeeper that I use quite extensively, including Object Lists and the PBDEBUG file browser. In the meantime, I encourage all PB developers to add this tool their arsenal.