Today, I had a chance to do a bit of forward planning for Author Intrusion. It wasn't exactly the greatest of news for me, mainly because of certain limitations I put on myself for this project.
For my personal projects, I write cross-platform applications. I use Windows and Linux pretty much equally (more Windows at work, more Linux at home). If I'm going to write something, it needs to work on both of those platforms.
I've tried to use Windows as my primary platform. It just doesn't work for me for how I work.
I'm also doing this as open source software. All of the code is out there for anyone else to see what I'm doing and even review my code (though that never happens).
These two things are significant factors when it comes to planning out any major project.
I've worked with Gtk# for a number of years. I like the library and it is a very solid, cross-platform product. It's currently what the program is written in and it works fairly well, though I am spending a fair amount of time working on "plumbing" because it is a relatively older library. The Gtk# library itself hasn't really seen a lot of love in the last few years, which isn't that great.
The biggest thing that is coming up is the design guidelines for Gtk 3 and docking windows.
Gtk 3 is a very nice platform and well designed, but it leans toward uncomplicated interfaces. In many ways, it is following the footsteps of the Windows 8 interfaces with supporting touch screens and large graphical elements.
Docking windows are a complicated UI element, but I think they are important for Author Intrusion. There are already many, much more stable, editors out there that handle the "clean and uncomplicated". I don't like using them, that's why I'm actually writing this program. I want something that can adjust to my current needs and can be arranged the way I want it to be. I like options, not because coding them is a joy, but simply because I feel that everyone should work the way they want to, not the way I think they should. This is one reason I'm using Visual Studio as my inspiration.
Being able to arrange the screen to suit a specific project or style is just one of those things that I want to support. Today, I think docking windows fits the bill.
Side note: When I was younger and playing RPG games, I always wanted to move screen elements around because they made more sense to me.
There is a library that does this,
gdl-sharp, but I haven't found a good, stable version that works with Windows and Linux while supporting Gtk# 2.12 (the current version I'm using) or 3.x. If I stick with Gtk#, I will probably have to figure out how to port gdl and gdl-sharp over to Windows and get it packaged for me to use.
As much as Gtk is aiming for simplicity, Qt is going the opposite direction. It has docking windows, a fairly clean structure, and easily expandable. It has also been a library that I think I would like using, but I haven't delved into it since it didn't play well with CIL.
Qyoto is the CIL (C#) wrapper around the library. Wrapping C++ in C# has always been a difficult thing. The current implementation of Qyoto has gotten a bit stale because of limitations in the previous wrapper library. There is a new wrapping being developed, but it isn't even remotely ready for prime time.
The library has what I need in Author Intrusion, but I think I would need to spend a few months to help it get up to speed before I could even start the process of migrating it from Gtk# to Qyoto.
I did consider Awesomium for a while, even tried to write a version of Author Intrusion. It uses Chromium as the front-end with CIL in the back end. The problem is… it isn't open source. Also, I noticed the Linux side is considered a second-class citizen and there were a lot of bugs with keyboard bindings that I couldn't solve (and the community wasn't large enough to help me figure it out).
WebKit and Node.js?
Original, I rejected node.js for a few reasons. It isn't in CIL, which is (currently) my language of choice. It would involve learning a whole new set of libraries and API. Plus, I've gotten rather addicted to ReSharper.
But… I think it can do what I want it to do. And since my other choices don't look like I could get them working in a short period of time, I think it might be worthy my time to spend a month or two just to see if it work. I'm early enough in the process that I can reconstruct most of my work in any language in a short period of time. I'm also spending a lot of time reinventing the wheel with something I know I can get Chromium (the basis of webkit-node) to handle.
There will be other problems, of course, but I'm seriously thinking about trying it out.
Also blame TileMill for showing me what can be done with cross-platform node.js.