26#if defined (HAVE_CONFIG_H)
32#include "builtin-defun-decls.h"
49static int readline_event_hook ()
65 ee.display (std::cerr);
69 : m_event_queue_mutex (new
mutex ()), m_gui_event_queue (),
70 m_debugging (false), m_link_enabled (true),
72 m_qt_event_handlers ()
106 warning (
"event_manager: must have connected link to enable");
143 std::shared_ptr<event_queue> evq (
new event_queue ());
179 evq->add (std::bind (meth, std::ref (m_interpreter)));
212 if (interp.experimental_terminal_widget ())
228 warning (
"GUI desktop is already running");
231 error (
"desktop function requires new experimental terminal widget");
236DEFMETHOD (__event_manager_enabled__, interp, , ,
247DEFMETHOD (__event_manager_have_dialogs__, interp, , ,
258DEFMETHOD (__event_manager_edit_file__, interp, args, ,
268 if (args.length () == 1)
271 = args(0).xstring_value (
"first argument must be filename");
277 else if (args.length () == 2)
280 = args(0).xstring_value (
"first argument must be filename");
290DEFMETHOD (__event_manager_question_dialog__, interp, args, ,
298 if (args.length () == 6)
300 std::string msg = args(0).
xstring_value (
"invalid arguments");
301 std::string title = args(1).xstring_value (
"invalid arguments");
302 std::string btn1 = args(2).xstring_value (
"invalid arguments");
303 std::string btn2 = args(3).xstring_value (
"invalid arguments");
304 std::string btn3 = args(4).xstring_value (
"invalid arguments");
305 std::string btndef = args(5).xstring_value (
"invalid arguments");
317DEFMETHOD (__event_manager_file_dialog__, interp, args, ,
323 if (args.length () != 5)
329 std::string title = args(1).string_value ();
330 std::string filename = args(2).string_value ();
331 std::string multi_on = args(3).string_value ();
332 std::string pathname = args(4).string_value ();
339 filter_lst.push_back (std::make_pair (flist(i, 0),
341 ? flist(i, 1) :
"")));
347 std::list<std::string> items_lst
348 = evmgr.
file_dialog (filter_lst, title, filename, pathname, multi_on);
350 nel = items_lst.size ();
355 if (items_lst.front ().empty ())
360 for (
auto& str : items_lst)
373 retval(idx++) = std::stoi (str);
375 catch (
const std::invalid_argument&) { }
376 catch (
const std::out_of_range&) { }
387 auto it = items_lst.begin ();
389 for (
int idx = 0; idx < nel; idx++, it++)
390 items.
xelem (idx) = *it;
402 idx = std::stoi (*it);
404 catch (
const std::invalid_argument&) { }
405 catch (
const std::out_of_range&) { }
407 retval =
ovl (items, fpath, idx);
413DEFMETHOD (__event_manager_list_dialog__, interp, args, ,
419 if (args.length () != 8)
422 Cell list = args(0).cell_value ();
425 std::list<std::string> list_lst;
427 list_lst.push_back (tlist(i));
429 std::string mode = args(1).string_value ();
431 Matrix size_matrix = args(2).matrix_value ();
432 int width = size_matrix(0);
433 int height = size_matrix(1);
435 Matrix initial_matrix = args(3).matrix_value ();
436 nel = initial_matrix.
numel ();
437 std::list<int> initial_lst;
439 initial_lst.push_back (initial_matrix(i));
441 std::string name = args(4).string_value ();
442 list = args(5).cell_value ();
444 nel = plist.
numel ();
445 std::list<std::string> prompt_lst;
447 prompt_lst.push_back (plist(i));
448 std::string ok_string = args(6).string_value ();
449 std::string cancel_string = args(7).string_value ();
455 std::pair<std::list<int>,
int> result
456 = evmgr.
list_dialog (list_lst, mode, width, height, initial_lst,
457 name, prompt_lst, ok_string, cancel_string);
459 std::list<int> items_lst = result.first;
460 nel = items_lst.size ();
463 for (
const auto& int_el : items_lst)
464 items.
xelem(i++) = int_el;
466 return ovl (items, result.second);
469DEFMETHOD (__event_manager_input_dialog__, interp, args, ,
475 if (args.length () != 4)
478 Cell prompt = args(0).cell_value ();
481 std::list<std::string> prompt_lst;
483 prompt_lst.push_back (tmp(i));
485 std::string title = args(1).string_value ();
487 Matrix rc = args(2).matrix_value ();
493 nr.push_back (rc(i, 0));
494 nc.push_back (rc(i, 1));
497 Cell defaults = args(3).cell_value ();
500 std::list<std::string> defaults_lst;
502 defaults_lst.push_back (tmp(i));
508 std::list<std::string> items_lst
509 = evmgr.
input_dialog (prompt_lst, title, nr, nc, defaults_lst);
511 nel = items_lst.size ();
514 for (
const auto& str_el : items_lst)
515 items.
xelem(i++) = str_el;
521DEFMETHOD (__event_manager_named_icon__, interp, args, ,
529 if (args.length () > 0)
531 std::string icon_name = args(0).xstring_value (
"invalid arguments");
542DEFMETHOD (__event_manager_show_preferences__, interp, , ,
553DEFMETHOD (__event_manager_apply_preferences__, interp, , ,
564DEFMETHOD (__event_manager_gui_preference__, interp, args, ,
572 std::string value =
"";
574 if (args.length () >= 1)
575 key = args(0).string_value();
577 error (
"__event_manager_gui_preference__: "
578 "first argument must be the preference key");
580 if (args.length () >= 2)
581 value = args(1).string_value();
593DEFMETHOD (__event_manager_file_remove__, interp, args, ,
599 std::string old_name, new_name;
601 if (args.length () == 2)
603 old_name = args(0).string_value();
604 new_name = args(1).string_value();
607 error (
"__event_manager_file_remove__: "
608 "old and new name expected as arguments");
617DEFMETHOD (__event_manager_file_renamed__, interp, args, ,
625 if (args.length () == 1)
626 load_new = args(0).bool_value();
628 error (
"__event_manager_file_renamed__: "
629 "first argument must be boolean for reload new named file");
644 if (args.length () != 1)
647 if (! args(0).is_string ())
648 error (
"openvar: NAME must be a string");
650 std::string name = args(0).string_value ();
655 error (
"openvar: '%s' is not a variable", name.c_str ());
670DEFMETHOD (__event_manager_show_terminal_window__, interp, , ,
685DEFMETHOD (__event_manager_show_documentation__, interp, args, ,
693 if (args.length () >= 1)
694 file = args(0).string_value();
701DEFMETHOD (__event_manager_register_documentation__, interp, args, ,
709 if (args.length () >= 1)
710 file = args(0).string_value();
717DEFMETHOD (__event_manager_unregister_documentation__, interp, args, ,
725 if (args.length () >= 1)
726 file = args(0).string_value();
733DEFMETHOD (__event_manager_show_file_browser__, interp, , ,
746DEFMETHOD (__event_manager_show_command_history__, interp, , ,
759DEFMETHOD (__event_manager_show_workspace__, interp, , ,
772DEFMETHOD (__event_manager_show_community_news__, interp, , ,
785DEFMETHOD (__event_manager_show_release_notes__, interp, , ,
798DEFMETHOD (__event_manager_gui_status_update__, interp, args, ,
817 if (args.length () < 2)
818 error (
"__event_manager_gui_status_update__: two parameters required");
819 if (! (args(0).is_string ()))
820 error (
"__event_manager_gui_status_update__: FEATURE must be a string");
821 if (! (args(1).is_string ()))
822 error (
"__event_manager_gui_status_update__: STATUS must be a string");
824 feature = args(0).string_value ();
825 status = args(1).string_value ();
832DEFMETHOD (__event_manager_update_gui_lexer__, interp, , ,
843DEFMETHOD (__event_manager_copy_image_to_clipboard__, interp, args, ,
851 if (args.length () >= 1)
852 file = args(0).string_value();
859DEFMETHOD (commandhistory, interp, args, ,
866 if (args.length () != 0)
881 if (args.length () != 0)
896 if (args.length () != 0)
911 if (args.length () != 0)
919OCTAVE_END_NAMESPACE(octave)
N Dimensional Array with copy-on-write semantics.
T & xelem(octave_idx_type n)
Size of the specified dimension.
octave_idx_type rows() const
octave_idx_type columns() const
octave_idx_type numel() const
Number of elements in the array.
Array< std::string > cellstr_value() const
static bool is_gui_running()
static void add_event_hook(event_hook_fcn f)
static string_vector list(int=-1, bool=false)
Vector representing the dimensions (size) of an Array.
Provides threadsafe access to octave.
bool show_documentation(const std::string &file)
void connect_link(const std::shared_ptr< interpreter_events > &obj)
void show_terminal_window()
bool edit_variable(const std::string &name, const octave_value &val)
void file_renamed(bool load_new)
virtual void focus_window(const std::string win_name)
bool register_documentation(const std::string &file)
void show_command_history()
event_manager(interpreter &interp)
void show_release_notes()
std::string question_dialog(const std::string &msg, const std::string &title, const std::string &btn1, const std::string &btn2, const std::string &btn3, const std::string &btndef)
bool unregister_documentation(const std::string &file)
uint8NDArray get_named_icon(const std::string &icon_name)
std::list< std::pair< std::string, std::string > > filter_list
void file_remove(const std::string &old_name, const std::string &new_name)
void process_events(bool disable=false)
std::list< std::string > input_dialog(const std::list< std::string > &prompt, const std::string &title, const std::list< float > &nr, const std::list< float > &nc, const std::list< std::string > &defaults)
bool copy_image_to_clipboard(const std::string &file)
bool prompt_new_edit_file(const std::string &file)
mutex * m_event_queue_mutex
void start_gui(bool gui_app=false)
bool gui_status_update(const std::string &feature, const std::string &status)
void post_event(const fcn_callback &fcn)
std::string gui_preference(const std::string &key, const std::string &value)
std::pair< std::list< int >, int > list_dialog(const std::list< std::string > &list, const std::string &mode, int width, int height, const std::list< int > &initial_value, const std::string &name, const std::list< std::string > &prompt, const std::string &ok_string, const std::string &cancel_string)
std::stack< std::shared_ptr< event_queue > > m_gui_event_queue
bool have_dialogs() const
void show_community_news(int serial=-1)
bool edit_file(const std::string &file)
std::list< std::string > file_dialog(const filter_list &filter, const std::string &title, const std::string &filename, const std::string &dirname, const std::string &multimode)
virtual void display_exception(const execution_exception &ee, bool beep)
tree_evaluator & get_evaluator()
bool is_undefined() const
std::string xstring_value(const char *fmt,...) const
bool at_top_level() const
symbol_info_list get_symbol_info()
OCTAVE_BEGIN_NAMESPACE(octave) static octave_value daspk_fcn
#define DEFMETHOD(name, interp_name, args_name, nargout_name, doc)
Macro to define a builtin method.
void warning(const char *fmt,...)
void error(const char *fmt,...)
std::function< void(interpreter &)> meth_callback
std::function< void()> fcn_callback
event_manager & __get_event_manager__()
bool is_true(const std::string &s)
octave_value_list Fisguirunning(const octave_value_list &args, int)
octave_value_list ovl(const OV_Args &... args)
Construct an octave_value_list with less typing.