Skip to content

Feature Brainstorming

dslmeinte edited this page Sep 27, 2011 · 6 revisions

This is a page for brainstorming on new features for Concrete.

Preserve references when elements are renamed

Currently references break when the target element is renamed (i.e. when its identifier changes) and the user has to fix the references manually. The idea would be to keep the references even if the target identifier changes. This would mean that the representation of all affected references would change automatically.

Text Editing support

Here the focus is editing of larger text like sentences or paragraphs. In the simplest case, this could be realized by means of an HTML textarea. What would be even better though is to make any HTML element's content editable. This would mean that the editor automatically has the same look as the result. It means that any mixture of different fonts, markups, etc. could be edited and it would mean that the text could freely float and break lines according the HTML rules. The idea for implementing this is simply to draw (overlay) a cursor at the position to be edited and instantly modify the HTML element's content while the user types.

Taking this one step further, it should be possible to edit models which are "rich text", similar to a WYSIWYG HTML editor or MS Word. A metamodel could contain classes for paragraphs, sentences and words. Words could have attributes like "bold" or "emphasized", a font, font size, etc. Hyperlinks, images and mathematical formulas could be mixed into the text.

Expression support

Currently, expression like models like mathematical formulas are not very convenient to create. For example for creating "a * b + c", the user would have to create a "sum" node, then a "multiplication" node on the left, then a variable reference "a" and so on.

The desired behavior would be to just type "a * b + c" and the same model is create automatically in the background. This could be realized by triggering tree rewriting on special symbols (* and + in this case). So a "*" would replace the element on the left by a multiplication node and it would but the original element as the multiplications left operand. Then it would position the cursor on the multiplications right operand placeholder.

Another issue is automatic creation of "reference" nodes. In the example above "a" is probably a reference to a variable. In order to be a valid part of an expression, the reference must be wrapped by a special model element which is derived from the expression base element. Now, when the user types "a" this wrapped node should be created automatically in the background.

Better browser support

Currently there are problems with other browsers than Firefox and Chrome. Especially Internet Explorer support is desireable given that it is often still the only browser on many user machines, especially in larger companies.

Storing view information as annotations to the model

It would be useful to be able to store/persist view information like whether a particular element has been folded or not, so that reloading that model preserves the view state as well. This could e.g. be achieved by using a 2nd meta property ("_view" would be logical, with a boolean "fold" sub property) which persists annotations like these.

More logical keyboard navigation

Navigating around the model using the arrow keys takes a lot of getting used to. Obviously, that is because you're walking around a tree but the tree structure is "obscured" by the HTML templates and the difference between containment Features and attribute/reference kind Features. It would be useful if the arrows navigation could correspond more with the actual visual layout. Maybe it's possible to decorate the elements which can be reached directly using an arrow key with a picture of that arrow key?

Mac-friendly keyboard shortcuts

The current keyboard shortcuts are Ctrl-based, while Mac users are accustomed to Cmd-based shortcuts. E.g., Eclipse for Mac remaps this.

Class aliases

Having a good name and having a name that's easy to type in (or select through a short prefix, using content assist) are two very different aspects of meta classes. Often-used classes which are relatively hard to locate in this way could have a meaningful alias, which doesn't require "pollution" of the naming scheme. This is somewhat akin to the expression support-feature above in the sense that keyboard input is re-interpreted.

Clone this wiki locally