[plt-scheme] drscheme extension to save an load a set of tabs

From: Stephen De Gabrielle (spdegabrielle at gmail.com)
Date: Mon Aug 25 16:58:21 EDT 2008

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


Posted on the users mailing list.