changeset 22250:2fd4f1a3f4a8

allow building with Qt5 (bug #40252) * acinclude.m4 (OCTAVE_CHECK_QT_VERSION): Define HAVE_QT4 or HAVE_QT5. Also check for Qt5PrintSupport when using Qt5. * Canvas.cc, Object.cc, QTerminal.cc, TerminalView.cpp, Vt102Emulation.cpp, konsole_wcwidth.h, find-files-dialog.cc, file-editor-tab.cc, file-editor.cc, find-dialog.cc, octave-gui.cc, resource-manager.cc, shortcut-manager.cc, workspace-model.cc, workspace-view.cc: Adapt to Qt5 API changes.
author John W. Eaton <jwe@octave.org>
date Wed, 10 Aug 2016 03:54:42 -0400
parents da201af35c97
children d6948923dc9b
files libgui/graphics/Canvas.cc libgui/graphics/Object.cc libgui/qterminal/libqterminal/QTerminal.cc libgui/qterminal/libqterminal/unix/TerminalView.cpp libgui/qterminal/libqterminal/unix/Vt102Emulation.cpp libgui/qterminal/libqterminal/unix/konsole_wcwidth.h libgui/src/find-files-dialog.cc libgui/src/m-editor/file-editor-tab.cc libgui/src/m-editor/file-editor.cc libgui/src/m-editor/find-dialog.cc libgui/src/octave-gui.cc libgui/src/resource-manager.cc libgui/src/shortcut-manager.cc libgui/src/workspace-model.cc libgui/src/workspace-view.cc m4/acinclude.m4
diffstat 16 files changed, 117 insertions(+), 43 deletions(-) [+]
line wrap: on
line diff
--- a/libgui/graphics/Canvas.cc	Wed Aug 10 09:09:41 2016 +0200
+++ b/libgui/graphics/Canvas.cc	Wed Aug 10 03:54:42 2016 -0400
@@ -393,7 +393,13 @@
           QRectF r (bb(0), bb(1), bb(2), bb(3));
 
           r.adjust (-5, -5, 5, 5);
-          if (r.contains (event->posF ()))
+
+#if (HAVE_QT4)
+          bool rect_contains_pos = r.contains (event->posF ());
+#else
+          bool rect_contains_pos = r.contains (event->localPos ());
+#endif
+          if (rect_contains_pos)
             {
               currentObj = childObj;
               break;
@@ -442,7 +448,12 @@
               Matrix bb = it->get_properties ().get_boundingbox (true);
               QRectF r (bb(0), bb(1), bb(2), bb(3));
 
-              if (r.contains (event->posF ()))
+#if defined (HAVE_QT4)
+              bool rect_contains_pos = r.contains (event->posF ());
+#else
+              bool rect_contains_pos = r.contains (event->localPos ());
+#endif
+              if (rect_contains_pos)
                 axesObj = *it;
             }
 
--- a/libgui/graphics/Object.cc	Wed Aug 10 09:09:41 2016 +0200
+++ b/libgui/graphics/Object.cc	Wed Aug 10 03:54:42 2016 -0400
@@ -183,7 +183,7 @@
   QVariant v = obj->property ("QtHandles::Object");
 
   if (v.isValid ())
-    return reinterpret_cast<Object*> (qVariantValue<void*> (v));
+    return reinterpret_cast<Object*> (qvariant_cast<void*> (v));
 
   return 0;
 }
--- a/libgui/qterminal/libqterminal/QTerminal.cc	Wed Aug 10 09:09:41 2016 +0200
+++ b/libgui/qterminal/libqterminal/QTerminal.cc	Wed Aug 10 03:54:42 2016 -0400
@@ -83,9 +83,9 @@
     else
       {
         _interrupt_action->setShortcut (
-              QKeySequence (Qt::ControlModifier + Qt::Key_C));
+              QKeySequence (Qt::ControlModifier | Qt::Key_C));
         _nop_action->setShortcut (
-              QKeySequence (Qt::ControlModifier + Qt::Key_D));
+              QKeySequence (Qt::ControlModifier | Qt::Key_D));
       }
   }
 
@@ -194,7 +194,7 @@
     sc = QKeySequence::Copy; // settings->value () does not work!
 
   //  dis- or enable extra interrupt action
-  bool extra_ir_action = (sc != QKeySequence (Qt::ControlModifier + Qt::Key_C));
+  bool extra_ir_action = (sc != QKeySequence (Qt::ControlModifier | Qt::Key_C));
   _interrupt_action->setEnabled (extra_ir_action);
   has_extra_interrupt (extra_ir_action);
 
--- a/libgui/qterminal/libqterminal/unix/TerminalView.cpp	Wed Aug 10 09:09:41 2016 +0200
+++ b/libgui/qterminal/libqterminal/unix/TerminalView.cpp	Wed Aug 10 03:54:42 2016 -0400
@@ -41,6 +41,7 @@
 #include <QPixmap>
 #include <QScrollBar>
 #include <QStyle>
+#include <QToolTip>
 #include <QtCore>
 #include <QtGui>
 
--- a/libgui/qterminal/libqterminal/unix/Vt102Emulation.cpp	Wed Aug 10 09:09:41 2016 +0200
+++ b/libgui/qterminal/libqterminal/unix/Vt102Emulation.cpp	Wed Aug 10 03:54:42 2016 -0400
@@ -994,7 +994,7 @@
                                          "is missing.");
 
         reset();
-        receiveData( translatorError.toAscii().constData() , translatorError.count() );
+        receiveData( translatorError.toLatin1().constData() , translatorError.count() );
     }
 }
 
--- a/libgui/qterminal/libqterminal/unix/konsole_wcwidth.h	Wed Aug 10 09:09:41 2016 +0200
+++ b/libgui/qterminal/libqterminal/unix/konsole_wcwidth.h	Wed Aug 10 03:54:42 2016 -0400
@@ -11,7 +11,6 @@
 #define	_KONSOLE_WCWIDTH_H_
 
 // Qt
-#include <QtCore/QBool>
 #include <QtCore/QString>
 
 int konsole_wcwidth(quint16 ucs);
--- a/libgui/src/find-files-dialog.cc	Wed Aug 10 09:09:41 2016 +0200
+++ b/libgui/src/find-files-dialog.cc	Wed Aug 10 03:54:42 2016 -0400
@@ -125,7 +125,11 @@
   _file_list->horizontalHeader ()->restoreState (
     settings->value ("findfiles/column_state").toByteArray ());
   _file_list->horizontalHeader ()->setSortIndicatorShown (true);
+#if defined (HAVE_QT4)
   _file_list->horizontalHeader ()->setClickable (true);
+#else
+  _file_list->horizontalHeader ()->setSectionsClickable (true);
+#endif
   _file_list->horizontalHeader ()->setStretchLastSection (true);
   _file_list->sortByColumn (
                 settings->value ("findfiles/sort_files_by_column",0).toInt (),
--- a/libgui/src/m-editor/file-editor-tab.cc	Wed Aug 10 09:09:41 2016 +0200
+++ b/libgui/src/m-editor/file-editor-tab.cc	Wed Aug 10 03:54:42 2016 -0400
@@ -52,6 +52,7 @@
 #include <QInputDialog>
 #include <QPrintDialog>
 #include <QDateTime>
+#include <QDesktopServices>
 #include <QTextCodec>
 #include <QStyle>
 #include <QTextBlock>
@@ -591,10 +592,15 @@
       bool update_apis_file = false;  // flag, whether update of apis files
 
       // get path to prepared api info
-      QDesktopServices desktopServices;
+#if defined (HAVE_QT4)
       QString prep_apis_path
-        = desktopServices.storageLocation (QDesktopServices::HomeLocation)
+        = QDesktopServices::storageLocation (QDesktopServices::HomeLocation)
           + "/.config/octave/"  + QString(OCTAVE_VERSION) + "/qsci/";
+#else
+      QString prep_apis_path
+        = QStandardPaths::writableLocation (QStandardPaths::HomeLocation)
+          + "/.config/octave/"  + QString(OCTAVE_VERSION) + "/qsci/";
+#endif
 
       // get settings which infos are used for octave
       bool octave_builtins = settings->value (
@@ -627,9 +633,16 @@
 
               // compare to local package list
               // FIXME: How to get user chosen location?
-              QFileInfo local_pkg_list = QFileInfo (
-                desktopServices.storageLocation (QDesktopServices::HomeLocation)
-                + "/.octave_packages");
+#if defined (HAVE_QT4)
+              QFileInfo local_pkg_list
+                = QFileInfo (QDesktopServices::storageLocation (QDesktopServices::HomeLocation)
+                             + "/.octave_packages");
+#else
+              QFileInfo local_pkg_list
+                = QFileInfo (QStandardPaths::writableLocation (QStandardPaths::HomeLocation)
+                             + "/.octave_packages");
+#endif
+
               if (local_pkg_list.exists ()
                   & (apis_date < local_pkg_list.lastModified ()) )
                 update_apis_file = true;
@@ -1578,7 +1591,7 @@
   // read the file
   QTextStream in (&file);
   // set the desired codec
-  QTextCodec *codec = QTextCodec::codecForName (_encoding.toAscii ());
+  QTextCodec *codec = QTextCodec::codecForName (_encoding.toLatin1 ());
   in.setCodec(codec);
 
   QApplication::setOverrideCursor (Qt::WaitCursor);
@@ -1617,7 +1630,7 @@
 QsciScintilla::EolMode
 file_editor_tab::detect_eol_mode ()
 {
-  QByteArray text = _edit_area->text ().toAscii ();
+  QByteArray text = _edit_area->text ().toLatin1 ();
 
   QByteArray eol_lf = QByteArray (1,0x0a);
   QByteArray eol_cr = QByteArray (1,0x0d);
@@ -1859,7 +1872,7 @@
   _encoding = _new_encoding;    // consider a possible new encoding
 
   // set the desired codec (if suitable for contents)
-  QTextCodec *codec = QTextCodec::codecForName (_encoding.toAscii ());
+  QTextCodec *codec = QTextCodec::codecForName (_encoding.toLatin1 ());
 
   if (check_valid_codec (codec))
     {
--- a/libgui/src/m-editor/file-editor.cc	Wed Aug 10 09:09:41 2016 +0200
+++ b/libgui/src/m-editor/file-editor.cc	Wed Aug 10 03:54:42 2016 -0400
@@ -30,17 +30,18 @@
 #include "resource-manager.h"
 #include "shortcut-manager.h"
 
-#include <QVBoxLayout>
 #include <QApplication>
 #include <QFile>
+#include <QFileDialog>
 #include <QFont>
-#include <QFileDialog>
+#include <QInputDialog>
 #include <QMessageBox>
+#include <QMimeData>
+#include <QProcess>
 #include <QStyle>
+#include <QTabBar>
 #include <QTextStream>
-#include <QTabBar>
-#include <QProcess>
-#include <QInputDialog>
+#include <QVBoxLayout>
 #include <Qsci/qscicommandset.h>
 
 #include "octave-link.h"
--- a/libgui/src/m-editor/find-dialog.cc	Wed Aug 10 09:09:41 2016 +0200
+++ b/libgui/src/m-editor/find-dialog.cc	Wed Aug 10 03:54:42 2016 -0400
@@ -65,8 +65,17 @@
 
 #if defined (HAVE_QSCINTILLA)
 
-#include <QtGui>
+#include <QCheckBox>
+#include <QCheckBox>
+#include <QDialogButtonBox>
+#include <QGridLayout>
 #include <QIcon>
+#include <QLabel>
+#include <QLineEdit>
+#include <QMessageBox>
+#include <QPushButton>
+#include <QVBoxLayout>
+
 #include "find-dialog.h"
 
 find_dialog::find_dialog (QsciScintilla* edit_area,
--- a/libgui/src/octave-gui.cc	Wed Aug 10 09:09:41 2016 +0200
+++ b/libgui/src/octave-gui.cc	Wed Aug 10 03:54:42 2016 -0400
@@ -28,6 +28,7 @@
 #include <QTextCodec>
 #include <QThread>
 #include <QTranslator>
+#include <QtGlobal>
 
 #include <cstdio>
 
@@ -60,7 +61,11 @@
 // Disable all Qt messages by default.
 
 static void
+#if defined (HAVE_QT4)
 message_handler (QtMsgType, const char *)
+#else
+message_handler (QtMsgType, const QMessageLogContext &, const QString &)
+#endif
 {
 }
 
@@ -128,7 +133,13 @@
     // Installing our handler suppresses the messages.
 
     if (show_gui_msgs.empty ())
-      qInstallMsgHandler (message_handler);
+      {
+#if defined (HAVE_QT4)
+        qInstallMsgHandler (message_handler);
+#else
+        qInstallMessageHandler (message_handler);
+#endif
+      }
 
 #if defined (HAVE_QT_GRAPHICS)
     install___init_qt___functions ();
@@ -144,7 +155,7 @@
 
     // Set the codec for all strings (before wizard or any GUI object)
 #if ! defined (Q_OS_WIN32)
-    QTextCodec::setCodecForCStrings (QTextCodec::codecForName ("UTF-8"));
+    QTextCodec::setCodecForLocale (QTextCodec::codecForName ("UTF-8"));
 #endif
 
     bool start_gui = start_gui_p ();
--- a/libgui/src/resource-manager.cc	Wed Aug 10 09:09:41 2016 +0200
+++ b/libgui/src/resource-manager.cc	Wed Aug 10 03:54:42 2016 -0400
@@ -31,6 +31,9 @@
 #include <QNetworkProxy>
 #include <QLibraryInfo>
 #include <QMessageBox>
+#if defined (HAVE_QT5)
+#  include <QStandardPaths>
+#endif
 #include <QTextCodec>
 
 #include "error.h"
@@ -61,10 +64,13 @@
   : settings_directory (), settings_file (), settings (0),
     default_settings (0)
 {
-  QDesktopServices desktopServices;
-
+#if defined (HAVE_QT4)
   QString home_path
-    = desktopServices.storageLocation (QDesktopServices::HomeLocation);
+    = QDesktopServices::storageLocation (QDesktopServices::HomeLocation);
+#else
+  QString home_path
+    = QStandardPaths::writableLocation (QStandardPaths::HomeLocation);
+#endif
 
   settings_directory = home_path + "/.config/octave";
 
--- a/libgui/src/shortcut-manager.cc	Wed Aug 10 09:09:41 2016 +0200
+++ b/libgui/src/shortcut-manager.cc	Wed Aug 10 03:54:42 2016 -0400
@@ -30,6 +30,7 @@
 #include <QGridLayout>
 #include <QVBoxLayout>
 #include <QDialogButtonBox>
+#include <QKeySequence>
 #include <QPushButton>
 #include <QLineEdit>
 #include <QCheckBox>
@@ -80,7 +81,7 @@
 void
 shortcut_manager::do_init_data ()
 {
-  QKeySequence ctrl;
+  Qt::KeyboardModifier ctrl;
   int prefix;
 #if defined (Q_OS_MAC)
   // Use CMD key as an equivalent of Ctrl key on other platforms
@@ -94,8 +95,8 @@
   prefix = Qt::NoModifier;
 #endif
 
-  QKeySequence ctrl_shift = ctrl + Qt::ShiftModifier;
-  QKeySequence ctrl_alt = ctrl + Qt::AltModifier;
+  Qt::KeyboardModifiers ctrl_shift = ctrl | Qt::ShiftModifier;
+  Qt::KeyboardModifiers ctrl_alt = ctrl | Qt::AltModifier;
 
   // actions of the main window
 
@@ -362,7 +363,11 @@
   _dialog = 0;
   _level_hash.clear ();
 
+#if defined (HAVE_QT4)
   tree_view->header ()->setResizeMode (QHeaderView::ResizeToContents);
+#else
+  tree_view->header ()->setSectionResizeMode (QHeaderView::ResizeToContents);
+#endif
 
   QTreeWidgetItem *main = new QTreeWidgetItem (tree_view);
   main->setText (0, tr ("Global"));
@@ -430,8 +435,8 @@
 
       // write the shortcuts
       tree_item->setText (0, sc.description);
-      tree_item->setText (1, sc.default_sc);
-      tree_item->setText (2, sc.actual_sc);
+      tree_item->setText (1, sc.default_sc.toString ());
+      tree_item->setText (2, sc.actual_sc.toString ());
 
       _item_index_hash[tree_item] = i + 1; // index+1 to avoid 0
       _index_item_hash[i] = tree_item;
@@ -555,8 +560,8 @@
 
     }
 
-  _edit_actual->setText (_sc.at (index).actual_sc);
-  _label_default->setText (_sc.at (index).default_sc);
+  _edit_actual->setText (_sc.at (index).actual_sc.toString ());
+  _label_default->setText (_sc.at (index).default_sc.toString ());
   _handled_index = index;
 
   _edit_actual->setFocus ();
@@ -589,7 +594,7 @@
           shortcut_t double_shortcut = _sc.at (double_index);
           double_shortcut.actual_sc = QKeySequence ();
           _sc.replace (double_index, double_shortcut);
-          _index_item_hash[double_index]->setText (2, QKeySequence ());
+          _index_item_hash[double_index]->setText (2, QString ());
         }
       else
         return;
@@ -601,7 +606,7 @@
   shortcut.actual_sc = _edit_actual->text();
   _sc.replace (_handled_index, shortcut);
 
-  _index_item_hash[_handled_index]->setText (2, shortcut.actual_sc);
+  _index_item_hash[_handled_index]->setText (2, shortcut.actual_sc.toString ());
 
   if (! shortcut.actual_sc.isEmpty ())
     _shortcut_hash[shortcut.actual_sc.toString ()] = _handled_index + 1;
@@ -634,7 +639,7 @@
 
       // update the tree view
       QTreeWidgetItem* tree_item = _index_item_hash[i]; // get related tree item
-      tree_item->setText (2, sc.actual_sc); // display new shortcut
+      tree_item->setText (2, sc.actual_sc.toString ()); // display new shortcut
     }
 }
 
@@ -773,6 +778,6 @@
       if (modifiers & Qt::MetaModifier)
         key += Qt::META;
 
-      setText (QKeySequence(key));
+      setText (QKeySequence(key).toString ());
     }
 }
--- a/libgui/src/workspace-model.cc	Wed Aug 10 09:09:41 2016 +0200
+++ b/libgui/src/workspace-model.cc	Wed Aug 10 03:54:42 2016 -0400
@@ -131,7 +131,7 @@
         {
           QString class_chars = resource_manager::storage_class_chars ();
           int actual_class
-            = class_chars.indexOf (_scopes[idx.row ()].toAscii ());
+            = class_chars.indexOf (_scopes[idx.row ()].toLatin1 ());
           if (actual_class >= 0)
             return QVariant (_storage_class_colors.at (actual_class));
           else
@@ -171,7 +171,7 @@
                 QString class_chars = resource_manager::storage_class_chars ();
 
                 int actual_class
-                  = class_chars.indexOf (_scopes[idx.row ()].toAscii ());
+                  = class_chars.indexOf (_scopes[idx.row ()].toLatin1 ());
 
                 if (actual_class >= 0)
                   {
--- a/libgui/src/workspace-view.cc	Wed Aug 10 09:09:41 2016 +0200
+++ b/libgui/src/workspace-view.cc	Wed Aug 10 03:54:42 2016 -0400
@@ -108,9 +108,15 @@
       view->setSortingEnabled (true);
       // Initialize column order and width of the workspace
       view->horizontalHeader ()->restoreState (settings->value ("workspaceview/column_state").toByteArray ());
+
       // Set header properties for sorting
+#if defined (HAVE_QT4)
       view->horizontalHeader ()->setClickable (true);
       view->horizontalHeader ()->setMovable (true);
+#else
+      view->horizontalHeader ()->setSectionsClickable (true);
+      view->horizontalHeader ()->setSectionsMovable (true);
+#endif
       view->horizontalHeader ()->setSortIndicator (settings->value ("workspaceview/sort_by_column",0).toInt (),
                                                    static_cast<Qt::SortOrder>
                                                    (settings->value ("workspaceview/sort_order", Qt::AscendingOrder).toUInt ()));
--- a/m4/acinclude.m4	Wed Aug 10 09:09:41 2016 +0200
+++ b/m4/acinclude.m4	Wed Aug 10 03:54:42 2016 -0400
@@ -1350,7 +1350,7 @@
       LIBQSCINTILLA=qscintilla2
     ;;
     5)
-      QT_MODULES="Qt5Core Qt5Gui Qt5Network Qt5OpenGL"
+      QT_MODULES="Qt5Core Qt5Gui Qt5Network Qt5OpenGL Qt5PrintSupport"
       LIBQSCINTILLA=qt5scintilla2
     ;;
     *)
@@ -1523,7 +1523,7 @@
       QT_LIBS="$QT_LIBS -l$LIBQSCINTILLA"
       OCTAVE_CHECK_QSCINTILLA_VERSION
       AC_DEFINE(HAVE_QSCINTILLA, 1,
-        [Define to 1 if the QScintilla library and header files are available])
+        [Define to 1 if the QScintilla library and header files are available.])
 
       save_CPPFLAGS="$CPPFLAGS"
       save_CXXFLAGS="$CXXFLAGS"
@@ -1557,11 +1557,19 @@
     for ver in $octave_qt_versions; do
       OCTAVE_CHECK_QT_VERSION([$ver])
       if test $build_qt_gui = yes; then
+        have_qt_version=$ver
         break
       fi
     done
 
-    if test $build_qt_gui = no; then
+    if test $build_qt_gui = yes; then
+      if test x"$have_qt_version" = x4; then
+        AC_DEFINE(HAVE_QT4, 1, [Define if you are using Qt version 4.])
+      fi
+      if test x"$have_qt_version" = x5; then
+        AC_DEFINE(HAVE_QT5, 1, [Define if you are using Qt version 5.])
+      fi
+    else
       if test -n "$warn_qt_libraries"; then
         OCTAVE_CONFIGURE_WARNING([warn_qt_libraries])
       fi