view gui-main.h @ 5:54edd85237ab

use signal to send input to qt interpreter object
author John W. Eaton <jwe@octave.org>
date Wed, 22 May 2019 18:07:37 -0400
parents 0e154787183d
children 04867eba6428
line wrap: on
line source

#if ! defined (calc_gui_main_h)
#define calc_gui_main_h 1

#include <iostream>
#include <sstream>
#include <string>

#include <cstdlib>
#include <cstring>

#include <QApplication>
#include <QTextDocument>
#include <QTextEdit>

#include "qt-interpreter.h"

namespace gui
{
  class command_window : public QTextEdit
  {
    Q_OBJECT

  public:

    command_window (QWidget *p = nullptr);

    virtual ~command_window (void) = default;

    // Accept an input line, parse and possibly execute it.

    void accept_line (const std::string& line);

    // Redisplay current command line.

    void redisplay (void);

    void insert_at_end (const std::string& text);

    void emit_error (const std::string& msg);

    void emit_result (double value);

  signals:

    void input_char_available (int key);

    void result_available (double value);

    void accept_line_signal (const QString& line);

  public slots:

    void handle_input_char (int key);

    void handle_result (double value);

  protected:

    void keyPressEvent (QKeyEvent *event);

    int do_arrow_key (int arrow_key);

    // Retrieve a command from the history list and insert it on the
    // current command.

    void history (bool up);

    void erase_line (void);

    void insert_at_cursor (const std::string& text);

    void insert_line (const std::string& prompt, const std::string& line);

    int set_mark (void);

    void insert_result (double value);

    void scroll_to_bottom (void);

    // Child widgets:

    QTextDocument *m_buffer;

    calc::qt_interpreter *m_interpreter;

    int beg_mark;
    int prompt_mark;
  };

  extern int main (int argc, char **argv);

  extern void emit_error (const std::string& msg);

  extern void emit_result (double value);
}

#endif