A new version of Nexus has been uploaded, one which compiles and runs under both 32-bit and 64-bit versions of Purebasic.
Quite a few bugs have also been fixed and the property-box control has been upgraded somewhat with some code added by Peyman.
28th July 2009 - nxPropertyBox controls.
This update fixes quite a number of bugs with the nxPropertyBox control following my work upon the Pyrex report designer. I can finally say that the damn thing is now working like a property box control should!
The main problems were related to the notifications sent by the control to the developer's callback as the user altered properties etc.
nxPropertyBox and nxSplitter controls.
These controls have both undergone a quite major update (Purebasic 4.3 version). In the case of the nxPropertyBox control, the alterations will break all existing code (my apologies), though any modifications required by applications will be very straight forward.
It is now possible to add items which do not belong to any 'group'. To do this the nx_AddGadgetItem() function has been changed for this control.
The 'imageID' parameter now points to the new item's nxPropertyBox_Item structure (not the 'flags' parameter) whilst the 'flags' parameter is to hold a non-zero value if the new item is to belong to the 'current' group (if there is one). See the demo programs for examples of how to employ these alterations.
Note that I have not automatically indented 'child' items for various reasons; not the least of which is the fact that some property boxes might allow the labels to be edited etc. and this would then require a quite major update to EsGRID which I do not have time for right now. Instead, you can simply pad child items label text with spaces if appropriate.
Have made alterations to extend the functionality of this control. You can now take steps to embed multiple controls directly within a nxSplitter without having to embed them first within a container gadget etc. This is because the control no longer complains if one of the two 'split' controls is omitted and also due to the fact that the #nxSplitter_GadgetsResized callback message is far more 'refined'. (See the nxGadgets_Residents.pbi source file for details).
There is also a new callback message : #nxSplitter_CustomPaint for those applications wishing to paint directly to the splitter control etc. (advanced users only).
A bug with the nxSplitter control when housing Purebasic panel gadgets has been fixed.
(Only the Purebasic 4.3 version of Nexus has had this bug fix applied. The PB 4.2 version is no longer supported.)
This control has undergone another quite major update in the Purebasic 4.3 version (the version of Nexus for PB 4.2 is no longer supported). This has again been driven by my use of this control in a very large application.
Basically, I needed a way of allowing some 'color selector' items of offering a 'default color' option and of thus being able to display colors as well as text (i.e. display a selected color or a string simply saying "Default color" etc.)
This was of course not possible for two reasons; i) the propertybox color selector items could not display text and, more importantly, ii) the Windows color common dialog has no option for a 'default color'.
This has been addressed (indirectly) by making a number of internal alterations to the nxPropertyBox control, most notably the addition of a new callback message : #nxPropertyBox_SelectorItemInvoked. This fires whenever the user attempts to invoke any of the selector items and allows the user to replace the resulting requester with a custom one. In addition, you can now dynamically switch an item's type at will (e.g. from a color selector item to a dynamic text dialog item and back again!) Very useful!
A new nxPropertyBox demo (demo 2) shows all of this working and uses my MenuColorPicker class (included with the demo) to good effect. The result is a custom color item which does exactly as described above (switching from a textual display to a colored image one)! By not 'hard coding' the MenuColorPicker class into Nexus we are of course free to use just about any type of dialog going and to switch items between all the various types.
This control has undergone a major update in the Purebasic 4.3 version (the version of Nexus for PB 4.2 is no longer supported). This is because I am finally using this control in a 'serious' and substantial application and am having to make a few alterations etc.
Changes include :
- Two new creation styles; #nxPropertyBox_EditableLabels and #nxPropertyBox_RemoveControlsWhenResizing. Using the first of these styles allows labels to be edited following a double click etc. The developer can validate all edits etc. Also, you can set the label editing colors etc.
- Added an editable combo type cell.
- Greatly refined the various selector type cells.
- The #nxPropertyBox_ItemUpdated callback message now fires in the case that lables have been edited etc. This message also provides additional information in the case that a selector type cell has been altered etc.
- Added a new callback notification : #nxPropertyBox_ContextMenu. This allows the developer to easily attach context menus to individual cells of a propertybox etc.
I have also fixed some bugs with this control.
Updated the version of this control in the Purebasic 4.3 version (the version of Nexus for PB 4.2 is no longer supported).
You can now hide an entire group by simply setting the header item to have a height of zero (of course this only works if the group has a header item!) You can set this height at any time through the nx_SetGadgetItemAttribute() function.
Also fixed some bugs with this control.
Updated the version of this control in the Purebasic 4.3 version (the version of Nexus for PB 4.2 is no longer supported).
Basically the internal paint handler has been completely rewritten and is now far far faster and smoother. This was done in order to refine the blended selection of items which is now far more refined and aesthetically pleasing.
On top of this, for those nxImageArray controls using a selection border for selected items (rather than a blended form of selection) you can now customise the selection rectangle which has been added to satisfy an application I am working on. It is very effective though!
A major bug fixed in both the Purebasic 4.2 and 4.3 versions whereby a collapsed group would still register some menu-item clicks which had been hidden because of the collapse etc.
A couple of bugs fixed in both the Purebasic 4.2 and 4.3 versions.
The version for Purebasic 4.3 (32-bit) has been updated with the addition of a new type of item, namely : #nxPropertyBox_CustomTextDialog.
These items display a selector button and when clicked a notification is sent to the developer's callback function. The intention is that the callback will then display a custom dialog for the user to enter text etc. and then for the callback to use nx_SetGadgetItemText() to change the underlying text in the property box control. Along with the notification is sent a RECT structure containing the bounds of the cell in question (in screen coordinates) so that a dialog can be positioned very precisely (if appropriate).
The nxPropertyBox demo shows how to use these new kinds of items.
I have not updated the version for Purebasic 4.2 as I will no longer be supporting this version when PB 4.3 final is released.
Have added a version of Nexus for PB 4.3 (32-bit only).
Have added a forum to the nxSoftware site within which has been added a section for Nexus.
27/6/2008. Update. -New control added!
Have added what I have called an nxTreeField control to the Nexus framework, a control which has been requested several times in these forums.
An nxTreeField is essentially a tree gadget with columns!
It is very flexible and easy to use and can actually be used as a replacement for the standard listicon and tree gadgets if desired.
Features include :
- Optional checkboxes.
- Optional images in any 'cell'. Altering a cell's icon is a single line of code.
- Fully 'themed'. Node buttons and checkboxes are rendered according to any active theme.
- Resizeable columns (via click and drag or code). Individual columns can be prevented from being resized etc.
- Full column reordering through click and drag (an optional style).
- Individual cell justification.
- Complete control over the gadget through simple code and a simple (optional) callback.
I do intend adding some kind of editing capability very soon as well as a few more cell formatting options.
A screenshot (a bit fuzzy I'm afraid!)
As well as this, and because of the time consumed by what is really a side project (and a complex one at that! ) I have removed the donate options from the Nexus section of the nxSoftware site. Whilst Nexus remains free and open-source, I have instead added a 'Paid support' option to the website.
For a once-only and very very low payment, comes a promise of my help and assistance with any project utilising any of the Nexus controls; from simple suggestions to help with the project's code and/or alterations to the Nexus controls themselves should an individual product require it. Suggestions for improvements to Nexus (or ideas for new controls) will also get priority consideration.
This seems to me the best way of supporting what is an on-going project. Consider that the new treefield control has taken close to two weeks of fulltime coding, time away from my commercial projects, and I still intend working on upgrading this control even further!
The download link is via the http://www.nxsoftware.com site.
My apologies for the constant updates, but that follows from my using these controls myself etc. At least they are getting a thorough road-testing this way!
Have refined both the nxSplitter and the nxImageArray quite a lot. Lots of flicker eliminated. Also, the nxImageArray has been adjusted in order to work with Win NT (3.5 onwards - my thanks to Milan1612) and it will now show a horizontal scrollbar in the event that the control's width is insufficient to show a complete column of images. Previously, the control would never display a horizontal scrollbar and would instead only show images if the control's width was sufficient to show at least one column etc.
Removed some causes of flicker in some, albeit rare, circumstances.
These controls have been upgraded.
First, you can now opt between selected images being blended with the background or simply exhibiting a customisable selection border etc.
More importantly, however, you can now receive notifications regarding the selection / deselection of individual items even in multi-select image arrays. This makes the control far more felexible and was something I needed for my current work in that I required a flexible thumbnail selector etc.
Have added a second demo program for this control which not only illlustrates the new functionality, but goes some way towards demonstrating the powerful drag/drop options etc.
You can now control which of the child gadgets is collapsed and anchored whenever the user clicks the 'gripper'. Up to now the gadgets would alternate, that is the first gadget would collapse the first time the gripper was clicked, then the next click would collapse the second gadget, then the first gadget and then the..... You now have complete control over which one (if any) is collapsed and anchored.
This is handled through the nxSplitter callback. See the "DEMO-2 nxSplitter.pb" demo program for details (look for the commented lines in the callback function).
Have added the special value #nxSplitter_RestoreSlider which can be used with the nx_SetGadgetState() command in order to release a previously anchored slider etc. The slider is returned to it's previous 'proportional position'.
here's a project which I intended to be a commercial one, but as I find I am able to spend but a tiny fraction of the time on it that I originally intended, and it is otherwise gathering dust, I have decided to release it as open-source and for free. I do, however, encourage a donation if possible and if Nexus is indeed found to be useful etc. because I have nevertheless spent a lot of time on it. It's just that I've had no time for it in the last month and I reckon it could, even as it is, prove to be useful. Better it being used than just sitting there staring at my laundry basket!
So what is Nexus?
Well, it was intended to be an ever increasing collection of custom gadgets for Purebasic. As it is, the number of complete gadgets is 4 and whether I end up adding any more depends very much on my needs of the moment etc. If I find myself in need of a new type of control then I will of course add it to Nexus.
Nexus is more than just a bunch of unrelated controls, however; it is an entire framework into which the gadgets 'slot'. Very much like the Purebasic gadget library, the Nexus framework employs a single set of commands which the developer uses to control the gadgets etc. For example, we have nxAddGadgetColumn(), nxAddGadgetItem(), nxClearGadgetItemList() and so on. Makes things very simple!
Please feel free to download it, have a look at it etc. If you end up intending to make use of it, then please read the licence carefully first as I do of course place certain restrictions where sharing my source code is concerned. Nothing which will restrict your use of Nexus.
Please note a couple of things :
- The nxPropertyBox control requires my EsGRID control. Now I cannot (and will not!) supply this for free as this would be totally unfair on all those who have purchased EsGRID etc. I have, however, lowered the price of this control somewhat.
However, Nexus will run fine even without EsGRID, you just will not be able to use the property boxes.
- Even though massively incomplete, the help manual is a must. It details the commands exposed by the Nexus framework. The only gadget covered in the manual is the nxSplitter, but the examples and the Nexus residents file will shed a lot of light on each control. You lot are programmers and can figure it out easily enough!
- It is very unlikely that I will entertain requests and suggestions where this product is concerned. If I was not self-employed and/or this was a commercial release, then things would be different in this regard, but time is my main issue at the moment.
Right, my fledgling programming website is where you'll get your hands on Nexus as well as some screenshots etc.