[plt-scheme] drscheme extension to save an load a set of tabs
forgot to load;
(require (planet "project.scm" ("spdegabrielle" "projects-project.plt" 1 1)))
s.
On Mon, Aug 25, 2008 at 8:47 PM, Stephen De Gabrielle
<spdegabrielle at gmail.com> wrote:
> Thanks,
>
> I owe you the double thanks because I used drsync to work out how to do this.
>
> Your feedback is much appreciated;
>
>> Your icon looks good, but it is the wrong size. It should be 32x32. My
> haha! I just used a screen grabber to capture part of the screen that
> had project written on it
> new icon fixed to 32x32 (same technique - but capture from module browser)
>
>> I like your use of pack.ss. I had used shell scripts to package everything up.
> I am lazy
>
>> You could:
>> * Add scribble documentation.
> I just don't have the time for scribble - of course this is an opinion
> from ignorance of scribble - I appear trapped...
>
>> * Put the buttons on the left near the file chooser/browser. Since you
>> are performing file operations, this is the logical place to find it.
> I can't work out how to do thid (HELP)
>
>> * Upper-case the icon labels and remove the dash.
> I Assume You Mean Title Case
>
>> * When loading a project, don't re-load files that are already open.
> (added to the to-do list)
>
>> * More clearly state your goals and vision of the plugin. Files
>> grouped into a project using this plugin, and the ability to browse
>> code dependencies using the module browser, seem to be complementary
>> features.
> Sorry, at this stage it has been about what I can achieve with the
> mimimal effort
>
>> * Save more than 1 project
> I need an open-project button that lets me select a file (and save project)
>
>> You could also:
>> * Use a different extension that .psp. That is associated to PSP image
>> files (on Windows atleast).
> suggestions - I have changed to .ss for the moment.
>
>> * Put the project file in the users home dir, use (find-system-path 'home-dir).
> done thanks for the tip :)
>
>> * I used the predicate for whether a tab has a file is to apply
>> file-path to the tab, rather than asking a tab for its filename and
>> checking if it exists.Tabs are created in a state where they aren't
>> associated with a file, the only way to associate them with a file is
>> by creating a new one or one that already exists (to the best of my
>> knowledge at least).
> Umm, could you elaborate?
>
>> * A menu in the menubar might be a better place rather than buttons.
> yes
>
>> * The button icons don't show up for me, but I see them configured in
>> the button.
> I can't work out how to get them working. (HELP)
>
> Any help appreciated...
>
> Thanks again,
>
> Stephen
>
>
> #lang scheme/base
> (require (lib "tool.ss" "drscheme")
> mred
> mrlib/switchable-button
> mzlib/unit
> scheme/class)
>
> (provide tool@)
>
> (define tool@
> (unit
> (import drscheme:tool^)
> (export drscheme:tool-exports^)
> (define phase1 void)
> (define phase2 void)
>
> (define project-icon "project.png")
> (define project-icon-sm "project-sm.png")
> (define home-dir (find-system-path 'home-dir))
> (define saved-tabs-file (string->path "saved-tabs-file.ss"))
> (define saved-tabs-file-path (build-path home-dir saved-tabs-file))
> (define (save x)
> (call-with-output-file saved-tabs-file-path
> (lambda (i) (write x i))
> #:exists 'replace
> ))
>
> (define (load)
> (for-each (lambda (filename)
> (drscheme:unit:open-drscheme-window filename))
> (if (file-exists? saved-tabs-file-path)
> (call-with-input-file saved-tabs-file-path
> (lambda (i) (read i)))
> '()
> )))
>
>
> (define (projects-unit-frame-mixin super%)
> (class super%
> (inherit get-button-panel)
>
> ;; each-tab -> list of files
> (define (get-tab-files)
> (map
> (lambda (tab)
> (let ([editor (send tab get-defs)])
> (when (file-exists? (send editor get-filename))
> (path->string (send editor get-filename)))))
> (send this get-tabs)))
>
> (super-new)
>
> (inherit register-toolbar-button)
>
> (define project-icon-bitmap (make-object bitmap%
> project-icon-sm 'png/mask))
>
> (define save-project-button
> (new switchable-button%
> (label "save tabs")
> (parent (make-object vertical-pane% (get-button-panel)))
> (callback (lambda (button) (save (get-tab-files))))
> [bitmap project-icon-bitmap]
>
> ))
> (register-toolbar-button save-project-button)
>
> (send (get-button-panel) change-children
> (lambda (_)
> (cons (send save-project-button get-parent)
> (remq (send save-project-button get-parent) _))))
>
> (define load-project-button
> (new switchable-button%
> (label "reload tabs")
> (parent (make-object vertical-pane% (get-button-panel)))
> (callback (lambda (button) (load)))
> [bitmap project-icon-bitmap]
> ))
> (register-toolbar-button load-project-button)
>
> (send (get-button-panel) change-children
> (lambda (_)
> (cons (send load-project-button get-parent)
> (remq (send load-project-button get-parent) _))))
> ))
> (drscheme:get/extend:extend-unit-frame projects-unit-frame-mixin)
> ))
>
>
> On Mon, Aug 25, 2008 at 4:59 PM, Grant Rettke <grettke at acm.org> wrote:
>> Hi Stephen,
>>
>>> let me know what you think
>>
>> Your first run looks good. Here are some thoughts:
>>
>> Your icon looks good, but it is the wrong size. It should be 32x32. My
>> icon in DrSync looks, ok, but not good. I used pov-ray. I wish I had
>> an artist at my disposal.
>>
>> I like your use of pack.ss. I had used shell scripts to package everything up.
>>
>> I tested out the plugin, it works fine. Inevitably now people will
>> tell you "You should...". Here is my contribution :).
>>
>> You could:
>> * Add scribble documentation.
>> * Put the buttons on the left near the file chooser/browser. Since you
>> are performing file operations, this is the logical place to find it.
>> * Upper-case the icon labels and remove the dash.
>> * When loading a project, don't re-load files that are already open.
>> * More clearly state your goals and vision of the plugin. Files
>> grouped into a project using this plugin, and the ability to browse
>> code dependencies using the module browser, seem to be complementary
>> features.
>> * Save more than 1 project
>>
>> You could also:
>> * Use a different extension that .psp. That is associated to PSP image
>> files (on Windows atleast).
>> * Put the project file in the users home dir, use (find-system-path 'home-dir).
>> * I used the predicate for whether a tab has a file is to apply
>> file-path to the tab, rather than asking a tab for its filename and
>> checking if it exists.Tabs are created in a state where they aren't
>> associated with a file, the only way to associate them with a file is
>> by creating a new one or one that already exists (to the best of my
>> knowledge at least).
>> * A menu in the menubar might be a better place rather than buttons.
>> * The button icons don't show up for me, but I see them configured in
>> the button.
>>
>> Best wishes,
>>
>> Grant
>>
>
>
>
> --
> Cheers,
>
> Stephen
>
--
Cheers,
Stephen
--
Stephen De Gabrielle
s.degabrielle at cs.ucl.ac.uk
Telephone +44 (0)20 7679 0693 (x30693)
Mobile 079 851 890 45
Project: Making Sense of Information (MaSI)
Work:http://www.uclic.ucl.ac.uk/annb/MaSI.html
Home:http://www.degabrielle.name/stephen
UCL Interaction Centre
MPEB 8th floor
University College London
Gower Street
London WC1E 6BT