Mercurial > octave-nkf
view libgui/graphics/__init_qt__.cc @ 18498:2e7cad6f180c gui-release
Initial integration of QtHandles.
* configure.ac: Check for QtOpenGL module.
* libgui/Makefile.am: Include libgui/graphics/module.mk.
(liboctgui_la_LIBADD): Include graphics/libgui-graphics.la in the
list.
(rcc-command): Pass "-name DIR" to rcc command.
* main-window.cc (main_window::construct): Install qt functions and
register qt toolkit.
* libgui/src/module.mk (src_libgui_src_la_CPPFLAGS): Include
$(FONTCONFIG_CPPFLAGS) and -I$(srcdir)/graphics in the list.
* graphics.cc (gtk_manager::gtk_manager): Make qt the default toolkit
if it is available.
* libgui/graphics/Backend.cc, libgui/graphics/Backend.h,
libgui/graphics/BaseControl.cc, libgui/graphics/BaseControl.h,
libgui/graphics/ButtonControl.cc, libgui/graphics/ButtonControl.h,
libgui/graphics/Canvas.cc, libgui/graphics/Canvas.h,
libgui/graphics/CheckBoxControl.cc, libgui/graphics/CheckBoxControl.h,
libgui/graphics/Container.cc, libgui/graphics/Container.h,
libgui/graphics/ContextMenu.cc, libgui/graphics/ContextMenu.h,
libgui/graphics/EditControl.cc, libgui/graphics/EditControl.h,
libgui/graphics/Figure.cc, libgui/graphics/Figure.h,
libgui/graphics/FigureWindow.cc, libgui/graphics/FigureWindow.h,
libgui/graphics/GLCanvas.cc, libgui/graphics/GLCanvas.h, ,
libgui/graphics/GenericEventNotify.h, libgui/graphics/KeyMap.cc,
libgui/graphics/KeyMap.h, libgui/graphics/ListBoxControl.cc,
libgui/graphics/ListBoxControl.h, libgui/graphics/Logger.cc,
libgui/graphics/Logger.h, libgui/graphics/Menu.cc,
libgui/graphics/Menu.h, libgui/graphics/MenuContainer.h,
libgui/graphics/MouseModeActionGroup.cc,
libgui/graphics/MouseModeActionGroup.h, libgui/graphics/Object.cc,
libgui/graphics/Object.h, libgui/graphics/ObjectFactory.cc,
libgui/graphics/ObjectFactory.h, libgui/graphics/ObjectProxy.cc,
libgui/graphics/ObjectProxy.h, libgui/graphics/Panel.cc,
libgui/graphics/Panel.h, libgui/graphics/PopupMenuControl.cc,
libgui/graphics/PopupMenuControl.h,
libgui/graphics/PushButtonControl.cc,
libgui/graphics/PushButtonControl.h, libgui/graphics/PushTool.cc,
libgui/graphics/PushTool.h, libgui/graphics/RadioButtonControl.cc,
libgui/graphics/RadioButtonControl.h,
libgui/graphics/SliderControl.cc, libgui/graphics/SliderControl.h,
libgui/graphics/TextControl.cc, libgui/graphics/TextControl.h,
libgui/graphics/TextEdit.cc, libgui/graphics/TextEdit.h,
libgui/graphics/ToggleButtonControl.cc,
libgui/graphics/ToggleButtonControl.h, libgui/graphics/ToggleTool.cc,
libgui/graphics/ToggleTool.h, libgui/graphics/ToolBar.cc,
libgui/graphics/ToolBar.h, libgui/graphics/ToolBarButton.cc,
libgui/graphics/ToolBarButton.h, libgui/graphics/Utils.cc,
libgui/graphics/Utils.h, libgui/graphics/__init_qt__.cc,
libgui/graphics/__init_qt__.h, libgui/graphics/gl-select.cc,
libgui/graphics/gl-select.h, libgui/graphics/images/README,
libgui/graphics/images/pan.png, libgui/graphics/images/rotate.png,
libgui/graphics/images/select.png, libgui/graphics/images/zoom.png,
libgui/graphics/module.mk, libgui/graphics/qthandles.qrc:
New files.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Thu, 20 Feb 2014 14:05:45 -0500 |
parents | |
children | 49877d3be064 |
line wrap: on
line source
/* Copyright (C) 2011 Michael Goffioul. This file is part of QtHandles. Foobar is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. QtHandles is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Foobar. If not, see <http://www.gnu.org/licenses/>. */ #ifdef HAVE_CONFIG_H #include <config.h> #endif #include <QApplication> #include <QDir> #include <QFileDialog> #include <QMetaType> #include <QPalette> #include <QRegExp> #include "graphics.h" #include "toplev.h" #include "defun.h" #include "Backend.h" #include "Utils.h" ////////////////////////////////////////////////////////////////////////////// namespace QtHandles { ////////////////////////////////////////////////////////////////////////////// static bool qtHandlesInitialized = false; ////////////////////////////////////////////////////////////////////////////// bool __init__ (void) { if (! qtHandlesInitialized) { if (qApp) { qRegisterMetaType<graphics_object> ("graphics_object"); gh_manager::enable_event_processing (true); graphics_toolkit tk (new Backend ()); gtk_manager::load_toolkit (tk); octave_add_atexit_function ("__shutdown_qt__"); // Change some default settings to use Qt default colors QPalette p; graphics_object root = gh_manager::get_object (0); /* root.set ("defaultfigurecolor", octave_value (Utils::toRgb (p.color (QPalette::Window)))); */ root.set ("defaultuicontrolbackgroundcolor", octave_value (Utils::toRgb (p.color (QPalette::Window)))); root.set ("defaultuicontrolforegroundcolor", octave_value (Utils::toRgb (p.color (QPalette::WindowText)))); root.set ("defaultuipanelbackgroundcolor", octave_value (Utils::toRgb (p.color (QPalette::Window)))); root.set ("defaultuipanelforegroundcolor", octave_value (Utils::toRgb (p.color (QPalette::WindowText)))); root.set ("defaultuipanelhighlightcolor", octave_value (Utils::toRgb (p.color (QPalette::Light)))); root.set ("defaultuipanelshadowcolor", octave_value (Utils::toRgb (p.color (QPalette::Dark)))); qtHandlesInitialized = true; return true; } else error ("__init_qt__: QApplication object must exist."); } return false; } ////////////////////////////////////////////////////////////////////////////// bool __shutdown__ (void) { if (qtHandlesInitialized) { octave_add_atexit_function ("__shutdown_qt__"); gtk_manager::unload_toolkit ("qt"); gh_manager::enable_event_processing (false); qtHandlesInitialized = false; return true; } return false; } ////////////////////////////////////////////////////////////////////////////// }; // namespace QtHandles ////////////////////////////////////////////////////////////////////////////// DEFUN (__init_qt__, , , "") { QtHandles::__init__ (); return octave_value (); } ////////////////////////////////////////////////////////////////////////////// DEFUN (__shutdown_qt__, , , "") { QtHandles::__shutdown__ (); return octave_value (); } void install___init_qt___functions (void) { install_builtin_function (F__init_qt__, "__init_qt__", "__init_qt__.cc", ""); install_builtin_function (F__shutdown_qt__, "__shutdown_qt__", "__init_qt__.cc", ""); } #if 0 ////////////////////////////////////////////////////////////////////////////// static QStringList makeFilterSpecs (const Cell& filters) { using namespace QtHandles::Utils; QStringList filterSpecs; QRegExp parenRe (" ?\\(.*\\)\\s*$"); for (int i = 0; i < filters.rows (); i++) { QStringList extList = fromStdString (filters(i, 0).string_value ()).split (";"); QString desc = fromStdString (filters(i, 1).string_value ()).trimmed (); QString specItem; if (desc.contains (parenRe)) { // We need to strip any existing parenthesis and recreate it. // In case the format specified in the () section is not correct, // the filters won't work as expected. desc.remove (parenRe); } specItem = QString ("%1 (%2)").arg (desc).arg (extList.join (" ")); filterSpecs.append (specItem); } return filterSpecs; } ////////////////////////////////////////////////////////////////////////////// static QString appendDirSep (const QString& d) { if (! d.endsWith ("/") && ! d.endsWith (QDir::separator ())) return (d + "/"); return d; } ////////////////////////////////////////////////////////////////////////////// DEFUN (__uigetfile_qt__, args, , "") { using namespace QtHandles::Utils; // Expected arguments: // args(0) : File filter as a cell array {ext1, name1; ext2, name2; ...} // args(1) : Dialog title // args(2) : Default file name // args(3) : Dialog position [ignored] // args(4) : Multiselection "on"/"off" // args(5) : Default directory octave_value_list retval (3); QString caption = fromStdString (args(1).string_value ()); QString defaultDirectory = fromStdString (args(5).string_value ()); QString defaultFileName = fromStdString (args(2).string_value ()); bool isMultiSelect = (args(4).string_value () == "on"); if (isMultiSelect) retval(0) = Cell (); else retval(0) = ""; retval(1) = ""; retval(2) = static_cast<double> (0); if (defaultFileName.isEmpty ()) defaultFileName = defaultDirectory; else defaultFileName = defaultDirectory + "/" + defaultFileName; QStringList filterSpecs = makeFilterSpecs (args(0).cell_value ()); if (isMultiSelect) { QString filter; QStringList files = QFileDialog::getOpenFileNames (0, caption, defaultFileName, filterSpecs.join (";;"), &filter, 0); if (! files.isEmpty ()) { Cell cFiles (1, files.length ()); QString dirName; int i = 0; foreach (const QString& s, files) { QFileInfo fi (s); if (dirName.isEmpty ()) dirName = appendDirSep (fi.canonicalPath ()); cFiles(i++) = toStdString (fi.fileName ()); } retval(0) = cFiles; retval(1) = toStdString (dirName); if (! filter.isEmpty ()) retval(2) = static_cast<double> (filterSpecs.indexOf (filter) + 1); } } else { QString filter; QString fileName = QFileDialog::getOpenFileName (0, caption, defaultFileName, filterSpecs.join (";;"), &filter, 0); if (! fileName.isNull ()) { QFileInfo fi (fileName); retval(0) = toStdString (fi.fileName ()); retval(1) = toStdString (appendDirSep (fi.canonicalPath ())); if (! filter.isEmpty ()) retval(2) = static_cast<double> (filterSpecs.indexOf (filter) + 1); } } return retval; } ////////////////////////////////////////////////////////////////////////////// DEFUN (__uiputfile_qt__, args, , "") { using namespace QtHandles::Utils; // Expected arguments: // args(0) : File filter as a cell array {ext1, name1; ext2, name2; ...} // args(1) : Dialog title // args(2) : Default file name // args(3) : Dialog position [ignored] // args(4) : Tag [ignored] // args(5) : Default directory octave_value_list retval (3); QString caption = fromStdString (args(1).string_value ()); QString defaultDirectory = fromStdString (args(5).string_value ()); QString defaultFileName = fromStdString (args(2).string_value ()); retval(0) = ""; retval(1) = ""; retval(2) = static_cast<double> (0); if (defaultFileName.isEmpty ()) defaultFileName = defaultDirectory; else defaultFileName = defaultDirectory + "/" + defaultFileName; QStringList filterSpecs = makeFilterSpecs (args(0).cell_value ()); QString filter; QString fileName = QFileDialog::getSaveFileName (0, caption, defaultFileName, filterSpecs.join (";;"), &filter, 0); if (! fileName.isNull ()) { QFileInfo fi (fileName); retval(0) = toStdString (fi.fileName ()); if (fi.exists ()) retval(1) = toStdString (appendDirSep (fi.canonicalPath ())); else retval(1) = toStdString (appendDirSep (fi.absolutePath ())); if (! filter.isEmpty ()) retval(2) = static_cast<double> (filterSpecs.indexOf (filter) + 1); } return retval; } ////////////////////////////////////////////////////////////////////////////// DEFUN (__uigetdir_qt__, args, , "") { using namespace QtHandles::Utils; // Expected arguments: // args(0) : Start directory // args(1) : Dialog title octave_value retval (""); QString caption = fromStdString (args(1).string_value ()); QString defaultDirectory = fromStdString (args(0).string_value ()); QString dirName = QFileDialog::getExistingDirectory (0, caption, defaultDirectory); if (! dirName.isNull ()) retval = toStdString (dirName); return retval; } #endif