On 2/19/08, Viktor Pracht <[EMAIL PROTECTED]> wrote: > I'm a Supreme Commander fan. My idea of the perfect schematic editor involves > a zoom-based UI like the one in Supreme Commander > http://www.youtube.com/watch?v=MchZAhDFr-I
That has some interesting ideas that we might borrow from. > What does _your_ perfect IDE look like? (For all values of "you" on this > list.) Ok. This is incomplete and not fully thought-through (I had planned on figuring out what worked and didn't as I went along). At any point in time, you are looking at a module and its immediate submodules. Optionally, you can view even more levels, but that is something that you wouldn't want to have enabled all of the time. The current level module is represented as a rectangle that can be zoomed or fixed to the size of the window, decorated on the outside with its I/O ports. Those ports can be dragged around, added (drag in from a palette?), removed (dragged off into space?), renamed (dclick?), and have other attributes (bus width, etc.) edited (right-click?), have their name changed, etc. Inside of the current module, you can drag in from a palette various template modules. Generic containers that just let you write your own Verilog code or more complex things like pipeline stages. These can be dragged around arbitrarily inside of the current module. They can have ports added, removed, dragged around, renamed, edited, named, same as the top level. Some way must be provided to connect (wire) ports of submodules (shift + click, drag?) to each other and to the ports of the surrounding module. Select a wire and press delete to move it. Lasso a bunch of them to move, connect, disconnect in relative unison. Use some kind of snapping thing to automatically connect to nearby ports. Double-click (maybe) the empty space in a submodule to expand it. It now becomes the current module, and you see its submodules. Some "up" toolbar button would go up a level. Here's a use case: I've put together a pipeline by wiring up various types of pipeline segments, and I have coded up the arithmetic done by each. The encoding of the logic design on disk is in Verilog code with comments, so there's no import/export to speak of. I've run it through the synthesizer and discovered that this one stage (A) has too much combinatorial delay, so I want to split it (into A' and B) (and manually recode the math, of course). I select the connecting wires between the module in question (A) and some other module it's connected to (C). Through either a direct split function or via disconnect+duplicate+drag, I wind up separating A and C and having dangling wires sticking out. Then I drag from the palette another pipeline stage. I select groups of wires, and connect them up so that A connects to B, which connects to C. Now I edit the logic in A and B (depending on the semantics, that may require expanding into them). There may be a better way of going about this. But it's a hell of a lot easier than doing it by hand. That would involve copying and renaming loads of wires, visually ensuring that their widths are correct, typing in another module instance, etc. Very error prone. I would know, because I do it a lot and screw it up every time. I expect I will want to get my hands dirty in the development. I have had success with Java (swing) and wxWidgets. But I'm sick of C++ (I know more about it than most people I know who still use it, but after spending so much time using Ruby, I loathe going back). I could never get Qt to work. I don't feel like learning GTK. wxWidgets seem logical to me; Java widgets seem logical enough. Also, I like NetBeans... seems less busy than Eclipse. Also, although I don't usually use an IDE, since I don't know the Java classes inheritance tree for their built-in objects, it's nice to have it right there in front of me. I don't want to learn another framework. I want to hack hardware, so selfishly, I suggest this so as to minimize my cognitive load. We need to cater to hardware hackers. That means we need to have a Windows installer. Some even use Macs. An easy way to make it cross-platform is to develop in Java. This has the added benefit of making it look reasonably native on all platforms. (No need to use X11 on the Mac either.) Oh, and although I don't know how to do this, I'm going to make it a point of priority. The UI doesn't need to be particularly pretty or clever. It needs to be (relatively) obvious, totally orthogonal, and efficient to use for beginner, intermediate, and expert (which means that some UI operations need to have more than one way to get at them). I think "save" should go the way of the dodo. One of those UI design tutorials linked to through OSnews (check them out!) described this financial app. When you want to add a transaction, you click some + button and fill out a form. When you're done, you just do something else. If you want to edit it, you select the entry and start editing. iCal on the Mac is like this. We should think this way! No more lost work due to crash. No more forgetting to save. But say you want to revert to an earlier version? Simple: Excellent Undo capability and revision control. We need to decide if that's an innovation we really want to make for this, because we'll have someone wanting to hit Save and immediately switch over to ISE and his Synthesize. If we're saving on some timer, they could get ahead of us by half a second and have inconsistent files. -- Timothy Normand Miller http://www.cse.ohio-state.edu/~millerti Open Graphics Project _______________________________________________ Open-graphics mailing list [email protected] http://lists.duskglow.com/mailman/listinfo/open-graphics List service provided by Duskglow Consulting, LLC (www.duskglow.com)
