Re: [boost] Thoughts for a GUI (Primitives) Library

Giorgio Zoppi 09/01/10 2:17 PM >>> I don't know if there's enough space for this. There are a plenty of GUIs Framework, like Qt or wxWindows, which are more advanced. -- Quiero ser el rayo de sol que cada día te despierta para hacerte respirar y vivir en me. "Favola -Moda".
I concur, it would be difficult to match QT for any cross platform GUI development. It is an extensive, mature framework available under the LGPL and in terms of boost there are workarounds to make boost and QT signals co-exist. I'm not so familiar with wxWindows, but both of these GUI libs have been under development for some time and it would be difficult to compete with them, which is what any new library would have to do. -- This message is subject to the CSIR's copyright terms and conditions, e-mail legal notice, and implemented Open Document Format (ODF) standard. The full disclaimer details can be found at http://www.csir.co.za/disclaimer.html. This message has been scanned for viruses and dangerous content by MailScanner, and is believed to be clean. MailScanner thanks Transtec Computers for their support.

On 9/1/2010 3:38 PM, Ralf Globisch wrote:
Giorgio Zoppi 09/01/10 2:17 PM>>> I don't know if there's enough space for this. There are a plenty of GUIs Framework, like Qt or wxWindows, which are more advanced.
wxWindows is horrendous as a modern C++ GUI library. It uses C++ as it was used some 15 to 20 years ago and makes endless excuses about why its dialect of C++ must never be upgraded centered around support for hopelessly non-compliant C++ compilers. Qt is a proprietary framework, also not using modern C++ but its own in-house ideas instead, which have long ago been superceded by modern C++ constructs such as in Boost libraries. Furthermore one can not create commercial applications with it without either releasing the source code or paying Trolltech, or whoever owns them now, some large amount of money. Neither solution is practical for Boost end-users. There are also lots of other C++ GUI systems around, none of which I have ever found personally flexible enough. Whoever would be capable of creating a modern C++ GUI system, as difficult as it would be to do, might find it worthwhile. However a number of others have pursued this goal in the past with appropriate Boost vault and Boost sandbox libraries, without getting very far in interesting other Boost users/developers in the practical usage of their systems, or encountering endless discussions and disagreements among programmers who want different things in their GUI library. So I too think it is an extremely difficult task but not for the reason that there exists anything out there good enough or useful enough as an alternative.

It is good that you posted your position on why Boost should have a GUI library as you made better points that I could. I also understand that it is a large project, which is why I am proposing that the task be taken on in small steps starting with the most minimal code base that can still make a GUI based application possible. Regarding the endless debates on how a GUI show act, the level I am aiming at seems to only have much debate on how event handling should be implemented. Speaking of event handling, I hope that after reading your position people will see that a Boost GUI library does have a purpose, and will focus on discussing the details of the library.

We had a long discussion on the french community developpez.com recently about exactly this subject. Most of the participants were fighting over the fact that Qt is well enough and that working with high level C++ for GUI is not currently necessary. In the discussion some thought were put in a library concept (that was started after the discussion but I'm not sure about it's current state) and I remember proposing some kind of design, something similar to what we see in recent boost libraries(boost::log, boost::msm) : having the lib being a meta-library with customizable front-end and back-end. I don't think it's possible to build a GUI framework that is general enough for any kind of use. But I think it's possible to provide a way to plug a input-specific-strategy and an output-specific-strategy in some kind of meta-library providing ways to define controls behaviour in a general way, with possibility to use input-strategy-implementation-specific interface if required and output-strategy-implementation specific interface f required too. I'm not sure I'm clear enough (and it's late)... anyway I never implemented something like that so I might be talking about unessessary magic. That said, I and others put a lot of thought in some kind of implementation but I personally don't have time for such an epic task at the moment (I wish I had). The main problem I see is not about technique but about the domain's knowledge, because I see that a lot of us mere programmers don't know much about abstract of graphic communication. For french-speakers, the discussion can be read there : (the server is down, i'll post it later) On Thu, Sep 2, 2010 at 00:46, Edward Diener <eldiener@tropicsoft.com> wrote:
On 9/1/2010 3:38 PM, Ralf Globisch wrote:
I don't know if there's enough space for this. There are a plenty of GUIs Framework,
Giorgio Zoppi 09/01/10 2:17 PM>>> like Qt or wxWindows, which are more advanced.
wxWindows is horrendous as a modern C++ GUI library. It uses C++ as it was used some 15 to 20 years ago and makes endless excuses about why its dialect of C++ must never be upgraded centered around support for hopelessly non-compliant C++ compilers.
Qt is a proprietary framework, also not using modern C++ but its own in-house ideas instead, which have long ago been superceded by modern C++ constructs such as in Boost libraries. Furthermore one can not create commercial applications with it without either releasing the source code or paying Trolltech, or whoever owns them now, some large amount of money. Neither solution is practical for Boost end-users.
There are also lots of other C++ GUI systems around, none of which I have ever found personally flexible enough.
Whoever would be capable of creating a modern C++ GUI system, as difficult as it would be to do, might find it worthwhile. However a number of others have pursued this goal in the past with appropriate Boost vault and Boost sandbox libraries, without getting very far in interesting other Boost users/developers in the practical usage of their systems, or encountering endless discussions and disagreements among programmers who want different things in their GUI library.
So I too think it is an extremely difficult task but not for the reason that there exists anything out there good enough or useful enough as an alternative.
_______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost

-----Original Message----- From: boost-bounces@lists.boost.org [mailto:boost- bounces@lists.boost.org] On Behalf Of Klaim Sent: 02 September 2010 00:32 To: boost@lists.boost.org Subject: Re: [boost] Thoughts for a GUI (Primitives) Library
We had a long discussion on the french community developpez.com recently about exactly this subject. Most of the participants were fighting over the fact that Qt is well enough and that working with high level C++ for GUI is not currently necessary.
In the discussion some thought were put in a library concept (that was started after the discussion but I'm not sure about it's current state) and I remember proposing some kind of design, something similar to what we see in recent boost libraries(boost::log, boost::msm) : having the lib being a meta-library with customizable front-end and back-end. I don't think it's possible to build a GUI framework that is general enough for any kind of use. But I think it's possible to provide a way to plug a input-specific-strategy and an output-specific-strategy in some kind of meta-library providing ways to define controls behaviour in a general way, with possibility to use input-strategy-implementation-specific interface if required and output-strategy-implementation specific interface f required too.
The thing that would make such a library hugely useful to organizations such as ours would be if it could be adopted incrementally by developers who already have a large GUI codebase. For example we are unfortunate enough to have to maintain a very large MFC application. We can't afford to rewrite the whole thing using something else, but if we had a nice GUI library that could use MFC as a back-end, it might be a lot easier to add new features to the GUI. The tools it could provide might include: - a way to map MFC messages to signals (if such a thing is even possible) - helper classes for auto-arranging controls in a dialog (which would of course be generic enough that you could use them to auto-arrange pretty much anything) - an action system like the one in Qt The idea would be not so much to replace MFC, Qt, wxWidgets, et al, but instead to provide a kind of unified API and helper library that supplements them. Of course even that's not an easy task... Colin Latest News at: http://www.indigovision.com/news2010.php

Edward Diener wrote:
On 9/1/2010 3:38 PM, Ralf Globisch wrote:
Giorgio Zoppi 09/01/10 2:17 PM>>> I don't know if there's enough space for this. There are a plenty of GUIs Framework, like Qt or wxWindows, which are more advanced.
wxWindows is horrendous as a modern C++ GUI library. It uses C++ as it was used some 15 to 20 years ago and makes endless excuses about why its dialect of C++ must never be upgraded centered around support for hopelessly non-compliant C++ compilers.
Qt is a proprietary framework, also not using modern C++ but its own in-house ideas instead, which have long ago been superceded by modern C++ constructs such as in Boost libraries.
It's not clear whether those "modern C++ constructs" bring much practical advantage.
Furthermore one can not create commercial applications with it without either releasing the source code or paying Trolltech, or whoever owns them now, some large amount of money.
This is not true. You can use Qt for all kind of projects, including commercial closed-source, without paying a dime. It's under LGPL on all platforms, and "L" matters -- it means you are only prevented from making local modifications to Qt and distributing modified version. - Volodya

On 9/2/2010 12:31 AM, Vladimir Prus wrote:
Edward Diener wrote:
On 9/1/2010 3:38 PM, Ralf Globisch wrote:
Giorgio Zoppi 09/01/10 2:17 PM>>> I don't know if there's enough space for this. There are a plenty of GUIs Framework, like Qt or wxWindows, which are more advanced.
wxWindows is horrendous as a modern C++ GUI library. It uses C++ as it was used some 15 to 20 years ago and makes endless excuses about why its dialect of C++ must never be upgraded centered around support for hopelessly non-compliant C++ compilers.
Qt is a proprietary framework, also not using modern C++ but its own in-house ideas instead, which have long ago been superceded by modern C++ constructs such as in Boost libraries.
It's not clear whether those "modern C++ constructs" bring much practical advantage.
The practical advantage is that it becomes unnecessary to work in two different worlds, the world of Qt "extensions" and the world of modern standard C++ with Boost. This sort of hybrid development is always more complex than it first appears to be to program in. I personally would prefer a modern C++ GUI based around Boost and any other modern C++ libraries as well as the constructs soon to be incorporated in the next C++ standard.
Furthermore one can not create commercial applications with it without either releasing the source code or paying Trolltech, or whoever owns them now, some large amount of money.
This is not true. You can use Qt for all kind of projects, including commercial closed-source, without paying a dime. It's under LGPL on all platforms, and "L" matters -- it means you are only prevented from making local modifications to Qt and distributing modified version.
You are correct and it was my mistake.

Am Donnerstag, den 02.09.2010, 10:14 -0400 schrieb Edward Diener:
... I personally would prefer a modern C++ GUI based around Boost and any other modern C++ libraries as well as the constructs soon to be incorporated in the next C++ standard.
Who would not? If Boost had such a library, would anyone around here even consider using wxWidgets or Qt? Probably not? I think then anyone should agree that such a library could be useful to have in Boost. Whether it is worth the effort to create such a library is a completely different question. cheers, Daniel

On Thu, Sep 2, 2010 at 9:11 AM, Daniel Pfeifer <daniel@pfeifer-mail.de> wrote:
Am Donnerstag, den 02.09.2010, 10:14 -0400 schrieb Edward Diener:
... I personally would prefer a modern C++ GUI based around Boost and any other modern C++ libraries as well as the constructs soon to be incorporated in the next C++ standard.
Who would not?
If Boost had such a library, would anyone around here even consider using wxWidgets or Qt? Probably not?
I think then anyone should agree that such a library could be useful to have in Boost.
Whether it is worth the effort to create such a library is a completely different question.
Looking at the latest advancements in UI like Microsoft WPF, I think it would definitely be worth the effort to bring a modern UI framework to C++. We could do _so much better_ than wxWidgets, Qt, and GTK. I think a better question is: could enough people agree on its design? -- Cory Nelson http://int64.org

...I think a better question is: could enough people agree on its design?
It is unlikely that enough people will agree on a GUI that is usable as it comes; So it would be a better use of time at this point to provide the tools needed to build a portable GUI Library (so they will not need to worry about adding support for all the diffrent platforms) and tools that can make the task of making said library less monumental. After all, that is what the Standard Library and Boost do: they provide an interface for accessing system services in a portable manner and tools to make writing applications easier.

Am Donnerstag, den 02.09.2010, 11:07 -0700 schrieb Cory Nelson:
On Thu, Sep 2, 2010 at 9:11 AM, Daniel Pfeifer <daniel@pfeifer-mail.de> wrote:
Am Donnerstag, den 02.09.2010, 10:14 -0400 schrieb Edward Diener:
... I personally would prefer a modern C++ GUI based around Boost and any other modern C++ libraries as well as the constructs soon to be incorporated in the next C++ standard.
Who would not?
If Boost had such a library, would anyone around here even consider using wxWidgets or Qt? Probably not?
I think then anyone should agree that such a library could be useful to have in Boost.
Whether it is worth the effort to create such a library is a completely different question.
Looking at the latest advancements in UI like Microsoft WPF, I think it would definitely be worth the effort to bring a modern UI framework to C++. We could do _so much better_ than wxWidgets, Qt, and GTK. I think a better question is: could enough people agree on its design?
That depends on your definition of 'enough'. Don't expect the whole Boost community to develop a GUI library together. Most Boost libraries have one to three authors. Qt was designed by two developers. This seems to be the perfect size for a team to agree on design. Once there is a good design and maybe a prototype, finding more developers should be a minor problem. cheers, Daniel

Cory Nelson wrote: We could do _so much better_ than wxWidgets, Qt, and GTK.
We could also do worse :-) , given : 1/ the needed time that won't be available 2/ the fact that people have highly various needs for a GUI. 3/ that graphic designers are already trained on flash/web technologies (that can be used to do beautiful interfaces at cheap prices).
I think a better question is: could enough people agree on its design?
You could check notus (http://notus.sourceforge.net/) , which was developped by some boosters I think, and which has a modern c++ approach and also design documents. If you are looking for a minimalist 'open window' gui library, I think it's possible to find very good multi-platform projects that can do that (dlib, cimg, ...). Best regards, Pierre Morcello

Even though many years ago C++ was advocated as the right language for "complex systems and GUI applications", I think people agree the current status is unsatisfactory to write GUI applications in C++. In fact, I often see people writing GUI using C# and only some performance critical components with C++. If there is a "good" C++ GUI framework, no one wants the hassle and overhead of mixed language programming. Summarizing thoughts from other people in this discussion and the example of WPF, I think a successful C++ GUI framework would need: 1). Reasonably rich initial feature set. Serious applications cannot really switch from MFC/wxWidgets/Qt to simple things obviously (for example as simple as GLUI). Then if no substantial traffic is directed here to the framework, it may finally end up as another unsuccessful C++ GUI library. Yeah, this is sort of the chicken or the egg delimma. 2). Design tool support. Crafting GUI with lines and lines of hand written C++ code may not scale for complex GUI (unless C++ reaches that expressiveness of a much higher level). The C++ GUI framework will need to have a matching GUI design tool. 3). Code/art separation. Like C#/XAML in typical WPF. This allows GUI to be designed by user experience professionals or artists instead of C++ programmers. This is related to 2). None of above is easy. For example, when different platforms are considered, GUI is very complex and debatedly harder to abstract than process, thread, file system and others. Maybe lessons from Java could be learned. AWT vs. Swing, native look&feel vs. uniform look&feel blah blah. Each one has lovers and haters. I think today Java is used much more in GUI-less server side than front end client applications. It is a problem whether the open source community can handle it without strong coordination/organization and stable dedicated resources. In 2004 Stroustrup believed that C++'s problem in GUI was that there was not one dominant and standardized good GUI library that people could be attached to (http://www.artima.com/intv/elegance.html). This may remain true for years to come. -------------------------------------------------- From: "Cory Nelson" <phrosty@gmail.com> Sent: Thursday, September 02, 2010 2:07 PM To: <boost@lists.boost.org> Subject: Re: [boost] Thoughts for a GUI (Primitives) Library
On Thu, Sep 2, 2010 at 9:11 AM, Daniel Pfeifer <daniel@pfeifer-mail.de> wrote:
Am Donnerstag, den 02.09.2010, 10:14 -0400 schrieb Edward Diener:
... I personally would prefer a modern C++ GUI based around Boost and any other modern C++ libraries as well as the constructs soon to be incorporated in the next C++ standard.
Who would not?
If Boost had such a library, would anyone around here even consider using wxWidgets or Qt? Probably not?
I think then anyone should agree that such a library could be useful to have in Boost.
Whether it is worth the effort to create such a library is a completely different question.
Looking at the latest advancements in UI like Microsoft WPF, I think it would definitely be worth the effort to bring a modern UI framework to C++. We could do _so much better_ than wxWidgets, Qt, and GTK. I think a better question is: could enough people agree on its design?
-- Cory Nelson http://int64.org _______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost

On Thu, Sep 2, 2010 at 4:09 PM, Binglong Xie <binglongx@gmail.com> wrote:
For example, when different platforms are considered, GUI is very complex and debatedly harder to abstract than process, thread, file system and others.
While such matters are beyond the scope of what I would like to accomplish at this time, my general thoughts one how to build an abstract and flexible GUI is based on the iostreams in the Standard Library. Summary: - You have a class that define the function of various GUI components and can be extened or rewritten by inheritance (like std::iostream). - You have data objects that will consume user input to modify it, and produce any output for the control (like stream buffers). - You can imbue the component with an object that defines how it is drawn (like std::locale, only it is more like a single facet that than an entire locale). Before going farther, I would like to have a working design for the ground work needed for a GUI to be created.

Gwenio wrote:
On Thu, Sep 2, 2010 at 4:09 PM, Binglong Xie <binglongx@gmail.com> wrote:
For example, when different platforms are considered, GUI is very complex and debatedly harder to abstract than process, thread, file system and others.
While such matters are beyond the scope of what I would like to accomplish at this time, my general thoughts one how to build an abstract and flexible GUI is based on the iostreams in the Standard Library. Summary: - You have a class that define the function of various GUI components and can be extened or rewritten by inheritance (like std::iostream). - You have data objects that will consume user input to modify it, and produce any output for the control (like stream buffers). - You can imbue the component with an object that defines how it is drawn (like std::locale, only it is more like a single facet that than an entire locale).
Before going farther, I would like to have a working design for the ground work needed for a GUI to be created.
Have you ever written a GUI framework before? Have you ever done cross platform applications (with a gui) that work with both Mac and Windows, for example? What application domain are you targeting? Games have pretty different requirements from office type applications. Before you attempt to improve on the state of the art be sure you have mastered the state of the art and are in a position to make the right calls on what the next steps are. What exactly is wrong with QT and why is dynamic polymorphism, which is bad for so many other things, not the correct solution for GUI widgets? In a GUI you almost by definition don't care about runtime overhead because the latency requirement gives you plenty of time for everything but a dog slow java GUI to be adequately responsive. Just what is it about a "modern" C++ design that you think will be to your great benefit? Arguments about which dialect of C++ to use are about as tired as arguments about which programming language to use. Frankly multi-language application environments where C++ provides the back end speed and core logic while some scripting language provides the GUI seem to work perfectly fine. I don't really want to do GUI programming at all but I'm not sure I want to do it in C++. From my perspective GUI programming is the scut work you can contract out cheaply and get good enough implementations with reasonable turn around time. You don't need an "expert friendly language" for scut work and we can't expect the bottom of the barrel programmers who are currently able to excel at programming user interfaces to make sense of a boost style GUI framework API. In short you can't argue that a "modern" design for a GUI framework is a good design by pure virtue of being new. You have to state what your design goals are and how the design elements you choose achieve those goals better than the alternatives. Remember who your user is when designing a library. If you restrict your user base to people exactly like yourself by making design decsions based upon personal preference you will end up with at least one happy user of your framework, but by no means good odds of having many more. Regards, Luke

On Thu, Sep 2, 2010 at 5:04 PM, Simonson, Lucanus J < lucanus.j.simonson@intel.com> wrote:
Have you ever written a GUI framework before? Have you ever done cross platform applications (with a gui) that work with both Mac and Windows, for example? What application domain are you targeting? Games have pretty different requirements from office type applications. Before you attempt to improve on the state of the art be sure you have mastered the state of the art and are in a position to make the right calls on what the next steps are.
What exactly is wrong with QT and why is dynamic polymorphism, which is bad for so many other things, not the correct solution for GUI widgets? In a GUI you almost by definition don't care about runtime overhead because the latency requirement gives you plenty of time for everything but a dog slow java GUI to be adequately responsive. Just what is it about a "modern" C++ design that you think will be to your great benefit?
Arguments about which dialect of C++ to use are about as tired as arguments about which programming language to use. Frankly multi-language application environments where C++ provides the back end speed and core logic while some scripting language provides the GUI seem to work perfectly fine. I don't really want to do GUI programming at all but I'm not sure I want to do it in C++. From my perspective GUI programming is the scut work you can contract out cheaply and get good enough implementations with reasonable turn around time. You don't need an "expert friendly language" for scut work and we can't expect the bottom of the barrel programmers who are currently able to excel at programming user interfaces to make sense of a boost style GUI framework API.
In short you can't argue that a "modern" design for a GUI framework is a good design by pure virtue of being new. You have to state what your design goals are and how the design elements you choose achieve those goals better than the alternatives. Remember who your user is when designing a library. If you restrict your user base to people exactly like yourself by making design decsions based upon personal preference you will end up with at least one happy user of your framework, but by no means good odds of having many more.
Regards, Luke
My current target right is to create the abstraction layer between the application and the system. Everything else will be worked on later, once the minimum requirements for building a GUI library are close to being met. I am not building everything to my tasts; instead I am posting concepts for discussion (though no one has responed to them).

On 09/02/2010 04:04 PM, Simonson, Lucanus J wrote:
On Thu, Sep 2, 2010 at 4:09 PM, Binglong Xie<binglongx@gmail.com> wrote:
For example, when different platforms are considered, GUI is very complex and debatedly harder to abstract than process, thread, file system and others.
While such matters are beyond the scope of what I would like to accomplish at this time, my general thoughts one how to build an abstract and flexible GUI is based on the iostreams in the Standard Library. Summary: ... Before going farther, I would like to have a working design for the ground work needed for a GUI to be created.
Have you ever written a GUI framework before? Have you ever done cross platform applications (with a gui) that work with both Mac and Windows, for example? What application domain are you targeting? Games have pretty different requirements from office type applications.
All first-class GUI libraries have had commercial backing, multiple full time develop and testing staff, going for several years. It's an insane amount of work, however you slice it. By all means, it could produce something magnificent. But I would not want to see Boost's energies get diverted for a quagmire like that. Perhaps you could start out with something small, like just a edit control? It needs to support all the usual modern UI interactions. Unicode and bidirectional text rendering of course. Mouse selection (including of bidirectional text). It needs to be efficient enough to run on a mobile, or to have hundreds of them on a single screen. Multi-level undo support is important. Don't make the mistake of the Eclipse guys and neglect to support rectangular text selection regions in your design. Also, it needs to follow the fonts, color scheme, and keyboard conventions of the host OS such as multilingual text input. It needs to interoperate with the clipboard formats of the host as well. It also has to work with screen readers and other accessibility features, and comply with government regulations in that area in general. It probably needs some support for printing too. Of course, most developers will expect it to support data binding to relational data sources and that can be dragged-and-dropped as a component in some UI design tool.
Before you attempt to improve on the state of the art be sure you have mastered the state of the art and are in a position to make the right calls on what the next steps are.
I think there's a time and place for experimental projects too.
What exactly is wrong with QT
I've looked into using QT now and again since they opened the license. What gets me: 1. It seemed to require a toolchain oriented around QT (e.g., CMake), not just something you can #include and link into an existing source tree. 2. It seemed to require some custom preprocessing step that made it not valid C++. Aside from my strong preference for sticking with a standard source language, this caused minor annoyances like messing up the syntax highlighting and indention rules in my source editor. 3. It didn't throw exceptions.
and why is dynamic polymorphism, which is bad for so many other things, not the correct solution for GUI widgets? In a GUI you almost by definition don't care about runtime overhead because the latency requirement gives you plenty of time for everything but a dog slow java GUI to be adequately responsive.
All this builtin UI functionality was supposedly a major advantage for Java over C++. But big UIs frameworks tend to fall out of favor every few years. AWT, Swing, SWT, and "the web interface" and so on. Java became inseparable from its built-in APIs supplying concrete functionality and, frankly, I haven't heard many new ideas coming from there in the last few years. On the other hand, C++ doesn't promise much more than file and console IO, which is even optional. It adopts new features very slowly, but usually they're the kind of useful abstractions that never go out of style. Coincidentally, there's a wide ecosystem of UI toolkits with varying levels of specialization and platform dependence. It's possible (if not preferred) to write an efficient UI in C++ on just about any platform (except /Apple iP\w+s/).
Just what is it about a "modern" C++ design that you think will be to your great benefit?
Arguments about which dialect of C++ to use are about as tired as arguments about which programming language to use. Frankly multi-language application environments where C++ provides the back end speed and core logic while some scripting language provides the GUI seem to work perfectly fine.
I sure wouldn't mind if somebody would put the snappiness back in the mouse clicks the way we had it with a 386 running Windows 3.1. Modern OSes seem to have so much background processing and layers of virtualization I sometimes see the hard drive start churning when just hovering the mouse over some icons.
I don't really want to do GUI programming at all but I'm not sure I want to do it in C++. From my perspective GUI programming is the scut work you can contract out cheaply and get good enough implementations with reasonable turn around time.
I sometimes feel that way too, maybe you and I aren't good candidates for this project then? Nothing wrong with that.
You don't need an "expert friendly language" for scut work and we can't expect the bottom of the barrel programmers who are currently able to excel at programming user interfaces to make sense of a boost style GUI framework API.
In my (moderate) experience, the more UI-heavy a company's product is, the closer to the bottom of the design hierarchy the people who actually write code are kept. But I don't think it's fair to generalize them as "bottom of the barrel" programmers. I'd imagine there are lots of industry-specific apps being written where the chief scientist just happens to be the one also making the UI. I found this to be a great and inspiring story: http://www.nucalc.com/Story/ http://video.google.com/videoplay?docid=-7497796873809571567
In short you can't argue that a "modern" design for a GUI framework is a good design by pure virtue of being new. You have to state what your design goals are and how the design elements you choose achieve those goals better than the alternatives.
Now that's kinda putting the horse before the cart, don't ya think?
Remember who your user is when designing a library. If you restrict your user base to people exactly like yourself by making design decsions based upon personal preference you will end up with at least one happy user of your framework, but by no means good odds of having many more.
This is all good design advice. But there's also value in writing interesting C++, learning from it, trying something different in the UI space, and possibly ending up with something useful along the way. There's nothing sane or prudent about starting a massive programming project like a generalized UI framework. Let's not think it through to the point that everyone is convinced to stick with the status quo for another several years. My only suggestion is that it be done on a separate mailing list. - Marsh

In fact, I often see people writing GUI using C# and only some performance critical components with C++. If there is a "good" C++ GUI framework, no one wants the hassle and overhead of mixed language programming.
, Ok... Sorry but there is a totally different reason for this. Most of Windows developer works with Microsoft tools and had grown on what Microsoft had sell them. So withing Microsoft tools you have either C++/MFC (that is total nightmare) or C#/WPF which MS pushes forward. The biggest problem that most GUI developers work on Windows with Windows tools and believe that what MS sells them is the state of the art... Now, this picture is absolutely different if you look outside this box. Now, all Unix world lives happily with Qt and GTKmm that can't be called "good" C++ GUI frameworks but should be called "Great C++ GUI Frameworks" So I don't think that C++ lacks of good framework. It may be lacks a framework that works in Boost style, uses Boost.Signals or Boost.Function, but other then that, there are great tools. Artyom

Edward Diener wrote:
Qt is a proprietary framework, also not using modern C++ but its own in-house ideas instead, which have long ago been superceded by modern C++ constructs such as in Boost libraries. Furthermore one can not create commercial applications with it without either releasing the source code or paying Trolltech, or whoever owns them now, some large amount of money. Neither solution is practical for Boost end-users.
As Vladimir Prus already mentioned, this is not true.
There are also lots of other C++ GUI systems around, none of which I have ever found personally flexible enough.
Still, why start yet another imperfect GUI system then? Wouldn't it make more sense to help one of the existing GUI systems to become more perfect (or at least perfect enough to be acceptable)?
Whoever would be capable of creating a modern C++ GUI system, as difficult as it would be to do, might find it worthwhile.
What do you think about Adobe's Adam & Eve then? Regards, Thomas
participants (14)
-
Artyom
-
Binglong Xie
-
Colin Caughie
-
Cory Nelson
-
Daniel Pfeifer
-
Edward Diener
-
Gwenio
-
Klaim
-
Marsh Ray
-
Pierre Morcello
-
Ralf Globisch
-
Simonson, Lucanus J
-
Thomas Klimpel
-
Vladimir Prus