unofficial mirror of guile-user@gnu.org 
 help / color / mirror / Atom feed
* Request for help Qt, C++ and guile REPL.
@ 2013-06-20 16:04 Eduardo Acuña
  2013-06-20 17:46 ` Panicz Maciej Godek
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Eduardo Acuña @ 2013-06-20 16:04 UTC (permalink / raw)
  To: guile-user

[-- Attachment #1: Type: text/plain, Size: 2522 bytes --]

Hello!

I have found the archives of this mailing list very helpful in the
development of a piece of software i'm writing. And i have a few questions
about the integration between guile, c++ and the library Qt.

The program in question is a little gui repl, where the user can type guile
code in a 'QLineEdit' widget and the evaluation gets printed in a
'QTextBrowser' widget.

I have done this in a very basic way. But the problem is that if the user
types:

(begin (display "hello")(sleep 2))

the result gets printed after the 2 seconds. What can i do to get the gui
repl more like que standard guile repl?

Thank you in advance.

Eduardo Acuña Yeomans.

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
the class declaration is this:

class GUIrepl : public QDialog
{
    Q_OBJECT

    QTextBrowser *output_text_browser;
    QLineEdit    *input_line_edit;
    QPushButton  *evaluate_btn;

    SCM my_output_port;
public:
    explicit GUIrepl(QWidget *parent = 0);
    ~GUIrepl();
private slots:
    void evaluate_expression();
};

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
the function that handles the evaluation is this:

void GUIrepl::evaluate_expression()
{
    QString input;
    SCM result_obj;
    SCM result_str;
    QString to_print;

    input = this->input_line_edit->text();

    result_obj = scm_c_eval_string(input.toStdString().data());
    result_str = scm_object_to_string(result_obj, SCM_UNDEFINED);
    to_print = scm_to_locale_string(result_str);

    SCM out = scm_get_output_string(this->my_output_port);
    QString out_str = scm_to_locale_string(out);

    input = "> "+input;
    this->output_text_browser->append(input);
    if(out_str != "")
this->pantalla->append(out_str);
    if(to_print != "#<unspecified>")
this->output_text_browser->append(to_print);

    this->input_line_edit->setText("");
    scm_truncate_file(this->my_output_port, scm_from_uint16(0));
}

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
and in the GUIrepl class constructor i have this:

my_output_port = scm_open_output_string();
scm_set_current_output_port(my_output_port);


The entire proyect is in here:https://github.com/eduardoacye/Automaton
Its very basic and most of it is in spanish. Its going to be a program
where you can write algorithms in scheme for finite state machines, graph
theory, grammars and cellular automata and the graphic representation is in
c++.

[-- Attachment #2: Type: text/html, Size: 3826 bytes --]

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2013-06-20 18:49 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-06-20 16:04 Request for help Qt, C++ and guile REPL Eduardo Acuña
2013-06-20 17:46 ` Panicz Maciej Godek
2013-06-20 17:52 ` Noah Lavine
2013-06-20 18:49 ` Thien-Thi Nguyen

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).