Mercurial > octave
diff libgui/languages/build_ts/octave-qt/qplatformtheme.cpp @ 31537:5ceb4bfcdb0f stable
add tools and files for updating the gui's language files for translation
* libgui/languages/build_ts/README.md: readme for updating language files
* libgui/languages/build_ts/octave-qsci: QScintilla source files for
languages without translation provided by QScintilla
* libgui/languages/build_ts/octave-qt: Qt source files for languages
without translation provided by Qt
author | Torsten Lilge <ttl-octave@mailbox.org> |
---|---|
date | Thu, 24 Nov 2022 06:48:25 +0100 |
parents | |
children | dd5ece3664ed |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libgui/languages/build_ts/octave-qt/qplatformtheme.cpp Thu Nov 24 06:48:25 2022 +0100 @@ -0,0 +1,798 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qplatformtheme.h" + +#include "qplatformtheme_p.h" + +#include <QtCore/QVariant> +#include <QtCore/QStringList> +#include <QtCore/qfileinfo.h> +#include <qicon.h> +#include <qpalette.h> +#include <qtextformat.h> +#include <private/qiconloader_p.h> +#include <private/qguiapplication_p.h> +#include <qpa/qplatformintegration.h> +#include <qpa/qplatformdialoghelper.h> + +#include <algorithm> + +QT_BEGIN_NAMESPACE + +/*! + \class QPlatformTheme + \since 5.0 + \internal + \preliminary + \ingroup qpa + \brief The QPlatformTheme class allows customizing the UI based on themes. + +*/ + +/*! + \enum QPlatformTheme::ThemeHint + + This enum describes the available theme hints. + + \value CursorFlashTime (int) Cursor flash time in ms, overriding + QPlatformIntegration::styleHint. + + \value KeyboardInputInterval (int) Keyboard input interval in ms, overriding + QPlatformIntegration::styleHint. + + \value MouseDoubleClickInterval (int) Mouse double click interval in ms, + overriding QPlatformIntegration::styleHint. + + \value MouseDoubleClickDistance (int) The maximum distance in logical pixels which the mouse can travel + between clicks in order for the click sequence to be handled as a double click. + The default value is 5 logical pixels. + + \value MousePressAndHoldInterval (int) Mouse press and hold interval in ms, + overriding QPlatformIntegration::styleHint. + + \value StartDragDistance (int) Start drag distance, + overriding QPlatformIntegration::styleHint. + + \value StartDragTime (int) Start drag time in ms, + overriding QPlatformIntegration::styleHint. + + \value WheelScrollLines (int) The number of lines to scroll a widget, when the mouse wheel is rotated. + The default value is 3. \sa QApplication::wheelScrollLines() + + \value KeyboardAutoRepeatRate (int) Keyboard auto repeat rate, + overriding QPlatformIntegration::styleHint. + + \value PasswordMaskDelay (int) Pass word mask delay in ms, + overriding QPlatformIntegration::styleHint. + + \value StartDragVelocity (int) Velocity of a drag, + overriding QPlatformIntegration::styleHint. + + \value TextCursorWidth (int) Determines the width of the text cursor. + + \value DropShadow (bool) Determines whether the drop shadow effect for + tooltips or whatsthis is enabled. + + \value MaximumScrollBarDragDistance (int) Determines the value returned by + QStyle::pixelMetric(PM_MaximumDragDistance) + + \value ToolButtonStyle (int) A value representing a Qt::ToolButtonStyle. + + \value ToolBarIconSize Icon size for tool bars. + + \value SystemIconThemeName (QString) Name of the icon theme. + + \value SystemIconFallbackThemeName (QString) Name of the fallback icon theme. + + \value IconThemeSearchPaths (QStringList) Search paths for icons. + + \value ItemViewActivateItemOnSingleClick (bool) Activate items by single click. + + \value StyleNames (QStringList) A list of preferred style names. + + \value WindowAutoPlacement (bool) A boolean value indicating whether Windows + (particularly dialogs) are placed by the system + (see _NET_WM_FULL_PLACEMENT in X11). + + \value DialogButtonBoxLayout (int) An integer representing a + QDialogButtonBox::ButtonLayout value. + + \value DialogButtonBoxButtonsHaveIcons (bool) A boolean value indicating whether + the buttons of a QDialogButtonBox should have icons. + + \value UseFullScreenForPopupMenu (bool) Pop menus can cover the full screen including task bar. + + \value KeyboardScheme (int) An integer value (enum KeyboardSchemes) specifying the + keyboard scheme. + + \value UiEffects (int) A flag value consisting of UiEffect values specifying the enabled UI animations. + + \value SpellCheckUnderlineStyle (int) A QTextCharFormat::UnderlineStyle specifying + the underline style used misspelled words when spell checking. + + \value TabFocusBehavior (int) A Qt::TabFocusBehavior specifying + the behavior of focus change when tab key was pressed. + This enum value was added in Qt 5.5. + + \value DialogSnapToDefaultButton (bool) Whether the mouse should snap to the default button when a dialog + becomes visible. + + \value ContextMenuOnMouseRelease (bool) Whether the context menu should be shown on mouse release. + + \value TouchDoubleTapDistance (int) The maximum distance in logical pixels which a touchpoint can travel + between taps in order for the tap sequence to be handled as a double tap. + The default value is double the MouseDoubleClickDistance, or 10 logical pixels + if that is not specified. + + \value ShowShortcutsInContextMenus (bool) Whether to display shortcut key sequences in context menus. + + \sa themeHint(), QStyle::pixelMetric() +*/ + + +#if QT_CONFIG(shortcut) +// Table of key bindings. It must be sorted on key sequence: +// The integer value of VK_KEY | Modifier Keys (e.g., VK_META, and etc.) +// A priority of 1 indicates that this is the primary key binding when multiple are defined. + +enum KeyPlatform { + KB_Win = (1 << QPlatformTheme::WindowsKeyboardScheme), + KB_Mac = (1 << QPlatformTheme::MacKeyboardScheme), + KB_X11 = (1 << QPlatformTheme::X11KeyboardScheme), + KB_KDE = (1 << QPlatformTheme::KdeKeyboardScheme), + KB_Gnome = (1 << QPlatformTheme::GnomeKeyboardScheme), + KB_CDE = (1 << QPlatformTheme::CdeKeyboardScheme), + KB_All = 0xffff +}; + +const QKeyBinding QPlatformThemePrivate::keyBindings[] = { + // StandardKey Priority Key Sequence Platforms + {QKeySequence::HelpContents, 1, Qt::CTRL | Qt::Key_Question, KB_Mac}, + {QKeySequence::HelpContents, 0, Qt::Key_F1, KB_Win | KB_X11}, + {QKeySequence::WhatsThis, 1, Qt::SHIFT | Qt::Key_F1, KB_All}, + {QKeySequence::Open, 1, Qt::CTRL | Qt::Key_O, KB_All}, + {QKeySequence::Close, 0, Qt::CTRL | Qt::Key_F4, KB_Mac}, + {QKeySequence::Close, 1, Qt::CTRL | Qt::Key_F4, KB_Win}, + {QKeySequence::Close, 1, Qt::CTRL | Qt::Key_W, KB_Mac}, + {QKeySequence::Close, 0, Qt::CTRL | Qt::Key_W, KB_Win | KB_X11}, + {QKeySequence::Save, 1, Qt::CTRL | Qt::Key_S, KB_All}, + {QKeySequence::New, 1, Qt::CTRL | Qt::Key_N, KB_All}, + {QKeySequence::Delete, 0, Qt::CTRL | Qt::Key_D, KB_X11}, //emacs (line edit only) + {QKeySequence::Delete, 1, Qt::Key_Delete, KB_All}, + {QKeySequence::Delete, 0, Qt::META | Qt::Key_D, KB_Mac}, + {QKeySequence::Cut, 1, Qt::CTRL | Qt::Key_X, KB_All}, + {QKeySequence::Cut, 0, Qt::SHIFT | Qt::Key_Delete, KB_Win | KB_X11}, //## Check if this should work on mac + {QKeySequence::Cut, 0, Qt::Key_F20, KB_X11}, //Cut on sun keyboards + {QKeySequence::Cut, 0, Qt::META | Qt::Key_K, KB_Mac}, + {QKeySequence::Copy, 0, Qt::CTRL | Qt::Key_Insert, KB_X11 | KB_Win}, + {QKeySequence::Copy, 1, Qt::CTRL | Qt::Key_C, KB_All}, + {QKeySequence::Copy, 0, Qt::Key_F16, KB_X11}, //Copy on sun keyboards + {QKeySequence::Paste, 0, Qt::CTRL | Qt::SHIFT | Qt::Key_Insert, KB_X11}, + {QKeySequence::Paste, 1, Qt::CTRL | Qt::Key_V, KB_All}, + {QKeySequence::Paste, 0, Qt::SHIFT | Qt::Key_Insert, KB_Win | KB_X11}, + {QKeySequence::Paste, 0, Qt::Key_F18, KB_X11}, //Paste on sun keyboards + {QKeySequence::Paste, 0, Qt::META | Qt::Key_Y, KB_Mac}, + {QKeySequence::Undo, 0, Qt::ALT | Qt::Key_Backspace, KB_Win}, + {QKeySequence::Undo, 1, Qt::CTRL | Qt::Key_Z, KB_All}, + {QKeySequence::Undo, 0, Qt::Key_F14, KB_X11}, //Undo on sun keyboards + {QKeySequence::Redo, 0, Qt::ALT | Qt::SHIFT | Qt::Key_Backspace,KB_Win}, + {QKeySequence::Redo, 0, Qt::CTRL | Qt::SHIFT | Qt::Key_Z, KB_Mac}, + {QKeySequence::Redo, 0, Qt::CTRL | Qt::SHIFT | Qt::Key_Z, KB_Win | KB_X11}, + {QKeySequence::Redo, 1, Qt::CTRL | Qt::Key_Y, KB_Win}, + {QKeySequence::Back, 1, Qt::ALT | Qt::Key_Left, KB_Win | KB_X11}, + {QKeySequence::Back, 0, Qt::CTRL | Qt::Key_Left, KB_Mac}, + {QKeySequence::Back, 1, Qt::CTRL | Qt::Key_BracketLeft, KB_Mac}, + {QKeySequence::Back, 0, Qt::Key_Backspace, KB_Win}, + {QKeySequence::Forward, 1, Qt::ALT | Qt::Key_Right, KB_Win | KB_X11}, + {QKeySequence::Forward, 0, Qt::CTRL | Qt::Key_Right, KB_Mac}, + {QKeySequence::Forward, 1, Qt::CTRL | Qt::Key_BracketRight, KB_Mac}, + {QKeySequence::Forward, 0, Qt::SHIFT | Qt::Key_Backspace, KB_Win}, + {QKeySequence::Refresh, 1, Qt::CTRL | Qt::Key_R, KB_Gnome | KB_Mac}, + {QKeySequence::Refresh, 0, Qt::Key_F5, KB_Win | KB_X11}, + {QKeySequence::ZoomIn, 1, Qt::CTRL | Qt::Key_Plus, KB_All}, + {QKeySequence::ZoomOut, 1, Qt::CTRL | Qt::Key_Minus, KB_All}, + {QKeySequence::Print, 1, Qt::CTRL | Qt::Key_P, KB_All}, + {QKeySequence::AddTab, 1, Qt::CTRL | Qt::SHIFT | Qt::Key_N, KB_KDE}, + {QKeySequence::AddTab, 0, Qt::CTRL | Qt::Key_T, KB_All}, + {QKeySequence::NextChild, 0, Qt::CTRL | Qt::Key_F6, KB_Win}, + {QKeySequence::NextChild, 0, Qt::CTRL | Qt::Key_Tab, KB_Mac}, //different priority from above + {QKeySequence::NextChild, 1, Qt::CTRL | Qt::Key_Tab, KB_Win | KB_X11}, + {QKeySequence::NextChild, 1, Qt::CTRL | Qt::Key_BraceRight, KB_Mac}, + {QKeySequence::NextChild, 0, Qt::CTRL | Qt::Key_Comma, KB_KDE}, + {QKeySequence::NextChild, 0, Qt::Key_Forward, KB_All}, + {QKeySequence::PreviousChild, 0, Qt::CTRL | Qt::SHIFT | Qt::Key_F6, KB_Win}, + {QKeySequence::PreviousChild, 0, Qt::CTRL | Qt::SHIFT | Qt::Key_Backtab, KB_Mac },//different priority from above + {QKeySequence::PreviousChild, 1, Qt::CTRL | Qt::SHIFT | Qt::Key_Backtab, KB_Win | KB_X11}, + {QKeySequence::PreviousChild, 1, Qt::CTRL | Qt::Key_BraceLeft, KB_Mac}, + {QKeySequence::PreviousChild, 0, Qt::CTRL | Qt::Key_Period, KB_KDE}, + {QKeySequence::PreviousChild, 0, Qt::Key_Back, KB_All}, + {QKeySequence::Find, 0, Qt::CTRL | Qt::Key_F, KB_All}, + {QKeySequence::FindNext, 0, Qt::CTRL | Qt::Key_G, KB_Win}, + {QKeySequence::FindNext, 1, Qt::CTRL | Qt::Key_G, KB_Gnome | KB_Mac}, + {QKeySequence::FindNext, 1, Qt::Key_F3, KB_Win}, + {QKeySequence::FindNext, 0, Qt::Key_F3, KB_X11}, + {QKeySequence::FindPrevious, 0, Qt::CTRL | Qt::SHIFT | Qt::Key_G, KB_Win}, + {QKeySequence::FindPrevious, 1, Qt::CTRL | Qt::SHIFT | Qt::Key_G, KB_Gnome | KB_Mac}, + {QKeySequence::FindPrevious, 1, Qt::SHIFT | Qt::Key_F3, KB_Win}, + {QKeySequence::FindPrevious, 0, Qt::SHIFT | Qt::Key_F3, KB_X11}, + {QKeySequence::Replace, 0, Qt::CTRL | Qt::Key_R, KB_KDE}, + {QKeySequence::Replace, 0, Qt::CTRL | Qt::Key_H, KB_Gnome}, + {QKeySequence::Replace, 0, Qt::CTRL | Qt::Key_H, KB_Win}, + {QKeySequence::SelectAll, 1, Qt::CTRL | Qt::Key_A, KB_All}, + {QKeySequence::Bold, 1, Qt::CTRL | Qt::Key_B, KB_All}, + {QKeySequence::Italic, 0, Qt::CTRL | Qt::Key_I, KB_All}, + {QKeySequence::Underline, 1, Qt::CTRL | Qt::Key_U, KB_All}, + {QKeySequence::MoveToNextChar, 1, Qt::Key_Right, KB_All}, + {QKeySequence::MoveToNextChar, 0, Qt::META | Qt::Key_F, KB_Mac}, + {QKeySequence::MoveToPreviousChar, 1, Qt::Key_Left, KB_All}, + {QKeySequence::MoveToPreviousChar, 0, Qt::META | Qt::Key_B, KB_Mac}, + {QKeySequence::MoveToNextWord, 0, Qt::ALT | Qt::Key_Right, KB_Mac}, + {QKeySequence::MoveToNextWord, 0, Qt::CTRL | Qt::Key_Right, KB_Win | KB_X11}, + {QKeySequence::MoveToPreviousWord, 0, Qt::ALT | Qt::Key_Left, KB_Mac}, + {QKeySequence::MoveToPreviousWord, 0, Qt::CTRL | Qt::Key_Left, KB_Win | KB_X11}, + {QKeySequence::MoveToNextLine, 1, Qt::Key_Down, KB_All}, + {QKeySequence::MoveToNextLine, 0, Qt::META | Qt::Key_N, KB_Mac}, + {QKeySequence::MoveToPreviousLine, 1, Qt::Key_Up, KB_All}, + {QKeySequence::MoveToPreviousLine, 0, Qt::META | Qt::Key_P, KB_Mac}, + {QKeySequence::MoveToNextPage, 0, Qt::META | Qt::Key_PageDown, KB_Mac}, + {QKeySequence::MoveToNextPage, 0, Qt::META | Qt::Key_Down, KB_Mac}, + {QKeySequence::MoveToNextPage, 0, Qt::META | Qt::Key_V, KB_Mac}, + {QKeySequence::MoveToNextPage, 0, Qt::ALT | Qt::Key_PageDown, KB_Mac }, + {QKeySequence::MoveToNextPage, 1, Qt::Key_PageDown, KB_All}, + {QKeySequence::MoveToPreviousPage, 0, Qt::META | Qt::Key_PageUp, KB_Mac}, + {QKeySequence::MoveToPreviousPage, 0, Qt::META | Qt::Key_Up, KB_Mac}, + {QKeySequence::MoveToPreviousPage, 0, Qt::ALT | Qt::Key_PageUp, KB_Mac }, + {QKeySequence::MoveToPreviousPage, 1, Qt::Key_PageUp, KB_All}, + {QKeySequence::MoveToStartOfLine, 0, Qt::META | Qt::Key_Left, KB_Mac}, + {QKeySequence::MoveToStartOfLine, 0, Qt::CTRL | Qt::Key_Left, KB_Mac }, + {QKeySequence::MoveToStartOfLine, 0, Qt::Key_Home, KB_Win | KB_X11}, + {QKeySequence::MoveToEndOfLine, 0, Qt::META | Qt::Key_Right, KB_Mac}, + {QKeySequence::MoveToEndOfLine, 0, Qt::CTRL | Qt::Key_Right, KB_Mac }, + {QKeySequence::MoveToEndOfLine, 0, Qt::Key_End, KB_Win | KB_X11}, + {QKeySequence::MoveToEndOfLine, 0, Qt::CTRL + Qt::Key_E, KB_X11}, + {QKeySequence::MoveToStartOfBlock, 0, Qt::META | Qt::Key_A, KB_Mac}, + {QKeySequence::MoveToStartOfBlock, 1, Qt::ALT | Qt::Key_Up, KB_Mac}, //mac only + {QKeySequence::MoveToEndOfBlock, 0, Qt::META | Qt::Key_E, KB_Mac}, + {QKeySequence::MoveToEndOfBlock, 1, Qt::ALT | Qt::Key_Down, KB_Mac}, //mac only + {QKeySequence::MoveToStartOfDocument, 1, Qt::CTRL | Qt::Key_Up, KB_Mac}, + {QKeySequence::MoveToStartOfDocument, 0, Qt::CTRL | Qt::Key_Home, KB_Win | KB_X11}, + {QKeySequence::MoveToStartOfDocument, 0, Qt::Key_Home, KB_Mac}, + {QKeySequence::MoveToEndOfDocument, 1, Qt::CTRL | Qt::Key_Down, KB_Mac}, + {QKeySequence::MoveToEndOfDocument, 0, Qt::CTRL | Qt::Key_End, KB_Win | KB_X11}, + {QKeySequence::MoveToEndOfDocument, 0, Qt::Key_End, KB_Mac}, + {QKeySequence::SelectNextChar, 0, Qt::SHIFT | Qt::Key_Right, KB_All}, + {QKeySequence::SelectPreviousChar, 0, Qt::SHIFT | Qt::Key_Left, KB_All}, + {QKeySequence::SelectNextWord, 0, Qt::ALT | Qt::SHIFT | Qt::Key_Right, KB_Mac}, + {QKeySequence::SelectNextWord, 0, Qt::CTRL | Qt::SHIFT | Qt::Key_Right, KB_Win | KB_X11}, + {QKeySequence::SelectPreviousWord, 0, Qt::ALT | Qt::SHIFT | Qt::Key_Left, KB_Mac}, + {QKeySequence::SelectPreviousWord, 0, Qt::CTRL | Qt::SHIFT | Qt::Key_Left, KB_Win | KB_X11}, + {QKeySequence::SelectNextLine, 0, Qt::SHIFT | Qt::Key_Down, KB_All}, + {QKeySequence::SelectPreviousLine, 0, Qt::SHIFT | Qt::Key_Up, KB_All}, + {QKeySequence::SelectNextPage, 0, Qt::SHIFT | Qt::Key_PageDown, KB_All}, + {QKeySequence::SelectPreviousPage, 0, Qt::SHIFT | Qt::Key_PageUp, KB_All}, + {QKeySequence::SelectStartOfLine, 0, Qt::META | Qt::SHIFT | Qt::Key_Left, KB_Mac}, + {QKeySequence::SelectStartOfLine, 1, Qt::CTRL | Qt::SHIFT | Qt::Key_Left, KB_Mac }, + {QKeySequence::SelectStartOfLine, 0, Qt::SHIFT | Qt::Key_Home, KB_Win | KB_X11}, + {QKeySequence::SelectEndOfLine, 0, Qt::META | Qt::SHIFT | Qt::Key_Right, KB_Mac}, + {QKeySequence::SelectEndOfLine, 1, Qt::CTRL | Qt::SHIFT | Qt::Key_Right, KB_Mac }, + {QKeySequence::SelectEndOfLine, 0, Qt::SHIFT | Qt::Key_End, KB_Win | KB_X11}, + {QKeySequence::SelectStartOfBlock, 1, Qt::ALT | Qt::SHIFT | Qt::Key_Up, KB_Mac}, //mac only + {QKeySequence::SelectStartOfBlock, 0, Qt::META | Qt::SHIFT | Qt::Key_A, KB_Mac}, + {QKeySequence::SelectEndOfBlock, 1, Qt::ALT | Qt::SHIFT | Qt::Key_Down, KB_Mac}, //mac only + {QKeySequence::SelectEndOfBlock, 0, Qt::META | Qt::SHIFT | Qt::Key_E, KB_Mac}, + {QKeySequence::SelectStartOfDocument, 1, Qt::CTRL | Qt::SHIFT | Qt::Key_Up, KB_Mac}, + {QKeySequence::SelectStartOfDocument, 0, Qt::CTRL | Qt::SHIFT | Qt::Key_Home, KB_Win | KB_X11}, + {QKeySequence::SelectStartOfDocument, 0, Qt::SHIFT | Qt::Key_Home, KB_Mac}, + {QKeySequence::SelectEndOfDocument, 1, Qt::CTRL | Qt::SHIFT | Qt::Key_Down, KB_Mac}, + {QKeySequence::SelectEndOfDocument, 0, Qt::CTRL | Qt::SHIFT | Qt::Key_End, KB_Win | KB_X11}, + {QKeySequence::SelectEndOfDocument, 0, Qt::SHIFT | Qt::Key_End, KB_Mac}, + {QKeySequence::DeleteStartOfWord, 0, Qt::ALT | Qt::Key_Backspace, KB_Mac}, + {QKeySequence::DeleteStartOfWord, 0, Qt::CTRL | Qt::Key_Backspace, KB_X11 | KB_Win}, + {QKeySequence::DeleteEndOfWord, 0, Qt::ALT | Qt::Key_Delete, KB_Mac}, + {QKeySequence::DeleteEndOfWord, 0, Qt::CTRL | Qt::Key_Delete, KB_X11 | KB_Win}, + {QKeySequence::DeleteEndOfLine, 0, Qt::CTRL | Qt::Key_K, KB_X11}, //emacs (line edit only) + {QKeySequence::InsertParagraphSeparator,0, Qt::Key_Enter, KB_All}, + {QKeySequence::InsertParagraphSeparator,0, Qt::Key_Return, KB_All}, + {QKeySequence::InsertLineSeparator, 0, Qt::META | Qt::Key_Enter, KB_Mac}, + {QKeySequence::InsertLineSeparator, 0, Qt::META | Qt::Key_Return, KB_Mac}, + {QKeySequence::InsertLineSeparator, 0, Qt::SHIFT | Qt::Key_Enter, KB_All}, + {QKeySequence::InsertLineSeparator, 0, Qt::SHIFT | Qt::Key_Return, KB_All}, + {QKeySequence::InsertLineSeparator, 0, Qt::META | Qt::Key_O, KB_Mac}, + {QKeySequence::SaveAs, 0, Qt::CTRL | Qt::SHIFT | Qt::Key_S, KB_Gnome | KB_Mac}, + {QKeySequence::Preferences, 0, Qt::CTRL | Qt::Key_Comma, KB_Mac}, + {QKeySequence::Quit, 0, Qt::CTRL | Qt::Key_Q, KB_X11 | KB_Gnome | KB_KDE | KB_Mac}, + {QKeySequence::FullScreen, 1, Qt::META | Qt::CTRL | Qt::Key_F, KB_Mac}, + {QKeySequence::FullScreen, 0, Qt::ALT | Qt::Key_Enter, KB_Win}, + {QKeySequence::FullScreen, 0, Qt::CTRL | Qt::SHIFT | Qt::Key_F, KB_KDE}, + {QKeySequence::FullScreen, 1, Qt::CTRL | Qt::Key_F11, KB_Gnome}, + {QKeySequence::FullScreen, 1, Qt::Key_F11, KB_Win | KB_KDE}, + {QKeySequence::Deselect, 0, Qt::CTRL | Qt::SHIFT | Qt::Key_A, KB_X11}, + {QKeySequence::DeleteCompleteLine, 0, Qt::CTRL | Qt::Key_U, KB_X11}, + {QKeySequence::Backspace, 0, Qt::META | Qt::Key_H, KB_Mac}, + {QKeySequence::Cancel, 0, Qt::Key_Escape, KB_All}, + {QKeySequence::Cancel, 0, Qt::CTRL | Qt::Key_Period, KB_Mac} +}; + +const uint QPlatformThemePrivate::numberOfKeyBindings = sizeof(QPlatformThemePrivate::keyBindings)/(sizeof(QKeyBinding)); +#endif + +QPlatformThemePrivate::QPlatformThemePrivate() + : systemPalette(nullptr) +{ } + +QPlatformThemePrivate::~QPlatformThemePrivate() +{ + delete systemPalette; +} + +Q_GUI_EXPORT QPalette qt_fusionPalette(); + +void QPlatformThemePrivate::initializeSystemPalette() +{ + Q_ASSERT(!systemPalette); + systemPalette = new QPalette(qt_fusionPalette()); +} + +QPlatformTheme::QPlatformTheme() + : d_ptr(new QPlatformThemePrivate) +{ + +} + +QPlatformTheme::QPlatformTheme(QPlatformThemePrivate *priv) + : d_ptr(priv) +{ } + +QPlatformTheme::~QPlatformTheme() +{ + +} + +bool QPlatformTheme::usePlatformNativeDialog(DialogType type) const +{ + Q_UNUSED(type); + return false; +} + +QPlatformDialogHelper *QPlatformTheme::createPlatformDialogHelper(DialogType type) const +{ + Q_UNUSED(type); + return nullptr; +} + +const QPalette *QPlatformTheme::palette(Palette type) const +{ + Q_D(const QPlatformTheme); + if (type == QPlatformTheme::SystemPalette) { + if (!d->systemPalette) + const_cast<QPlatformTheme *>(this)->d_ptr->initializeSystemPalette(); + return d->systemPalette; + } + return nullptr; +} + +const QFont *QPlatformTheme::font(Font type) const +{ + Q_UNUSED(type) + return nullptr; +} + +QPixmap QPlatformTheme::standardPixmap(StandardPixmap sp, const QSizeF &size) const +{ + Q_UNUSED(sp); + Q_UNUSED(size); + // TODO Should return QCommonStyle pixmaps? + return QPixmap(); +} + +/*! + \brief Return an icon for \a fileInfo, observing \a iconOptions. + + This function is queried by QFileIconProvider and similar classes to obtain + an icon for a file. If it does not return a non-null icon, fileIconPixmap() + is queried for a specific size. + + \since 5.8 +*/ + +QIcon QPlatformTheme::fileIcon(const QFileInfo &fileInfo, QPlatformTheme::IconOptions iconOptions) const +{ + Q_UNUSED(fileInfo); + Q_UNUSED(iconOptions); + // TODO Should return QCommonStyle pixmaps? + return QIcon(); +} + +QVariant QPlatformTheme::themeHint(ThemeHint hint) const +{ + // For theme hints which mirror platform integration style hints, query + // the platform integration. The base QPlatformIntegration::styleHint() + // function will in turn query QPlatformTheme::defaultThemeHint() if there + // is no custom value. + switch (hint) { + case QPlatformTheme::CursorFlashTime: + return QGuiApplicationPrivate::platformIntegration()->styleHint(QPlatformIntegration::CursorFlashTime); + case QPlatformTheme::KeyboardInputInterval: + return QGuiApplicationPrivate::platformIntegration()->styleHint(QPlatformIntegration::KeyboardInputInterval); + case QPlatformTheme::KeyboardAutoRepeatRate: + return QGuiApplicationPrivate::platformIntegration()->styleHint(QPlatformIntegration::KeyboardAutoRepeatRate); + case QPlatformTheme::MouseDoubleClickInterval: + return QGuiApplicationPrivate::platformIntegration()->styleHint(QPlatformIntegration::MouseDoubleClickInterval); + case QPlatformTheme::StartDragDistance: + return QGuiApplicationPrivate::platformIntegration()->styleHint(QPlatformIntegration::StartDragDistance); + case QPlatformTheme::StartDragTime: + return QGuiApplicationPrivate::platformIntegration()->styleHint(QPlatformIntegration::StartDragTime); + case QPlatformTheme::StartDragVelocity: + return QGuiApplicationPrivate::platformIntegration()->styleHint(QPlatformIntegration::StartDragVelocity); + case QPlatformTheme::PasswordMaskDelay: + return QGuiApplicationPrivate::platformIntegration()->styleHint(QPlatformIntegration::PasswordMaskDelay); + case QPlatformTheme::PasswordMaskCharacter: + return QGuiApplicationPrivate::platformIntegration()->styleHint(QPlatformIntegration::PasswordMaskCharacter); + case QPlatformTheme::MousePressAndHoldInterval: + return QGuiApplicationPrivate::platformIntegration()->styleHint(QPlatformIntegration::MousePressAndHoldInterval); + case QPlatformTheme::ItemViewActivateItemOnSingleClick: + return QGuiApplicationPrivate::platformIntegration()->styleHint(QPlatformIntegration::ItemViewActivateItemOnSingleClick); + case QPlatformTheme::UiEffects: + return QGuiApplicationPrivate::platformIntegration()->styleHint(QPlatformIntegration::UiEffects); + case QPlatformTheme::ShowShortcutsInContextMenus: + return QGuiApplicationPrivate::platformIntegration()->styleHint(QPlatformIntegration::ShowShortcutsInContextMenus); + default: + return QPlatformTheme::defaultThemeHint(hint); + } +} + +QVariant QPlatformTheme::defaultThemeHint(ThemeHint hint) +{ + switch (hint) { + case QPlatformTheme::CursorFlashTime: + return QVariant(1000); + case QPlatformTheme::KeyboardInputInterval: + return QVariant(400); + case QPlatformTheme::KeyboardAutoRepeatRate: + return QVariant(30); + case QPlatformTheme::MouseDoubleClickInterval: + return QVariant(400); + case QPlatformTheme::StartDragDistance: + return QVariant(10); + case QPlatformTheme::StartDragTime: + return QVariant(500); + case QPlatformTheme::PasswordMaskDelay: + return QVariant(int(0)); + case QPlatformTheme::PasswordMaskCharacter: + return QVariant(QChar(0x25CF)); + case QPlatformTheme::StartDragVelocity: + return QVariant(int(0)); // no limit + case QPlatformTheme::UseFullScreenForPopupMenu: + return QVariant(false); + case QPlatformTheme::WindowAutoPlacement: + return QVariant(false); + case QPlatformTheme::DialogButtonBoxLayout: + return QVariant(int(0)); + case QPlatformTheme::DialogButtonBoxButtonsHaveIcons: + return QVariant(false); + case QPlatformTheme::ItemViewActivateItemOnSingleClick: + return QVariant(false); + case QPlatformTheme::ToolButtonStyle: + return QVariant(int(Qt::ToolButtonIconOnly)); + case QPlatformTheme::ToolBarIconSize: + return QVariant(int(0)); + case QPlatformTheme::SystemIconThemeName: + case QPlatformTheme::SystemIconFallbackThemeName: + return QVariant(QString()); + case QPlatformTheme::IconThemeSearchPaths: + return QVariant(QStringList()); + case QPlatformTheme::IconFallbackSearchPaths: + return QVariant(QStringList()); + case QPlatformTheme::StyleNames: + return QVariant(QStringList()); + case QPlatformTheme::ShowShortcutsInContextMenus: + return QVariant(true); + case TextCursorWidth: + return QVariant(1); + case DropShadow: + return QVariant(false); + case MaximumScrollBarDragDistance: + return QVariant(-1); + case KeyboardScheme: + return QVariant(int(WindowsKeyboardScheme)); + case UiEffects: + return QVariant(int(0)); + case SpellCheckUnderlineStyle: + return QVariant(int(QTextCharFormat::WaveUnderline)); + case TabFocusBehavior: + return QVariant(int(Qt::TabFocusAllControls)); + case IconPixmapSizes: + return QVariant::fromValue(QList<int>()); + case DialogSnapToDefaultButton: + case ContextMenuOnMouseRelease: + return QVariant(false); + case MousePressAndHoldInterval: + return QVariant(800); + case MouseDoubleClickDistance: + { + bool ok = false; + const int dist = qEnvironmentVariableIntValue("QT_DBL_CLICK_DIST", &ok); + return QVariant(ok ? dist : 5); + } + case WheelScrollLines: + return QVariant(3); + case TouchDoubleTapDistance: + { + bool ok = false; + int dist = qEnvironmentVariableIntValue("QT_DBL_TAP_DIST", &ok); + if (!ok) + dist = defaultThemeHint(MouseDoubleClickDistance).toInt(&ok) * 2; + return QVariant(ok ? dist : 10); + } + case MouseQuickSelectionThreshold: + return QVariant(10); + } + return QVariant(); +} + +QPlatformMenuItem *QPlatformTheme::createPlatformMenuItem() const +{ + return nullptr; +} + +QPlatformMenu *QPlatformTheme::createPlatformMenu() const +{ + return nullptr; +} + +QPlatformMenuBar *QPlatformTheme::createPlatformMenuBar() const +{ + return nullptr; +} + +#ifndef QT_NO_SYSTEMTRAYICON +/*! + Factory function for QSystemTrayIcon. This function will return 0 if the platform + integration does not support creating any system tray icon. +*/ +QPlatformSystemTrayIcon *QPlatformTheme::createPlatformSystemTrayIcon() const +{ + return nullptr; +} +#endif + +/*! + Factory function for the QIconEngine used by QIcon::fromTheme(). By default this + function returns a QIconLoaderEngine, but subclasses can reimplement it to + provide their own. + + It is especially useful to benefit from some platform specific facilities or + optimizations like an inter-process cache in systems mostly built with Qt. + + \since 5.1 +*/ +QIconEngine *QPlatformTheme::createIconEngine(const QString &iconName) const +{ + return new QIconLoaderEngine(iconName); +} + +#if defined(Q_OS_MACX) +static inline int maybeSwapShortcut(int shortcut) +{ + if (qApp->testAttribute(Qt::AA_MacDontSwapCtrlAndMeta)) { + uint oldshortcut = shortcut; + shortcut &= ~(Qt::CTRL | Qt::META); + if (oldshortcut & Qt::CTRL) + shortcut |= Qt::META; + if (oldshortcut & Qt::META) + shortcut |= Qt::CTRL; + } + return shortcut; +} +#endif + +#if QT_CONFIG(shortcut) +// mixed-mode predicate: all of these overloads are actually needed (but not all for every compiler) +struct ByStandardKey { + typedef bool result_type; + + bool operator()(QKeySequence::StandardKey lhs, QKeySequence::StandardKey rhs) const + { return lhs < rhs; } + + bool operator()(const QKeyBinding& lhs, const QKeyBinding& rhs) const + { return operator()(lhs.standardKey, rhs.standardKey); } + + bool operator()(QKeySequence::StandardKey lhs, const QKeyBinding& rhs) const + { return operator()(lhs, rhs.standardKey); } + + bool operator()(const QKeyBinding& lhs, QKeySequence::StandardKey rhs) const + { return operator()(lhs.standardKey, rhs); } +}; + +/*! + Returns the key sequence that should be used for a standard action. + + \since 5.2 + */ +QList<QKeySequence> QPlatformTheme::keyBindings(QKeySequence::StandardKey key) const +{ + const uint platform = QPlatformThemePrivate::currentKeyPlatforms(); + QList <QKeySequence> list; + + std::pair<const QKeyBinding *, const QKeyBinding *> range = + std::equal_range(QPlatformThemePrivate::keyBindings, + QPlatformThemePrivate::keyBindings + QPlatformThemePrivate::numberOfKeyBindings, + key, ByStandardKey()); + + for (const QKeyBinding *it = range.first; it < range.second; ++it) { + if (!(it->platform & platform)) + continue; + + uint shortcut = +#if defined(Q_OS_MACX) + maybeSwapShortcut(it->shortcut); +#else + it->shortcut; +#endif + if (it->priority > 0) + list.prepend(QKeySequence(shortcut)); + else + list.append(QKeySequence(shortcut)); + } + + return list; +} +#endif + +/*! + Returns the text of a standard \a button. + + \since 5.3 + \sa QPlatformDialogHelper::StandardButton + */ + +QString QPlatformTheme::standardButtonText(int button) const +{ + return QPlatformTheme::defaultStandardButtonText(button); +} + +#if QT_CONFIG(shortcut) +/*! + Returns the mnemonic that should be used for a standard \a button. + + \since 5.9 + \sa QPlatformDialogHelper::StandardButton + */ + +QKeySequence QPlatformTheme::standardButtonShortcut(int button) const +{ + Q_UNUSED(button) + return QKeySequence(); +} +#endif // QT_CONFIG(shortcut) + +QString QPlatformTheme::defaultStandardButtonText(int button) +{ + switch (button) { + case QPlatformDialogHelper::Ok: + return QCoreApplication::translate("QPlatformTheme", "OK"); + case QPlatformDialogHelper::Save: + return QCoreApplication::translate("QPlatformTheme", "Save"); + case QPlatformDialogHelper::SaveAll: + return QCoreApplication::translate("QPlatformTheme", "Save All"); + case QPlatformDialogHelper::Open: + return QCoreApplication::translate("QPlatformTheme", "Open"); + case QPlatformDialogHelper::Yes: + return QCoreApplication::translate("QPlatformTheme", "&Yes"); + case QPlatformDialogHelper::YesToAll: + return QCoreApplication::translate("QPlatformTheme", "Yes to &All"); + case QPlatformDialogHelper::No: + return QCoreApplication::translate("QPlatformTheme", "&No"); + case QPlatformDialogHelper::NoToAll: + return QCoreApplication::translate("QPlatformTheme", "N&o to All"); + case QPlatformDialogHelper::Abort: + return QCoreApplication::translate("QPlatformTheme", "Abort"); + case QPlatformDialogHelper::Retry: + return QCoreApplication::translate("QPlatformTheme", "Retry"); + case QPlatformDialogHelper::Ignore: + return QCoreApplication::translate("QPlatformTheme", "Ignore"); + case QPlatformDialogHelper::Close: + return QCoreApplication::translate("QPlatformTheme", "Close"); + case QPlatformDialogHelper::Cancel: + return QCoreApplication::translate("QPlatformTheme", "Cancel"); + case QPlatformDialogHelper::Discard: + return QCoreApplication::translate("QPlatformTheme", "Discard"); + case QPlatformDialogHelper::Help: + return QCoreApplication::translate("QPlatformTheme", "Help"); + case QPlatformDialogHelper::Apply: + return QCoreApplication::translate("QPlatformTheme", "Apply"); + case QPlatformDialogHelper::Reset: + return QCoreApplication::translate("QPlatformTheme", "Reset"); + case QPlatformDialogHelper::RestoreDefaults: + return QCoreApplication::translate("QPlatformTheme", "Restore Defaults"); + default: + break; + } + return QString(); +} + +QString QPlatformTheme::removeMnemonics(const QString &original) +{ + QString returnText(original.size(), 0); + int finalDest = 0; + int currPos = 0; + int l = original.length(); + while (l) { + if (original.at(currPos) == QLatin1Char('&')) { + ++currPos; + --l; + if (l == 0) + break; + } else if (original.at(currPos) == QLatin1Char('(') && l >= 4 && + original.at(currPos + 1) == QLatin1Char('&') && + original.at(currPos + 2) != QLatin1Char('&') && + original.at(currPos + 3) == QLatin1Char(')')) { + /* remove mnemonics its format is "\s*(&X)" */ + int n = 0; + while (finalDest > n && returnText.at(finalDest - n - 1).isSpace()) + ++n; + finalDest -= n; + currPos += 4; + l -= 4; + continue; + } + returnText[finalDest] = original.at(currPos); + ++currPos; + ++finalDest; + --l; + } + returnText.truncate(finalDest); + return returnText; +} + +unsigned QPlatformThemePrivate::currentKeyPlatforms() +{ + const uint keyboardScheme = QGuiApplicationPrivate::platformTheme()->themeHint(QPlatformTheme::KeyboardScheme).toInt(); + unsigned result = 1u << keyboardScheme; +#if QT_CONFIG(shortcut) + if (keyboardScheme == QPlatformTheme::KdeKeyboardScheme + || keyboardScheme == QPlatformTheme::GnomeKeyboardScheme + || keyboardScheme == QPlatformTheme::CdeKeyboardScheme) + result |= KB_X11; +#endif + return result; +} + +QT_END_NAMESPACE