|My primary expertise as a software developer is servers. Good servers are normally written in system languages like C or C++. I used C for many years, but switched to C++ when I wrote the War FTP Daemon in 1996. C++ is not a language for novies. It took four years to lean, and another four years before I was satisfied with the code I produced. Today I',m qyute happy with C++.
Servers are cool to write. You can focus on what the program is going to do, and how it can do it fast. Unfortunately, servers are controlled by human users - and human users demand nice looking applications to monitor and control the server.
Designing good GUI's is even worse than learning C++. It takes alot of time and alot of thiking to do. It also require a good software API where the developer can focus on the clients look and behaviour, and not how to bypass limitations and bugs in the too he is using. Warftpd version 1, 2 and 1.8 was all written in C++ with the user GUI program using MFC (Microsoft Foundation Classes). The idea behind MFC is sweet. The actual design and implementation is ugly. It's possible to use it out of lack of a better tool - but it's no fun at all. And it's only available for Windows programs. Today I want my programs to run under Linux as well.
I invested six monts to learn Java a few years agon, and wrote a few minor applications. Java can run under alot of operating systems with the same source code. It can communicate with my servers trough Corba or ICE (the Internet Communications Engine). But it sucks. The programs look unfamiliar on any platform. And it takes even more time to write the GUI code for Java than it did with MFC.
So I have invested another six monts to learn C#. Finally a RAD language with lots of controls that can be run unmodidied under Windows and Linux. Well not really. C# as a language looks ok when you read about it, and when yo yuwrite simple applications. But if lacks modern GUI widgets, resource files (the user interface is hard-coded in C# in the source files in version1!), and when you try to use advanced widgets like properties, or data-binding - you will realize sooner or later that it really sucks too. C# is great for novise programmers, but there are to many limitations (threading GUI anyone?) and features that I woukld rather describe as bugs. And finally - none of the priogframs I have written under Windows will run with mono or GnuCS under Linux!
This week I started looking at the available cross-platform open source GUI toolkits for C++. FOX was very attractive - but too limited. QT would have been my first choise - but they screw up as usual by restricting QT for Windows to comercial use only. Why are they so increadible stupid? First they lisenced QT for linux in a way that made the Linux community angry, and GTK was made as an alternative. Today QT is making money on mobile handheld devices (like cell phones) - but since they are holding back thousands of developers from using it as a cross-platform tool, the aklternatives (like wxWidgets) gets alot of attention, and as a result, the truly free alternatives are strengthened and is entering the scene also for mobile applications. I don't know if the marketing/legal staff at QT is evil or braindead - but I have decided to go for alternative tools - even if they release an open source version for Windows (MSVC) in the future.
After reading alot of opinions on slashdot and usenet, and looking into the documentation on the different alternatives, I decided to go for wsWidgets. It's pretty mature, have a long history (the project was started in 1992), and it has lot of supported and contributed widgets. It still miss some critical features, like a robust docking framework, but there are several free packages available that adds this feature. There is also a 700 pages book available that can be ordered in print, or downladed as a PDF. The bok is well written and explains how to use the libary better than most books I have read about Java or C#.
So folks, the GUI for War FTP Daemon version 3 is under development in using wxWidgets. I'll present some screenshots in a few days. I'm also working on a professional GUI for MyDNS and warCMS (the content management software used by www.jgaa.com).
- FOX toolkit
- wxWidgets wxWidgets gives you a single, easy-to-use API for writing GUI applications on multiple platforms. Link with the appropriate library for your platform (Windows/Unix/Mac, others coming shortly) and compiler (almost any popular C++ compiler), and your application will adopt the look and feel appropriate to that platform. On top of great GUI functionality, wxWidgets gives you: online help, network programming, streams, clipboard and drag and drop, multithreading, image loading and saving in a variety of popular formats, database support, HTML viewing and printing, and much much more.