[Pharo-project] Object Buffer (implementation tryout)
Hi, I've always found the need to copy/paste object (not string) between say, an inspector/explorer and a workspace. So I did a small class called ObjectBuffer and some extension that provide this fonctionnality (see the attached picture). I added menu command so that 'buffer it' is accessible from text selection, inspector and explorer. I doubt the implementation is optimal but this is working so I decided to share and see if people would like it too To get the object stored: self buffer or ObjectBuffer buffer hth, -- Cédrick
Hi Cédrick, Indeed, this is something that one needs from time to time. However, I wonder, from a usability point of view, if this is the right way to do it. The problem is that without explaining someone what the menu item "Buffer it" does and how to use it (e.g., to evaluate "self buffer") it makes this feature hard to understand. I think the idea is good, but how could it be made easy to understand and use? Cheers, Adrian BTW, the same effect can also be achieved by assigning the object to a global, e.g., "Buffer := self at: 4" and then in the popup select "declare global" if Buffer is not a global yet. On Jan 10, 2010, at 14:25 , Cédrick Béler wrote:
Hi,
I've always found the need to copy/paste object (not string) between say, an inspector/explorer and a workspace.
So I did a small class called ObjectBuffer and some extension that provide this fonctionnality (see the attached picture). I added menu command so that 'buffer it' is accessible from text selection, inspector and explorer. I doubt the implementation is optimal but this is working so I decided to share and see if people would like it too
To get the object stored:
self buffer or ObjectBuffer buffer
hth,
-- Cédrick <bufferIt.PNG><ObjectBuffer-CedrickBeler.1.mcz><ParagraphEditor class-yellowButtonExpertMenu.st><Inspector- fieldListMenu.st><ObjectExplorer- genericMenu.st>_______________________________________________ Pharo-project mailing list Pharo-project@lists.gforge.inria.fr http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
Cédrick: Maybe it is has nothing to do, but a friend of mine once did a little Portia implementation. I think they have a similar Idea. Maybe I am wrong. Anyway, here is a paper about that: http://portal.acm.org/citation.cfm?id=118014.117959 Cheers Mariano On Sun, Jan 10, 2010 at 3:31 PM, Adrian Lienhard <adi@netstyle.ch> wrote:
Hi Cédrick,
Indeed, this is something that one needs from time to time. However, I wonder, from a usability point of view, if this is the right way to do it. The problem is that without explaining someone what the menu item "Buffer it" does and how to use it (e.g., to evaluate "self buffer") it makes this feature hard to understand.
I think the idea is good, but how could it be made easy to understand and use?
Cheers, Adrian
BTW, the same effect can also be achieved by assigning the object to a global, e.g., "Buffer := self at: 4" and then in the popup select "declare global" if Buffer is not a global yet.
On Jan 10, 2010, at 14:25 , Cédrick Béler wrote:
Hi,
I've always found the need to copy/paste object (not string) between say, an inspector/explorer and a workspace.
So I did a small class called ObjectBuffer and some extension that provide this fonctionnality (see the attached picture). I added menu command so that 'buffer it' is accessible from text selection, inspector and explorer. I doubt the implementation is optimal but this is working so I decided to share and see if people would like it too
To get the object stored:
self buffer or ObjectBuffer buffer
hth,
-- Cédrick <bufferIt.PNG><ObjectBuffer-CedrickBeler.1.mcz><ParagraphEditor class-yellowButtonExpertMenu.st><Inspector- fieldListMenu.st><ObjectExplorer- genericMenu.st>_______________________________________________ Pharo-project mailing list Pharo-project@lists.gforge.inria.fr http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
_______________________________________________ Pharo-project mailing list Pharo-project@lists.gforge.inria.fr http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
The problem is that without explaining someone what the menu item "Buffer it" does and how to use it (e.g., to evaluate "self buffer") it makes this feature hard to understand.
yes I agree
I think the idea is good, but how could it be made easy to understand and use?
don't really know. I first named it 'copy it' and 'paste it' but I don't think that's the issue
BTW, the same effect can also be achieved by assigning the object to a global, e.g., "Buffer := self at: 4" and then in the popup select "declare global" if Buffer is not a global yet.
uhmm yes it seems better. No need for an extra class and instead of self buffer, evaluating the global is enough. Also, am I correct to remove a global like that: Smalltalk removeKey: #Buffer Maybe then a menu entry more explicit would be 'store in global named Buffer' 'assign to Buffer' "store in Buffer" ? ... uhm a bit too long... Maybe having 'buffer it' in the menu (or store it or copy it) and a secondary item named for instance 'paste it' that is accessible when Buffer exists and that paste 'Buffer' wherever needed. What do you think ? Cheers, -- Cédrick
I like the idea. I like the idea of a class because you could attach behavior to it: - cleaning for release - exporting - importing ... So instead of using a global I would use instead of Buffer why not ObjectClipBoard ? Stef
The problem is that without explaining someone what the menu item "Buffer it" does and how to use it (e.g., to evaluate "self buffer") it makes this feature hard to understand.
yes I agree
I think the idea is good, but how could it be made easy to understand and use?
don't really know. I first named it 'copy it' and 'paste it' but I don't think that's the issue
BTW, the same effect can also be achieved by assigning the object to a global, e.g., "Buffer := self at: 4" and then in the popup select "declare global" if Buffer is not a global yet.
uhmm yes it seems better. No need for an extra class and instead of self buffer, evaluating the global is enough. Also, am I correct to remove a global like that: Smalltalk removeKey: #Buffer
Maybe then a menu entry more explicit would be 'store in global named Buffer' 'assign to Buffer' "store in Buffer" ? ... uhm a bit too long...
Maybe having 'buffer it' in the menu (or store it or copy it) and a secondary item named for instance 'paste it' that is accessible when Buffer exists and that paste 'Buffer' wherever needed.
What do you think ?
Cheers,
-- Cédrick _______________________________________________ Pharo-project mailing list Pharo-project@lists.gforge.inria.fr http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
I gave another try. I like the idea.
I like the idea of a class because you could attach behavior to it: - cleaning for release - exporting - importing
There is already cleaning at startup shutdown...
... So instead of using a global I would use instead of Buffer why not ObjectClipBoard ?
Arf this was the name I was looking for ! So I changed some names and some details. Name: ObjectClipboard-CedrickBeler.1 Author: CedrickBeler Time: 11 January 2010, 6:11:56 pm UUID: 014f775e-ead0-a245-98f0-8bf61c7207ff Ancestors: Object clipboard: copy/paste objects between tools -several objects can be "copied" (up to 5 for now) -the store is reset after each image startup/shutdown To access programatically: -to copy an object: ObjectClipboard copy: anObject -to paste an object: ObjectClipboard paste -to get all copied objects: ObjectClipboard content When a copied object is pasted, the store string version unless the size is too long (100 characters). If the size exceed the limit, what's printed is : (ObjectClipboard paste) "anObject name" ie. the command that can be executed with the commented name of the object on the right. Different menu commands have been created -text editor, inspector and explorer (named: Copy object and Paste object) --need to load external files to load (I don't want to change the categories for those) (cf. joined files) I joined a small screenshot too hope you like it ;) Cédrick
Hi Cedrick, The idea is cool indeed! I often need this feature. I usually use a global variable Smalltalk at: #TMP or something. Talking to object is indeed the right thing Cheers, Alexandre On 10 Jan 2010, at 15:00, Cédrick Béler wrote:
The problem is that without explaining someone what the menu item "Buffer it" does and how to use it (e.g., to evaluate "self buffer") it makes this feature hard to understand.
yes I agree
I think the idea is good, but how could it be made easy to understand and use?
don't really know. I first named it 'copy it' and 'paste it' but I don't think that's the issue
BTW, the same effect can also be achieved by assigning the object to a global, e.g., "Buffer := self at: 4" and then in the popup select "declare global" if Buffer is not a global yet.
uhmm yes it seems better. No need for an extra class and instead of self buffer, evaluating the global is enough. Also, am I correct to remove a global like that: Smalltalk removeKey: #Buffer
Maybe then a menu entry more explicit would be 'store in global named Buffer' 'assign to Buffer' "store in Buffer" ? ... uhm a bit too long...
Maybe having 'buffer it' in the menu (or store it or copy it) and a secondary item named for instance 'paste it' that is accessible when Buffer exists and that paste 'Buffer' wherever needed.
What do you think ?
Cheers,
-- Cédrick _______________________________________________ Pharo-project mailing list Pharo-project@lists.gforge.inria.fr http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
-- _,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;: Alexandre Bergel http://www.bergel.eu ^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.
Here is the screenshot... ps: there is a small bug for explorer in the version I sent. I fixed it but don't send yet -- Cédrick
Maybe you can also add shortcuts: Shift-Cmd-c, Shift-Cmd-v Alexandre On 11 Jan 2010, at 14:45, Cédrick Béler wrote:
Here is the screenshot...
ps: there is a small bug for explorer in the version I sent. I fixed it but don't send yet -- Cédrick <copyObject.PNG>_______________________________________________ Pharo-project mailing list Pharo-project@lists.gforge.inria.fr http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
-- _,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;: Alexandre Bergel http://www.bergel.eu ^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.
Perhaps a unified clipboard would be nicer... objects or text (or, potentially converible to host OS things...). A similiar approach has worked well for our ReportBuilder (guess what, it is called ObjectClipboard...). Nothing especially special about an object, just another kind of thing that can be pasted where allowed... Regards, Gary ----- Original Message ----- From: "Alexandre Bergel" <alexandre@bergel.eu> To: <Pharo-project@lists.gforge.inria.fr> Sent: Monday, January 11, 2010 5:56 PM Subject: Re: [Pharo-project] Object Buffer (implementation tryout) Maybe you can also add shortcuts: Shift-Cmd-c, Shift-Cmd-v Alexandre On 11 Jan 2010, at 14:45, Cédrick Béler wrote:
Here is the screenshot...
ps: there is a small bug for explorer in the version I sent. I fixed it but don't send yet -- Cédrick <copyObject.PNG>_______________________________________________ Pharo-project mailing list Pharo-project@lists.gforge.inria.fr http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
-- _,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;: Alexandre Bergel http://www.bergel.eu ^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;. _______________________________________________ Pharo-project mailing list Pharo-project@lists.gforge.inria.fr http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
On this line of reasoning, in Windows there used to exist a small utility called "Clipboard Viewer" that allowed the OS clipboard to be inspected and some of the 'things' (to avoid the clash with Objects from OOA/OOD/OOP) could be 'seen' in more than a single way. -- Cesar Rabak Em 11/01/2010 16:18, Gary Chambers < gazzaguru2@btinternet.com > escreveu: Perhaps a unified clipboard would be nicer... objects or text (or, potentially converible to host OS things...). A similiar approach has worked well for our ReportBuilder (guess what, it is called ObjectClipboard...). Nothing especially special about an object, just another kind of thing that can be pasted where allowed... Regards, Gary ----- Original Message ----- From: "Alexandre Bergel" To: Sent: Monday, January 11, 2010 5:56 PM Subject: Re: [Pharo-project] Object Buffer (implementation tryout) Maybe you can also add shortcuts: Shift-Cmd-c, Shift-Cmd-v Alexandre On 11 Jan 2010, at 14:45, Cédrick Béler wrote:
Here is the screenshot...
ps: there is a small bug for explorer in the version I sent. I fixed it but don't send yet -- Cédrick _______________________________________________ Pharo-project mailing list Pharo-project@lists.gforge.inria.fr http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
-- _,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;: Alexandre Bergel http://www.bergel.eu ^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;. _______________________________________________ Pharo-project mailing list Pharo-project@lists.gforge.inria.fr http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project _______________________________________________ Pharo-project mailing list Pharo-project@lists.gforge.inria.fr http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
We are happy with code :) On Jan 11, 2010, at 7:18 PM, Gary Chambers wrote:
Perhaps a unified clipboard would be nicer... objects or text (or, potentially converible to host OS things...). A similiar approach has worked well for our ReportBuilder (guess what, it is called ObjectClipboard...).
Nothing especially special about an object, just another kind of thing that can be pasted where allowed...
Regards, Gary
----- Original Message ----- From: "Alexandre Bergel" <alexandre@bergel.eu> To: <Pharo-project@lists.gforge.inria.fr> Sent: Monday, January 11, 2010 5:56 PM Subject: Re: [Pharo-project] Object Buffer (implementation tryout)
Maybe you can also add shortcuts: Shift-Cmd-c, Shift-Cmd-v
Alexandre
On 11 Jan 2010, at 14:45, Cédrick Béler wrote:
Here is the screenshot...
ps: there is a small bug for explorer in the version I sent. I fixed it but don't send yet -- Cédrick <copyObject.PNG>_______________________________________________ Pharo-project mailing list Pharo-project@lists.gforge.inria.fr http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
-- _,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;: Alexandre Bergel http://www.bergel.eu ^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.
_______________________________________________ Pharo-project mailing list Pharo-project@lists.gforge.inria.fr http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
_______________________________________________ Pharo-project mailing list Pharo-project@lists.gforge.inria.fr http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
The name is cool :) On Jan 11, 2010, at 7:18 PM, Gary Chambers wrote:
Perhaps a unified clipboard would be nicer... objects or text (or, potentially converible to host OS things...). A similiar approach has worked well for our ReportBuilder (guess what, it is called ObjectClipboard...).
Nothing especially special about an object, just another kind of thing that can be pasted where allowed...
Regards, Gary
----- Original Message ----- From: "Alexandre Bergel" <alexandre@bergel.eu> To: <Pharo-project@lists.gforge.inria.fr> Sent: Monday, January 11, 2010 5:56 PM Subject: Re: [Pharo-project] Object Buffer (implementation tryout)
Maybe you can also add shortcuts: Shift-Cmd-c, Shift-Cmd-v
Alexandre
On 11 Jan 2010, at 14:45, Cédrick Béler wrote:
Here is the screenshot...
ps: there is a small bug for explorer in the version I sent. I fixed it but don't send yet -- Cédrick <copyObject.PNG>_______________________________________________ Pharo-project mailing list Pharo-project@lists.gforge.inria.fr http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
-- _,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;: Alexandre Bergel http://www.bergel.eu ^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.
_______________________________________________ Pharo-project mailing list Pharo-project@lists.gforge.inria.fr http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
_______________________________________________ Pharo-project mailing list Pharo-project@lists.gforge.inria.fr http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
Perhaps a unified clipboard would be nicer... objects or text (or, potentially converible to host OS things...).
yes that would be really great (copy name seems useless to me... better to have copy object and paste name eventually) ! But I don't have the expertise to do it I guess. For now we have in the image: Clipboard ExternalClipboard (from Sophie) MacOSClipboard SqueakClipboard (empty !)
A similiar approach has worked well for our ReportBuilder (guess what, it is called ObjectClipboard...).
Nothing especially special about an object, just another kind of thing that can be pasted where allowed...
Regards, Gary
----- Original Message ----- From: "Alexandre Bergel" <alexandre@bergel.eu> To: <Pharo-project@lists.gforge.inria.fr> Sent: Monday, January 11, 2010 5:56 PM Subject: Re: [Pharo-project] Object Buffer (implementation tryout)
Maybe you can also add shortcuts: Shift-Cmd-c, Shift-Cmd-v
Alexandre
On 11 Jan 2010, at 14:45, Cédrick Béler wrote:
Here is the screenshot...
ps: there is a small bug for explorer in the version I sent. I fixed it but don't send yet -- Cédrick <copyObject.PNG>_______________________________________________ Pharo-project mailing list Pharo-project@lists.gforge.inria.fr http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
-- _,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;: Alexandre Bergel http://www.bergel.eu ^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.
_______________________________________________ Pharo-project mailing list Pharo-project@lists.gforge.inria.fr http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
_______________________________________________ Pharo-project mailing list Pharo-project@lists.gforge.inria.fr http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
-- Cédrick
I was trying to rework the clipboard logic last fall but I couldn't find any window users to test it. Things like supporting cut/copy/paste of graphics objects. But it also required FFI in Pharo and I don't think anyone reached a decision on that. If anyone would like to take that task on I"ll give them an image to work with... I'll note in Sophie we support the cut/copy/paste of complex objects (chunks of books). A matter of checking what the object was, either text or a complex object. PS if anyone is interested the Undo/Redo Logic that Impara did for Sophie was very well received, easy to use, and we could build a book from scratch then undo the entire creation, then redo it. This sounds complex, it was. However the framework made it easy, one piece at a time... Perhaps someone should harvest that since it *was* generic. On 2010-01-12, at 1:10 AM, Cédrick Béler wrote:
Perhaps a unified clipboard would be nicer... objects or text (or, potentially converible to host OS things...).
yes that would be really great (copy name seems useless to me... better to have copy object and paste name eventually) ! But I don't have the expertise to do it I guess. For now we have in the image:
Clipboard ExternalClipboard (from Sophie) MacOSClipboard SqueakClipboard (empty !)
-- =========================================================================== John M. McIntosh <johnmci@smalltalkconsulting.com> Twitter: squeaker68882 Corporate Smalltalk Consulting Ltd. http://www.smalltalkconsulting.com ===========================================================================
John M McIntosh wrote: [...]
PS if anyone is interested the Undo/Redo Logic that Impara did for Sophie was very well received, easy to use, and we could build a book from scratch then undo the entire creation, then redo it. This sounds complex, it was. However the framework made it easy, one piece at a time... Perhaps someone should harvest that since it *was* generic.
Ooh, nice. A good undo/redo framework would be *so* *very* good to have. I'm afraid I can't be the one to harvest it, not anytime soon anyhow, but I hope someone picks it up. Regards, -Martin
Yes, it's in the category "Sophie-Undo" If I consider the class AbstractUndoRecord We hung 67 subclasses off it, which gives you an idea of the complexity of we what were doing (60 some UI actions), but also the fact it could handle it.. UndoManager class comment: UndoManager manages execution and storing of UndoRecords through #doAndAddRecord:. It allows hierarchical grouping of UndoRecords through #openRecordGroup, #openRecordGroupNamed: and #closeRecordGroup. Undo and redo is invoked by #undo and #redo. See UndoManagerTest for someExamples. Structure: undoHistory OrderedCollection -- holds UndoRecords for undo redoHistory OrderedCollection -- holds UndoRecords for redo maxHistoryLength Integer -- Old UndoRecords in undoHistory are removed to keep it within given limits (0 for no Limit) groupStack OrderedCollection -- temporary dataStructure to manage hierarchical grouping of UndoRecords by #openRecordGroup and closeRecordGroup historyInvalid Boolean -- flag to indicate, that the history is invalid and it must be deleted including the groupStack On 2010-01-12, at 9:52 PM, Martin McClure wrote:
John M McIntosh wrote:
[...]
PS if anyone is interested the Undo/Redo Logic that Impara did for Sophie was very well received, easy to use, and we could build a book from scratch then undo the entire creation, then redo it. This sounds complex, it was. However the framework made it easy, one piece at a time... Perhaps someone should harvest that since it *was* generic.
Ooh, nice. A good undo/redo framework would be *so* *very* good to have. I'm afraid I can't be the one to harvest it, not anytime soon anyhow, but I hope someone picks it up.
Regards,
-Martin
AbstractUndoRecord #() SophieAddContentRootRecord #('contentRoot' 'book') SophieAddDeleteStickyRecord #('sticky' 'page') SophieAddStickyRecord #() SophieDeleteStickyRecord #() SophieAddEmbedBookRecord #('book' 'bookToEmbed') SophieAddLeafNodeRecord #('book' 'leafNode' 'contentIndexPosition') SophieAddStickiesRecord #('stickies' 'book') SophieApplyFrameLocationStyleAttributesRecord #('bookModel' 'anchor' 'styleAttributes' 'oldStyleAttributes' 'page') SophieApplyPageTemplateRecord #('page' 'template' 'undoData' 'redoData' 'allRemovedFrames') SophieApplyParagraphStyleAttributesRecord #('book' 'marker' 'styleAttributes' 'oldStylesAttributes') SophieApplyParagraphStyleRecord #('book' 'marker' 'style' 'oldStyles') SophieApplyStyleToRangeRecord #('book' 'marker' 'styleAttributes' 'oldRangesStylesCollection') SophieBookExtentUndoRecord #('bookModel' 'newExtent' 'oldExtent') SophieBookStatisticRecord #('book' 'newStatistic' 'oldStatistic') SophieDeleteContentRangeRecord #('book' 'marker' 'positionAfter' 'partialTree') SophieEmbeddedBookUndoRecord #('ebook' 'embeddedBookResource' 'embeddedBookMapEntry') SophieEmbeddedLinkedToBookUndoRecord #('ebook' 'embeddedBookMapEntry' 'embeddedBookResource') SophieFrameRecord #('bookModel' 'frame') SophieFrameZOrderRecord #('page' 'forward') SophieFrameStyleUndoRecord #('bookModel' 'frame' 'attributes' 'state') SophieFrameToTemplateRecord #('bookModel' 'frame' 'page' 'zIndex' 'reversed') SophieInsertCharacterRecord #('book' 'character' 'position' 'positionAfter' 'style') SophieInsertPageBreakRecord #('book' 'position' 'marker') SophieInsertParagraphBreakRecord #('book' 'position' 'marker' 'characterStyle') SophieLinkActionRecord #('book' 'target' 'action' 'actionIndex') SophieLinkActionAddRecord #() SophieLinkActionRemoveRecord #() SophieLinkRecord #('book' 'target') SophieFrameTriggerCleanupRecord #('cleanupStuff') SophieLinkActionCloneRecord #('source' 'oldActions') SophieMarkerAddDeleteRecord #('marker' 'book') SophieMarkerAddMarkersRecord #() SophieMarkerAddRecord #() SophieMarkerDeleteRecord #('actions' 'markerSet') SophieMarkerRangeRecord #('book' 'marker' 'newStart' 'newStop' 'oldStart' 'oldStop') SophiePageRecord #('bookModel' 'page') SophieFlowOrderChangeRecord #('frame' 'index' 'flow') SophiePageStyleRecord #('styleAttributes') SophiePageUndoRecord #('spine' 'index' 'page') SophieInsertPageRecord #() SophieMovePageRecord #('oldIndex') SophiePasteFromImporterRecord #('book' 'importer' 'position' 'marker' 'partialTree') SophiePromoteTemplateOverridesRecord #('book' 'pageTemplateFrame' 'page' 'frameMap' 'deletedTemplateFrames' 'overrideFrames' 'templateFrameFramesFromOverideFrames' 'frameOverrides' 'frameStyleOverrides' 'frameActionsOverrides' 'oldTemplateFrameFrames' 'oldPageFlowMap' 'oldTemplateFlowMap' 'oldPageTemplate' 'newTemplateFrameFrames' 'newPageFlowMap' 'newPageTemplate' 'allRemovedFrames' 'removedOverrideFrameContents') SophieRegisterFlowRecord #('spine' 'flowID' 'content' 'contentID' 'flow') SophieRemoveContentRootRecord #('contentRoot' 'book') SophieRemoveFlowRecord #('spine' 'flow') SophieRemoveFrameRecord #('bookModel' 'page' 'frame' 'wasLocalOverride') SophieRemoveLeafNodeRecord #('book' 'leafNode' 'oldContentIndexPosition') SophieRemovePagesRecord #('spine' 'indices' 'pages') SophieReplaceLibraryTemplateRecord #('book' 'template' 'newTemplate') SophieReplaceTemplateRecord #('book' 'template' 'oldTemplateCopy' 'newTemplate') SophieResourceUndoRecord #('resources') SophieResourceDeleteRecord #('player') SophieResourceImportStreamRecord #('resourceManager' 'mimeType' 'stream') SophieResourceImportURIRecord #('resourceManager' 'uri') SophieResourceLinkToURIRecord #() SophieResourceStoreRecord #('book' 'object' 'metaKey') SophieSpineStateDeltaRecord #('book' 'spine' 'addedPages' 'removedPages') SophieSpineStateRecord #('book' 'spine' 'prevState' 'postState') SophieTimelineUndoRecord #('timelinePlayer') SophieTimelineUndoAbstractEventsRecord #('events') SophieTimelineUndoAddEventsRecord #() SophieTimelineUndoDeleteEventsRecord #() SophieTimelineUndoAddTimeline #('timeline' 'book') SophieTimelineUndoDeleteTimeline #() SophieTimelineUndoEventsMoveRecord #('undoData') SophieTriggerObjectCleanupRecord #('triggerObject' 'undoInformations') SophieUpdateLibraryStyleRecord #('book' 'newStyle' 'styleName' 'oldStyle') UndoRecord #('undoable' 'doMessage' 'undoMessage' 'description') SophieFrameUndoRecord #('bookModel' 'frame') SophieLibraryResourceUndoRecord #('bookModel') SophiePageInvalidationRecord #('bookModel' 'page') SophieFrameAlignmentUndoRecord #('groupFrame' 'framesAndOldPositions' 'framesAndNewPositions') SophieTriggerMarkerUndoRecord #('bookModel' 'marker') UndoRecordWithPostMessage #('postMessage') UndoRecordGroup #('description' 'subRecords') SophieFrameGroupUndoRecord #('frameGroup' 'bookModel') -- =========================================================================== John M. McIntosh <johnmci@smalltalkconsulting.com> Twitter: squeaker68882 Corporate Smalltalk Consulting Ltd. http://www.smalltalkconsulting.com ===========================================================================
It look like there are still using the 1.0 version for Sophie advertisement : http://www.youtube.com/watch?v=KLTcdffTigA 2010/1/13 John M McIntosh <johnmci@smalltalkconsulting.com>:
Yes, it's in the category "Sophie-Undo"
If I consider the class AbstractUndoRecord We hung 67 subclasses off it, which gives you an idea of the complexity of  we what were doing (60 some UI actions), but also the fact it could handle it..
UndoManager class comment:
UndoManager manages execution and storing of UndoRecords through #doAndAddRecord:. It allows hierarchical grouping of UndoRecords through #openRecordGroup, #openRecordGroupNamed: and #closeRecordGroup. Undo and redo is invoked by #undo and #redo.
See UndoManagerTest for someExamples.
Structure:  undoHistory       OrderedCollection -- holds UndoRecords for undo  redoHistory           OrderedCollection -- holds UndoRecords for redo  maxHistoryLength    Integer -- Old UndoRecords in undoHistory are removed to keep it within given limits (0 for no Limit)  groupStack           OrderedCollection -- temporary dataStructure to manage hierarchical grouping of UndoRecords                     by #openRecordGroup and closeRecordGroup  historyInvalid     Boolean -- flag to indicate, that the history is invalid and it must be deleted including the groupStack
On 2010-01-12, at 9:52 PM, Martin McClure wrote:
John M McIntosh wrote:
[...]
PS if anyone is interested the Undo/Redo Logic that Impara did for Sophie was very well received, easy to use, and we could build a book from scratch then undo the entire creation, then redo it. This sounds complex, it was. However the framework made it easy, one piece at a time... Perhaps someone should harvest that since it *was* generic.
Ooh, nice. A good undo/redo framework would be *so* *very* good to have. I'm afraid I can't be the one to harvest it, not anytime soon anyhow, but I hope someone picks it up.
Regards,
-Martin
    AbstractUndoRecord #()             SophieAddContentRootRecord #('contentRoot' 'book')             SophieAddDeleteStickyRecord #('sticky' 'page')                 SophieAddStickyRecord #()                 SophieDeleteStickyRecord #()             SophieAddEmbedBookRecord #('book' 'bookToEmbed')             SophieAddLeafNodeRecord #('book' 'leafNode' 'contentIndexPosition')             SophieAddStickiesRecord #('stickies' 'book')             SophieApplyFrameLocationStyleAttributesRecord #('bookModel' 'anchor' 'styleAttributes' 'oldStyleAttributes' 'page')             SophieApplyPageTemplateRecord #('page' 'template' 'undoData' 'redoData' 'allRemovedFrames')             SophieApplyParagraphStyleAttributesRecord #('book' 'marker' 'styleAttributes' 'oldStylesAttributes')             SophieApplyParagraphStyleRecord #('book' 'marker' 'style' 'oldStyles')             SophieApplyStyleToRangeRecord #('book' 'marker' 'styleAttributes' 'oldRangesStylesCollection')             SophieBookExtentUndoRecord #('bookModel' 'newExtent' 'oldExtent')             SophieBookStatisticRecord #('book' 'newStatistic' 'oldStatistic')             SophieDeleteContentRangeRecord #('book' 'marker' 'positionAfter' 'partialTree')             SophieEmbeddedBookUndoRecord #('ebook' 'embeddedBookResource' 'embeddedBookMapEntry')             SophieEmbeddedLinkedToBookUndoRecord #('ebook' 'embeddedBookMapEntry' 'embeddedBookResource')             SophieFrameRecord #('bookModel' 'frame')                 SophieFrameZOrderRecord #('page' 'forward')             SophieFrameStyleUndoRecord #('bookModel' 'frame' 'attributes' 'state')             SophieFrameToTemplateRecord #('bookModel' 'frame' 'page' 'zIndex' 'reversed')             SophieInsertCharacterRecord #('book' 'character' 'position' 'positionAfter' 'style')             SophieInsertPageBreakRecord #('book' 'position' 'marker')             SophieInsertParagraphBreakRecord #('book' 'position' 'marker' 'characterStyle')             SophieLinkActionRecord #('book' 'target' 'action' 'actionIndex')                 SophieLinkActionAddRecord #()                 SophieLinkActionRemoveRecord #()             SophieLinkRecord #('book' 'target')                 SophieFrameTriggerCleanupRecord #('cleanupStuff')                 SophieLinkActionCloneRecord #('source' 'oldActions')             SophieMarkerAddDeleteRecord #('marker' 'book')                 SophieMarkerAddMarkersRecord #()                 SophieMarkerAddRecord #()                 SophieMarkerDeleteRecord #('actions' 'markerSet')             SophieMarkerRangeRecord #('book' 'marker' 'newStart' 'newStop' 'oldStart' 'oldStop')             SophiePageRecord #('bookModel' 'page')                 SophieFlowOrderChangeRecord #('frame' 'index' 'flow')                 SophiePageStyleRecord #('styleAttributes')             SophiePageUndoRecord #('spine' 'index' 'page')                 SophieInsertPageRecord #()                 SophieMovePageRecord #('oldIndex')             SophiePasteFromImporterRecord #('book' 'importer' 'position' 'marker' 'partialTree')             SophiePromoteTemplateOverridesRecord #('book' 'pageTemplateFrame' 'page' 'frameMap' 'deletedTemplateFrames' 'overrideFrames' 'templateFrameFramesFromOverideFrames' 'frameOverrides' 'frameStyleOverrides' 'frameActionsOverrides' 'oldTemplateFrameFrames' 'oldPageFlowMap' 'oldTemplateFlowMap' 'oldPageTemplate' 'newTemplateFrameFrames' 'newPageFlowMap' 'newPageTemplate' 'allRemovedFrames' 'removedOverrideFrameContents')             SophieRegisterFlowRecord #('spine' 'flowID' 'content' 'contentID' 'flow')             SophieRemoveContentRootRecord #('contentRoot' 'book')             SophieRemoveFlowRecord #('spine' 'flow')             SophieRemoveFrameRecord #('bookModel' 'page' 'frame' 'wasLocalOverride')             SophieRemoveLeafNodeRecord #('book' 'leafNode' 'oldContentIndexPosition')             SophieRemovePagesRecord #('spine' 'indices' 'pages')             SophieReplaceLibraryTemplateRecord #('book' 'template' 'newTemplate')             SophieReplaceTemplateRecord #('book' 'template' 'oldTemplateCopy' 'newTemplate')             SophieResourceUndoRecord #('resources')                 SophieResourceDeleteRecord #('player')                 SophieResourceImportStreamRecord #('resourceManager' 'mimeType' 'stream')                 SophieResourceImportURIRecord #('resourceManager' 'uri')                     SophieResourceLinkToURIRecord #()                 SophieResourceStoreRecord #('book' 'object' 'metaKey')             SophieSpineStateDeltaRecord #('book' 'spine' 'addedPages' 'removedPages')             SophieSpineStateRecord #('book' 'spine' 'prevState' 'postState')             SophieTimelineUndoRecord #('timelinePlayer')                 SophieTimelineUndoAbstractEventsRecord #('events')                     SophieTimelineUndoAddEventsRecord #()                     SophieTimelineUndoDeleteEventsRecord #()                 SophieTimelineUndoAddTimeline #('timeline' 'book')                     SophieTimelineUndoDeleteTimeline #()                 SophieTimelineUndoEventsMoveRecord #('undoData')             SophieTriggerObjectCleanupRecord #('triggerObject' 'undoInformations')             SophieUpdateLibraryStyleRecord #('book' 'newStyle' 'styleName' 'oldStyle')             UndoRecord #('undoable' 'doMessage' 'undoMessage' 'description')                 SophieFrameUndoRecord #('bookModel' 'frame')                 SophieLibraryResourceUndoRecord #('bookModel')                 SophiePageInvalidationRecord #('bookModel' 'page')                     SophieFrameAlignmentUndoRecord #('groupFrame' 'framesAndOldPositions' 'framesAndNewPositions')                 SophieTriggerMarkerUndoRecord #('bookModel' 'marker')                 UndoRecordWithPostMessage #('postMessage')             UndoRecordGroup #('description' 'subRecords')                 SophieFrameGroupUndoRecord #('frameGroup' 'bookModel')
-- =========================================================================== John M. McIntosh <johnmci@smalltalkconsulting.com> Â Twitter: Â squeaker68882 Corporate Smalltalk Consulting Ltd. Â http://www.smalltalkconsulting.com ===========================================================================
_______________________________________________ Pharo-project mailing list Pharo-project@lists.gforge.inria.fr http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
-- Serge Stinckwich UMI UMMISCO 209 (IRD/UPMC), Hanoi, Vietnam Smalltalkers do: [:it | All with: Class, (And love: it)] http://doesnotunderstand.org/
Er yes, that would be because it works? There is some 2.0 video at http://sophiecommons.blip.tv/ which appears to work. The old site is at http://sophieproject.cntv.usc.edu/, open site at http://opensophie.com/ We could have used media like below 2 years ago. At ESUG I'm sure someone remarked why don't folks doing presentations at smalltalk conferences use Sophie? On 2010-01-12, at 11:16 PM, Serge Stinckwich wrote:
It look like there are still using the 1.0 version for Sophie advertisement : http://www.youtube.com/watch?v=KLTcdffTigA
-- =========================================================================== John M. McIntosh <johnmci@smalltalkconsulting.com> Twitter: squeaker68882 Corporate Smalltalk Consulting Ltd. http://www.smalltalkconsulting.com ===========================================================================
2010/1/13 John M McIntosh <johnmci@smalltalkconsulting.com>:
Er yes, that would be because it works? There is some 2.0 video at http://sophiecommons.blip.tv/ which appears to work.
The old site is at  http://sophieproject.cntv.usc.edu/, open site at http://opensophie.com/
We could have used media like below 2 years ago.
At ESUG I'm sure someone remarked why don't folks doing presentations at smalltalk conferences use Sophie?
Advertisement problem ? -- Serge Stinckwich UMI UMMISCO 209 (IRD/UPMC), Hanoi, Vietnam Smalltalkers do: [:it | All with: Class, (And love: it)] http://doesnotunderstand.org/
Ya, I'm sure Stéphane said why don't you give a talk on it... On 2010-01-13, at 1:02 AM, Serge Stinckwich wrote:
Advertisement problem ?
-- Serge Stinckwich UMI UMMISCO 209 (IRD/UPMC), Hanoi, Vietnam Smalltalkers do: [:it | All with: Class, (And love: it)] http://doesnotunderstand.org/
-- =========================================================================== John M. McIntosh <johnmci@smalltalkconsulting.com> Twitter: squeaker68882 Corporate Smalltalk Consulting Ltd. http://www.smalltalkconsulting.com ===========================================================================
nobody to talk about it but I would really like to see Sophie used in/by smalltalkers On Jan 13, 2010, at 11:25 AM, John M McIntosh wrote:
Ya, I'm sure Stéphane said why don't you give a talk on it...
On 2010-01-13, at 1:02 AM, Serge Stinckwich wrote:
Advertisement problem ?
-- Serge Stinckwich UMI UMMISCO 209 (IRD/UPMC), Hanoi, Vietnam Smalltalkers do: [:it | All with: Class, (And love: it)] http://doesnotunderstand.org/
-- =========================================================================== John M. McIntosh <johnmci@smalltalkconsulting.com> Twitter: squeaker68882 Corporate Smalltalk Consulting Ltd. http://www.smalltalkconsulting.com ===========================================================================
_______________________________________________ Pharo-project mailing list Pharo-project@lists.gforge.inria.fr http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
http://code.google.com/p/pharo/issues/list?thanks=1801 On Jan 13, 2010, at 7:18 AM, John M McIntosh wrote:
Yes, it's in the category "Sophie-Undo"
If I consider the class AbstractUndoRecord We hung 67 subclasses off it, which gives you an idea of the complexity of we what were doing (60 some UI actions), but also the fact it could handle it..
UndoManager class comment:
UndoManager manages execution and storing of UndoRecords through #doAndAddRecord:. It allows hierarchical grouping of UndoRecords through #openRecordGroup, #openRecordGroupNamed: and #closeRecordGroup. Undo and redo is invoked by #undo and #redo.
See UndoManagerTest for someExamples.
Structure: undoHistory OrderedCollection -- holds UndoRecords for undo redoHistory OrderedCollection -- holds UndoRecords for redo maxHistoryLength Integer -- Old UndoRecords in undoHistory are removed to keep it within given limits (0 for no Limit) groupStack OrderedCollection -- temporary dataStructure to manage hierarchical grouping of UndoRecords by #openRecordGroup and closeRecordGroup historyInvalid Boolean -- flag to indicate, that the history is invalid and it must be deleted including the groupStack
On 2010-01-12, at 9:52 PM, Martin McClure wrote:
John M McIntosh wrote:
[...]
PS if anyone is interested the Undo/Redo Logic that Impara did for Sophie was very well received, easy to use, and we could build a book from scratch then undo the entire creation, then redo it. This sounds complex, it was. However the framework made it easy, one piece at a time... Perhaps someone should harvest that since it *was* generic.
Ooh, nice. A good undo/redo framework would be *so* *very* good to have. I'm afraid I can't be the one to harvest it, not anytime soon anyhow, but I hope someone picks it up.
Regards,
-Martin
AbstractUndoRecord #() SophieAddContentRootRecord #('contentRoot' 'book') SophieAddDeleteStickyRecord #('sticky' 'page') SophieAddStickyRecord #() SophieDeleteStickyRecord #() SophieAddEmbedBookRecord #('book' 'bookToEmbed') SophieAddLeafNodeRecord #('book' 'leafNode' 'contentIndexPosition') SophieAddStickiesRecord #('stickies' 'book') SophieApplyFrameLocationStyleAttributesRecord #('bookModel' 'anchor' 'styleAttributes' 'oldStyleAttributes' 'page') SophieApplyPageTemplateRecord #('page' 'template' 'undoData' 'redoData' 'allRemovedFrames') SophieApplyParagraphStyleAttributesRecord #('book' 'marker' 'styleAttributes' 'oldStylesAttributes') SophieApplyParagraphStyleRecord #('book' 'marker' 'style' 'oldStyles') SophieApplyStyleToRangeRecord #('book' 'marker' 'styleAttributes' 'oldRangesStylesCollection') SophieBookExtentUndoRecord #('bookModel' 'newExtent' 'oldExtent') SophieBookStatisticRecord #('book' 'newStatistic' 'oldStatistic') SophieDeleteContentRangeRecord #('book' 'marker' 'positionAfter' 'partialTree') SophieEmbeddedBookUndoRecord #('ebook' 'embeddedBookResource' 'embeddedBookMapEntry') SophieEmbeddedLinkedToBookUndoRecord #('ebook' 'embeddedBookMapEntry' 'embeddedBookResource') SophieFrameRecord #('bookModel' 'frame') SophieFrameZOrderRecord #('page' 'forward') SophieFrameStyleUndoRecord #('bookModel' 'frame' 'attributes' 'state') SophieFrameToTemplateRecord #('bookModel' 'frame' 'page' 'zIndex' 'reversed') SophieInsertCharacterRecord #('book' 'character' 'position' 'positionAfter' 'style') SophieInsertPageBreakRecord #('book' 'position' 'marker') SophieInsertParagraphBreakRecord #('book' 'position' 'marker' 'characterStyle') SophieLinkActionRecord #('book' 'target' 'action' 'actionIndex') SophieLinkActionAddRecord #() SophieLinkActionRemoveRecord #() SophieLinkRecord #('book' 'target') SophieFrameTriggerCleanupRecord #('cleanupStuff') SophieLinkActionCloneRecord #('source' 'oldActions') SophieMarkerAddDeleteRecord #('marker' 'book') SophieMarkerAddMarkersRecord #() SophieMarkerAddRecord #() SophieMarkerDeleteRecord #('actions' 'markerSet') SophieMarkerRangeRecord #('book' 'marker' 'newStart' 'newStop' 'oldStart' 'oldStop') SophiePageRecord #('bookModel' 'page') SophieFlowOrderChangeRecord #('frame' 'index' 'flow') SophiePageStyleRecord #('styleAttributes') SophiePageUndoRecord #('spine' 'index' 'page') SophieInsertPageRecord #() SophieMovePageRecord #('oldIndex') SophiePasteFromImporterRecord #('book' 'importer' 'position' 'marker' 'partialTree') SophiePromoteTemplateOverridesRecord #('book' 'pageTemplateFrame' 'page' 'frameMap' 'deletedTemplateFrames' 'overrideFrames' 'templateFrameFramesFromOverideFrames' 'frameOverrides' 'frameStyleOverrides' 'frameActionsOverrides' 'oldTemplateFrameFrames' 'oldPageFlowMap' 'oldTemplateFlowMap' 'oldPageTemplate' 'newTemplateFrameFrames' 'newPageFlowMap' 'newPageTemplate' 'allRemovedFrames' 'removedOverrideFrameContents') SophieRegisterFlowRecord #('spine' 'flowID' 'content' 'contentID' 'flow') SophieRemoveContentRootRecord #('contentRoot' 'book') SophieRemoveFlowRecord #('spine' 'flow') SophieRemoveFrameRecord #('bookModel' 'page' 'frame' 'wasLocalOverride') SophieRemoveLeafNodeRecord #('book' 'leafNode' 'oldContentIndexPosition') SophieRemovePagesRecord #('spine' 'indices' 'pages') SophieReplaceLibraryTemplateRecord #('book' 'template' 'newTemplate') SophieReplaceTemplateRecord #('book' 'template' 'oldTemplateCopy' 'newTemplate') SophieResourceUndoRecord #('resources') SophieResourceDeleteRecord #('player') SophieResourceImportStreamRecord #('resourceManager' 'mimeType' 'stream') SophieResourceImportURIRecord #('resourceManager' 'uri') SophieResourceLinkToURIRecord #() SophieResourceStoreRecord #('book' 'object' 'metaKey') SophieSpineStateDeltaRecord #('book' 'spine' 'addedPages' 'removedPages') SophieSpineStateRecord #('book' 'spine' 'prevState' 'postState') SophieTimelineUndoRecord #('timelinePlayer') SophieTimelineUndoAbstractEventsRecord #('events') SophieTimelineUndoAddEventsRecord #() SophieTimelineUndoDeleteEventsRecord #() SophieTimelineUndoAddTimeline #('timeline' 'book') SophieTimelineUndoDeleteTimeline #() SophieTimelineUndoEventsMoveRecord #('undoData') SophieTriggerObjectCleanupRecord #('triggerObject' 'undoInformations') SophieUpdateLibraryStyleRecord #('book' 'newStyle' 'styleName' 'oldStyle') UndoRecord #('undoable' 'doMessage' 'undoMessage' 'description') SophieFrameUndoRecord #('bookModel' 'frame') SophieLibraryResourceUndoRecord #('bookModel') SophiePageInvalidationRecord #('bookModel' 'page') SophieFrameAlignmentUndoRecord #('groupFrame' 'framesAndOldPositions' 'framesAndNewPositions') SophieTriggerMarkerUndoRecord #('bookModel' 'marker') UndoRecordWithPostMessage #('postMessage') UndoRecordGroup #('description' 'subRecords') SophieFrameGroupUndoRecord #('frameGroup' 'bookModel')
-- =========================================================================== John M. McIntosh <johnmci@smalltalkconsulting.com> Twitter: squeaker68882 Corporate Smalltalk Consulting Ltd. http://www.smalltalkconsulting.com ===========================================================================
_______________________________________________ Pharo-project mailing list Pharo-project@lists.gforge.inria.fr http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
Did someone get a look in production at the Undo frameworks developed by alessandro warth? On Jan 13, 2010, at 7:18 AM, John M McIntosh wrote:
Yes, it's in the category "Sophie-Undo"
If I consider the class AbstractUndoRecord We hung 67 subclasses off it, which gives you an idea of the complexity of we what were doing (60 some UI actions), but also the fact it could handle it..
UndoManager class comment:
UndoManager manages execution and storing of UndoRecords through #doAndAddRecord:. It allows hierarchical grouping of UndoRecords through #openRecordGroup, #openRecordGroupNamed: and #closeRecordGroup. Undo and redo is invoked by #undo and #redo.
See UndoManagerTest for someExamples.
Structure: undoHistory OrderedCollection -- holds UndoRecords for undo redoHistory OrderedCollection -- holds UndoRecords for redo maxHistoryLength Integer -- Old UndoRecords in undoHistory are removed to keep it within given limits (0 for no Limit) groupStack OrderedCollection -- temporary dataStructure to manage hierarchical grouping of UndoRecords by #openRecordGroup and closeRecordGroup historyInvalid Boolean -- flag to indicate, that the history is invalid and it must be deleted including the groupStack
On 2010-01-12, at 9:52 PM, Martin McClure wrote:
John M McIntosh wrote:
[...]
PS if anyone is interested the Undo/Redo Logic that Impara did for Sophie was very well received, easy to use, and we could build a book from scratch then undo the entire creation, then redo it. This sounds complex, it was. However the framework made it easy, one piece at a time... Perhaps someone should harvest that since it *was* generic.
Ooh, nice. A good undo/redo framework would be *so* *very* good to have. I'm afraid I can't be the one to harvest it, not anytime soon anyhow, but I hope someone picks it up.
Regards,
-Martin
AbstractUndoRecord #() SophieAddContentRootRecord #('contentRoot' 'book') SophieAddDeleteStickyRecord #('sticky' 'page') SophieAddStickyRecord #() SophieDeleteStickyRecord #() SophieAddEmbedBookRecord #('book' 'bookToEmbed') SophieAddLeafNodeRecord #('book' 'leafNode' 'contentIndexPosition') SophieAddStickiesRecord #('stickies' 'book') SophieApplyFrameLocationStyleAttributesRecord #('bookModel' 'anchor' 'styleAttributes' 'oldStyleAttributes' 'page') SophieApplyPageTemplateRecord #('page' 'template' 'undoData' 'redoData' 'allRemovedFrames') SophieApplyParagraphStyleAttributesRecord #('book' 'marker' 'styleAttributes' 'oldStylesAttributes') SophieApplyParagraphStyleRecord #('book' 'marker' 'style' 'oldStyles') SophieApplyStyleToRangeRecord #('book' 'marker' 'styleAttributes' 'oldRangesStylesCollection') SophieBookExtentUndoRecord #('bookModel' 'newExtent' 'oldExtent') SophieBookStatisticRecord #('book' 'newStatistic' 'oldStatistic') SophieDeleteContentRangeRecord #('book' 'marker' 'positionAfter' 'partialTree') SophieEmbeddedBookUndoRecord #('ebook' 'embeddedBookResource' 'embeddedBookMapEntry') SophieEmbeddedLinkedToBookUndoRecord #('ebook' 'embeddedBookMapEntry' 'embeddedBookResource') SophieFrameRecord #('bookModel' 'frame') SophieFrameZOrderRecord #('page' 'forward') SophieFrameStyleUndoRecord #('bookModel' 'frame' 'attributes' 'state') SophieFrameToTemplateRecord #('bookModel' 'frame' 'page' 'zIndex' 'reversed') SophieInsertCharacterRecord #('book' 'character' 'position' 'positionAfter' 'style') SophieInsertPageBreakRecord #('book' 'position' 'marker') SophieInsertParagraphBreakRecord #('book' 'position' 'marker' 'characterStyle') SophieLinkActionRecord #('book' 'target' 'action' 'actionIndex') SophieLinkActionAddRecord #() SophieLinkActionRemoveRecord #() SophieLinkRecord #('book' 'target') SophieFrameTriggerCleanupRecord #('cleanupStuff') SophieLinkActionCloneRecord #('source' 'oldActions') SophieMarkerAddDeleteRecord #('marker' 'book') SophieMarkerAddMarkersRecord #() SophieMarkerAddRecord #() SophieMarkerDeleteRecord #('actions' 'markerSet') SophieMarkerRangeRecord #('book' 'marker' 'newStart' 'newStop' 'oldStart' 'oldStop') SophiePageRecord #('bookModel' 'page') SophieFlowOrderChangeRecord #('frame' 'index' 'flow') SophiePageStyleRecord #('styleAttributes') SophiePageUndoRecord #('spine' 'index' 'page') SophieInsertPageRecord #() SophieMovePageRecord #('oldIndex') SophiePasteFromImporterRecord #('book' 'importer' 'position' 'marker' 'partialTree') SophiePromoteTemplateOverridesRecord #('book' 'pageTemplateFrame' 'page' 'frameMap' 'deletedTemplateFrames' 'overrideFrames' 'templateFrameFramesFromOverideFrames' 'frameOverrides' 'frameStyleOverrides' 'frameActionsOverrides' 'oldTemplateFrameFrames' 'oldPageFlowMap' 'oldTemplateFlowMap' 'oldPageTemplate' 'newTemplateFrameFrames' 'newPageFlowMap' 'newPageTemplate' 'allRemovedFrames' 'removedOverrideFrameContents') SophieRegisterFlowRecord #('spine' 'flowID' 'content' 'contentID' 'flow') SophieRemoveContentRootRecord #('contentRoot' 'book') SophieRemoveFlowRecord #('spine' 'flow') SophieRemoveFrameRecord #('bookModel' 'page' 'frame' 'wasLocalOverride') SophieRemoveLeafNodeRecord #('book' 'leafNode' 'oldContentIndexPosition') SophieRemovePagesRecord #('spine' 'indices' 'pages') SophieReplaceLibraryTemplateRecord #('book' 'template' 'newTemplate') SophieReplaceTemplateRecord #('book' 'template' 'oldTemplateCopy' 'newTemplate') SophieResourceUndoRecord #('resources') SophieResourceDeleteRecord #('player') SophieResourceImportStreamRecord #('resourceManager' 'mimeType' 'stream') SophieResourceImportURIRecord #('resourceManager' 'uri') SophieResourceLinkToURIRecord #() SophieResourceStoreRecord #('book' 'object' 'metaKey') SophieSpineStateDeltaRecord #('book' 'spine' 'addedPages' 'removedPages') SophieSpineStateRecord #('book' 'spine' 'prevState' 'postState') SophieTimelineUndoRecord #('timelinePlayer') SophieTimelineUndoAbstractEventsRecord #('events') SophieTimelineUndoAddEventsRecord #() SophieTimelineUndoDeleteEventsRecord #() SophieTimelineUndoAddTimeline #('timeline' 'book') SophieTimelineUndoDeleteTimeline #() SophieTimelineUndoEventsMoveRecord #('undoData') SophieTriggerObjectCleanupRecord #('triggerObject' 'undoInformations') SophieUpdateLibraryStyleRecord #('book' 'newStyle' 'styleName' 'oldStyle') UndoRecord #('undoable' 'doMessage' 'undoMessage' 'description') SophieFrameUndoRecord #('bookModel' 'frame') SophieLibraryResourceUndoRecord #('bookModel') SophiePageInvalidationRecord #('bookModel' 'page') SophieFrameAlignmentUndoRecord #('groupFrame' 'framesAndOldPositions' 'framesAndNewPositions') SophieTriggerMarkerUndoRecord #('bookModel' 'marker') UndoRecordWithPostMessage #('postMessage') UndoRecordGroup #('description' 'subRecords') SophieFrameGroupUndoRecord #('frameGroup' 'bookModel')
-- =========================================================================== John M. McIntosh <johnmci@smalltalkconsulting.com> Twitter: squeaker68882 Corporate Smalltalk Consulting Ltd. http://www.smalltalkconsulting.com ===========================================================================
_______________________________________________ Pharo-project mailing list Pharo-project@lists.gforge.inria.fr http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
John I think that we agree to put FFI in 1.1 now we were wondering if Alien was not better. But the support for Alien on different platform is not clear. Stef On Jan 13, 2010, at 6:42 AM, John M McIntosh wrote:
I was trying to rework the clipboard logic last fall but I couldn't find any window users to test it. Things like supporting cut/copy/paste of graphics objects. But it also required FFI in Pharo and I don't think anyone reached a decision on that. If anyone would like to take that task on I"ll give them an image to work with...
I'll note in Sophie we support the cut/copy/paste of complex objects (chunks of books). A matter of checking what the object was, either text or a complex object.
PS if anyone is interested the Undo/Redo Logic that Impara did for Sophie was very well received, easy to use, and we could build a book from scratch then undo the entire creation, then redo it. This sounds complex, it was. However the framework made it easy, one piece at a time... Perhaps someone should harvest that since it *was* generic.
On 2010-01-12, at 1:10 AM, Cédrick Béler wrote:
Perhaps a unified clipboard would be nicer... objects or text (or, potentially converible to host OS things...).
yes that would be really great (copy name seems useless to me... better to have copy object and paste name eventually) ! But I don't have the expertise to do it I guess. For now we have in the image:
Clipboard ExternalClipboard (from Sophie) MacOSClipboard SqueakClipboard (empty !)
-- =========================================================================== John M. McIntosh <johnmci@smalltalkconsulting.com> Twitter: squeaker68882 Corporate Smalltalk Consulting Ltd. http://www.smalltalkconsulting.com ===========================================================================
_______________________________________________ Pharo-project mailing list Pharo-project@lists.gforge.inria.fr http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
May I suggest that instead of having new tools assigned shortcuts hard coded we go after some solution to have them configurable? my 0.019999.... -- Cesar Rabak Em 11/01/2010 15:56, Alexandre Bergel <alexandre@bergel.eu> escreveu: Maybe you can also add shortcuts: Shift-Cmd-c, Shift-Cmd-v Alexandre On 11 Jan 2010, at 14:45, Cédrick Béler wrote:
Here is the screenshot...
ps: there is a small bug for explorer in the version I sent. I fixed it but don't send yet -- Cédrick _______________________________________________ Pharo-project mailing list Pharo-project@lists.gforge.inria.fr http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
-- _,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;: Alexandre Bergel http://www.bergel.eu ^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;. _______________________________________________ Pharo-project mailing list Pharo-project@lists.gforge.inria.fr http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
Maybe you can also add shortcuts: Shift-Cmd-c, Shift-Cmd-v
Yes, I'll do it note: dealing with menu is already painful but shortcuts are far worse ! refactoring them is a hard topic I imagine... especially as it's closely related to the windowing system... :(
Alexandre
On 11 Jan 2010, at 14:45, Cédrick Béler wrote:
Here is the screenshot...
ps: there is a small bug for explorer in the version I sent. I fixed it but don't send yet -- Cédrick <copyObject.PNG>_______________________________________________ Pharo-project mailing list Pharo-project@lists.gforge.inria.fr http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
-- _,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;: Alexandre Bergel http://www.bergel.eu ^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.
_______________________________________________ Pharo-project mailing list Pharo-project@lists.gforge.inria.fr http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
-- Cédrick
2010/1/12 Cédrick Béler <cdrick65@gmail.com>
Maybe you can also add shortcuts: Shift-Cmd-c, Shift-Cmd-v
Yes, I'll do it
both are used... but I nevers used them... cmd + V paste initials cmd + C compare to clipboard Do you use them ? BTW, there's a clear problem with menu and shortcuts. For instance, not all hardcoded shortcuts works for keyboard other thant qwerty... :( -- Cédrick
ok. I added shortcuts, I put menu methods in the extension category to be able to use monticello. Here is the squeaksource account: MCHttpRepository location: 'http://www.squeaksource.com/ObjectClipboard' user: '' password: '' To initialize shortcuts, after loading, you need to evaluate : ParagraphEditor initialize Everybody can submit and even change completly the implementation so as maybe to create a unified clipboard. Cheers, 2010/1/12 Cédrick Béler <cdrick65@gmail.com>
2010/1/12 Cédrick Béler <cdrick65@gmail.com>
Maybe you can also add shortcuts: Shift-Cmd-c, Shift-Cmd-v
Yes, I'll do it
both are used... but I nevers used them...
cmd + V paste initials cmd + C compare to clipboard
Do you use them ?
BTW, there's a clear problem with menu and shortcuts. For instance, not all hardcoded shortcuts works for keyboard other thant qwerty... :(
-- Cédrick
-- Cédrick
Hi Cédrick, When I try to copy an object, an error is raised (cf attached picture). Content is not initialized. It remains always nil. You need an initialize method that call #reset and execute 'ParagraphEditor initialize'. A unit test may also be written. If you're ok, I can do it. Cheers, Alexandre On 12 Jan 2010, at 11:21, Cédrick Béler wrote:
ok. I added shortcuts, I put menu methods in the extension category to be able to use monticello. Here is the squeaksource account:
MCHttpRepository location: 'http://www.squeaksource.com/ObjectClipboard' user: '' password: ''
To initialize shortcuts, after loading, you need to evaluate : ParagraphEditor initialize
Everybody can submit and even change completly the implementation so as maybe to create a unified clipboard.
Cheers,
2010/1/12 Cédrick Béler <cdrick65@gmail.com>
2010/1/12 Cédrick Béler <cdrick65@gmail.com>
Maybe you can also add shortcuts: Shift-Cmd-c, Shift-Cmd-v
Yes, I'll do it
both are used... but I nevers used them...
cmd + V paste initials cmd + C compare to clipboard
Do you use them ?
BTW, there's a clear problem with menu and shortcuts. For instance, not all hardcoded shortcuts works for keyboard other thant qwerty... :(
-- Cédrick
-- Cédrick _______________________________________________ Pharo-project mailing list Pharo-project@lists.gforge.inria.fr http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
-- _,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;: Alexandre Bergel http://www.bergel.eu ^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.
2010/1/12 Alexandre Bergel <alexandre@bergel.eu>
Hi Cédrick,
When I try to copy an object, an error is raised (cf attached picture). Content is not initialized. It remains always nil. You need an initialize method that call #reset and execute 'ParagraphEditor initialize'. A unit test may also be written. If you're ok, I can do it.
oops, that's true. Actually, when starting or shutting down, there's a reset of content and then the affectation but yes, the initialize is better. I published the change. Concerning ParagraphEditor initialize, I think (but not sure) that it would have no effect as I guess first, the class is loaded, then initialized, then the extension methods (I really may be wrong). Anyway, feel free to publish whatever changes you find necessary (especially tests :) . I'll do some too) Cheers,
Cheers, Alexandre
On 12 Jan 2010, at 11:21, Cédrick Béler wrote:
ok.
I added shortcuts, I put menu methods in the extension category to be able to use monticello. Here is the squeaksource account:
MCHttpRepository location: 'http://www.squeaksource.com/ObjectClipboard' user: '' password: ''
To initialize shortcuts, after loading, you need to evaluate : ParagraphEditor initialize
Everybody can submit and even change completly the implementation so as maybe to create a unified clipboard.
Cheers,
2010/1/12 Cédrick Béler <cdrick65@gmail.com>
2010/1/12 Cédrick Béler <cdrick65@gmail.com>
Maybe you can also add shortcuts: Shift-Cmd-c, Shift-Cmd-v
Yes, I'll do it
both are used... but I nevers used them...
cmd + V paste initials cmd + C compare to clipboard
Do you use them ?
BTW, there's a clear problem with menu and shortcuts. For instance, not all hardcoded shortcuts works for keyboard other thant qwerty... :(
-- Cédrick
-- Cédrick _______________________________________________ Pharo-project mailing list Pharo-project@lists.gforge.inria.fr http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
-- _,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;: Alexandre Bergel http://www.bergel.eu ^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.
_______________________________________________ Pharo-project mailing list Pharo-project@lists.gforge.inria.fr http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
-- Cédrick
Ok, I am waiting for your ping then Alexandre On 12 Jan 2010, at 12:17, Cédrick Béler wrote:
Anyway, feel free to publish whatever changes you find necessary (especially tests :) . I'll do some too)
I'm writting some right now...
_______________________________________________ Pharo-project mailing list Pharo-project@lists.gforge.inria.fr http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
-- _,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;: Alexandre Bergel http://www.bergel.eu ^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.
ping :) See you later, 2010/1/12 Alexandre Bergel <alexandre@bergel.eu>
Ok, I am waiting for your ping then
Alexandre
On 12 Jan 2010, at 12:17, Cédrick Béler wrote:
Anyway, feel free to publish whatever changes you find necessary (especially tests :) . I'll do some too)
I'm writting some right now...
_______________________________________________ Pharo-project mailing list Pharo-project@lists.gforge.inria.fr http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
-- _,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;: Alexandre Bergel http://www.bergel.eu ^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.
_______________________________________________ Pharo-project mailing list Pharo-project@lists.gforge.inria.fr http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
-- Cédrick
I tried it and it works. Tests are clean and easy to understand. Look okay to me. Alexandre On 12 Jan 2010, at 13:29, Cédrick Béler wrote:
ping :)
See you later,
2010/1/12 Alexandre Bergel <alexandre@bergel.eu> Ok, I am waiting for your ping then
Alexandre
On 12 Jan 2010, at 12:17, Cédrick Béler wrote:
Anyway, feel free to publish whatever changes you find necessary (especially tests :) . I'll do some too)
I'm writting some right now...
_______________________________________________ Pharo-project mailing list Pharo-project@lists.gforge.inria.fr http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
-- _,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;: Alexandre Bergel http://www.bergel.eu ^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.
_______________________________________________ Pharo-project mailing list Pharo-project@lists.gforge.inria.fr http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
-- Cédrick _______________________________________________ Pharo-project mailing list Pharo-project@lists.gforge.inria.fr http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
-- _,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;: Alexandre Bergel http://www.bergel.eu ^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.
cool thanks :) ... Shortcuts were not working in inspector/explorer but I fixed (hacked - override everywhere) it now. (All these shortcuts and menu stuffs really s**ks !!!) Anyway, it works and I'll use that until we got a better clipboard and/or history support :) 2010/1/13 Alexandre Bergel <alexandre@bergel.eu>
I tried it and it works. Tests are clean and easy to understand. Look okay to me.
Alexandre
On 12 Jan 2010, at 13:29, Cédrick Béler wrote:
ping :)
See you later,
2010/1/12 Alexandre Bergel <alexandre@bergel.eu> Ok, I am waiting for your ping then
Alexandre
On 12 Jan 2010, at 12:17, Cédrick Béler wrote:
Anyway, feel free to publish whatever changes you find necessary (especially tests :) . I'll do some too)
I'm writting some right now...
_______________________________________________ Pharo-project mailing list Pharo-project@lists.gforge.inria.fr http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
-- _,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;: Alexandre Bergel http://www.bergel.eu ^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.
_______________________________________________ Pharo-project mailing list Pharo-project@lists.gforge.inria.fr http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
-- Cédrick _______________________________________________ Pharo-project mailing list Pharo-project@lists.gforge.inria.fr http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
-- _,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;: Alexandre Bergel http://www.bergel.eu ^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.
_______________________________________________ Pharo-project mailing list Pharo-project@lists.gforge.inria.fr http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
-- Cédrick
sounds cool. The name is cool :)))) Power to the objects/classes - no global! Stef On Jan 11, 2010, at 6:45 PM, Cédrick Béler wrote:
Here is the screenshot...
ps: there is a small bug for explorer in the version I sent. I fixed it but don't send yet -- Cédrick <copyObject.PNG>_______________________________________________ Pharo-project mailing list Pharo-project@lists.gforge.inria.fr http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
On Sun, Jan 10, 2010 at 15:31, Adrian Lienhard <adi@netstyle.ch> wrote:
I think the idea is good, but how could it be made easy to understand and use?
Have a list (the graphical widget) of variables declared in the workspace, drag-n-drop variables between workspaces (this would be nice anyway, but here it's essentially to distinguish between copy-pasting the raw text or the object reference). If you drop the variable somewhere in the code, then the variable is pasted there, with its name made unique if needed -- Damien Pollet type less, do more [ | ] http://people.untyped.org/damien.pollet
VW had this and I miss it all the times in Pharo. Dragging an object from an  inspector to a workspace is just so convenient, priceless!
OBTools has that since the beginning. Somebody would need to spend some time on these tools though to make them really useful. Lukas -- Lukas Renggli http://www.lukas-renggli.ch
participants (13)
-
Adrian Kuhn -
Adrian Lienhard -
Alexandre Bergel -
csrabak@bol.com.br -
Cédrick Béler -
Damien Pollet -
Gary Chambers -
John M McIntosh -
Lukas Renggli -
Mariano Martinez Peck -
Martin McClure -
Serge Stinckwich -
Stéphane Ducasse