RBC - Refactored BLT Components - Initial Release

RBC - Refactored BLT Components - Initial Release

Post by Bob Techen » Tue, 13 Oct 2009 00:34:46


As many of you know, I worked with a team of undergraduate students
last year on refactoring portions of the BLT toolkit so that it would
work with Tcl/Tk 8.4, 8.5, and beyond. I was particularly interested
in the vectors and graphs, as that is what we use. I also asked the
team to work on winop (for snap) and the embedded eps portions. The
team delivered binaries and source code last May, and it seemed to
work. But as I dug a little deeper, there were some build
dependencies, and the automated tests didn't work quite the way I
expected. I've managed to do a little more tweaking, and I think that
it is ready for an alpha release.

http://www.yqcomputer.com/

RBC is:
- BLT's vector, graph, barchart, stripchart, winop, and eps
components
- TEA compliant
- 3800+ automated test suite, plus many more manual tests
- Works (for me) on win32, linux 32 bit and linux 64 bit, Tcl/Tk 8.4,
8.5, and 8.6beta.

RBC is not (yet):
- documented
- experienced
- beautiful (see pkgIndex.tcl for an example)
- free from Tcl/Tk internals
- including Zoom-Stack
- tested with starkits

But if you're willing to try it out, I'd be more than happy to accept
any feedback. Please use the sf.net trackers to document issues or
problems.

Thanks,
Bob Techentin
 
 
 

RBC - Refactored BLT Components - Initial Release

Post by Will Duque » Tue, 13 Oct 2009 01:26:42


Bob, you rock.

 
 
 

RBC - Refactored BLT Components - Initial Release

Post by MSEdi » Tue, 13 Oct 2009 17:20:53


Excellent work Bob and team,

I tried out the stripchart example and it works ok (even in a starpack
win 8.4.12, 8.5.7 and 8.6b1).

I had a problem with another example and will report back when I have
had time to check it out.

Have you kept all the options in the source code for BLT ? the graph
element has -ylow/-yhigh and -weight which although not well
documented are very useful.

Is this based on the blt2.4Z source ?

Martyn
 
 
 

RBC - Refactored BLT Components - Initial Release

Post by Roger » Tue, 13 Oct 2009 17:30:25

I have downloaded this and would like to see what's up. Should I be
able to compile and link a C program against this? If so, how has the
naming been changed from the BLT style? A quick look at the code tells
me this is not a rename-recompile replacement. I understand that there
are no docs. But is there at least a little advice on how one could
try to evaluate it from code that was originally BLT?
 
 
 

RBC - Refactored BLT Components - Initial Release

Post by Bob Techen » Tue, 13 Oct 2009 22:09:04


Yes, RBC is based on BLT 2.4z with both patches applies.

Bob
 
 
 

RBC - Refactored BLT Components - Initial Release

Post by Bob Techen » Tue, 13 Oct 2009 22:17:28


Good question, Roger. I've only been looking at it from the script
standpoint. But I believe that the RBC code is mostly just renamed
from BLT. (e.g., BLT => RBC, Blt => Rbc). They removed quite a bit
of cruft dating back to very old Tcl/Tk releases, and made the whole
thing TEA compliant. But the functions and calling conventions should
be pretty much the same as BLT.

Bob
 
 
 

RBC - Refactored BLT Components - Initial Release

Post by MSEdi » Wed, 14 Oct 2009 00:27:10


Bob, I renamed the linux version of the .so to be the same as the
windows version and modified the pkgIndex to replace .dll by [info
sharedlibextension], I now have a multiplatform starkit which runs on
Linux or Windows !!

My main application which uses BLT also uses the Tabset and Busy
elements. If I get time I will try to patch a version to use RBC to
realy try it out.


Thanks again to you and your team.

Martyn
 
 
 

RBC - Refactored BLT Components - Initial Release

Post by Bob Techen » Wed, 14 Oct 2009 01:03:03


Way cool!

> elements.
I've been using Ttk:notebook instead of BLT tabsets, and I understand
that the BLT busy command is available outside of BLT.

Good luck,
Bob
 
 
 

RBC - Refactored BLT Components - Initial Release

Post by MSEdi » Wed, 14 Oct 2009 01:46:35

I have been looking for a replacement to the tabs mechanism/interface
but the users realy like it. ttk::notebook does not gracefully handle
what happens when there is no more space for the tabs (bwidget scrolls
as per FireFox) and blt adds multiple layers.

The tabsset functionality is for switching between multiple elements
which are not necessarily pages. I have downloaded the Busy stuff
already.

Do you have any Idea how/if/when the missing parts (zoomstack,
crosshairs, activelegend) will be added ?

I saw in the Readme that the undergraduates have graduated. Are they
still helping out ?

Martyn
 
 
 

RBC - Refactored BLT Components - Initial Release

Post by Donal K. F » Wed, 14 Oct 2009 01:47:05


You shouldn't need those with Tk 8.6; the ttk::notebook widget (since
8.5) is a pretty reasonable replacement for Tabset (as I understand
it) and 8.6 includes the [tk busy] command, which should look fairly
similar to you...

Donal.
 
 
 

RBC - Refactored BLT Components - Initial Release

Post by Bob Techen » Wed, 14 Oct 2009 05:34:36


Zoomstack won't work because I didn't ask the students to refactor
'busy.' I haven't made any effort to that end. (yet)

To the best of my knowledge, active legends and crosshairs are in
there. There are automated tests for those features. (Although I
haven't personally tried them.)


I'm not expecting help from the students. I got what I wanted, and
they graduated. :-)

Bob
 
 
 

RBC - Refactored BLT Components - Initial Release

Post by Donal K. F » Wed, 14 Oct 2009 09:43:53


You'll want to argue that with Joe English. AIUI, he feels that if
there are too many tabs for them to fit on the screen at once, you
shouldn't be using a tabbed notebook. (I'm sympathetic to this PoV; I
hate the other two...)


You can use a ttk notebook for that if you give it a style that
doesn't have the actual tabs...

Donal.
 
 
 

RBC - Refactored BLT Components - Initial Release

Post by MSEdi » Wed, 14 Oct 2009 17:24:51

I don't understand the connection between zoomstack and busy. The
graph widget is severly limited without the zoomstack ability to zoom
in on regions of the graph.

I just quickly tried the active legends and crosshairs because the
graph demos for BLT use them (as well as me) I will look through the
source to see how they are accessed and try again.

What does Joe English suggest as a UI concept to replace the tabs, all
the browsers use tabs and I don't see anyone saying its not good to
open more than 10 pages. I use tabs in an editor and find that
visually and conceptually it is an easy way to switch between files, I
use a list too but that does not work as well. Scrolling the tabs with
the mouse wheel is infinitly preferable however than the multi-tier
tabs. I actually use the tabs to switch between BLT graphs in a MDI
system which works well. Again I cannot use ttk::notebook for dynamic
page systems (pages added/removed by the user actions) because I
cannot tell my users 'its best not to open too many as it does not
look too good'. I can understand that Joe does not appreciate lots of
tabs but this rules out the use of the ttk::notebook for these
systems. Scrolling tabs also take up much less screen real-estate
than a tree/listbox.


Martyn
 
 
 

RBC - Refactored BLT Components - Initial Release

Post by Bob Techen » Wed, 14 Oct 2009 20:58:22


I don't understand it, either. The student team had their heads in
the code. Since they've moved on, I guess it is up to me to figure it
out.

I see crosshair functions in the automated tests. The BLT_Crosshairs
script was omitted from the library directory. I only just tried a
graph demo yesterday. It would work without those script calls, and
replacing table geometry management with grid. Maybe if I work with
those demo scripts a bit, I can figure out if those parts might work.

Bob
 
 
 

RBC - Refactored BLT Components - Initial Release

Post by Uwe Klei » Wed, 14 Oct 2009 21:11:53


afair the bltZoomStack stuff is (completely) contained in graph.tcl
i.e. it is implemented as scriptonly

same goes for some other features.

# grep -i proc\ *blt:: graph.tcl
proc blt::LegendSelections { w } {
proc blt::legend::SetSelectionAnchor { w tagOrId } {
proc blt::legend::MoveFocus { w elem } {
proc blt::ActivateLegend { graph } {
proc blt::DeactivateLegend { graph } {
proc blt::HighlightLegend { graph } {
proc blt::Crosshairs { graph {event "Any-Motion"} {state "on"}} {
proc blt::InitStack { graph } {
proc blt::ZoomStack { graph {start "ButtonPress-1"} {reset "ButtonPress-3"} } {
proc blt::PrintKey { graph {event "Shift-ButtonRelease-3"} } {
proc blt::ClosestPoint { graph {event "Control-ButtonPress-2"} } {
proc blt::AddBindTag { widget tag } {
proc blt::RemoveBindTag { widget tag } {
proc blt::FindElement { graph x y } {
proc blt::FlashPoint { graph name index count } {
proc blt::GetCoords { graph x y index } {
proc blt::MarkPoint { graph index } {
proc blt::DestroyZoomTitle { graph } {
proc blt::PopZoom { graph } {
proc blt::PushZoom { graph } {
proc blt::ResetZoom { graph } {
proc blt::ZoomTitleNext { graph } {
proc blt::ZoomTitleLast { graph } {
proc blt::SetZoomPoint { graph x y } {
proc blt::MarchingAnts { graph offset } {
proc blt::Box { graph } {
proc blt::ResetPostScript { graph } {

uwe