Skip to content

Feature Brainstorming

dslmeinte edited this page Sep 29, 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.

Addendum: I (=/dslmeinte) found this quite easy to do. Let me fork the Concrete so I can issue pull requests.

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.

Auto-expanding aliases

Starting point for adding any element in the tree is currently typing a class name. Languages usually have elements that are heavily-used but for sake of organization and a logical structure it isn't a good idea to give these a special status. For these cases, it would be ideal to have a number of aliases (next to the class names which are already valid at a certain point) which auto-expand. An easy example would be the creation of a Feature with kind: attribute, lowerBound: 0, upperBound: 1, type: String datatype upon entering the alias 'String-attrib'.

Shuffling of elements

A simple way to move elements up or down a containment list would be most welcome. Currently, you can only achieve this by some tedious copy-and-pasting.

Clone this wiki locally