Quite impressive, I was developing a specialised input for time formats of
HH:MM:SS and I wanted to extend with ability to take minutes as pure number
and autoformat it to the above format. I have accomplished some of it but
your implementation seems more powerful. Will give it a try , thanks

On Thu, Nov 26, 2015 at 12:09 PM Denis Kudriashov <[email protected]>
wrote:

> I’m glad to announce new text framework Twisty.
>
> Twisty is text implementation based on active state idea. In this library
> text instances announce any change which happens with it. Due to this
> behavior Twisty provides cursors and layout objects which state are
> automatically restored after text changes. It is simplified implementation
> of text tools which operate on single text instance. They do not need to
> implement any synchronization of their state when somebody edit text.
>
> Any text editing should be performed by:
>
> text
> editContentsBy: [cursor insert: ‘new string’]
> andSubmitChangesBy: [text asString allDigits]
>
> First block in this example performs text changes by cursor instance.
> Cursor can be fetched by "text newActiveCursor". Also text can be edited by
> text region instances.
> Last block is predicate which validate changes. At the time of its
> execution text already applied all changes from first block. So full and
> completed text state can be verified. If state is incorrect all changes
> will be cancelled. If anything ok text will accept all changes by
> announcing TwyTextChanged event.
> In this example changes will be cancelled and ’new string’ will be not
> accepted.
> There is short version of editing method without any validation:
>
> text editContentsBy: [region backspaceKey]
>
> Editing methods return announced event. It can be TwyTextChanged or
> TwyChangesCancelled events. This events contains all changes which happened
> during editing block execution. Changes are presented by first class
> objects subclasses of TwyImmediateChangeAnnouncement:
> TwyCharactersSpanIncreased, TwyElementInserted, TwyElementsGroupRemoved,
> TwyCursorMoved and others.
> Changes can be cancelled. Cancel should be performed inside editing block:
>
> text editContentsBy: [textChanged cancel]
>
> It is used for undo/redo implementation.
>
> Twisty implements single text morph TwyTextMorph. Different behavior
> should be implemented by specific class of text tool (subclasses of
> TwyTextTool). It can be editor tool, selection tool, cursor tool, undo/redo
> tool and others. Text morph contains collection of such tools. Different
> combination of tools supplies different behavior. For example, text morph
> without any tools is simple readonly text field. Text morph with selection
> tool allows select text region and copy it to clipboard. If cursor tool are
> added to morph then blinked cursor are shown for visible text navigation.
> Tools approach allows replace usual hierarchy of text morphs by
> composition of tool classes.
> Tools are added to text morph by:
> textMorph ensureTool: TwyCursorTool
>
> TwyEditorTool adds editing behavior to text morph. It subscribes on key
> press events from morph to accept arbitrary characters input, cut selection
> or insert clipboard contents. All actions are delegated to instance of
> TwyEditor.  Editor by itself delegates execution of actions to text
> decorator and then It validates resulted changes by text validator.
> Text validator is responsible for text changes verification. For example
> validator can check that text has only digits and forbid insertion of any
> other characters. By default editor has TwyNullTextValidator which allowed
> any text.
> Text decorator is responsible for specific processing of usual editing
> operations. Text decorator decides how characters should be inserted or
> removed, how selected text region should be changed. By default editor have
> TwyNativeTextDecorator which inserts characters with usual logic where
> characters are inserted at cursor position and selection region are reset.
> But there is TwyMaskedTextDecorator which implements it differently. It
> overrides asterix characters of mask with inserted string and skips non
> asterix characters.
>
> You can see examples on available features in TwyTextMorph class side and
> in attached videos.
>
> Twisty. Text editor <https://www.youtube.com/watch?v=WNLSBt1eB2w>
> Twisty. Masked fields <https://www.youtube.com/watch?v=nZ3mWmJWp-k>
> Twisty. Smart numbers <https://www.youtube.com/watch?v=ilx8XuRFOeY>
> Twisty. Smart Characters <https://www.youtube.com/watch?v=iRpafGFcH_4>
> Twisty. Autoscrolling without scroll pane
> <https://www.youtube.com/watch?v=I_x3INGJy-E>
> Twisty. PlaceHolder <https://www.youtube.com/watch?v=tHNO-qnTY1E>
> Twisty. Live tuning <https://www.youtube.com/watch?v=Rm1jp3eHsCU>
>
> You can load code in Pharo 4 and 5  by:
>
> Gofer it
> smalltalkhubUser: 'dionisiy' project: 'Twisty';
> configurationOf: 'Twisty';
> loadStable
>
> Best regards,
> Denis
>

Reply via email to