== Quote from Eldar Insafutdinov ([email protected])'s article > When I saw David's announcement this morning, I remembered that he brought up this topic > sometime ago(about half-year I think) and I promised to have a look at > wrapping Qwt (http:// > qwt.sourceforge.net/) as a part of QtD after we make next release. We never released the next > version of QtD (as usual due to the lack of manpower and time), but we are > still working on > it and hopefully we'll make it soon. I decided not to wait until the release, and try to wrap > Qwt with the development version of QtD. And it worked pretty well! I'm > writing about it not > to belittle David's fantastic work, which was written from scratch and for > sure deserves > admiration, but rather to do what I promised and I hope it will be useful. > So far I haven't ported all classes from the library, but the most difficult part of wrapping > is done, and binding the rest of the classes should be easy, which I will complete shortly. I > ported one of the Qwt examples from C++ to D to give a feel on how to use the binding, which > is available here: http://dsource.org/projects/qtd/browser/examples/qwt/simpleplot . Also, > screencapture of this little program in action: http://img13.imageshack.us/img13/6600/ > simpleplot.png . > The binding is cross-platform, I tested it on Linux and Windows. For the > latter, there are > pre-built packages which can be downloaded from http://dsource.org/projects/qtd/wiki/ > Packages . For linux it should not be difficult to build them from sources, > most of the > distributions contain Qwt. From what I read in the thread there is a problem with saving the > plots, which isn't solved yet. With Qt there are no such problems, any QWidget can be saved > to the pixmap object which you can manipulate as you wish. > There is at least one problem, the mentioned example crashes after you close > the application. > This problem is known and has nothing to do with Qwt, it's a QtD bug, which is currently > being worked on and hopefully we'll resolve the issue. > This is just a result of my one-day experiment. Both dfl+dflplot and QtD+Qwt have their > advantages. dfl has nicer API(I must admit I never used it), dflplot has also more Dish feel, > while Qt and Qwt are more mature and I think more powerful. In the end, we are in the good > position, because we have a choice.
Interesting, though from looking at your SimplePlot code and browsing the Qwt website, it looks like Qwt was designed much more as a set of low-level mechanisms with the "everything must be possible" philosophy. dflplot was designed more with the goal of being as easy to use as, for example, Matlab, in an exploratory context. It has a "simple things must be simple" philosophy. It contains a significant amount of policies as well as mechanisms and has defaults for basically everything, and simple plots can be created in a single line of code. Going off on a tangent a little, my work with dstats and dflplot has convinced me that, given the power of D's metaprogramming facilities, builtin strings and arrays, and fast compile times, there's no reason why, once dflplot and Lars Kyllingstad's SciD mature (I already consider dstats fairly mature), D can't rival Matlab and R in terms of ease of use for scientific and statistical computing, while at the same time being able to do "real" down-and-dirty programming in the same language. I feel dstats has already accomplished this for the small area of 1-d statistics and dflplot is another step in that direction. This vision is what's made me stick with D through all the compiler bugs, breaking spec changes and people looking at me funny when I tell them it's my language of choice. That said, it might be interesting to eventually port my high-level stuff to Qwt, or port it all to qtD. Unless DFL goes cross-platform soon, eventual goal for dflplot is to abstract away most of the GUI code (compile time abstraction; runtime abstraction would create way too much cruft) and port it to whichever cross-platform GUI lib becomes dominant in the D community. The GUI backend would simply be set by a version statement.
