Modular coding

I love modular programming and that definitely impacts how I write programs, even for my open source projects. For example, I'm working toward Author Intrusion again but I haven't touched that project yet. Instead, I've been focusing on writing a library form of configurator/settings/preference dialog boxes.

This is, relatively speaking, a very minor thing. But, almost every major program has them. And just as often, every major program reinvents the wheel to create a new preferences dialog box. I don't like reinventing the wheel though I'm guilty of doing it way too many times.

Now, I'm not planning on making some really fancy, reflection-base system to create beautiful configuration boxes for every operating system that CIL works on (though that would be cool), but I want something that a plugin (which Author Intrusion uses) has the ability to add a preferences dialog box. It is also used by the virtual text editor

I'm going to spend a week on preferences. I spent weeks on doing dynamic actions/keybindings (which I have to revisit and clean up), and months on the text editor (which I'm also revisiting after this to simplify code and add the features I need). The drawback of this type of development is that I won't actually get to Author Intrusion code for quite some time. However, when I did, the components that AI use will be fairly solid. I'm also hoping that this means that the individual components will be easier to test, to be reused, and generally stand-alone.

The stand-alone is important, mainly to avoid reinventing the wheel. MonoDevelop has an incredible text editor (which I stole concepts from). It did about 80% of what I wanted, though I disagreed with a few minor things (such as how error boxes show up). It would have been less effort to add the stuff I wanted (Ruby Markup for example), but the editor was very tightly coupled with the entire program. That means that either I basically write AI on top of MonoDevelop or I spend the effort to break out the editor. I decided to write a new one, that wasn't coupled with a specific program. More effort, reinventing the wheel, but I didn't see an easy answer for that one.