Android Tutorial [B4X] B4A, B4i, B4J and B4r API documentation - B4X Object Browser

Status
Not open for further replies.
API documentation - B4a, B4i, B4J and B4R (i.e. B4X) Object Browser (which also includes Code Snippet Management)

Hi everyone,

As you may or may not be aware, I have embarked on a project to bring better documentation to us all.

The first problem I have had is that the official and semi-official documentation tools aren't what I was hoping for. Not saying they aren't good, they just aren't what I need.

My first thankyou was called the B4a Object Browser. This version was for B4Android only. It is my own version of the XML file loader. I call it the B4a Object Browser.

The second thankyou is an updated version that supports B4A, B4I and B4J. This is called the B4X Object Browser.

If you know the Visual Studio Object Browser, you should have a good idea of what I am trying to emulate.

To run it you must have .NET Framework 3.5 SP1 installed, and you must install it from my setup.

I have only tested it on Windows, and not with Mono.
I am assuming that everyone that wants to use it, will be on Windows.

Here are some screenshots:

B4AObjectBrowser3.1.4.0.png


upload_2014-12-18_21-26-19.png


Download the appropriate zip, unzip it and run the setup. I suggest you scan it for viruses before you run it of course.

B4A Object Browser:
When it runs the first time, it will need to know where the B4a Library XML files are, so ensure you go into the Options and configure them.
If you are upgrading, you can Import your old settings, and in fact are prompted to do so if you have a blank configuration.

If you are asked to find the B4A Library XML files, browse to your B4a Library folder (usually C:\Program Files\Anywhere Software\Basic4android\Libraries, or if you are using 64 bit Windows, it is C:\Program Files (x86)\Anywhere Software\Basic4android\Libraries)

From this point, it will remember the path, so you will not have to enter it again.

B4X Object Browser:
The paths to your B4A, B4I and B4J installations (and the Libraries folders under them) will be determined automatically.

In the Options screen you can set multiple paths, with the ability to modify them.

It has multi-language support, and will detect your PC's language and apply the changes automatically. If you want to over-ride this, you may do so from the Options screen.

In B4A Object Browser, the following languages are supported:

Afrikaans
Arabic
Bulgarian
Chinese
Czech
Danish
Dutch
English
French
German
Hebrew
Indonesian
Italian
Japanese
Norwegian
Persian
Polish
Portuguese
Romanian
Russian
Spanish
Swedish
Thai
Ukrainian
Vietnamese

B4X Object Browser adds support for:
Catalan
Greek


I suggest everyone that uses this tool subscribe to the thread so you are informed of changes.

Have fun!

Dave

Change history:
B4A Object Browser
2.0.0.0 - First public release.
2.0.1.0 - Minor GUI update, remove the need to click Reload button during initial setup.
2.1.0.0 - See post #8
2.2.0.0 - See post #23
2.3.0.0 - see post #31
2.3.0.0 - see post #35
2.4.0.0 - see post #60
2.5.0.0 - see post #63
2.6.0.0 - see post #70
2.6.1.0 - see post #75
2.7.0.0 - see post #79
3.0.0.0 - (Pre-release)
3.0.1.0 - Major GUI updates
3.0.1.1 - Minor fixes to correct some "Copy" functionality that had been removed
3.1.0.0 - All known bugs fixed, plus multiple language support added. Separate link provided below. See post 112 for full info.
3.1.1.0 - Additional languages, ability to override GUI language, Chinese language fixed. See post 122 for more info.
3.1.2.0 - Fixes to French, German and Italian language translations. 15 languages now provided. Search history added.
3.1.3.0 - Portuguese language added, making this language number 16
3.1.4.0 - Updated ru and ja translations, Moved Options to View menu, Added support for DesignerName attribute. See post 128 for full details.
3.1.5.0 - Corrected some logic problems around Version Number and DependsOn. Fixed URL Links. See post 147 for full details.
3.1.6.0 - Increased search options, fixed some search bugs, added Hebrew. Full details in post 156.
3.2.0.0 - AutoUpdate, new language, a couple of minor bugfixes. Full details in post 157.
3.2.1.0 - New languages, a few bugfixes. Full details in post 164.
3.2.2.0 - Updated Thai translation.
3.2.3.0 - Fixed further Thai translation strings, arabic and Thai language settings, memory corruption error when switching from R-L and L-R languages and more
3.2.4.0 - Added the ability to override language settings.* See "How to override language setting.txt" in the installation directory.
3.2.4.1 - Fixed bug when overriding language settings.
3.2.4.2 - Fixed bug when selecting the following languages: Arabic, Bulgarian, Hebrew, Thai
3.2.4.3 - Fixed bug when showing empty parentheses, Search and Clear Search buttons, bug where Clear Search button forced library reload even if no search text was entered
3.2.4.4 - Fixed bug where installer did not remove previous version
3.2.5.0 - Added ability to select viewing of Class_Globals and Property Get / Property Set
3.2.5.1 - Added ability to select viewing of DesignerCreateView
3.2.5.2 - Added Romanian language
3.2.5.3 - Fixed problem when selecting Romanian
3.2.5.4 - Fixed 2nd problem when selecting Romanian
3.2.5.5 - Added Vietnamese language
3.2.5.6 - Added preliminary support for B4a 3.0 (Beta)
3.2.5.7 - Added ability to show duplicate Library Short Names
3.2.5.8 - Forced GUI to always show Full type name when showing Class and Library annotations
3.2.5.9 - Fixed a bug when reloading libraries after performing a search. Also added Donate form.
3.2.5.10 - Set XML Reader to null after closing the file, plus set properties to remove flickering when displaying file data.
3.2.5.11 - Corrected an issue where a blank History would cause an application error
3.2.5.12 - Added Czech, Danish and Persian languages
3.2.5.13 - Persian language updated
3.2.5.14 - Added "Always on top" setting (under "Always on top" menu setting) and modified each Form to follow this setting
----------- Note: No further updates will be performed to B4a Object Browser

Full list of changes here (before 3.2.5.1): http://www.basic4ppc.com/android/fo...n-b4a-object-browser.25682/page-9#post-172076

B4X Object Browser
1.0.0.0 - First public release
4.0.0.1 - Minor changes - mainly updating graphics to reflect Anywhere Software changes.
4.0.0.2 - Bug fixes, Desktop icon.
4.1.0.0 - Code Snippet Management added.
4.1.1.1 - Spanish language updates
4.1.1.2 - Modified the Method / Property / Field Copy function appropriately to copy either the selected text or all text
4.1.1.3 - Performed multiple bug-fixes to correct issues with right-click commands
4.1.1.4 - Performed another bug-fix to the right-click menu (for Events list)
4.1.1.5 - Performed another bug-fix to the right-click menu (for copying Fullname)
4.1.2.0 - Added support for B4R
4.1.3.0 - Changed auto-update download to .msi (instead of .exe)

I have put together a pdf to understand how to use it. It is included in the setup, but you can get it separately here (559 Kb).
Grab the setup and unzip and install it. This must be done this way because of the file size being too big for the forum. (>2 MB)...

B4a Object Browser
Version 3.2.0.0 (NOT AutoUpdate) is available here.
Version 3.2.1.0 (AutoUpdate enabled) is available here.
All newer versions (from Version 3.2.2.0 onwards) are available through AutoUpdate, and will not be provided here (other than the link below).
The latest version is always available from here.

B4X Object Browser
The latest B4x Version is available from here. AutoUpdate will take over from that point.
 

Attachments

  • upload_2014-12-11_22-32-46.png
    upload_2014-12-11_22-32-46.png
    106.1 KB · Views: 1,980
Last edited:

Roger Garstang

Well-Known Member
Licensed User
Thanks for the additional feedback guys. I have updated the first post with a couple of extra things to try and fix the flickering. I haven't upped the version number so you won't have to re-do the config.

Let me know how that improves things (if at all).


Dave


Looks about the same. Might actually be a slower flicker now like there is some type of a pause or DoEvents call after each element is added. Posting the code used to update/add the elements may help suggest other ways to do it.
 

Vader

Well-Known Member
Licensed User
Looks about the same. Might actually be a slower flicker now like there is some type of a pause or DoEvents call after each element is added. Posting the code used to update/add the elements may help suggest other ways to do it.

I actually removed the Application.DoEvents() that was in there.

B4X:
            TargetTreeview.BeginUpdate();

            if (Properties.Settings.Default.ShowMethods)
            {
                // Methods
                foreach (Method ThisMethod in ThisClass.Methods)
                {
                    TreeNode MethodNode = new TreeNode();

                    MethodNode.Text = ThisMethod.Name;
                    MethodNode.Tag = ThisMethod;
                    MethodNode.ImageIndex = 2;
                    MethodNode.SelectedImageIndex = 2;

                    TargetTreeview.Nodes.Add(MethodNode);
                }
            }

...
...

            // Sort the treeview
            TargetTreeview.Sort();

            TargetTreeview.EndUpdate();
 

Roger Garstang

Well-Known Member
Licensed User
I don't think that is the code doing this. That code appears to be adding nodes directly at root level of the treeview. Those would be the Library Names. The flicker is when clicking the Library names and it fills in the child nodes like the Properties and Methods. I'm confused though why the variable is called Methods unless 1. You are calling the Libraries Methods or 2. Each Library at the Root is a Treeview...which I didn't think was possible or needed since the treeview has a Nodes collection and each Node can have child nodes in its Nodes collection.

If the the treeview is always sorted, the easiest thing to do would be to set Sorted to True for the Treeview then they are inserted sorted. The only time sort needs called then would be if label text of a node changes which wouldn't happen here. Other options would be to use an array or some other type of collection to sort behind the scenes then just insert the nodes without calling sort at all.

I'm not sure where the DoEvents was, but I don't think it is needed here. Usually it is for loops like this so the GUI doesn't stop being responsive, but if use here it will just allow them to drag the window while updating which would either abort the Begin Update and make things ugly or update a blank TreeView which would look odd (Especially if it gives it a null brush where other things behind it or placed on top of it are drawn in it). Having the window stay put and not handle other events until finished would be best.
 
Last edited:

Vader

Well-Known Member
Licensed User
Ok, so I have found a few things that I had missing...

  • Class events
  • Class permissions
  • Class dependencies (ie dependson)

Those have now been added.

I also added the ability to do a Google search of the B4A site for any given term (entered at a prompt). Nobody asked for it, but I thought it was a missing feature.

Now before you start looking for the new version in Post #1, here is the bad news...
I have yet to add the Method attributes (e.g. DesignerName).
I am also not happy with the interface - it is starting to look quite cluttered at the top.

Because of the above reasons I have decided to not release the next version tonight. I will work on these things tomorrow night and over the weekend as necessary, and get something to you that is functional AND pleasing to the eye.

Oh yes, I forgot to add... I do plan on supporting multiple languages.
I will have to pull out all of the English text into a resource file first, and then I will be able to add French, German, Italian, Chinese, Spanish etc.
Warning: I will need help with these languages. My German is pretty rusty, and I can't speak any of the others. This will come later. Maybe version 3.0?

Ciao
 

Vader

Well-Known Member
Licensed User
I don't think that is the code doing this. That code appears to be adding nodes directly at root level of the treeview. Those would be the Library Names. The flicker is when clicking the Library names and it fills in the child nodes like the Properties and Methods. I'm confused though why the variable is called Methods unless 1. You are calling the Libraries Methods or 2. Each Library at the Root is a Treeview...which I didn't think was possible or needed since the treeview has a Nodes collection and each Node can have child nodes in its Nodes collection.

If the the treeview is always sorted, the easiest thing to do would be to set Sorted to True for the Treeview then they are inserted sorted. The only time sort needs called then would be if label text of a node changes which wouldn't happen here. Other options would be to use an array or some other type of collection to sort behind the scenes then just insert the nodes without calling sort at all.

I'm not sure where the DoEvents was, but I don't think it is needed here. Usually it is for loops like this so the GUI doesn't stop being responsive, but if use here it will just allow them to drag the window while updating which would either abort the Begin Update and make things ugly or update a blank TreeView which would look odd (Especially if it gives it a null brush where other things behind it or placed on top of it are drawn in it). Having the window stay put and not handle other events until finished would be best.

Here is the complete Method...

I may have found it... there was a rogue "statusbar.refresh();" in there. I will do some more testing over the next night or two and post an update with the other changes mentioned above.

Edit: And there is no .Sorted property on treeview, that is why the .Sort() method is there.
 

Vader

Well-Known Member
Licensed User
Ok, found the bug. My EndUpdate() was inside a loop.

FIXED!

If you really want to get the updated version earlier than everyone else, send me a PM with your email address and I will zip it and send it to you, or provide you with a link.
 

Roger Garstang

Well-Known Member
Licensed User
Ok, found the bug. My EndUpdate() was inside a loop.

FIXED!

If you really want to get the updated version earlier than everyone else, send me a PM with your email address and I will zip it and send it to you, or provide you with a link.

Cool, figured it was something simple since the code posted looked fine. I'll just wait for the update. I'm not more special than anyone else or anything.

Weird that there was no Sorted Property. I was reading through documentation and forum stuff online seeing if Sort broke out of BegineUpdate or something causing the flicker and it described a Sorted Boolean property. There is overhead either way and a temp array or something to sort usually works better anyway. In my other PowerBASIC applications I don't even let the Listviews and Treeviews handle the data and provide it to them on request. This makes very fast interfaces and allows me to store the data in the best manner.

If you've never heard of it- JetBrains has an awesome tool called ReSharper that I always use in Visual Studio. It provides lots of hints and refactoring as well as studies code to let you know of possible errors like unused variables, unreachable code, redundant code, things in a loop that shouldn't be, etc. In your code you posted it would suggest things like doing away with the three lines setting label and the two images of the node and using the alternate constructor where you specify label and the images, etc. It even analyses IF and other statements letting you know the best order to put things in. Eazfuscator is another great and free obfuscation tool I use to protect my code.
 

BasicBert

Member
Licensed User
Oh yes, I forgot to add... I do plan on supporting multiple languages.
I will have to pull out all of the English text into a resource file first, and then I will be able to add French, German, Italian, Chinese, Spanish etc.
Warning: I will need help with these languages. My German is pretty rusty, and I can't speak any of the others. This will come later. Maybe version 3.0?

Ciao

Since I get annoyed by bad translations into Dutch, I might as well try to do it myself. Since I usually think of criticism as being good advice I might as well take this "job". I'm doing the same for Kuffs Password Safe for more then a year now, so there's a bit of experience.
When you're ready for this part of your project, just let me know.
 

derez

Expert
Licensed User
I added comments to the methods that missed them and now the class based library show without errors, thanks !

I noticed that methods like the following
B4X:
'Sets the color of the line between the title and the message
Public Sub Line_Color(color As Int)
line.color = color
End Sub

are displayed like this:
_line_color

Type
Method

Description
Sets the color of the line between the title and the message

Syntax
_line_color(color As int) As String

Return Value
String

The program added "As String" and "Return Value" where there is none !
 
Last edited:

Vader

Well-Known Member
Licensed User
I added comments to the methods that missed them and now the class based library show without errors, thanks !

I noticed that methods like the following
B4X:
'Sets the color of the line between the title and the message
Public Sub Line_Color(color As Int)
line.color = color
End Sub

are displayed like this:


The program added "As String" and "Return Value" where there is none !

Can you please send me the xml you have so that I can see what is happening.

Thanks
 

Vader

Well-Known Member
Licensed User
The B4A functions always return a string (implicitly). When you convert classes into libraries, I suppose that you keep this type for the return value (instead of void).

Great, so the tool will be functioning as the XML is directing it.
 

Vader

Well-Known Member
Licensed User
Does anyone have a Library that uses the @Hide annotation? I need to test this annotation.
 

corwin42

Expert
Licensed User
AHViewPager library. The AHPageContainer object uses lots of them.
AHQuickAction library. In AHQuickAction(3d) object there is at least setRootViewId() method hidden with it.
 

Vader

Well-Known Member
Licensed User
AHViewPager library. The AHPageContainer object uses lots of them.
AHQuickAction library. In AHQuickAction(3d) object there is at least setRootViewId() method hidden with it.

Thanks Markus. Informatix is correct, that Method is not listed.
 

Vader

Well-Known Member
Licensed User
Update 2.4.0.0

Ok, so I have a few things to explain here...

Firstly, the GUI has changed a little because it was starting to get too cluttered. I'm not a 100% fan of the end-result, but I hope you agree it is functional and kind-of pleasing to the eye.

There are now three additional listboxes to show additional information. These are:
Depends On
Permissions
Events

These show what other Classes the selected Library/Class depends upon, what permissions the Class requests/requires, and what Events are generated by the Class.
This last one is a favourite of mine, because I don't know where else in the IDE this information is shown (if at all).

Next, the Comment area AND the Details area are both HTML aware. Well, mostly they are. This means they understand <u>, <b>, <i>, <link> etc.
At this time, <code> is stripped out and not handled that well, but at least the examples read a little better now.

I have also moved one of the Toolbar buttons so as to keep the B4A site buttons together. The Android Packages button is now last (i.e to the right of the others).

There is an additional button to allow text searching the B4A site for any text you wish to enter. This is in addition to the pre-existing ability to search the B4A site for any selected text.

The comment area can now be "Copy"'ed and "Copy RTF"'ed, thus preserving links, colours etc.

You can perform a search from selected text in the Comment area.

EDIT: I nearly forgot: The flickering is now fixed!

I still don't have a solution to the Unicode problem (sorry Informatix), and the HTML codes are not 100%, but I hope you agree they are much better than what I had previously.

When you unpack the zip (in Post #1 as always), please note there is now an additional DLL that must also be copied. This is the control that handles the HTML in the Richtext boxes as described above.

Again, you will have to re-create your config. I will work on pulling the config out from .NET, but for now we have what is standard, which changes with every version.

Please do not hesitate to ask or report anything you feel I have missed. Chances are I will incorporate your suggestion into the next version :)

Enjoy!

Dave
 
Last edited:
Status
Not open for further replies.
Top