unofficial mirror of guile-user@gnu.org 
 help / color / mirror / Atom feed
From: Neil Jerram <neil@ossau.uklinux.net>
Cc: guile-user@gnu.org
Subject: Re: Using Guile in a wxWidgets app
Date: Sun, 05 Feb 2006 09:42:22 +0000	[thread overview]
Message-ID: <87mzh6jg5d.fsf@ossau.uklinux.net> (raw)
In-Reply-To: <ds3ev1$gvn$1@sea.gmane.org> (John Steele Scott's message of "Sun, 05 Feb 2006 10:26:16 +1030")

John Steele Scott <toojays@toojays.net> writes:

> I have written a small piece about embedding Guile in wxWidgets GUI program.
> You can read it at:
> <http://www.toojays.net/portal/Wiki/EmbeddingGuileIntoAWxWidgetsProgram>
>
> Does anyone have any comments about it?

Overall it looks like a great tutorial to me.  (Although I'm not
familiar with wxWidgets code.)

Some detailed comments...

"if (modifiers == NULL)"

The constant indicating an empty list is SCM_EOL, not NULL, so this
should at least be (modifiers == SCM_EOL).  Even better, though, would
be "if (SCM_NULLP (modifiers))".

> In particular, I would appreciate feedback on the way I have wrapped the
> wxWidgets MessageBox() function. I used symbols instead of ORing bits for
> the modifier parameter, so that 
> (message-box "Really quit?" "Quit?" 'yes/no 'question)
> is equivalent to
> wxMessageBox("Really quit?", "Quit?", wxYES_NO|wxICON_QUESTION).

IMO this is a nice schemely touch.  You could of course compute the
symbols ahead of time, and store them, rather than constructing them
every time message_box is called, but it doesn't matter that much.

> Also, in my MyFrame::OnQuit method, I create a variable in the Guile world,
> and then look it up again after calling the hook. Is this really necessary,
> or can I somehow bind *quit-do-close* directly to a SCM in
> MyFrame::OnQuit's stack frame, which Guile will modify directly, removing
> the need for the call to scm_variable_ref(scm_c_lookup("*quit-do-close*"))?

Well you could do this, which feels a bit more natural (and closer to
what you have requested):

  SCM qdcvar = scm_c_lookup("*quit-do-close*");

  scm_variable_set_x(qdcvar, SCM_BOOL_T);

  scm_c_run_hook(quit_hook, SCM_EOL);

  if (SCM_NFALSEP(scm_variable_ref(qdcvar)))
    Close(true);

(Alternatively, you could question whether quit-hook really needs to be
a hook, rather than a single function.  If it was a single function,
you could call it from C directly and use its return value instead of
the global *quit-do-close*.)

Regards,
        Neil



_______________________________________________
Guile-user mailing list
Guile-user@gnu.org
http://lists.gnu.org/mailman/listinfo/guile-user


      reply	other threads:[~2006-02-05  9:42 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-02-04 23:56 Using Guile in a wxWidgets app John Steele Scott
2006-02-05  9:42 ` Neil Jerram [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/guile/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87mzh6jg5d.fsf@ossau.uklinux.net \
    --to=neil@ossau.uklinux.net \
    --cc=guile-user@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).