30#if defined (HAVE_CONFIG_H)
34#if defined (HAVE_QSCINTILLA)
36#include <QApplication>
39#include <QDesktopServices>
40#include <QDialogButtonBox>
42#include <QInputDialog>
45#include <QPrintDialog>
53#if defined (HAVE_QSCI_QSCILEXEROCTAVE_H)
54# define HAVE_LEXER_OCTAVE 1
55# include <Qsci/qscilexeroctave.h>
56#elif defined (HAVE_QSCI_QSCILEXERMATLAB_H)
57# define HAVE_LEXER_MATLAB 1
58# include <Qsci/qscilexermatlab.h>
60#include <Qsci/qscilexerbash.h>
61#include <Qsci/qscilexerbatch.h>
62#include <Qsci/qscilexercpp.h>
63#include <Qsci/qscilexerjava.h>
64#include <Qsci/qscilexerdiff.h>
65#include <Qsci/qscilexerperl.h>
66#include <Qsci/qsciprinter.h>
85#include "builtin-defun-decls.h"
107 const QString& directory_arg)
108 : m_octave_qobj (oct_qobj)
115 m_ced = directory_arg;
134 connect (
m_edit_area, SIGNAL (cursorPositionChanged (
int,
int)),
137 connect (
m_edit_area, SIGNAL (SCN_CHARADDED (
int)),
140 connect (
m_edit_area, SIGNAL (SCN_DOUBLECLICK (
int,
int,
int)),
169 QLabel *enc_label =
new QLabel (tr (
"encoding:"),
this);
183 m_edit_area->setMarginType (1, QsciScintilla::SymbolMargin);
191 m_edit_area->markerDefine (QsciScintilla::RightArrow,
193 m_edit_area->setMarkerBackgroundColor (QColor (255, 255, 0),
195 m_edit_area->markerDefine (QsciScintilla::RightArrow,
197 m_edit_area->setMarkerBackgroundColor (QColor (192, 192, 192),
200 connect (
m_edit_area, SIGNAL (marginClicked (
int,
int,
201 Qt::KeyboardModifiers)),
203 Qt::KeyboardModifiers)));
209 m_edit_area->setMarginsForegroundColor (QColor (96, 96, 96));
210 m_edit_area->setMarginsBackgroundColor (QColor (232, 232, 220));
211 m_edit_area->setMarginType (2, QsciScintilla::TextMargin);
214 m_edit_area->setBraceMatching (QsciScintilla::StrictBraceMatch);
222 m_edit_area->SendScintilla (QsciScintillaBase::SCI_AUTOCSETCANCELATSTART,
false);
224 QVBoxLayout *edit_area_layout =
new QVBoxLayout ();
227 edit_area_layout->setMargin (0);
228 edit_area_layout->setSpacing (0);
229 setLayout (edit_area_layout);
241 connect (
m_edit_area, SIGNAL (modificationChanged (
bool)),
244 connect (
m_edit_area, SIGNAL (copyAvailable (
bool)),
298 if (new_encoding.isEmpty ())
310 if ((save_dialog == QMessageBox::Cancel) ||
311 (save_dialog == QMessageBox::Save))
335 QRegExp rxfun1 (
"^[\t ]*function[^=]+=[\t ]*"
336 + word_at_cursor +
"[\t ]*\\([^\\)]*\\)[\t ]*$");
337 QRegExp rxfun2 (
"^[\t ]*function[\t ]+"
338 + word_at_cursor +
"[\t ]*\\([^\\)]*\\)[\t ]*$");
339 QRegExp rxfun3 (
"^[\t ]*function[\t ]+"
340 + word_at_cursor +
"[\t ]*$");
341 QRegExp rxfun4 (
"^[\t ]*function[^=]+=[\t ]*"
342 + word_at_cursor +
"[\t ]*$");
345 QStringList lines =
m_edit_area->text ().split (
"\n");
348 for (line = 0; line < lines.count (); line++)
350 if ((pos_fct = rxfun1.indexIn (lines.at (line))) != -1)
352 if ((pos_fct = rxfun2.indexIn (lines.at (line))) != -1)
354 if ((pos_fct = rxfun3.indexIn (lines.at (line))) != -1)
356 if ((pos_fct = rxfun4.indexIn (lines.at (line))) != -1)
366 int vis_line =
m_edit_area->SendScintilla (2220, line);
390 for (
int i = 0; i <
m_bp_lines.length (); i++)
409 cond =
'(' + cond +
") || (" +
m_edit_area->selectedText () +
')';
412 emit
dbstop_if (
"dbstop if", linenr+1, cond);
426 = QInputDialog::getText (
this, tr (
"Breakpoint condition"),
427 prompt, QLineEdit::Normal, cond, &ok);
431 if (ok && ! new_cond.isEmpty ())
469 catch (
const interrupt_exception&)
473 msg =
"evaluation interrupted";
482 QString new_prompt = (tr (
"ERROR: ")
496 if (! trackedFiles.isEmpty ())
498 if (! fileName.isEmpty () && QFile::exists (fileName))
544 int ans = QMessageBox::question (
nullptr, tr (
"Octave Editor"),
545 tr (
"Cannot add breakpoint to modified or unnamed file.\n"
546 "Save and add breakpoint, or cancel?"),
547 QMessageBox::Save | QMessageBox::Cancel, QMessageBox::Save);
549 if (ans == QMessageBox::Save)
561 Qt::KeyboardModifiers
state)
565 unsigned int markers_mask =
m_edit_area->markersAtLine (editor_linenr);
567 if (
state & Qt::ControlModifier)
600#if defined (HAVE_LEXER_OCTAVE)
601 lexer =
new QsciLexerOctave ();
602#elif defined (HAVE_LEXER_MATLAB)
603 lexer =
new QsciLexerMatlab ();
622 lexer =
new QsciLexerCPP ();
626 lexer =
new QsciLexerJava ();
630 lexer =
new QsciLexerPerl ();
634 lexer =
new QsciLexerBatch ();
638 lexer =
new QsciLexerDiff ();
642 lexer =
new QsciLexerBash ();
647#if defined (HAVE_LEXER_OCTAVE)
648 lexer =
new QsciLexerOctave ();
650#elif defined (HAVE_LEXER_MATLAB)
651 lexer =
new QsciLexerMatlab ();
670 || QString(old_lexer->lexer ()) != QString(
lexer->
lexer ()))
711 bool update_apis =
false;
716 QString tmp_app_name = QCoreApplication::applicationName ();
717 QCoreApplication::setApplicationName (
"octave");
719#if defined (HAVE_QSTANDARDPATHS)
720 QString local_data_path
721 = QStandardPaths::writableLocation (QStandardPaths::CacheLocation);
723 QString local_data_path
724 = QDesktopServices::storageLocation (QDesktopServices::CacheLocation);
727 QCoreApplication::setApplicationName (
"octave");
735 bool octave_functions
738 QCoreApplication::setApplicationName (tmp_app_name);
754 if (octave_functions)
763 update_apis = ! apis_file.exists ();
765 if (octave_functions)
770 QDateTime apis_time = apis_file.lastModified ();
772 || QDateTime::currentDateTime () > apis_time.addSecs (180))
787 bool apis_usable =
f.open (QIODevice::ReadOnly);
790 QDir ().mkpath (QFileInfo (
f).absolutePath ());
791 apis_usable =
f.open (QIODevice::WriteOnly);
813 QStringList api_entries;
819 std::string kw = ctmp(i).string_value ();
834 if (octave_functions)
853 for (
int i = 1; i <= 3; i++)
857 QString keyword = QString (
lexer->keywords (i));
859 QStringList keyword_list
860 = keyword.split (QRegExp (R
"(\s+)"));
862 for (
int j = 0; j < keyword_list.size (); j++)
871 if (update_apis_only)
881 QColor bg =
lexer->paper (0);
882 QColor fg =
lexer->color (0);
903 QColor hg = QApplication::palette ().color (QPalette::Highlight);
914 QFont line_numbers_font =
lexer->defaultFont ();
915 int font_size = line_numbers_font.pointSize ();
916 font_size = font_size
920 line_numbers_font.setPointSize (font_size);
931 for (
int idx = 0; idx < api_entries.size (); idx++)
940 disconnect (
m_lexer_apis, &QsciAPIs::apiPreparationFinished,
947 connect (
m_lexer_apis, &QsciAPIs::apiPreparationFinished,
993 bool remove_on_success)
1014 QsciPrinter *printer =
new QsciPrinter (QPrinter::HighResolution);
1016 QPrintDialog printDlg (printer,
this);
1018 if (printDlg.exec () == QDialog::Accepted)
1135 const QString& condition)
1162 int editor_linenr, cur;
1163 m_edit_area->getCursorPosition (&editor_linenr, &cur);
1190 if (nextcond != -1 && (nextcond < nextline || nextline == -1))
1191 nextline = nextcond;
1203 int line, cur, prevline, prevcond;
1212 if (prevcond != -1 && prevcond > prevline)
1213 prevline = prevcond;
1237 unsigned int sci_msg)
1287 QsciScintilla::EolMode eol_mode)
1338 line, cond.toStdString ());
1373 line = QInputDialog::getInt (
m_edit_area, tr (
"Goto line"),
1374 tr (
"Line number"), line+1, 1,
1403 QsciScintilla::AutoCompletionSource s =
m_edit_area->autoCompletionSource ();
1406 case QsciScintilla::AcsAll:
1410 case QsciScintilla::AcsAPIs:
1414 case QsciScintilla::AcsDocument:
1418 case QsciScintilla::AcsNone:
1430 int lineFrom, lineTo, colFrom, colTo;
1431 m_edit_area->getSelection (&lineFrom, &colFrom, &lineTo, &colTo);
1436 for (
int i = lineFrom; i <= lineTo; i++)
1464 int lineFrom, lineTo;
1469 m_edit_area->getSelection (&lineFrom, &colFrom, &lineTo, &colTo);
1490 QString ws =
"^(?:[ \\t]*)";
1492 QString used_comment_str = comment_str.at (0);
1503 = QInputDialog::getText (
this, tr (
"Comment selected text"),
1504 tr (
"Comment string to use:\n"),
1509 if ((! ok) || used_comment_str.isEmpty ())
1520 QStringList comment_str_sorted (comment_str.at (0));
1523 for (
int i = 1; i < comment_str.length (); i++)
1526 for (
int j = 0; j < comment_str_sorted.length (); j++)
1528 if (comment_str.at (i).length () > comment_str_sorted.at (j).length ())
1530 comment_str_sorted.insert (j, comment_str.at (i));
1536 comment_str_sorted << comment_str.at (i);
1541 for (
int i = 0; i < comment_str_sorted.length (); i++)
1547 rxc = QRegExp (ws +
"(" +
regexp +
")");
1551 int len = 0, lenc = 0;
1556 int lineFrom, lineTo, colFrom, colTo;
1557 int change_col_from = 1;
1558 int change_col_to = 1;
1561 m_edit_area->getSelection (&lineFrom, &colFrom, &lineTo, &colTo);
1566 for (
int i = lineFrom; i <= lineTo; i++)
1575 if ((removed = line.contains (rxc)))
1577 len = rxc.matchedLength ();
1578 QString matched_text = rxc.capturedTexts ().at (0);
1579 lenc = matched_text.remove (QRegExp (ws)).length ();
1585 if (i == lineFrom && (colFrom <
len-lenc || ! removed))
1586 change_col_from = 0;
1587 if (i == lineTo && (colTo <
len-lenc || ! removed))
1595 colFrom = colFrom + lenc;
1597 colTo = colTo + lenc;
1605 colFrom = colFrom - change_col_from*lenc;
1606 colTo = colTo - change_col_to*lenc;
1610 m_edit_area->setSelection (lineFrom, colFrom, lineTo, colTo);
1617 m_edit_area->insertAt (used_comment_str, cpline, 0);
1621 if (line.contains (rxc))
1623 len = rxc.matchedLength ();
1624 QString matched_text = rxc.capturedTexts ().at (0);
1625 lenc = matched_text.remove (QRegExp (ws)).length ();
1637 QString tooltip (
"");
1640 title = tr (
"<unnamed>");
1644 title = file.fileName ();
1661 dlg->setAttribute (Qt::WA_DeleteOnClose);
1666 dlg->setWindowModality (Qt::NonModal);
1673 int decision = QMessageBox::Yes;
1679 QMessageBox::StandardButtons buttons = QMessageBox::Save |
1680 QMessageBox::Discard |
1681 QMessageBox::Cancel;
1686 QString available_actions =
1687 tr (
"Do you want to cancel closing, save or discard the changes?");
1693 file = tr (
"<unnamed>");
1696 =
new QMessageBox (QMessageBox::Warning, tr (
"Octave Editor"),
1699 "is about to be closed but has been modified. "
1701 arg (file). arg (available_actions),
1702 buttons, qobject_cast<QWidget *> (parent ()));
1704 msgBox->setDefaultButton (QMessageBox::Save);
1707 decision = msgBox->exec ();
1709 if (decision == QMessageBox::Cancel)
1711 else if (decision == QMessageBox::Save)
1751 for (
int i = 0; i <
m_bp_lines.length (); i++)
1764 QFileInfo
file_info = QFileInfo (fileName);
1765 QString file_to_load;
1767 file_to_load =
file_info.canonicalFilePath ();
1769 file_to_load = fileName;
1770 QFile file (file_to_load);
1771 if (!file.open(QIODevice::ReadOnly))
1772 return file.errorString ();
1774 int col = 0, line = 0;
1782 QApplication::setOverrideCursor (Qt::WaitCursor);
1785 QByteArray text_data = file.readAll ();
1793 const QByteArray eol_lf = QByteArray (1, 0x0a);
1794 const QByteArray eol_cr = QByteArray (1, 0x0d);
1796 if (text_data.endsWith (eol_lf))
1799 if (text_data.endsWith (eol_cr))
1804 QTextCodec::ConverterState st;
1805 QTextCodec *codec = QTextCodec::codecForName (
m_encoding.toLatin1 ());
1806 if (codec ==
nullptr)
1807 codec = QTextCodec::codecForLocale ();
1809 const QString text = codec->toUnicode(text_data.constData(),
1810 text_data.size(), &st);
1813 if (st.invalidChars > 0)
1819 QString msg = tr (
"There were problems reading the file\n"
1821 "with the selected encoding %2.\n\n"
1822 "Modifying and saving the file might "
1826 msg_box->setIcon (QMessageBox::Warning);
1827 msg_box->setText (msg);
1828 msg_box->setWindowTitle (tr (
"Octave Editor"));
1829 msg_box->addButton (tr (
"&Edit anyway"), QMessageBox::YesRole);
1830 msg_box->addButton (tr (
"Chan&ge encoding"), QMessageBox::AcceptRole);
1831 msg_box->addButton (tr (
"&Close"), QMessageBox::RejectRole);
1833 connect (msg_box, &QMessageBox::buttonClicked,
1836 msg_box->setWindowModality (Qt::WindowModal);
1837 msg_box->setAttribute (Qt::WA_DeleteOnClose);
1844 QApplication::restoreOverrideCursor ();
1860 QString txt = btn->text ();
1862 if (txt == tr (
"&Close"))
1869 if (txt == tr (
"Chan&ge encoding"))
1873 dlg.setWindowTitle (tr (
"Select new default encoding"));
1876 =
new QLabel (tr (
"Please select a new encoding\n"
1877 "for reloading the current file.\n\n"
1878 "This does not change the default encoding.\n"));
1880 QComboBox *enc_combo =
new QComboBox ();
1884 connect (enc_combo, &QComboBox::currentTextChanged,
1887 QDialogButtonBox *buttons
1888 =
new QDialogButtonBox (QDialogButtonBox::Ok | QDialogButtonBox::Cancel,
1890 connect (buttons, &QDialogButtonBox::accepted, &dlg, &QDialog::accept);
1891 connect (buttons, &QDialogButtonBox::rejected, &dlg, &QDialog::reject);
1893 QGridLayout *main_layout =
new QGridLayout;
1894 main_layout->setSizeConstraint (QLayout::SetFixedSize);
1895 main_layout->addWidget (text, 0, 0);
1896 main_layout->addWidget (enc_combo, 1, 0);
1897 main_layout->addWidget (buttons, 2, 0);
1898 dlg.setLayout (main_layout);
1900 int answer = dlg.exec ();
1902 if (answer == QDialog::Accepted)
1922 QByteArray text =
m_edit_area->text ().toLatin1 ();
1924 QByteArray eol_lf = QByteArray (1, 0x0a);
1925 QByteArray eol_cr = QByteArray (1, 0x0d);
1926 QByteArray eol_crlf = eol_cr;
1927 eol_crlf.append (eol_lf);
1929 int count_crlf = text.count (eol_crlf);
1930 int count_lf = text.count (eol_lf) - count_crlf;
1931 int count_cr = text.count (eol_cr) - count_crlf;
1935 QsciScintilla::EolMode eol_mode
1940 if (count_crlf > count_max)
1942 eol_mode = QsciScintilla::EolWindows;
1943 count_max = count_crlf;
1945 if (count_lf > count_max)
1947 eol_mode = QsciScintilla::EolUnix;
1948 count_max = count_lf;
1950 if (count_cr > count_max)
1952 eol_mode = QsciScintilla::EolMac;
1962 case QsciScintilla::EolWindows:
1965 case QsciScintilla::EolMac:
1968 case QsciScintilla::EolUnix:
1990 Qt::QueuedConnection);
2007 if (file (i).string_value () ==
m_file_name.toStdString ())
2033 const QString& base_name,
2034 bool remove_on_success,
2035 bool restore_breakpoints)
2037 int ans = QMessageBox::question (
nullptr, tr (
"Debug or Save"),
2038 tr (
"This file is currently being executed.\n"
2039 "Quit debugging and save?"),
2040 QMessageBox::Save | QMessageBox::Cancel);
2042 if (ans == QMessageBox::Save)
2055 std::string std_base_name = base_name.toStdString ();
2062 restore_breakpoints);
2068 bool remove_on_success,
2069 bool restore_breakpoints)
2092 QFileInfo
file_info = QFileInfo (saveFileName);
2093 QString file_to_save;
2096 file_to_save =
file_info.canonicalFilePath ();
2097 QString base_name =
file_info.baseName ();
2112 std::string std_base_name = base_name.toStdString ();
2119 sym = symtab.find_user_function (std_base_name);
2130 if (! sym.is_defined () || ! sym.is_user_code ())
2132 emit do_save_file_signal (file_to_save, remove_on_success,
2133 restore_breakpoints);
2139 std::string full_name = file_to_save.toStdString ();
2144 emit do_save_file_signal (file_to_save, remove_on_success,
2145 restore_breakpoints);
2157 Cell names = stk.contents (
"name");
2161 if (names(i).string_value () == std_base_name)
2163 emit confirm_dbquit_and_save_signal
2164 (file_to_save, base_name, remove_on_success,
2165 restore_breakpoints);
2171 symtab.clear_user_function (std_base_name);
2174 restore_breakpoints);
2178 emit do_save_file_signal (saveFileName, remove_on_success,
2179 restore_breakpoints);
2182 void file_editor_tab::do_save_file (
const QString& file_to_save,
2183 bool remove_on_success,
2184 bool restore_breakpoints)
2186 QFile file (file_to_save);
2189 QStringList trackedFiles = m_file_system_watcher.files ();
2190 if (trackedFiles.contains (file_to_save))
2191 m_file_system_watcher.removePath (file_to_save);
2194 if (! file.open (QIODevice::WriteOnly))
2198 if (trackedFiles.contains (file_to_save))
2199 m_file_system_watcher.addPath (file_to_save);
2204 tr (
"Octave Editor"),
2205 tr (
"Could not open file %1 for write:\n%2.").
2206 arg (file_to_save).arg (file.errorString ()),
2207 QMessageBox::Ok,
nullptr);
2208 show_dialog (msgBox,
false);
2216 QTextStream out (&file);
2219 QTextCodec *codec = check_valid_codec ();
2228 m_edit_area->replace_all (
"[ \\t]+$",
"",
true,
false,
false);
2231 out.setCodec (codec);
2233 QApplication::setOverrideCursor (Qt::WaitCursor);
2235 out << m_edit_area->text ();
2237 && m_edit_area->text ().length ())
2238 out << m_edit_area->eol_string ();
2241 QApplication::restoreOverrideCursor ();
2247 QString full_file_to_save =
file_info.canonicalFilePath ();
2250 set_file_name (full_file_to_save);
2253 update_window_title (
false);
2256 m_edit_area->setModified (
false);
2257 m_enc_indicator->setText (m_encoding);
2259 emit tab_ready_to_close ();
2261 if (remove_on_success)
2263 emit tab_remove_request ();
2270 if (restore_breakpoints)
2271 check_restore_breakpoints ();
2274 void file_editor_tab::save_file_as (
bool remove_on_success)
2280 m_new_encoding = m_encoding;
2285 if (remove_on_success)
2289 m_edit_area->setReadOnly (
true);
2296 QStringList filters;
2297 filters << tr (
"Octave Files (*.m)")
2298 << tr (
"All Files (*)");
2299 fileDialog->setNameFilters (filters);
2300 fileDialog->setDefaultSuffix (
"m");
2302 if (valid_file_name ())
2304 fileDialog->selectFile (m_file_name);
2309 fileDialog->selectNameFilter (filters.at (1));
2310 fileDialog->setDefaultSuffix (
"");
2315 fileDialog->selectFile (
"");
2316 fileDialog->setDirectory (m_ced);
2320 QString fname = get_function_name ();
2321 if (! fname.isEmpty ())
2322 fileDialog->selectFile (fname +
".m");
2325 fileDialog->setAcceptMode (QFileDialog::AcceptSave);
2326 fileDialog->setViewMode (QFileDialog::Detail);
2327 fileDialog->setOption (QFileDialog::HideNameFilterDetails,
false);
2335 fileDialog->setOption(QFileDialog::DontUseNativeDialog);
2342 fileDialog->setOption(QFileDialog::DontConfirmOverwrite);
2345 connect (fileDialog, &QFileDialog::filterSelected,
2346 this, &file_editor_tab::handle_save_as_filter_selected);
2348 if (remove_on_success)
2350 connect (fileDialog, &QFileDialog::fileSelected,
2351 this, &file_editor_tab::handle_save_file_as_answer_close);
2353 connect (fileDialog, &QFileDialog::rejected,
2354 this, &file_editor_tab::handle_save_file_as_answer_cancel);
2358 connect (fileDialog, &QFileDialog::fileSelected,
2359 this, &file_editor_tab::handle_save_file_as_answer);
2362 show_dialog (fileDialog, ! valid_file_name ());
2365 void file_editor_tab::handle_save_as_filter_selected (
const QString&
filter)
2373 QFileDialog *file_dialog = qobject_cast<QFileDialog *> (sender ());
2375 QRegExp rx (
"\\*\\.([^ ^\\)]*)[ \\)]");
2376 int index = rx.indexIn (
filter, 0);
2379 file_dialog->setDefaultSuffix (rx.cap (1));
2381 file_dialog->setDefaultSuffix (
"");
2384 bool file_editor_tab::check_valid_identifier (QString file_name)
2386 QFileInfo file = QFileInfo (file_name);
2387 QString base_name = file.baseName ();
2389 if ((file.suffix () ==
"m")
2392 int ans = QMessageBox::question (
nullptr, tr (
"Octave Editor"),
2394 "is not a valid identifier.\n\n"
2395 "If you keep this filename, you will not be able to\n"
2396 "call your script using its name as an Octave command.\n\n"
2397 "Do you want to choose another name?").arg (base_name),
2398 QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes);
2400 if (ans == QMessageBox::Yes)
2407 QTextCodec* file_editor_tab::check_valid_codec ()
2409 QTextCodec *codec = QTextCodec::codecForName (m_encoding.toLatin1 ());
2412 if ((! codec) && m_encoding.startsWith(
"SYSTEM"))
2413 codec = QTextCodec::codecForLocale ();
2417 QMessageBox::critical (
nullptr,
2418 tr (
"Octave Editor"),
2419 tr (
"The current encoding %1\n"
2420 "can not be applied.\n\n"
2421 "Please select another one!").arg (m_encoding));
2426 QString editor_text = m_edit_area->text ();
2427 bool can_encode = codec->canEncode (editor_text);
2434 QVector<uint> u32_str = editor_text.toUcs4 ();
2435 const uint32_t *src =
reinterpret_cast<const uint32_t *
>
2439 const std::string encoding = m_encoding.toStdString ();
2442 u32_str.size (), &length);
2445 if (errno == EILSEQ)
2449 ::free (
static_cast<void *
> (res_str));
2454 QMessageBox::StandardButton pressed_button
2455 = QMessageBox::critical (
nullptr,
2456 tr (
"Octave Editor"),
2457 tr (
"The current editor contents can not be encoded\n"
2458 "with the selected encoding %1.\n"
2459 "Using it would result in data loss!\n\n"
2460 "Please select another one!").arg (m_encoding),
2461 QMessageBox::Cancel | QMessageBox::Ignore,
2462 QMessageBox::Cancel);
2464 if (pressed_button == QMessageBox::Ignore)
2473 void file_editor_tab::handle_save_file_as_answer (
const QString& save_file_name)
2475 QString saveFileName = save_file_name;
2476 QFileInfo file (saveFileName);
2477 QFileDialog *file_dialog = qobject_cast<QFileDialog *> (sender ());
2482 if ((! file_dialog->defaultSuffix ().isEmpty ()) && file.suffix ().isEmpty ())
2484 saveFileName = saveFileName +
"." + file_dialog->defaultSuffix ();
2487 file.setFile (saveFileName);
2491 if (file_dialog->testOption (QFileDialog::DontConfirmOverwrite) && file.exists ())
2493 int ans = QMessageBox::question (file_dialog,
2494 tr (
"Octave Editor"),
2495 tr (
"%1\n already exists\n"
2496 "Do you want to overwrite it?").arg (saveFileName),
2497 QMessageBox::Yes | QMessageBox::No);
2498 if (ans != QMessageBox::Yes)
2501 save_file_as (m_edit_area->isReadOnly ());
2506 if (saveFileName == m_file_name)
2508 save_file (saveFileName);
2513 if (check_valid_identifier (saveFileName))
2514 save_file_as (
false);
2516 emit editor_check_conflict_save (saveFileName,
false);
2520 void file_editor_tab::handle_save_file_as_answer_close (
const QString& saveFileName)
2526 if (check_valid_identifier (saveFileName))
2527 save_file_as (
true);
2529 emit editor_check_conflict_save (saveFileName,
true);
2532 void file_editor_tab::handle_save_file_as_answer_cancel (
void)
2535 m_edit_area->setReadOnly (
false);
2538 void file_editor_tab::file_has_changed (
const QString&,
bool do_close)
2540 bool file_exists = QFile::exists (m_file_name);
2542 if (file_exists && ! do_close)
2546 QDateTime modified = QFileInfo (m_file_name).lastModified ().toUTC ();
2548 if (modified <= m_last_modified)
2551 m_last_modified = modified;
2557 QStringList trackedFiles = m_file_system_watcher.files ();
2558 if (! trackedFiles.isEmpty ())
2559 m_file_system_watcher.removePath (m_file_name);
2561 if (file_exists && ! do_close)
2565 if (m_always_reload_changed_files)
2566 load_file (m_file_name);
2572 emit set_focus_editor_signal (
this);
2573 m_edit_area->setFocus ();
2579 tr (
"Octave Editor"),
2580 tr (
"It seems that \'%1\' has been modified by another application. Do you want to reload it?").
2582 QMessageBox::Yes | QMessageBox::No,
this);
2584 connect (msgBox, &QMessageBox::finished,
2585 this, &file_editor_tab::handle_file_reload_answer);
2587 msgBox->setWindowModality (Qt::WindowModal);
2588 msgBox->setAttribute (Qt::WA_DeleteOnClose);
2596 if (do_close && ! m_edit_area->isModified ())
2598 handle_file_resave_answer (QMessageBox::Cancel);
2604 emit set_focus_editor_signal (
this);
2605 m_edit_area->setFocus ();
2607 QString modified =
"";
2608 if (m_edit_area->isModified ())
2609 modified = tr (
"\n\nWarning: The contents in the editor is modified!");
2615 =
new QMessageBox (QMessageBox::Warning, tr (
"Octave Editor"),
2616 tr (
"It seems that the file\n"
2618 "has been deleted or renamed. Do you want to save it now?%2").
2619 arg (m_file_name).arg (modified),
2620 QMessageBox::Save | QMessageBox::Close,
nullptr);
2622 m_edit_area->setReadOnly (
true);
2624 connect (msgBox, &QMessageBox::finished,
2625 this, &file_editor_tab::handle_file_resave_answer);
2627 msgBox->setWindowModality (Qt::WindowModal);
2628 msgBox->setAttribute (Qt::WA_DeleteOnClose);
2639 update_lexer_settings ();
2644 m_edit_area->setMarginType (3, QsciScintilla::SymbolMargin);
2645 m_edit_area->setFolding (QsciScintilla::BoxedTreeFoldStyle, 3);
2649 m_edit_area->setFolding (QsciScintilla::NoFoldStyle, 3);
2654 m_status_bar->show ();
2656 m_status_bar->hide ();
2659 m_edit_area->setCaretLineVisible
2663 bool match_keywords =
settings->value
2665 bool match_document =
settings->value
2668 QsciScintilla::AutoCompletionSource source = QsciScintilla::AcsNone;
2671 source = QsciScintilla::AcsAll;
2673 source = QsciScintilla::AcsAPIs;
2674 else if (match_document)
2675 source = QsciScintilla::AcsDocument;
2676 m_edit_area->setAutoCompletionSource (source);
2678 m_edit_area->setAutoCompletionReplaceWord
2680 m_edit_area->setAutoCompletionCaseSensitivity
2684 m_edit_area->setAutoCompletionThreshold
2687 m_edit_area->setAutoCompletionThreshold (-1);
2691 m_edit_area->setWhitespaceVisibility (QsciScintilla::WsVisibleAfterIndent);
2693 m_edit_area->setWhitespaceVisibility (QsciScintilla::WsVisible);
2695 m_edit_area->setWhitespaceVisibility (QsciScintilla::WsInvisible);
2699 m_save_as_desired_eol =
static_cast<QsciScintilla::EolMode
>
2704 m_edit_area->setMarginLineNumbers (2,
true);
2705 auto_margin_width ();
2706 connect (m_edit_area, SIGNAL (linesChanged ()),
2707 this, SLOT (auto_margin_width ()));
2711 m_edit_area->setMarginLineNumbers (2,
false);
2712 disconnect (m_edit_area, SIGNAL (linesChanged ()),
nullptr,
nullptr);
2716 m_edit_area->setAutoIndent (m_smart_indent);
2717 m_edit_area->setTabIndents
2719 m_edit_area->setBackspaceUnindents
2721 m_edit_area->setIndentationGuides
2723 m_edit_area->setIndentationsUseTabs
2725 m_edit_area->setIndentationWidth
2728 m_edit_area->setTabWidth
2731 m_ind_char_width = 1;
2732 if (m_edit_area->indentationsUseTabs ())
2733 m_ind_char_width = m_edit_area->tabWidth ();
2735 m_edit_area->SendScintilla (QsciScintillaBase::SCI_SETHSCROLLBAR,
2737 m_edit_area->SendScintilla (QsciScintillaBase::SCI_SETSCROLLWIDTH,-1);
2738 m_edit_area->SendScintilla (QsciScintillaBase::SCI_SETSCROLLWIDTHTRACKING,
true);
2740 update_window_title (m_edit_area->isModified ());
2746 m_edit_area->setEdgeColumn (line_length);
2751 m_edit_area->setEdgeMode (QsciScintilla::EdgeLine);
2756 m_edit_area->setEdgeMode (QsciScintilla::EdgeBackground);
2758 m_edit_area->setEdgeMode (QsciScintilla::EdgeLine);
2762 m_edit_area->setEdgeMode (QsciScintilla::EdgeNone);
2765 m_edit_area->setWrapVisualFlags (QsciScintilla::WrapFlagByBorder);
2766 m_edit_area->setWrapIndentMode (QsciScintilla::WrapIndentSame);
2769 m_edit_area->setWrapMode (QsciScintilla::WrapWord);
2771 m_edit_area->setWrapMode (QsciScintilla::WrapNone);
2774 m_line_break = line_length;
2778 m_line_break_comments =
2782 m_highlight_all_occurrences =
2786 m_always_reload_changed_files =
2792 bool cursor_blinking;
2799 if (cursor_blinking)
2800 m_edit_area->SendScintilla (QsciScintillaBase::SCI_SETCARETPERIOD, 500);
2802 m_edit_area->SendScintilla (QsciScintillaBase::SCI_SETCARETPERIOD, 0);
2807 void file_editor_tab::auto_margin_width (
void)
2809 m_edit_area->setMarginWidth (2,
"1" + QString::number (m_edit_area->lines ()));
2817 bool file_editor_tab::conditional_close (
void)
2822 void file_editor_tab::change_editor_state (
const QWidget *ID)
2827 emit editor_state_changed (m_copy_available, m_is_octave_file,
2828 m_edit_area->isModified ());
2831 void file_editor_tab::handle_file_reload_answer (
int decision)
2833 if (decision == QMessageBox::Yes)
2836 load_file (m_file_name);
2841 m_file_system_watcher.addPath (m_file_name);
2845 void file_editor_tab::handle_file_resave_answer (
int decision)
2848 if (decision == QMessageBox::Save)
2850 save_file (m_file_name);
2851 m_edit_area->setReadOnly (
false);
2859 m_edit_area->setModified (
false);
2864 void file_editor_tab::insert_debugger_pointer (
const QWidget *ID,
int line)
2866 if (ID !=
this || ID ==
nullptr)
2869 emit remove_all_positions ();
2875 if (m_edit_area->isModified ())
2883 int editor_linenr = -1;
2885 emit find_translated_line_number (line, editor_linenr, dummy);
2886 if (editor_linenr != -1)
2889 dp =
new marker (m_edit_area, line,
2890 marker::debugger_position, editor_linenr);
2894 int original_linenr = -1;
2896 emit find_linenr_just_before (line, original_linenr, editor_linenr);
2897 if (original_linenr >= 0)
2900 int linenr_guess = editor_linenr + line - original_linenr;
2901 dp =
new marker (m_edit_area, line,
2902 marker::unsure_debugger_position,
2909 dp =
new marker (m_edit_area, line,
2910 marker::unsure_debugger_position);
2916 dp =
new marker (m_edit_area, line, marker::debugger_position);
2920 if (line == m_breakpoint_info.remove_line)
2922 m_breakpoint_info.remove_line = -1;
2923 if (line != m_breakpoint_info.do_not_remove_line)
2924 handle_request_remove_breakpoint (line);
2928 connect (
this, &file_editor_tab::remove_position_via_debugger_linenr,
2929 dp, &marker::handle_remove_via_original_linenr);
2931 connect (
this, &file_editor_tab::remove_all_positions,
2932 dp, &marker::handle_remove);
2934 center_current_line (
false);
2938 void file_editor_tab::delete_debugger_pointer (
const QWidget *ID,
int line)
2940 if (ID !=
this || ID ==
nullptr)
2944 emit remove_position_via_debugger_linenr (line);
2947 void file_editor_tab::do_breakpoint_marker (
bool insert,
2949 const QString& cond)
2951 if (ID !=
this || ID ==
nullptr)
2958 int editor_linenr = -1;
2963 emit find_translated_line_number (line, editor_linenr, bp);
2966 if ((cond ==
"") != (bp->
get_cond () ==
""))
2969 emit remove_breakpoint_via_debugger_linenr (line);
2978 bp =
new marker (m_edit_area, line,
2979 cond ==
"" ? marker::breakpoint
2980 : marker::cond_break, cond);
2982 connect (
this, &file_editor_tab::remove_breakpoint_via_debugger_linenr,
2983 bp, &marker::handle_remove_via_original_linenr);
2984 connect (
this, &file_editor_tab::request_remove_breakpoint_via_editor_linenr,
2985 bp, &marker::handle_request_remove_via_editor_linenr);
2986 connect (
this, &file_editor_tab::remove_all_breakpoints_signal,
2987 bp, &marker::handle_remove);
2988 connect (
this, &file_editor_tab::find_translated_line_number,
2989 bp, &marker::handle_find_translation);
2990 connect (
this, &file_editor_tab::find_linenr_just_before,
2991 bp, &marker::handle_find_just_before);
2992 connect (
this, &file_editor_tab::report_marker_linenr,
2993 bp, &marker::handle_report_editor_linenr);
2994 connect (bp, &marker::request_remove,
2995 this, &file_editor_tab::handle_request_remove_breakpoint);
2999 emit remove_breakpoint_via_debugger_linenr (line);
3003 void file_editor_tab::center_current_line (
bool always)
3005 long int visible_lines
3006 = m_edit_area->SendScintilla (QsciScintillaBase::SCI_LINESONSCREEN);
3008 if (visible_lines > 2)
3011 m_edit_area->getCursorPosition (&line, &index);
3014 m_edit_area->SendScintilla (2232, line);
3017 int vis_line = m_edit_area->SendScintilla (2220, line);
3019 int first_line = m_edit_area->firstVisibleLine ();
3021 if (always || vis_line == first_line
3022 || vis_line > first_line + visible_lines - 2)
3024 first_line += (vis_line - first_line - (visible_lines - 1) / 2);
3025 m_edit_area->SendScintilla (2613, first_line);
3030 void file_editor_tab::handle_lines_changed (
void)
3033 m_lines_changed =
true;
3036 void file_editor_tab::handle_cursor_moved (
int line,
int col)
3042 if (m_edit_area->SendScintilla (QsciScintillaBase::SCI_AUTOCACTIVE))
3043 m_autoc_active =
true;
3044 else if (m_autoc_active)
3046 m_autoc_active =
false;
3047 emit autoc_closed ();
3051 bool do_smart_indent = m_lines_changed && m_is_octave_file
3052 && (line == m_line+1) && (col < m_col)
3053 && (m_smart_indent || m_auto_endif);
3054 m_lines_changed =
false;
3057 int o_line = m_line;
3058 update_rowcol_indicator (line, col);
3062 if (do_smart_indent)
3063 m_edit_area->smart_indent (m_smart_indent, m_auto_endif,
3064 o_line, m_ind_char_width);
3067 void file_editor_tab::update_rowcol_indicator (
int line,
int col)
3071 m_row_indicator->setNum (line+1);
3072 m_col_indicator->setNum (col+1);
3079 void file_editor_tab::handle_char_added (
int)
3086 m_edit_area->get_current_position (&pos, &line, &col);
3089 if (col <= m_line_break)
3094 int style_comment = octave_qscintilla::ST_NONE;
3095 if (m_line_break_comments)
3098 style_comment = m_edit_area->is_style_comment ();
3099 if (! style_comment)
3108 m_edit_area->getCursorPosition (&line, &col);
3110 int col_space = col;
3111 int indentation = m_edit_area->indentation (line);
3115 while (c !=
' ' && c !=
'\t' && col_space > indentation)
3117 pos = m_edit_area->positionFromLineIndex (line, col_space--);
3118 c = m_edit_area->SendScintilla (QsciScintillaBase::SCI_GETCHARAT, pos);
3123 int col_newline = col - 1;
3124 if (c ==
' ' || c ==
'\t')
3125 col_newline = col_space + 1;
3129 QString newline = QString (
"\n");
3130 style_comment = m_edit_area->is_style_comment ();
3131 if (style_comment == octave_qscintilla::ST_LINE_COMMENT)
3132 newline = newline + m_edit_area->comment_string ().at (0);
3133 m_edit_area->insertAt (newline, line, col_newline);
3137 m_edit_area->setIndentation (line + 1, indentation);
3138 m_edit_area->SendScintilla (QsciScintillaBase::SCI_LINEEND);
3143 void file_editor_tab::handle_double_click (
int,
int,
int modifier)
3149 m_edit_area->clear_selection_markers ();
3151 if (m_highlight_all_occurrences)
3154 m_edit_area->set_word_selection ();
3161 m_edit_area->getCursorPosition (&line, &col);
3164 QString word = m_edit_area->wordAtLineIndex (line, col);
3165 word = word.trimmed ();
3167 if (! word.isEmpty ())
3172 int first_line = m_edit_area->firstVisibleLine ();
3173 int x_offset = m_edit_area->SendScintilla (QsciScintillaBase::SCI_GETXOFFSET);
3176 bool find_result_available
3177 = m_edit_area->findFirst (word,
3185#
if defined (HAVE_QSCI_VERSION_2_6_0)
3192 int wlen = word.length ();
3194 while (find_result_available)
3197 m_edit_area->getCursorPosition (&oline, &ocol);
3199 m_edit_area->show_selection_markers (oline, ocol-wlen, oline, ocol);
3202 find_result_available = m_edit_area->findNext ();
3207 m_edit_area->setFirstVisibleLine (first_line);
3208 m_edit_area->SendScintilla (QsciScintillaBase::SCI_SETXOFFSET, x_offset);
3209 m_edit_area->setCursorPosition (line, col);
3210 m_edit_area->setSelection (line, col - wlen, line, col);
3211 m_edit_area->set_word_selection (word);
3217 QString file_editor_tab::get_function_name (
void)
3219 QRegExp rxfun1 (
"^[\t ]*function[^=]+=([^\\(]+)\\([^\\)]*\\)[\t ]*$");
3220 QRegExp rxfun2 (
"^[\t ]*function[\t ]+([^\\(]+)\\([^\\)]*\\)[\t ]*$");
3221 QRegExp rxfun3 (
"^[\t ]*function[^=]+=[\t ]*([^\\s]+)[\t ]*$");
3222 QRegExp rxfun4 (
"^[\t ]*function[\t ]+([^\\s]+)[\t ]*$");
3223 QRegExp rxfun5 (
"^[\t ]*classdef[\t ]+([^\\s]+)[\t ]*$");
3225 QStringList lines = m_edit_area->text ().split (
"\n");
3227 for (
int i = 0; i < lines.count (); i++)
3229 if (rxfun1.indexIn (lines.at (i)) != -1)
3230 return rxfun1.cap (1).remove (QRegExp (
"[ \t]*"));
3231 else if (rxfun2.indexIn (lines.at (i)) != -1)
3232 return rxfun2.cap (1).remove (QRegExp (
"[ \t]*"));
3233 else if (rxfun3.indexIn (lines.at (i)) != -1)
3234 return rxfun3.cap (1).remove (QRegExp (
"[ \t]*"));
3235 else if (rxfun4.indexIn (lines.at (i)) != -1)
3236 return rxfun4.cap (1).remove (QRegExp (
"[ \t]*"));
3237 else if (rxfun5.indexIn (lines.at (i)) != -1)
3238 return rxfun5.cap (1).remove (QRegExp (
"[ \t]*"));
octave_idx_type numel(void) const
Number of elements in the array.
OCTINTERP_API void interpreter_try(unwind_protect &frame)
error_system & get_error_system(void)
load_path & get_load_path(void)
tree_evaluator & get_evaluator(void)
symbol_table & get_symbol_table(void)
void recover_from_exception(void)
std::list< std::string > autoloaded_functions(void) const
string_vector fcn_names(void) const
Base class for Octave interfaces that use Qt.
resource_manager & get_resource_manager(void)
int remove_breakpoint_from_file(const std::string &file="", int line=1)
bool condition_valid(const std::string &cond)
bp_lines remove_all_breakpoints_from_file(const std::string &file, bool silent=false)
int add_breakpoint_in_file(const std::string &file="", int line=1, const std::string &condition="")
static bool interrupt(bool=true)
void set_encoding(const QString &new_encoding)
void confirm_dbquit_and_save_signal(const QString &file_to_save, const QString &base_name, bool remove_on_success, bool restore_breakpoints)
void set_file_name(const QString &fileName)
void goto_line(const QWidget *ID, int line=-1)
void report_marker_linenr(QIntList &lines, QStringList &conditions)
void toggle_breakpoint(const QWidget *ID)
void zoom_out(const QWidget *ID)
QStringList m_bp_conditions
void run_file(const QWidget *ID, bool step_into=false)
void save_file_as(const QWidget *ID)
void tab_ready_to_close(void)
void set_current_directory(const QString &dir)
file_editor_tab(base_qobject &oct_qobj, const QString &directory="")
A file_editor_tab object consists of a text area and three left margins.
void handle_margin_clicked(int line, int margin, Qt::KeyboardModifiers state)
void check_restore_breakpoints(void)
void handle_double_click(int p, int l, int modifier)
void update_breakpoints()
octave_qscintilla * m_edit_area
void set_modified(bool modified=true)
void dbstop_if(const QString &prompt, int line, const QString &cond)
void handle_request_add_breakpoint(int line, const QString &cond)
void zoom_normal(const QWidget *ID)
void interpreter_event(const fcn_callback &fcn)
QString load_file(const QString &fileName)
void next_bookmark(const QWidget *ID)
void previous_breakpoint(const QWidget *ID)
void update_lexer_settings(bool update_apis_only=false)
void convert_eol(const QWidget *ID, QsciScintilla::EolMode)
void save_file(const QWidget *ID)
void toggle_bookmark(const QWidget *ID)
void do_comment_selected_text(bool comment, bool input_str=false)
void handle_remove_next(int remove_line)
void notice_settings(const gui_settings *settings, bool init=false)
void set_focus(const QWidget *ID)
QFileSystemWatcher m_file_system_watcher
void unindent_selected_text(const QWidget *ID)
void update_window_title(bool modified)
void handle_cursor_moved(int line, int col)
void remove_all_breakpoints_signal(void)
void update_rowcol_indicator(int line, int col)
void do_breakpoint_marker(bool insert, const QWidget *ID, int line=-1, const QString &cond="")
void request_remove_breakpoint_via_editor_linenr(int editor_linenr)
void update_breakpoints_signal(const octave_value_list &args)
void move_match_brace(const QWidget *ID, bool select)
void next_breakpoint(const QWidget *ID)
void show_dialog(QDialog *dlg, bool modal)
void edit_mfile_request(const QString &, const QString &, const QString &, int)
void do_indent_selected_text(bool indent)
void handle_context_menu_edit(const QString &)
void previous_bookmark(const QWidget *ID)
void handle_api_entries_added(void)
void request_add_breakpoint(int line, const QString &cond)
void editor_state_changed(bool copy_available, bool is_octave_file, bool is_modified)
void update_breakpoints_handler(const octave_value_list &argout)
void print_file(const QWidget *ID)
void do_save_file_signal(const QString &file_to_save, bool remove_on_success, bool restore_breakpoints)
void run_file_signal(const QFileInfo &info)
void indent_selected_text(const QWidget *ID)
QStatusBar * m_status_bar
bool valid_file_name(const QString &file=QString())
void file_name_changed(const QString &fileName, const QString &toolTip, bool modified)
void smart_indent_line_or_selected_text(const QWidget *ID)
void closeEvent(QCloseEvent *event)
base_qobject & m_octave_qobj
void add_breakpoint_event(int line, const QString &cond)
void do_save_file(const QString &file_to_save, bool remove_on_success, bool restore_breakpoints)
int check_file_modified(bool remove=false)
void context_edit(const QWidget *ID)
void uncomment_selected_text(const QWidget *ID)
void handle_current_enc_changed(const QString &enc)
void tab_remove_request(void)
void do_smart_indent_line_or_selected_text(void)
void handle_add_octave_apis(const QStringList &api_entries)
void context_help(const QWidget *ID, bool)
void remove_bookmark(const QWidget *ID)
void recover_from_exit(void)
void remove_all_breakpoints(const QWidget *ID)
void auto_margin_width(void)
void context_run(const QWidget *ID)
void handle_decode_warning_answer(QAbstractButton *btn)
void confirm_dbquit_and_save(const QString &file_to_save, const QString &base_name, bool remove_on_success, bool restore_breakpoints)
QDateTime m_last_modified
void scintilla_command(const QWidget *, unsigned int)
void comment_selected_text(const QWidget *ID, bool input_str)
QsciScintilla::EolMode detect_eol_mode(void)
void maybe_remove_next(int remove_line)
void edit_area_changed(octave_qscintilla *edit_area)
bool unchanged_or_saved(void)
void zoom_in(const QWidget *ID)
void remove_all_positions(void)
void handle_context_menu_break_condition(int linenr)
void handle_char_added(int character)
void handle_lines_changed(void)
void file_has_changed(const QString &path, bool do_close=false)
void handle_request_remove_breakpoint(int line)
void save_apis_info(void)
void mru_add_file(const QString &file_name, const QString &encoding)
void api_entries_added(void)
void request_open_file(const QString &, const QString &=QString())
void handle_dbstop_if(const QString &prompt, int line, const QString &cond)
void center_current_line(bool always=true)
QTextCodec * check_valid_codec(void)
void update_eol_indicator(void)
void new_file(const QString &commands=QString())
void show_auto_completion(const QWidget *ID)
breakpoint_info m_breakpoint_info
void request_add_octave_apis(const QStringList &)
void handle_copy_available(bool enableCopy)
lexer(interpreter &interp)
@ unsure_debugger_position
const QString & get_cond(void) const
void set_cond(const QString &cond)
void update_rowcol_indicator_signal(int line, int col)
void smart_indent_line_or_selected_text(int lineFrom, int lineTo)
void set_selection_marker_color(const QColor &c)
void interpreter_event(const fcn_callback &fcn)
QStringList comment_string(bool comment=true)
virtual void setCursorPosition(int line, int col)
void context_menu_break_condition_signal(int)
void context_menu_edit_signal(const QString &)
void context_help_doc(bool)
void combo_encoding(QComboBox *combo, const QString ¤t=QString())
gui_settings * get_settings(void) const
void read_lexer_settings(QsciLexer *lexer, gui_settings *settings, int mode=0, int def=0)
virtual octave_user_code * user_code_value(bool silent=false)
const Cell & contents(const_iterator p) const
octave_idx_type numel(void) const
Cell cell_value(void) const
octave_idx_type numel(void) const
void clear_user_function(const std::string &name)
std::list< std::string > built_in_function_names(void)
void dbquit(bool all=false)
octave_map backtrace(octave_idx_type &curr_user_frame, bool print_subfn=true) const
bp_table & get_bp_table(void)
bool in_debug_repl(void) const
OCTAVE_EXPORT octave_value_list Fdbstatus(octave::interpreter &interp, const octave_value_list &args, int nargout)
OCTAVE_NAMESPACE_BEGIN MArray< T > filter(MArray< T > &b, MArray< T > &a, MArray< T > &x, MArray< T > &si, int dim=0)
const gui_pref cs_cursor_blinking("terminal/cursorBlinking", QVariant(true))
const gui_pref ed_always_reload_changed_files("editor/always_reload_changed_files", QVariant(false))
const gui_pref ed_indent_uses_tabs("editor/indent_uses_tabs", QVariant(false))
const gui_pref ed_code_completion("editor/codeCompletion", QVariant(true))
const gui_pref ed_show_hscroll_bar("editor/show_hscroll_bar", QVariant(true))
const gui_pref ed_code_completion_octave_functions("editor/codeCompletion_octave_functions", QVariant(true))
const gui_pref ed_auto_endif("editor/auto_endif", QVariant(1))
const gui_pref ed_show_white_space("editor/show_white_space", QVariant(false))
const gui_pref ed_color_mode("editor/color_mode", QVariant(0))
const gui_pref ed_line_numbers_size("editor/line_numbers_size", QVariant(0))
const gui_pref ed_wrap_lines("editor/wrap_lines", QVariant(false))
const gui_pref ed_highlight_current_line("editor/highlightCurrentLine", QVariant(true))
const gui_pref ed_break_lines("editor/break_lines", QVariant(false))
const gui_pref ed_break_lines_comments("editor/break_lines_comments", QVariant(false))
const QString ed_last_comment_str("editor/oct_last_comment_str")
const gui_pref ed_long_line_marker("editor/long_line_marker", QVariant(true))
const gui_pref ed_tab_indents_line("editor/tab_indents_line", QVariant(false))
const gui_pref ed_code_completion_octave_builtins("editor/codeCompletion_octave_builtins", QVariant(true))
const gui_pref ed_show_edit_status_bar("editor/show_edit_status_bar", QVariant(true))
const gui_pref ed_code_completion_threshold("editor/codeCompletion_threshold", QVariant(3))
const gui_pref ed_code_completion_document("editor/codeCompletion_document", QVariant(true))
const gui_pref ed_backspace_unindents_line("editor/backspace_unindents_line", QVariant(false))
const gui_pref ed_code_completion_case("editor/codeCompletion_case", QVariant(true))
const gui_pref ed_rm_trailing_spaces("editor/rm_trailing_spaces", QVariant(true))
const gui_pref ed_default_enc("editor/default_encoding", QVariant("UTF-8"))
const gui_pref ed_long_line_marker_background("editor/long_line_marker_background", QVariant(false))
const gui_pref ed_show_white_space_indent("editor/show_white_space_indent", QVariant(false))
const gui_pref ed_show_line_numbers("editor/showLineNumbers", QVariant(true))
const gui_pref ed_highlight_all_occurrences("editor/highlight_all_occurrences", QVariant(true))
const gui_pref ed_show_eol_chars("editor/show_eol_chars", QVariant(false))
const gui_pref ed_show_indent_guides("editor/show_indent_guides", QVariant(false))
const gui_pref ed_code_folding("editor/code_folding", QVariant(true))
const gui_pref ed_force_newline("editor/force_newline", QVariant(true))
const gui_pref ed_indent_width("editor/indent_width", QVariant(2))
const gui_pref ed_tab_width("editor/tab_width", QVariant(2))
const gui_pref ed_long_line_column("editor/long_line_column", QVariant(80))
const gui_pref ed_default_eol_mode("editor/default_eol_mode", QVariant(os_eol_mode))
const gui_pref ed_code_completion_replace("editor/codeCompletion_replace", QVariant(false))
const gui_pref ed_code_completion_keywords("editor/codeCompletion_keywords", QVariant(true))
const gui_pref ed_auto_indent("editor/auto_indent", QVariant(true))
const gui_pref ed_long_line_marker_line("editor/long_line_marker_line", QVariant(true))
const gui_pref global_use_native_dialogs("use_native_file_dialogs", QVariant(true))
const gui_pref global_cursor_blinking("cursor_blinking", QVariant(true))
OCTAVE_NAMESPACE_BEGIN OCTAVE_EXPORT octave_value_list Fiskeyword(const octave_value_list &args, int)
QString fromStdString(const std::string &s)
std::string canonicalize_file_name(const std::string &name)
static uint32_t state[624]
static double f(double k, double l_nu, double c_pm)
OCTGUI_API QColor interpolate_color(const QColor &col1, const QColor &col2, double fs, double fv)
octave_value_list ovl(const OV_Args &... args)
Construct an octave_value_list with less typing.
static OCTAVE_NORETURN void eval_error(const char *msg, const dim_vector &x, const dim_vector &y)
char * octave_u32_conv_to_encoding_strict(const char *tocode, const uint32_t *src, size_t srclen, size_t *lengthp)
OCTAVE_NAMESPACE_BEGIN bool valid_identifier(const char *s)