28 #include <QKeySequence>
29 #include <QApplication>
37 #include <QDesktopServices>
38 #include <QDesktopWidget>
39 #include <QFileDialog>
40 #include <QMessageBox>
42 #include <QTextStream>
49 #ifdef HAVE_QSCINTILLA
67 #ifdef HAVE_QSCINTILLA
77 status_bar (new QStatusBar ()),
85 release_notes_window (0),
86 community_news_window (0),
88 _clipboard (QApplication::clipboard ()),
89 _cmd_queue (new QStringList ()),
95 bool connect_to_web =
true;
96 QDateTime last_checked;
102 = settings->value (
"news/allow_web_connection",
true).toBool ();
105 = settings->value (
"news/last_time_checked", QDateTime ()).toDateTime ();
107 serial = settings->value (
"news/last_news_item", 0).toInt ();
110 QDateTime current = QDateTime::currentDateTime ();
111 QDateTime one_day_ago = current.addDays (-1);
114 && (! last_checked.isValid () || one_day_ago > last_checked))
180 status_bar->showMessage (statusMessage, 1000);
187 QFileDialog::getSaveFileName (
this, tr (
"Save Workspace As"),
".", 0, 0,
188 QFileDialog::DontUseNativeDialog);
190 if (! file.isEmpty ())
192 file.toStdString ());
198 QString file = file_arg;
201 file = QFileDialog::getOpenFileName (
this, tr (
"Load Workspace"),
".", 0, 0,
202 QFileDialog::DontUseNativeDialog);
204 if (! file.isEmpty ())
206 file.toStdString ());
217 const QString& new_name)
220 name_pair names (old_name.toStdString (), new_name.toStdString ());
260 QString dir = info.absolutePath ();
261 QString function_name = info.fileName ();
262 function_name.chop (info.suffix ().length () + 1);
288 QDesktopServices::openUrl (QUrl (
"http://octave.org/doc/interpreter"));
300 QFile *file =
new QFile (QString::fromStdString (news_file));
301 if (file->open (QFile::ReadOnly))
303 QTextStream *stream =
new QTextStream (file);
304 news = stream->readAll ();
305 if (! news.isEmpty ())
307 news.prepend (
"<pre>");
308 news.append (
"</pre>");
311 news = (tr (
"The release notes file '%1' is empty.")
312 .
arg (QString::fromStdString (news_file)));
315 news = (tr (
"The release notes file '%1' cannot be read.")
316 .
arg (QString::fromStdString (news_file)));
322 browser->setText (news);
324 QVBoxLayout *vlayout =
new QVBoxLayout;
325 vlayout->addWidget (browser);
330 browser->document()->adjustSize ();
331 QSize doc_size = browser->document()->size().toSize ();
332 doc_size.rwidth () += 45;
333 int h = QApplication::desktop ()->height ();
336 doc_size.rheight () = h;
364 std::ostringstream buf;
368 octave_dot_org.http_get (param);
370 if (octave_dot_org.good ())
371 html_text = QString::fromStdString (buf.str ());
373 if (html_text.contains (
"this-is-the-gnu-octave-community-news-page"))
381 settings->setValue (
"news/last_time_checked",
382 QDateTime::currentDateTime ());
387 QString tag (
"community-news-page-serial=");
389 int b = html_text.indexOf (tag);
395 int e = html_text.indexOf (
"\n", b);
397 QString tmp = html_text.mid (b, e-b);
399 int curr_page_serial = tmp.toInt ();
401 if (curr_page_serial >
serial)
405 settings->setValue (
"news/last_news_item",
423 "Octave's community news source seems to be unavailable.\n"
426 "For the latest news, please check\n"
427 "<a href=\"http://octave.org/community-news.html\">http://octave.org/community-news.html</a>\n"
428 "when you have a connection to the web (link opens in an external browser).\n"
441 "Connecting to the web to display the latest Octave Community news has been disabled.\n"
444 "For the latest news, please check\n"
445 "<a href=\"http://octave.org/community-news.html\">http://octave.org/community-news.html</a>\n"
446 "when you have a connection to the web (link opens in an external browser)\n"
447 "or enable web connections for news in Octave's network settings dialog.\n"
467 ? settings->value (
"news/allow_web_connection",
true).toBool ()
470 QString base_url =
"http://octave.org";
471 QString page =
"community-news.html";
478 reader->moveToThread (worker_thread);
480 connect (reader, SIGNAL (display_news_signal (
const QString&)),
483 connect (worker_thread, SIGNAL (started (
void)),
484 reader, SLOT (process ()));
486 connect (reader, SIGNAL (finished (
void)), worker_thread, SLOT (quit ()));
488 connect (reader, SIGNAL (finished (
void)), reader, SLOT (deleteLater ()));
490 connect (worker_thread, SIGNAL (finished (
void)),
491 worker_thread, SLOT (deleteLater ()));
493 worker_thread->start ();
505 browser->setHtml (news);
506 browser->setObjectName (
"OctaveNews");
507 browser->setOpenExternalLinks (
true);
509 QVBoxLayout *vlayout =
new QVBoxLayout;
511 vlayout->addWidget (browser);
516 int win_x = QApplication::desktop ()->width ();
517 int win_y = QApplication::desktop ()->height ();
537 QDesktopServices::openUrl (QUrl (
"http://octave.org/bugs.html"));
543 QDesktopServices::openUrl (QUrl (
"http://octave.org/packages.html"));
549 QDesktopServices::openUrl (QUrl (
"http://agora.octave.org"));
555 QDesktopServices::openUrl (QUrl (
"http://octave.org/donate.html"));
561 QDesktopServices::openUrl (QUrl (
"http://octave.org/get-involved.html"));
568 int change_settings = settingsDialog->exec ();
569 if (change_settings == QDialog::Accepted)
576 delete settingsDialog;
587 = settings->value (
"DockWidgets/widget_icon_set",
"NONE").toString ();
599 {
"NONE",
":/actions/icons/logo.png"},
600 {
"GRAPHIC",
":/actions/icons/graphic_logo_"},
601 {
"LETTER",
":/actions/icons/letter_logo_"},
606 int icon_set_found = 0;
608 while (!widget_icon_data[count].name.isEmpty ())
611 if (widget_icon_data[count].name == icon_set)
614 icon_set_found = count;
623 QString name = widget->objectName ();
624 if (! name.isEmpty ())
626 icon = widget_icon_data[icon_set_found].path;
627 if (widget_icon_data[icon_set_found].name !=
"NONE")
628 icon = icon + name +
".png";
629 widget->setWindowIcon (QIcon (icon));
632 if (widget_icon_data[icon_set_found].name !=
"NONE")
634 +
"ReleaseWidget.png";
638 int icon_size = settings->value (
"toolbar_icon_size",16).toInt ();
688 = QFileDialog::getExistingDirectory (
this, tr (
"Browse directories"), 0,
689 QFileDialog::DontUseNativeDialog);
704 QString xdir = dir.isEmpty () ?
"." : dir;
706 QFileInfo fileInfo (xdir);
708 if (fileInfo.exists () && fileInfo.isDir ())
710 xdir.toStdString ());
741 setWindowTitle (
"Octave (Debugging)");
749 #ifdef HAVE_QSCINTILLA
757 setWindowTitle (
"Octave");
765 #ifdef HAVE_QSCINTILLA
843 QMessageBox::about (
this, tr (
"About Octave"),
844 QString::fromStdString (message));
861 qDebug (
"Error: QSettings pointer from resource manager is NULL.");
868 QStringList curr_dirs
869 = settings->value (
"MainWindow/current_directory_list").toStringList ();
870 for (
int i=0; i < curr_dirs.size (); i++)
885 QString name = widget->objectName ();
887 if (! name.isEmpty ())
889 bool floating = settings->value
890 (
"DockWidgets/" + name +
"Floating",
false).toBool ();
891 bool visible = settings->value
892 (
"DockWidgets/" + name +
"Visible",
true).toBool ();
894 #if defined (Q_OS_WIN32)
898 else if (! widget->parent ())
902 QVariant val = settings->value (
"DockWidgets/" + name);
903 widget->restoreGeometry (val.toByteArray ());
906 if (floating && visible)
907 float_and_visible.append (widget);
911 widget->setVisible (visible);
916 #if ! defined (Q_OS_WIN32)
924 restoreState (settings->value (
"MainWindow/windowState").toByteArray ());
925 restoreGeometry (settings->value (
"MainWindow/geometry").toByteArray ());
932 #if ! defined (Q_OS_WIN32)
935 if (settings->value (
"DockWidgets/" + widget->objectName () +
"_minimized").toBool ())
936 widget->showMinimized ();
938 widget->setVisible (
true);
949 qDebug (
"Error: QSettings pointer from resource manager is NULL.");
953 settings->setValue (
"MainWindow/geometry", saveGeometry ());
954 settings->setValue (
"MainWindow/windowState", saveState ());
956 QStringList curr_dirs;
961 settings->setValue (
"MainWindow/current_directory_list", curr_dirs);
981 if (edit && edit->hasSelectedText ())
983 QClipboard *clipboard = QApplication::clipboard ();
984 clipboard->setText (edit->selectedText ());
997 QClipboard *clipboard = QApplication::clipboard ();
998 QString str = clipboard->text ();
999 if (edit && str.length () > 0)
1017 SIGNAL (create_dialog (
const QString&,
const QString&,
1018 const QString&,
const QStringList&,
1019 const QString&,
const QStringList&)),
1022 const QString&,
const QStringList&,
1023 const QString&,
const QStringList&)));
1026 qRegisterMetaType<QIntList> (
"QIntList");
1028 SIGNAL (create_listview (
const QStringList&,
const QString&,
1030 const QString&,
const QStringList&,
1031 const QString&,
const QString&)),
1035 const QString&,
const QStringList&,
1036 const QString&,
const QString&)));
1039 qRegisterMetaType<QFloatList> (
"QFloatList");
1041 SIGNAL (create_inputlayout (
const QStringList&,
const QString&,
1043 const QStringList&)),
1048 const QStringList&)));
1051 SIGNAL (create_filedialog (
const QStringList &,
const QString&,
1052 const QString&,
const QString&,
1056 const QString&,
const QString&,
1065 const QString& title,
1066 const QString& icon,
1067 const QStringList& button,
1068 const QString& defbutton,
1069 const QStringList& role)
1072 button, defbutton, role);
1073 message_dialog->setAttribute (Qt::WA_DeleteOnClose);
1074 message_dialog->show ();
1082 const QString& mode,
1085 const QString& name,
1086 const QStringList& prompt,
1087 const QString& ok_string,
1088 const QString& cancel_string)
1091 initial, name, prompt,
1092 ok_string, cancel_string);
1094 list_dialog->setAttribute (Qt::WA_DeleteOnClose);
1095 list_dialog->show ();
1102 const QString& title,
1105 const QStringList& defaults)
1110 input_dialog->setAttribute (Qt::WA_DeleteOnClose);
1111 input_dialog->show ();
1116 const QString& title,
1117 const QString& filename,
1118 const QString& dirname,
1119 const QString& multimode)
1122 dirname, multimode);
1124 file_dialog->setAttribute (Qt::WA_DeleteOnClose);
1125 file_dialog->show ();
1133 setWindowIcon (QIcon (
":/actions/icons/logo.png"));
1144 dummyWidget->setObjectName (
"CentralDummyWidget");
1145 dummyWidget->resize (10, 10);
1146 dummyWidget->setSizePolicy (QSizePolicy::Minimum, QSizePolicy::Minimum);
1147 dummyWidget->hide ();
1148 setCentralWidget (dummyWidget);
1156 connect (qApp, SIGNAL (aboutToQuit ()),
1173 setWindowTitle (
"Octave");
1175 setDockOptions (QMainWindow::AnimatedDocks
1176 | QMainWindow::AllowNestedDocks
1177 | QMainWindow::AllowTabbedDocks);
1183 #ifdef HAVE_QSCINTILLA
1192 int win_x = QApplication::desktop ()->width ();
1193 int win_y = QApplication::desktop ()->height ();
1201 setGeometry (0, 0, win_x, win_y);
1207 #ifdef HAVE_QSCINTILLA
1241 this, SLOT (
exit (
int)));
1244 SIGNAL (set_workspace_signal
1245 (
bool,
const QString&,
const QStringList&,
1246 const QStringList&,
const QStringList&,
1247 const QStringList&,
const QIntList&)),
1250 (
bool,
const QString&,
const QStringList&,
1251 const QStringList&,
const QStringList&,
1252 const QStringList&,
const QIntList&)));
1261 SIGNAL (execute_command_in_terminal_signal (QString)),
1265 SIGNAL (set_history_signal (
const QStringList&)),
1269 SIGNAL (append_history_signal (
const QString&)),
1273 SIGNAL (clear_history_signal (
void)),
1283 SIGNAL (show_preferences_signal (
void)),
1286 #ifdef HAVE_QSCINTILLA
1288 SIGNAL (edit_file_signal (
const QString&)),
1290 SLOT (handle_edit_file_request (
const QString&)));
1314 SIGNAL (rename_variable (
const QString&,
const QString&)),
1330 QMenuBar *menu_bar = menuBar ();
1348 QMenu *file_menu = p->addMenu (tr (
"&File"));
1353 = file_menu->addAction (QIcon (
":/actions/icons/fileopen.png"),
1355 _open_action->setShortcutContext (Qt::ApplicationShortcut);
1358 #ifdef HAVE_QSCINTILLA
1362 file_menu->addSeparator ();
1364 QAction *load_workspace_action
1365 = file_menu->addAction (tr (
"Load Workspace"));
1367 QAction *save_workspace_action
1368 = file_menu->addAction (tr (
"Save Workspace As"));
1370 file_menu->addSeparator ();
1372 QAction *preferences_action
1373 = file_menu->addAction (QIcon (
":/actions/icons/configure.png"),
1374 tr (
"Preferences..."));
1376 file_menu->addSeparator ();
1379 _exit_action->setShortcutContext (Qt::ApplicationShortcut);
1381 connect (preferences_action, SIGNAL (triggered ()),
1384 #ifdef HAVE_QSCINTILLA
1389 connect (load_workspace_action, SIGNAL (triggered ()),
1392 connect (save_workspace_action, SIGNAL (triggered ()),
1396 this, SLOT (close ()));
1402 QMenu *new_menu = p->addMenu (tr (
"New"));
1405 = new_menu->addAction (QIcon (
":/actions/icons/filenew.png"),
1413 QAction *new_figure_action = new_menu->addAction (tr (
"Figure"));
1414 new_figure_action->setEnabled (
true);
1416 #ifdef HAVE_QSCINTILLA
1424 connect (new_figure_action, SIGNAL (triggered ()),
1431 QMenu *edit_menu = p->addMenu (tr (
"&Edit"));
1433 QKeySequence ctrl_shift = Qt::ControlModifier + Qt::ShiftModifier;
1436 = edit_menu->addAction (QIcon (
":/actions/icons/undo.png"), tr (
"Undo"));
1439 edit_menu->addSeparator ();
1442 = edit_menu->addAction (QIcon (
":/actions/icons/editcopy.png"),
1448 = edit_menu->addAction (QIcon (
":/actions/icons/editpaste.png"),
1453 = edit_menu->addAction (tr (
"Clear Clipboard"),
this,
1456 edit_menu->addSeparator ();
1460 edit_menu->addSeparator ();
1462 QAction *clear_command_window_action
1463 = edit_menu->addAction (tr (
"Clear Command Window"));
1465 QAction *clear_command_history
1466 = edit_menu->addAction (tr (
"Clear Command History"));
1468 QAction *clear_workspace_action
1469 = edit_menu->addAction (tr (
"Clear Workspace"));
1474 connect (clear_command_window_action, SIGNAL (triggered ()),
1477 connect (clear_command_history, SIGNAL (triggered ()),
1480 connect (clear_workspace_action, SIGNAL (triggered ()),
1483 connect (
_clipboard, SIGNAL (changed (QClipboard::Mode)),
1490 const QString& item,
1491 const QKeySequence& key)
1493 QAction *action =
_debug_menu->addAction (QIcon (icon_file), item);
1495 action->setEnabled (
false);
1496 action->setShortcut (key);
1498 #ifdef HAVE_QSCINTILLA
1512 (
":/actions/icons/db_step.png", tr (
"Step"),
1516 (
":/actions/icons/db_step_in.png", tr (
"Step In"),
1520 (
":/actions/icons/db_step_out.png", tr (
"Step Out"),
1521 Qt::ShiftModifier + Qt::Key_F11);
1524 (
":/actions/icons/db_cont.png", tr (
"Continue"),
1528 #ifdef HAVE_QSCINTILLA
1533 (
":/actions/icons/db_stop.png", tr (
"Exit Debug Mode"),
1534 Qt::ShiftModifier + Qt::Key_F5);
1555 const QKeySequence& key)
1557 QAction *action = p->addAction (item);
1559 action->setCheckable (checkable);
1560 action->setShortcut (key);
1561 action->setShortcutContext (Qt::ApplicationShortcut);
1569 QMenu *window_menu = p->addMenu (tr (
"&Window"));
1571 QKeySequence ctrl = Qt::ControlModifier;
1572 QKeySequence ctrl_shift = Qt::ControlModifier + Qt::ShiftModifier;
1576 tr (
"Show Command Window"),
true,
1577 ctrl_shift + Qt::Key_0);
1580 (window_menu, tr (
"Show Command History"),
1581 true, ctrl_shift + Qt::Key_1);
1584 (window_menu, tr (
"Show File Browser"),
1585 true, ctrl_shift + Qt::Key_2);
1588 (window_menu, tr (
"Show Workspace"),
true,
1589 ctrl_shift + Qt::Key_3);
1592 (window_menu, tr (
"Show Editor"),
true,
1593 ctrl_shift + Qt::Key_4);
1596 (window_menu, tr (
"Show Documentation"),
1597 true, ctrl_shift + Qt::Key_5);
1599 window_menu->addSeparator ();
1602 (window_menu, tr (
"Command Window"),
false,
1606 (window_menu, tr (
"Command History"),
false,
1610 (window_menu, tr (
"File Browser"),
false,
1614 (window_menu, tr (
"Workspace"),
false,
1618 (window_menu, tr (
"Editor"),
false,
1622 (window_menu, tr (
"Documentation"),
false,
1625 window_menu->addSeparator ();
1627 QAction *reset_windows_action
1628 = window_menu->addAction (tr (
"Reset Default Window Layout"));
1630 connect (show_command_window_action, SIGNAL (toggled (
bool)),
1634 show_command_window_action, SLOT (setChecked (
bool)));
1636 connect (show_workspace_action, SIGNAL (toggled (
bool)),
1640 show_workspace_action, SLOT (setChecked (
bool)));
1642 connect (show_history_action, SIGNAL (toggled (
bool)),
1646 show_history_action, SLOT (setChecked (
bool)));
1648 connect (show_file_browser_action, SIGNAL (toggled (
bool)),
1652 show_file_browser_action, SLOT (setChecked (
bool)));
1654 #ifdef HAVE_QSCINTILLA
1655 connect (show_editor_action, SIGNAL (toggled (
bool)),
1659 show_editor_action, SLOT (setChecked (
bool)));
1662 connect (show_documentation_action, SIGNAL (toggled (
bool)),
1666 show_documentation_action, SLOT (setChecked (
bool)));
1668 connect (command_window_action, SIGNAL (triggered ()),
1671 connect (workspace_action, SIGNAL (triggered ()),
1674 connect (history_action, SIGNAL (triggered ()),
1677 connect (file_browser_action, SIGNAL (triggered ()),
1680 #ifdef HAVE_QSCINTILLA
1681 connect (editor_action, SIGNAL (triggered ()),
1685 connect (documentation_action, SIGNAL (triggered ()),
1688 connect (reset_windows_action, SIGNAL (triggered ()),
1695 QMenu *help_menu = p->addMenu (tr (
"&Help"));
1699 help_menu->addSeparator ();
1701 QAction *report_bug_action
1702 = help_menu->addAction (tr (
"Report Bug"));
1704 QAction *octave_packages_action
1705 = help_menu->addAction (tr (
"Octave Packages"));
1707 QAction *agora_action
1708 = help_menu->addAction (tr (
"Share Code"));
1710 QAction *contribute_action
1711 = help_menu->addAction (tr (
"Contribute to Octave"));
1713 QAction *developer_action
1714 = help_menu->addAction (tr (
"Octave Developer Resources"));
1716 help_menu->addSeparator ();
1718 QAction *about_octave_action
1719 = help_menu->addAction (tr (
"About Octave"));
1721 connect (report_bug_action, SIGNAL (triggered ()),
1724 connect (octave_packages_action, SIGNAL (triggered ()),
1727 connect (agora_action, SIGNAL (triggered ()),
1730 connect (contribute_action, SIGNAL (triggered ()),
1733 connect (developer_action, SIGNAL (triggered ()),
1736 connect (about_octave_action, SIGNAL (triggered ()),
1743 QMenu *documentation_menu = p->addMenu (tr (
"Documentation"));
1745 QAction *ondisk_documentation_action
1746 = documentation_menu->addAction (tr (
"On Disk"));
1748 QAction *online_documentation_action
1749 = documentation_menu->addAction (tr (
"Online"));
1751 connect (ondisk_documentation_action, SIGNAL (triggered ()),
1754 connect (online_documentation_action, SIGNAL (triggered ()),
1761 QMenu *news_menu = p->addMenu (tr (
"&News"));
1763 QAction *release_notes_action
1764 = news_menu->addAction (tr (
"Release Notes"));
1766 QAction *current_news_action
1767 = news_menu->addAction (tr (
"Community News"));
1769 connect (release_notes_action, SIGNAL (triggered ()),
1772 connect (current_news_action, SIGNAL (triggered ()),
1782 && settings->value (
"General/hide_new_gui_warning",
false).toBool ())
1794 QLabel *icon =
new QLabel (box);
1796 = QIcon::fromTheme (
"dialog-warning",
1797 QIcon (
":/actions/icons/warning.png"));
1798 QPixmap icon_pixmap = warning_icon.pixmap (QSize (32, 32));
1799 icon->setPixmap (icon_pixmap);
1801 QTextBrowser *msg =
new QTextBrowser (box);
1802 msg->setOpenExternalLinks (
true);
1804 (tr (
"<strong>You are using a release candidate of Octave's experimental GUI.</strong> "
1805 "Octave is under continuous improvement and the GUI will be the "
1806 "default interface for the 4.0 release. For more information, "
1807 "select the \"Release Notes\" item in the \"Help\" menu of the GUI, "
1808 "or visit <a href=\"http://octave.org\">http://octave.org</a>."));
1810 msg->setStyleSheet (
"background-color: #ffd97f; color: black; margin 4px;");
1811 msg->setMinimumWidth (100);
1812 msg->setMinimumHeight (60);
1813 msg->setMaximumHeight (80);
1814 msg->setSizePolicy (QSizePolicy (QSizePolicy::Expanding,
1815 QSizePolicy::Minimum));
1820 connect (info_button, SIGNAL (clicked ()),
1823 connect (hide_button, SIGNAL (clicked ()),
1826 QVBoxLayout *button_layout =
new QVBoxLayout;
1828 button_layout->addWidget (info_button);
1829 button_layout->addWidget (hide_button);
1831 QHBoxLayout *icon_and_message =
new QHBoxLayout;
1833 icon_and_message->addWidget (icon);
1834 icon_and_message->addSpacing (10);
1835 icon_and_message->addWidget (msg);
1836 icon_and_message->addSpacing (10);
1837 icon_and_message->addLayout (button_layout);
1839 icon_and_message->setAlignment (hide_button, Qt::AlignTop);
1841 box->setFrameStyle (QFrame::Box);
1842 box->setLineWidth (2);
1843 box->setMaximumWidth (1000);
1845 box->setLayout (icon_and_message);
1847 _warning_bar->setFeatures (QDockWidget::NoDockWidgetFeatures);
1851 setCorner (Qt::TopLeftCorner, Qt::TopDockWidgetArea);
1852 setCorner (Qt::TopRightCorner, Qt::TopDockWidgetArea);
1861 = QIcon::fromTheme (
"dialog-warning",
1862 QIcon (
":/actions/icons/warning.png"));
1865 =
new QPushButton (warning_icon, tr (
"Experimental GUI Info"));
1880 settings->setValue (
"General/hide_new_gui_warning",
true);
1894 (tr (
"<p><strong>A Note about Octave's New GUI</strong></p>"
1895 "<p>One of the biggest new features for Octave 3.8 is a graphical "
1896 "user interface. It is the one thing that users have requested "
1897 "most often over the last few years and now it is almost ready. "
1898 "But because it is not quite as polished as we would like, we "
1899 "have decided to wait until the 4.0.x release series before "
1900 "making the GUI the default interface.</p>"
1901 "<p>Given the length of time and the number of bug fixes and "
1902 "improvements since the last major release, we also "
1903 "decided against delaying the release of all these new "
1904 "improvements any longer just to perfect the GUI. So please "
1905 "enjoy the 3.8 release of Octave and the preview of the new GUI. "
1906 "We believe it is working reasonably well, but we also know that "
1907 "there are some obvious rough spots and many things that could be "
1909 "<p><strong>We Need Your Help</strong></p>"
1910 "<p>There are many ways that you can help us fix the remaining "
1911 "problems, complete the GUI, and improve the overall user "
1912 "experience for both novices and experts alike (links will open "
1913 "an external browser):</p>"
1914 "<p><ul><li>If you are a skilled software developer, you can "
1915 "help by contributing your time to help "
1916 "<a href=\"http://octave.org/get-involved.html\">develop "
1918 "<li>If Octave does not work properly, you are encouraged to "
1919 "<a href=\"http://octave.org/bugs.html\">report problems </a> "
1920 "that you find.</li>"
1921 "<li>Whether you are a user or developer, you can "
1922 "<a href=\"http://octave.org/donate.html\">help to fund the "
1924 "Octave development takes a lot of time and expertise. "
1925 "Your contributions help to ensure that Octave will continue "
1926 "to improve.</li></ul></p>"
1927 "<p>We hope you find Octave to be useful. Please help us make "
1928 "it even better for the future!</p>"));
1930 QMessageBox gui_info_dialog (QMessageBox::Warning,
1931 tr (
"Experimental GUI Info"),
1932 gui_info, QMessageBox::Close);
1934 gui_info_dialog.exec ();
1962 QSizePolicy sizePol (QSizePolicy::Expanding, QSizePolicy::Preferred);
1967 _main_tool_bar->addWidget (
new QLabel (tr (
"Current Directory: ")));
1970 QIcon (
":/actions/icons/up.png"),
1971 tr (
"One directory up"));
1973 QIcon (
":/actions/icons/search.png"),
1974 tr (
"Browse directories"));
1982 connect (current_dir_search, SIGNAL (triggered ()),
1985 connect (current_dir_up, SIGNAL (triggered ()),
2053 bool repost =
false;
2061 std::string command =
_cmd_queue->takeFirst ().toStdString ();
2158 connect (
find_files_dlg, SIGNAL (dir_selected (
const QString &)),
2160 SLOT (set_current_directory (
const QString&)));
2162 connect (
find_files_dlg, SIGNAL (file_selected (
const QString &)),
2163 this, SLOT (
open_file (
const QString &)));
2207 QKeySequence no_key = QKeySequence ();
2232 if (cp_mode == QClipboard::Clipboard)