guile-user
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Request for help Qt, C++ and guile REPL.


From: Eduardo Acuña
Subject: Request for help Qt, C++ and guile REPL.
Date: Thu, 20 Jun 2013 09:04:59 -0700

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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]