views:

438

answers:

11

I have a DVD cataloging application that I wrote a few years ago with MFC. Records are saved in a sqlite database, so basically it's a CRUD app. UI-wise, it has a tree view on the left, a list view (grid) on the top right, and an HTML view (embedded IE) on the bottom right. Nothing fancy.

I wanted to update the app with more features, but I've been using Java EE for the past couple of years and I realized that I wasn't productive at all with MFC. So I'm thinking maybe I should use something else to boost my productivity. Cross-platform would be a big bonus, but it's not absolutely required.

Here are the options based on my research:

  • Java / Swing: I can utilize my Java knowledge; great third party libraries (such as Spring for IoC and Hibernate for ORM); cross-platform. Downside is, JRE required for users; Swing seems to be in the "maintanence" mode and it's not getting much attention from Sun.
  • C++ / Qt: native application; cross-platform. But I'm new to Qt so I have to learn it first.
  • C# / WPF: WPF seems to be the future of Windows GUI development and I'm impressed by some WPF sample apps. I have some experience with C# but I need learn WPF. Downside is, Windows only; .NET 3.5 runtime required.

So what would you use if you were in my situation? Thanks in advance for any suggestions.

+4  A: 

If you want to learn some new skills while developing this application, then C# / WPF, and LINQ in C# 3.0 is really great if you didn't have it in Java.

If you just want to get on speed, then you already answer your own question, Java / Swing. It is what you are good at.

J.W.
+4  A: 

I'm actually a big C# fan, but since you said that cross-platform would be a huge bonus, I think that Qt might actually be better for that. C# can be cross-platform via Mono, but I've had better results with Qt in that respect. They also have real good documentation in QtAssistant to get you started.

Erich Mirabal
+2  A: 

Well if you really want a class platform type of application, I would convert it into a web application and host it. That way if one user uploads dvd information or a dvd cover picture another user could take advantage of that information already input into the system.

If your going to develop for the desktop try to make feel like its an application made for that platform by utilizing the OS UI tools. And for windows, pick your 3rd option C# /WPF.

Mark Robinson
You don't need to be a web application to be internet ready. WebStart manages it fine. If you need any Windows integration (or integration with non-Windows desktops) then I'm sure you can find appropriate platform-specific Java libraries.
Tom Hawtin - tackline
+1  A: 

If you have some non UI code in your MFC app that you would like to reuse then consider QT. Otherwise pick whatever you prefer to learn.

lothar
+1  A: 

Instead of C#/WPF you could give Silverlight a look. You app seems simple enough that it would not take a lot to get up and running. Similar to the demos that are shown off at conferences.

Once you get the basics down it will be fairly easy to add some cool features like animations, movie clips, album art, coverflow like interface etc.

You will be able to target Windows/Mac users and possibly Linux with Moonlight. But I haven't looked at Linux in the past 8 years so I really can't say much about it.

Robert Kozak
+2  A: 

Consider PyQt + Python as well if your productivity is a big issue. Trust me when I say the learning curve for Qt is well worth it, and not as hard as it may seem at first.

Sqlite support is in both the Python standard libraries and the QSql module in Qt if you prefer to use that.

PyQt + Python is a cross-platform option as well, since Python is available for many platforms and Qt's cross-platform to begin with.

The controls you mentioned you used in your application are all available in Qt.

Chris Cameron
+3  A: 

The only other tool apart from raw C++ is Delphi. Period.

With other tools you will have problems in the deployment.

With Delphi you will produce native exes, self-contained. Also, the database connectivity is great.

You never will be dissapointed by lack of controls or 3d party tools, a lot with source code and with free/commercial toolset.

And the compiling times are the fastest in this galaxy ;)

So, if you are serious in provide no-hasle app for your customers, and that customers are not tech-oriented like developers so could be confused because which one of the 4 .NET runtimes install, want minimal support, easy downloads, click-click-install-go, apps that work instanly like Skype,TopStyle (made with Delphi) and others,then Delphi/C++ is are your only option. Seriously. The ONLY options.


If you want a cross-plataform solution, then FreePascal/Lazarus could work if your GUI is minimalist.

mamcx
+1  A: 

With Eclipse RCP, you get Java, cross-platform development (see Delta Pack), native look (via SWT) and a great framework collection for desktop development (declarative UI, plugin management etc.). You should definitely give that a try.

thSoft
+3  A: 

In most cases, as long as the scope of the project is reasonably small, and the computational needs are modest, I tend to favor using TCL/Tk. I have not yet learned a gui api in which I'm more productive than tk (not to say that there isn't one, just that I've tried several and found them slower). TCL is not the most wonderful language to program in, to be sure, although there are a number of add-ons that help a lot, specifically [incr tcl] and tcllib.

The reason I choose this instead of other systems, I prefer coding in python, for instance, is because deployment with tcl/tk is close to unbeatable. With Starkit, you end up with a single file double clickable application that requires no installer, and is trivially portable.

TokenMacGuy
I agree, though we probably don't agree on the definition of "reasonably small". I think Tcl scales well to tens or hundreds of thousands of lines of code when properly engineered. Not that you need that many. I've currently got a 90% completed CRUD app on my thumb drive that right now is only 2000 lines of code.
Bryan Oakley
A: 

I went the C++/wxWidgets (but you could do Qt) route a few months back when presented with almost the exact same scenario (upgrade an app with a SQLite db). wxWidgets was fairly easy to pick up, had everything I needed, and was way easier than MFC. The best part was I found a good C++ wrapper for SQLite on CodeProject (e.g., CPPSQLite) and had the whole thing up an running in no time... The project sold me on wxWidgetss, in case you couldn't tell.

bi0m3trics
A: 

I would actually look very closely at something like adobe air. It is cross platform and can be html/javascript based so chances are you won't have a heck of a lot to learn except maybe a javascript library or two. It has the ability to talk to a local datastore or over the interweb to a webservice or RESTFUL service. Development is free with aptana. Check out some of the stuff written in it:

http://www.adobe.com/products/air/showcase/

stimms