26#if defined (HAVE_CONFIG_H)
50#include "builtin-defun-decls.h"
68 make_qstring_list (
const std::list<std::string>& lst)
72 for (
const auto& s : lst)
88 for (
const auto& ext_name : lst)
95 name.replace (QRegExp (R
"(\(.*\))"), "");
96 ext.replace (
";",
" ");
101 name = ext.toUpper () +
" Files";
104 retval.append (
name +
" (" + ext +
')');
112 m_uiwidget_creator (oct_qobj), m_result (), m_mutex (),
115 qRegisterMetaType<QIntList> (
"QIntList");
116 qRegisterMetaType<QFloatList> (
"QFloatList");
118 qRegisterMetaType<octave_value> (
"octave_value");
119 qRegisterMetaType<symbol_info_list> (
"symbol_info_list");
121 qRegisterMetaType<fcn_callback> (
"fcn_callback");
122 qRegisterMetaType<meth_callback> (
"meth_callback");
124 connect (
this, &qt_interpreter_events::confirm_shutdown_signal,
125 this, &qt_interpreter_events::confirm_shutdown_octave);
127 connect (
this, &qt_interpreter_events::get_named_icon_signal,
128 this, &qt_interpreter_events::get_named_icon_slot);
130 connect (
this, &qt_interpreter_events::gui_preference_signal,
131 this, &qt_interpreter_events::gui_preference_slot);
134 void qt_interpreter_events::start_gui (
bool gui_app)
136 if (m_octave_qobj.experimental_terminal_widget ())
137 emit start_gui_signal (gui_app);
140 void qt_interpreter_events::close_gui (
void)
142 if (m_octave_qobj.experimental_terminal_widget ())
143 emit close_gui_signal ();
146 std::list<std::string>
147 qt_interpreter_events::file_dialog (
const filter_list&
filter,
148 const std::string& title,
149 const std::string& filename,
151 const std::string& multimode)
154 = m_uiwidget_creator.file_dialog (make_filter_list (
filter),
160 std::list<std::string> retval;
162 for (
const auto& s : lst)
163 retval.push_back (s.toStdString ());
168 std::list<std::string>
169 qt_interpreter_events::input_dialog (
const std::list<std::string>& prompt,
170 const std::string& title,
171 const std::list<float>& nr,
172 const std::list<float>& nc,
173 const std::list<std::string>& defaults)
176 = m_uiwidget_creator.input_dialog (make_qstring_list (prompt),
178 std_list_to_qt_list<float> (nr),
179 std_list_to_qt_list<float> (nc),
180 make_qstring_list (defaults));
181 std::list<std::string> retval;
183 for (
const auto& s : lst)
184 retval.push_back (s.toStdString ());
189 std::pair<std::list<int>,
int>
190 qt_interpreter_events::list_dialog (
const std::list<std::string>& list,
191 const std::string& mode,
192 int width,
int height,
193 const std::list<int>& initial,
194 const std::string&
name,
195 const std::list<std::string>& prompt,
196 const std::string& ok_string,
197 const std::string& cancel_string)
199 QPair<QIntList, int> result
200 = m_uiwidget_creator.list_dialog (make_qstring_list (list),
203 std_list_to_qt_list<int> (initial),
205 make_qstring_list (prompt),
210 return std::pair<std::list<int>,
int> (std::list<int> (lst.begin (),
216 qt_interpreter_events::question_dialog (
const std::string& msg,
217 const std::string& title,
218 const std::string& btn1,
219 const std::string& btn2,
220 const std::string& btn3,
221 const std::string& btndef)
223 QString icon =
"quest";
228 role <<
"ResetRole" <<
"ResetRole" <<
"ResetRole";
244 return answer.toStdString ();
247 void qt_interpreter_events::update_path_dialog (
void)
249 emit update_path_dialog_signal ();
252 void qt_interpreter_events::show_preferences (
void)
254 emit show_preferences_signal ();
257 void qt_interpreter_events::apply_preferences (
void)
259 emit apply_new_settings ();
262 void qt_interpreter_events::show_terminal_window (
void)
264 emit show_terminal_window_signal ();
267 bool qt_interpreter_events::show_documentation (
const std::string& file)
274 void qt_interpreter_events::show_file_browser (
void)
276 emit show_file_browser_signal ();
279 void qt_interpreter_events::show_command_history (
void)
281 emit show_command_history_signal ();
284 void qt_interpreter_events::show_workspace (
void)
286 emit show_workspace_signal ();
289 void qt_interpreter_events::show_community_news (
int serial)
291 emit show_community_news_signal (serial);
294 void qt_interpreter_events::show_release_notes (
void)
296 emit show_release_notes_signal ();
299 bool qt_interpreter_events::edit_file (
const std::string& file)
306 void qt_interpreter_events::edit_variable (
const std::string& expr,
312 bool qt_interpreter_events::confirm_shutdown (
void)
314 QMutexLocker autolock (&m_mutex);
316 emit confirm_shutdown_signal ();
321 return m_result.toBool ();
324 bool qt_interpreter_events::prompt_new_edit_file (
const std::string& file)
326 resource_manager& rmgr = m_octave_qobj.get_resource_manager ();
327 gui_settings *
settings = rmgr.get_settings ();
336 role <<
"YesRole" <<
"RejectRole";
337 btn << tr (
"Create") << tr (
"Cancel");
339 QString answer = m_uiwidget_creator.message_dialog
340 (tr (
"File\n%1\ndoes not exist. Do you want to create it?").
342 tr (
"Octave Editor"),
"quest", btn, tr (
"Create"), role);
344 return (answer == tr (
"Create"));
351 qt_interpreter_events::debug_cd_or_addpath_error (
const std::string& file,
352 const std::string& dir,
361 ? tr (
"The file %1 does not exist in the load path. To run or debug the function you are editing, you must either change to the directory %2 or add that directory to the load path.").arg (qfile).arg (qdir)
362 : tr (
"The file %1 is shadowed by a file with the same name in the load path. To run or debug the function you are editing, change to the directory %2.").arg (qfile).arg (qdir));
364 QString title = tr (
"Change Directory or Add Directory to Load Path");
366 QString cd_txt = tr (
"&Change Directory");
367 QString addpath_txt = tr (
"&Add Directory to Load Path");
368 QString cancel_txt = tr (
"Cancel");
377 role <<
"AcceptRole";
380 role <<
"RejectRole";
383 = m_uiwidget_creator.message_dialog (msg, title,
"quest", btn,
386 if (result == cd_txt)
388 else if (result == addpath_txt)
394 uint8NDArray qt_interpreter_events::get_named_icon (
const std::string&
name)
396 QMutexLocker autolock (&m_mutex);
405 QIcon icon = m_result.value<QIcon> ();
410 QImage img = icon.pixmap (QSize (32, 32)).toImage ();
412 if (img.format () != QImage::Format_ARGB32_Premultiplied)
415 dim_vector dims (img.height (), img.width (), 4);
419 uint8_t *bits = img.bits ();
421 for (
int i = 0; i < img.height (); i++)
423 for (
int j = 0; j < img.width (); j++)
425 retval(i, j, 2) = bits[0];
426 retval(i, j, 1) = bits[1];
427 retval(i, j, 0) = bits[2];
428 retval(i, j, 3) = bits[3];
437 void qt_interpreter_events::get_named_icon_slot (
const QString&
name)
439 QMutexLocker autolock (&m_mutex);
441 resource_manager& rmgr = m_octave_qobj.get_resource_manager ();
442 m_result = QVariant::fromValue (rmgr.icon (
name));
448 qt_interpreter_events::gui_preference (
const std::string& key,
449 const std::string& value)
453 QMutexLocker autolock (&m_mutex);
462 QString pref = m_result.toString ();
464 return pref.toStdString ();
467 bool qt_interpreter_events::copy_image_to_clipboard (
const std::string& file)
474 void qt_interpreter_events::focus_window (
const std::string win_name)
479 void qt_interpreter_events::execute_command_in_terminal
480 (
const std::string& command)
485 void qt_interpreter_events::register_documentation (
const std::string& file)
490 void qt_interpreter_events::unregister_documentation (
const std::string& file)
495 void qt_interpreter_events::interpreter_output (
const std::string& msg)
497 if (m_octave_qobj.experimental_terminal_widget ()
498 && m_octave_qobj.have_terminal_window ())
510 if (m_octave_qobj.experimental_terminal_widget ()
511 && m_octave_qobj.have_terminal_window ())
513 std::ostringstream buf;
522 ee.display (std::cerr);
526 void qt_interpreter_events::gui_status_update (
const std::string& feature,
527 const std::string& status)
533 void qt_interpreter_events::update_gui_lexer (
void)
535 emit update_gui_lexer_signal (
true);
538 void qt_interpreter_events::directory_changed (
const std::string& dir)
543 void qt_interpreter_events::file_remove (
const std::string& old_name,
544 const std::string& new_name)
546 QMutexLocker autolock (&m_mutex);
556 void qt_interpreter_events::file_renamed (
bool load_new)
558 emit file_renamed_signal (load_new);
561 void qt_interpreter_events::set_workspace (
bool top_level,
bool debug,
562 const symbol_info_list& syminfo,
563 bool update_variable_editor)
565 if (! top_level && ! debug)
568 emit set_workspace_signal (top_level, debug, syminfo);
570 if (update_variable_editor)
571 emit refresh_variable_editor_signal ();
574 void qt_interpreter_events::clear_workspace (
void)
576 emit clear_workspace_signal ();
579 void qt_interpreter_events::update_prompt (
const std::string& prompt)
584 void qt_interpreter_events::set_history (
const string_vector& hist)
591 emit set_history_signal (qt_hist);
594 void qt_interpreter_events::append_history (
const std::string& hist_entry)
599 void qt_interpreter_events::clear_history (
void)
601 emit clear_history_signal ();
604 void qt_interpreter_events::pre_input_event (
void)
607 void qt_interpreter_events::post_input_event (
void)
610 void qt_interpreter_events::enter_debugger_event (
const std::string& ,
611 const std::string& fcn_file_name,
614 if (fcn_file_name.empty ())
617 insert_debugger_pointer (fcn_file_name, line);
619 emit enter_debugger_signal ();
623 qt_interpreter_events::execute_in_debugger_event (
const std::string& file,
626 delete_debugger_pointer (file, line);
629 void qt_interpreter_events::exit_debugger_event (
void)
631 emit exit_debugger_signal ();
636 void qt_interpreter_events::update_breakpoint (
bool insert,
637 const std::string& file,
639 const std::string& cond)
646 qt_interpreter_events::insert_debugger_pointer (
const std::string& file,
653 qt_interpreter_events::delete_debugger_pointer (
const std::string& file,
660 qt_interpreter_events::confirm_shutdown_octave (
void)
662 QMutexLocker autolock (&m_mutex);
664 m_result = m_octave_qobj.confirm_shutdown ();
679 qt_interpreter_events::gui_preference_slot (
const QString& key,
680 const QString& value)
682 QMutexLocker autolock (&m_mutex);
684 resource_manager& rmgr = m_octave_qobj.get_resource_manager ();
685 gui_settings *
settings = rmgr.get_settings ();
690 QString adjusted_value = gui_preference_adjust (key, value);
692 if (! adjusted_value.isEmpty () && (
read_value != adjusted_value))
695 settings->setValue (key, QVariant (adjusted_value));
697 emit settings_changed (
settings,
true);
706 qt_interpreter_events::gui_preference_adjust (
const QString& key,
707 const QString& value)
711 if (value.isEmpty ())
714 QString adjusted_value = value;
721 adjusted_value = adjusted_value.toUpper ();
724 resource_manager& rmgr = m_octave_qobj.get_resource_manager ();
725 rmgr.get_codecs (&codecs);
727 QRegExp re (
"^CP(\\d+)$");
729 if (adjusted_value ==
"SYSTEM")
731 QString (
"SYSTEM (") +
734 else if (re.indexIn (adjusted_value) > -1)
736 if (codecs.contains (
"IBM" + re.cap (1)))
737 adjusted_value =
"IBM" + re.cap (1);
738 else if (codecs.contains (
"WINDOWS-" + re.cap (1)))
739 adjusted_value =
"WINDOWS-" + re.cap (1);
741 adjusted_value.clear ();
743 else if (! codecs.contains (adjusted_value))
744 adjusted_value.clear ();
747 return adjusted_value;
Vector representing the dimensions (size) of an Array.
std::list< std::pair< std::string, std::string > > filter_list
qt_interpreter_events(base_qobject &oct_qobj)
octave_idx_type numel(void) const
OCTAVE_NAMESPACE_BEGIN typedef std::function< void(void)> fcn_callback
std::function< void(interpreter &)> meth_callback
OCTAVE_NAMESPACE_BEGIN MArray< T > filter(MArray< T > &b, MArray< T > &a, MArray< T > &x, MArray< T > &si, int dim=0)
const gui_pref ed_create_new_file("editor/create_new_file", QVariant(false))
const gui_pref ed_default_enc("editor/default_encoding", QVariant("UTF-8"))
const char * octave_locale_charset_wrapper(void)
QString fromStdString(const std::string &s)
std::string dirname(const std::string &path)
T read_value(std::istream &is)
static string_vector make_absolute(const string_vector &sv)